@underlayerdev/ui 0.14.5 → 0.14.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"underlayerdev-ui.mjs","sources":["../../../projects/ui/src/components/accordion/accordion.ts","../../../projects/ui/src/components/area-code/area-code.ts","../../../projects/ui/src/components/area-code/area-code.html","../../../projects/ui/src/components/icon/icon.ts","../../../projects/ui/src/components/skeleton/skeleton.ts","../../../projects/ui/src/components/skeleton/skeleton.html","../../../projects/ui/src/components/avatar/avatar.ts","../../../projects/ui/src/components/avatar/avatar-group.ts","../../../projects/ui/src/components/breadcrumb/breadcrumb.ts","../../../projects/ui/src/components/breadcrumb/breadcrumb.html","../../../projects/ui/src/config.ts","../../../projects/ui/src/components/button/button.directive.ts","../../../projects/ui/src/components/button/button.ts","../../../projects/ui/src/components/shared/form-field/form-field-ids.ts","../../../projects/ui/src/components/shared/form-field/form-field-label.ts","../../../projects/ui/src/components/shared/form-field/form-field-helper.ts","../../../projects/ui/src/components/calendar/calendar.ts","../../../projects/ui/src/components/calendar/calendar.html","../../../projects/ui/src/components/card/card.ts","../../../projects/ui/src/components/card/card.html","../../../projects/ui/src/components/input/input.ts","../../../projects/ui/src/components/input/input.html","../../../projects/ui/src/components/checkbox/checkbox.ts","../../../projects/ui/src/components/list-item/list-item.ts","../../../projects/ui/src/components/modal/modal.ts","../../../projects/ui/src/components/modal/modal.html","../../../projects/ui/src/components/category-picker/category-picker.ts","../../../projects/ui/src/components/category-picker/category-picker.html","../../../projects/ui/src/components/collapse/collapse.ts","../../../projects/ui/src/components/dock/dock.ts","../../../projects/ui/src/components/dock/dock.html","../../../projects/ui/src/components/dock/dock-item-slot.directive.ts","../../../projects/ui/src/components/dock/dock-item.ts","../../../projects/ui/src/components/dock/dock-item.html","../../../projects/ui/src/components/menu/menu-items.ts","../../../projects/ui/src/components/menu/menu-trigger.ts","../../../projects/ui/src/components/dropdown/dropdown.ts","../../../projects/ui/src/components/dropdown/dropdown.html","../../../projects/ui/src/components/file-input/file-input.ts","../../../projects/ui/src/components/file-input/file-input.html","../../../projects/ui/src/components/footer/footer.ts","../../../projects/ui/src/components/footer/footer.html","../../../projects/ui/src/components/pill/pill.ts","../../../projects/ui/src/components/pill/pill.html","../../../projects/ui/src/components/hero/hero-slot.directive.ts","../../../projects/ui/src/components/hero/hero.ts","../../../projects/ui/src/components/hero/hero.html","../../../projects/ui/src/components/image/image-not-found.ts","../../../projects/ui/src/components/image-cropper/image-cropper.ts","../../../projects/ui/src/components/image-cropper/image-cropper.html","../../../projects/ui/src/components/long-press/long-press.directive.ts","../../../projects/ui/src/components/menu/menu.ts","../../../projects/ui/src/components/menu/menu.html","../../../projects/ui/src/components/navbar/navbar-slot.directive.ts","../../../projects/ui/src/components/navbar/navbar.ts","../../../projects/ui/src/components/navbar/navbar.html","../../../projects/ui/src/components/price-button/custom-currency.pipe.ts","../../../projects/ui/src/components/price-button/price-button.ts","../../../projects/ui/src/components/price-button/price-button.html","../../../projects/ui/src/components/radio/radio.ts","../../../projects/ui/src/components/radio/radio.html","../../../projects/ui/src/components/radio/radio-group.ts","../../../projects/ui/src/components/radial/radial.ts","../../../projects/ui/src/components/radial/radial.html","../../../projects/ui/src/components/rich-text/rich-text.ts","../../../projects/ui/src/components/stepper/stepper.ts","../../../projects/ui/src/components/toast/toast.service.ts","../../../projects/ui/src/components/toast/toast.ts","../../../projects/ui/src/components/toast/toast.html","../../../projects/ui/src/components/toggle/toggle.ts","../../../projects/ui/src/components/tooltip/tooltip.ts","../../../projects/ui/src/components/tooltip/tooltip.html","../../../projects/ui/src/components/shared/combobox/combobox-state.ts","../../../projects/ui/src/components/search-input/search-input.ts","../../../projects/ui/src/components/search-input/search-input.html","../../../projects/ui/src/components/search-select/search-select.ts","../../../projects/ui/src/components/search-select/search-select.html","../../../projects/ui/src/components/select/select.ts","../../../projects/ui/src/components/select/select.html","../../../projects/ui/src/components/selectable-row/selectable-row.ts","../../../projects/ui/src/components/sidebar/sidebar.ts","../../../projects/ui/src/components/sidebar/sidebar.html","../../../projects/ui/src/components/status/status.ts","../../../projects/ui/src/components/status/status.html","../../../projects/ui/src/components/table/table.ts","../../../projects/ui/src/components/table/table.html","../../../projects/ui/src/components/textarea/textarea-field.directive.ts","../../../projects/ui/src/components/textarea/textarea.ts","../../../projects/ui/src/components/textarea/textarea.html","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/underlayerdev-ui.ts"],"sourcesContent":["import { CdkAccordion, CdkAccordionItem } from '@angular/cdk/accordion';\nimport {\n AfterViewInit,\n Component,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * AccordionItemComponent is a standalone Angular component that extends CdkAccordionItem.\n * It represents an item within an accordion, providing configurable expansion behavior\n * and accessibility features.\n */\n@Component({\n selector: 'ul-accordion-item',\n template: `\n <div\n class=\"ul-accordion__item\"\n [class.ul-accordion__item--expanded]=\"cdkAccordionItem.expanded\"\n [class.ul-accordion__item--disabled]=\"cdkAccordionItem.disabled\"\n >\n <button\n (click)=\"onToggle()\"\n class=\"ul-accordion__trigger\"\n [id]=\"triggerId\"\n [attr.aria-expanded]=\"cdkAccordionItem.expanded\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-disabled]=\"cdkAccordionItem.disabled ? 'true' : null\"\n [disabled]=\"cdkAccordionItem.disabled\"\n (keydown)=\"onKeydown($event)\"\n type=\"button\"\n >\n <div class=\"ul-accordion__icon\">\n <ng-content select=\"[ul-accordion-icon]\"></ng-content>\n </div>\n <div class=\"ul-accordion__label\">\n <ng-content select=\"[ul-accordion-label]\"></ng-content>\n </div>\n <div class=\"ul-accordion__status\">\n <ng-content select=\"[ul-accordion-status]\"></ng-content>\n </div>\n <span class=\"ul-accordion__indicator\">\n <i class=\"ul-icon ul-icon-size-8 ul-icon-weight-bold ul-icon-chevron_down\"></i>\n </span>\n </button>\n <div\n role=\"region\"\n class=\"ul-accordion__content\"\n [id]=\"contentId\"\n [attr.aria-labelledby]=\"triggerId\"\n [attr.aria-hidden]=\"!cdkAccordionItem.expanded\"\n >\n <ng-content select=\"[ul-accordion-content]\"></ng-content>\n </div>\n </div>\n `,\n styleUrls: ['./accordion.scss'],\n hostDirectives: [\n {\n directive: CdkAccordionItem,\n inputs: ['expanded', 'disabled'],\n outputs: ['closed', 'opened', 'destroyed', 'expandedChange'],\n },\n ],\n})\nexport class AccordionItemComponent {\n cdkAccordionItem = inject(CdkAccordionItem);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /**\n * Stable ID for the content region, used for aria-controls linkage.\n */\n readonly contentId = `ul-accordion-content-${Math.random().toString(36).slice(2, 11)}`;\n\n /**\n * Stable ID for the trigger button, used for aria-labelledby linkage.\n */\n readonly triggerId = `ul-accordion-trigger-${Math.random().toString(36).slice(2, 11)}`;\n\n onToggle(): void {\n if (this.cdkAccordionItem.disabled) {\n return;\n }\n this.cdkAccordionItem.toggle();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.cdkAccordionItem.disabled) {\n return;\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onToggle();\n return;\n }\n\n // Handle Arrow keys, Home, and End for navigation between accordion items\n const accordion = this.elementRef.nativeElement.closest('.ul-accordion');\n if (!accordion) {\n return;\n }\n\n const triggers = Array.from(\n accordion.querySelectorAll('.ul-accordion__trigger:not([disabled])'),\n ) as HTMLButtonElement[];\n const currentIndex = triggers.findIndex((t) => t.id === this.triggerId);\n\n if (currentIndex === -1) {\n return;\n }\n\n let targetIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n targetIndex = currentIndex < triggers.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'ArrowUp':\n event.preventDefault();\n targetIndex = currentIndex > 0 ? currentIndex - 1 : triggers.length - 1;\n break;\n case 'Home':\n event.preventDefault();\n targetIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n targetIndex = triggers.length - 1;\n break;\n }\n\n if (targetIndex !== null && triggers[targetIndex]) {\n triggers[targetIndex].focus();\n }\n }\n}\n\n/**\n * AccordionComponent is a standalone Angular component that acts as a container\n * for multiple AccordionItemComponents. It provides configuration options for\n * multi-expansion behavior and manages the state of its child accordion items.\n */\n@Component({\n selector: 'ul-accordion',\n template: `\n <cdk-accordion\n #accordion\n [multi]=\"multi()\"\n class=\"ul-accordion\"\n [class.ul-accordion--divider]=\"showDivider()\"\n >\n <ng-content />\n </cdk-accordion>\n `,\n styleUrls: ['./accordion.scss'],\n imports: [CdkAccordion],\n})\nexport class AccordionComponent implements AfterViewInit {\n readonly showDivider = input<boolean>(false);\n readonly multi = input<boolean>(false);\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly accordionItems = contentChildren<AccordionItemComponent, CdkAccordionItem>(\n AccordionItemComponent,\n {\n read: CdkAccordionItem,\n },\n );\n\n ngAfterViewInit(): void {\n this.setupSingleExpansionLogic();\n }\n\n /**\n * Sets up the single expansion logic to ensure only one item is expanded at a time\n * when multi mode is disabled.\n */\n private setupSingleExpansionLogic(): void {\n const items = this.accordionItems();\n\n // Early return if no items or multi mode is enabled\n if (!items.length || this.multi()) {\n return;\n }\n\n // Subscribe to expansion changes for all items\n items.forEach((item) => {\n item.expandedChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((expanded) => {\n this.handleExpansionChange(item, expanded, items);\n });\n });\n }\n\n /**\n * Handles expansion changes and manages single-expansion behavior.\n * @param changedItem - The accordion item that changed\n * @param expanded - Whether the item is now expanded\n * @param allItems - Array of all accordion items\n */\n private handleExpansionChange(\n changedItem: CdkAccordionItem,\n expanded: boolean,\n allItems: readonly CdkAccordionItem[],\n ): void {\n // Only handle expansion (not collapse) and only when multi mode is disabled\n if (!expanded || this.multi()) {\n return;\n }\n\n // Collapse all other items except the one that was just expanded\n allItems.forEach((item) => {\n if (item !== changedItem && item.expanded) {\n item.expanded = false;\n }\n });\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/**\n * A code display component that shows code with automatic line numbering.\n * Features a clean two-column layout following PE design guidelines.\n *\n * @example\n * <ul-area-code\n * [content]=\"codeContent\"\n * [showLineNumbers]=\"true\"\n * />\n */\n@Component({\n selector: 'ul-area-code',\n templateUrl: './area-code.html',\n styleUrls: ['./area-code.scss'],\n})\nexport class AreaCodeComponent {\n // Core inputs\n readonly content = input<string>('');\n readonly showLineNumbers = input<boolean>(true);\n readonly maxHeight = input<string | null>(null);\n\n // Computed properties\n readonly lines = computed(() => {\n const content = this.content();\n if (!content) return [''];\n return content.split('\\n');\n });\n\n readonly lineCount = computed(() => this.lines().length);\n\n readonly lineNumbers = computed(() => {\n const count = this.lineCount();\n return Array.from({ length: count }, (_, i) => i + 1);\n });\n\n // Component properties\n readonly codeId = `ul-area-code-${Math.random().toString(36).slice(2, 11)}`;\n}\n","<div class=\"ul-area-code\" [class.ul-area-code--no-line-numbers]=\"!showLineNumbers()\">\n <div class=\"ul-area-code__container ul-scrollable\" [style.max-height]=\"maxHeight()\">\n <!-- Code Display Area -->\n <div class=\"ul-area-code__display\">\n <!-- Line Numbers Column -->\n @if (showLineNumbers()) {\n <div class=\"ul-area-code__line-numbers\" role=\"presentation\" aria-hidden=\"true\">\n @for (lineNumber of lineNumbers(); track lineNumber) {\n <span class=\"ul-area-code__line-number\">{{ lineNumber }}.</span>\n }\n </div>\n }\n <!-- Code Content Column -->\n <div class=\"ul-area-code__content\">\n <pre class=\"ul-area-code__code\" [id]=\"codeId\"><code>{{ content() }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\n\n/** Icon size keys from design tokens (iconography.font.size). */\nexport type IconSize = '4' | '5' | '6' | '7' | '8' | '10' | '12' | '16' | '24' | '32';\n\n/** Icon weight keys from design tokens (iconography.font.weight). */\nexport type IconWeight = 'medium' | 'bold';\n\n/** Icon name / glyph key from design tokens (content['icon-glyph']). Valid values match token keys. */\nexport type IconName = string;\n\n// <ul-icon class=\"ul-icon ul-icon-size-${size} ul-icon-weight-${weight} ul-icon-${icon}\" />\n@Component({\n selector: 'ul-icon',\n template: ``,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class IconComponent {\n size = input<IconSize>('8');\n weight = input<IconWeight>('medium');\n icon = input.required<IconName>();\n\n readonly hostClasses = computed(() => {\n return `ul-icon ul-icon-size-${this.size()} ul-icon-weight-${this.weight()} ul-icon-${this.icon()}`;\n });\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\nexport type SkeletonVariant = 'rect' | 'text';\n\nexport type SkeletonBorderRadius = 'xs' | 'sm' | 'md' | 'lg' | 'full';\n\n@Component({\n selector: 'ul-skeleton',\n imports: [CommonModule],\n templateUrl: './skeleton.html',\n styleUrls: ['./skeleton.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SkeletonComponent {\n readonly variant = input<SkeletonVariant>('rect');\n readonly width = input<string | null>(null);\n readonly height = input<string | null>(null);\n readonly lines = input<number>(3);\n readonly borderRadius = input<SkeletonBorderRadius | null>(null);\n readonly show = input<boolean>(true);\n\n readonly hostStyles = computed(() => {\n const width = this.width();\n const height = this.height();\n\n return {\n width: width ?? null,\n height: height ?? null,\n } as const;\n });\n\n readonly lineWidths = computed(() => {\n const count = Math.max(1, this.lines());\n const widths: string[] = [];\n\n for (let index = 0; index < count; index += 1) {\n const base = 100;\n const step = 8;\n const value = Math.max(40, base - index * step);\n widths.push(`${value}%`);\n }\n\n return widths;\n });\n\n readonly radiusClass = computed(() => {\n const radius = this.borderRadius();\n return radius ? `ul-skeleton--radius-${radius}` : null;\n });\n\n trackByIndex(index: number): number {\n return index;\n }\n}\n","<div\n class=\"ul-skeleton\"\n [class.ul-skeleton--active]=\"show()\"\n [class.ul-skeleton--rect]=\"variant() === 'rect'\"\n [class.ul-skeleton--text]=\"variant() === 'text'\"\n [class]=\"radiusClass() || ''\"\n [style.width]=\"hostStyles().width\"\n [style.height]=\"hostStyles().height\"\n>\n <div class=\"ul-skeleton__content\">\n <ng-content />\n </div>\n\n @if (show()) {\n @if (variant() === 'text') {\n <div class=\"ul-skeleton__overlay ul-skeleton__overlay--text\">\n @for (lineWidth of lineWidths(); track trackByIndex($index)) {\n <div class=\"ul-skeleton__block ul-skeleton__block--line\" [style.width]=\"lineWidth\"></div>\n }\n </div>\n } @else {\n <div class=\"ul-skeleton__overlay ul-skeleton__overlay--rect\">\n <div class=\"ul-skeleton__block ul-skeleton__block--rect\"></div>\n </div>\n }\n }\n</div>\n\n","import { Component, computed, effect, input, signal, ViewEncapsulation } from '@angular/core';\n\nimport { IconComponent, IconName } from '../icon/icon';\nimport { SkeletonComponent } from '../skeleton/skeleton';\nimport type { UiSize } from '../shared/ui-types';\ntype IconSize = '5' | '6' | '7' | '8' | '16';\n\n/**\n * Avatar-only size scale: the shared UiSize sizes, plus larger '2xl'/'3xl' for\n * contexts where the avatar itself is the focal point (e.g. an onboarding\n * photo step) rather than one control among many. Deliberately not folded\n * into UiSize — a giant size doesn't make sense on a button or input.\n */\nexport type AvatarSize = UiSize | '2xl' | '3xl';\n\n/**\n * A reusable avatar component that displays user images, initials, or icons.\n * Supports multiple sizes and fallback options when an image is not available.\n * @example\n * <ul-avatar size=\"md\" [src]=\"userImageUrl\" [initials]=\"'JD'\" />\n */\n@Component({\n selector: 'ul-avatar',\n imports: [IconComponent, SkeletonComponent],\n template: `\n <ul-skeleton\n class=\"ul-avatar ul-avatar--{{ size() }}\"\n [show]=\"loading()\"\n variant=\"rect\"\n borderRadius=\"full\"\n >\n <div class=\"ul-avatar ul-avatar--{{ size() }}\">\n @if (hasPhoto()) {\n <img [src]=\"src()\" [alt]=\"alt()\" (error)=\"handleImageError()\" class=\"ul-avatar__image\" />\n } @else if (initials()) {\n <span class=\"ul-avatar__initials\">{{ initials() }}</span>\n } @else if (icon()) {\n <ul-icon [icon]=\"icon()!\" [size]=\"iconSize()\" />\n } @else if (editable()) {\n <ul-icon icon=\"user\" [size]=\"iconSize()\" />\n }\n\n @if (editable()) {\n <div class=\"ul-avatar__edit-overlay\" aria-hidden=\"true\">\n <ul-icon icon=\"photo\" [size]=\"iconSize()\" />\n </div>\n }\n </div>\n </ul-skeleton>\n `,\n styleUrls: ['./avatar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AvatarComponent {\n /** The size of the avatar */\n size = input<AvatarSize>('md');\n\n /** The image source URL */\n src = input<string | undefined>(undefined);\n\n /** Fallback initials to display when image is not available */\n initials = input<string | undefined>(undefined);\n\n /** Fallback icon to display when image and initials are not available */\n icon = input<IconName | undefined>(undefined);\n\n /** Alt text for the avatar image */\n alt = input<string>('');\n\n /** Show a skeleton placeholder instead of content while loading. */\n loading = input<boolean>(false);\n\n /**\n * Marks this avatar as a photo picker: when there's no photo to show, a\n * default person icon fills in for initials/icon, and a dimmed overlay\n * with a photo icon is layered on top to signal it's clickable — shown\n * even once a photo is set, so the user can tell they can still change\n * it, not just add one the first time. Purely visual — wrap the avatar\n * in your own button/link to actually handle the click.\n */\n editable = input<boolean>(false);\n\n /** Internal signal to track image loading errors */\n protected readonly imageError = signal(false);\n\n protected readonly hasPhoto = computed(() => !!this.src() && !this.imageError());\n\n /** Computed icon size based on avatar size */\n readonly iconSize = computed<IconSize>(() => {\n const sizeMap: Record<AvatarSize, IconSize> = {\n sm: '5',\n md: '6',\n lg: '7',\n xl: '8',\n '2xl': '16',\n '3xl': '16',\n };\n return sizeMap[this.size()];\n });\n\n constructor() {\n // Reset image error when src changes\n effect(() => {\n this.src();\n this.imageError.set(false);\n });\n }\n\n /** Handles image loading errors */\n protected handleImageError(): void {\n this.imageError.set(true);\n }\n}\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\n\nimport { AvatarComponent } from './avatar';\nimport type { UiSize } from '../shared/ui-types';\nimport type { IconName } from '../icon/icon';\n\nexport interface AvatarData {\n src?: string;\n initials?: string;\n icon?: IconName;\n alt?: string;\n}\n\n/**\n * A reusable avatar group component that displays multiple avatars with overflow handling.\n * Supports maximum visible count and shows a \"+X\" indicator for remaining avatars.\n * @example\n * <ul-avatar-group [avatars]=\"userAvatars\" [maxVisible]=\"3\" size=\"md\" />\n */\n@Component({\n selector: 'ul-avatar-group',\n imports: [AvatarComponent],\n template: `\n <div\n class=\"ul-avatar-group ul-avatar-group--{{ this.size() }}\"\n [class.ul-avatar-group--stacked]=\"stacked()\"\n >\n @for (avatar of visibleAvatars(); track $index) {\n <ul-avatar\n [size]=\"size()\"\n [src]=\"avatar.src\"\n [initials]=\"avatar.initials\"\n [icon]=\"avatar.icon\"\n [alt]=\"avatar.alt || ''\"\n [class.ul-avatar-group__avatar]=\"!stacked() && $index > 0\"\n />\n }\n @if (remainingCount() > 0) {\n <div\n class=\"ul-avatar-group__overflow ul-avatar-group__overflow--{{ this.size() }}\"\n [class.ul-avatar-group__overflow-avatar]=\"!stacked()\"\n >\n <span class=\"ul-avatar-group__overflow-text\">+{{ remainingCount() }}</span>\n </div>\n }\n </div>\n `,\n styleUrls: ['./avatar-group.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AvatarGroupComponent {\n /** Array of avatar data to display */\n avatars = input.required<AvatarData[]>();\n\n /** The size of all avatars in the group */\n size = input<UiSize>('md');\n\n /** Maximum number of avatars to display before showing overflow indicator */\n maxVisible = input<number | null>(null);\n\n /** Whether avatars should overlap (stacked) or have spacing between them */\n stacked = input<boolean>(false);\n\n /** Computed list of visible avatars */\n readonly visibleAvatars = computed(() => {\n const max = this.maxVisible();\n const avatars = this.avatars();\n return max !== null && max > 0 ? avatars.slice(0, max) : avatars;\n });\n\n /** Computed count of remaining avatars not shown */\n readonly remainingCount = computed(() => {\n const max = this.maxVisible();\n if (max === null || max <= 0) return 0;\n return Math.max(0, this.avatars().length - max);\n });\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport { IconComponent } from '../icon/icon';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n routerLink?: string | any[];\n icon?: string;\n}\n\nexport type BreadcrumbSeparator = 'chevron_right' | 'slash' | 'dot';\n\n/**\n * Breadcrumb component for displaying navigation hierarchy.\n * Supports responsive collapsing on mobile devices and customizable separators.\n *\n * @example\n * ```html\n * <ul-breadcrumb\n * [items]=\"[\n * { label: 'Home', href: '/' },\n * { label: 'Products', href: '/products' },\n * { label: 'Current Page' }\n * ]\"\n * />\n * ```\n */\n@Component({\n selector: 'ul-breadcrumb',\n imports: [IconComponent, RouterLink],\n templateUrl: './breadcrumb.html',\n styleUrls: ['./breadcrumb.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BreadcrumbComponent {\n /** Array of breadcrumb items to display */\n items = input.required<BreadcrumbItem[]>();\n\n /** Separator type between breadcrumb items */\n separator = input<BreadcrumbSeparator>('chevron_right');\n\n /** Maximum number of items to show before collapsing (for responsive behavior) */\n maxItems = input<number | undefined>(undefined);\n\n /** Check if an item is the last item */\n isLastItem(index: number): boolean {\n return index === this.items().length - 1;\n }\n\n /** Check if an item should be shown on mobile (first, last, or within maxItems) */\n shouldShowOnMobile(index: number): boolean {\n const items = this.items();\n const max = this.maxItems();\n if (!max || items.length <= max) return true;\n if (index === 0) return true; // Always show first\n if (index >= items.length - 2) return true; // Always show last 2\n return false;\n }\n\n /** Check if ellipsis should be shown on mobile */\n shouldShowEllipsisOnMobile(): boolean {\n const items = this.items();\n const max = this.maxItems();\n if (!max || items.length <= max) return false;\n return items.length > max + 1; // Show ellipsis if we're hiding items\n }\n}\n","<nav class=\"ul-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"ul-breadcrumb__list\">\n @for (item of items(); track $index) {\n <li\n class=\"ul-breadcrumb__item\"\n [class.ul-breadcrumb__item--current]=\"isLastItem($index)\"\n [class.ul-breadcrumb__item--with-icon]=\"item.icon\"\n [class.ul-breadcrumb__item--hidden-mobile]=\"maxItems() && !shouldShowOnMobile($index)\"\n >\n @if (isLastItem($index)) {\n <span class=\"ul-breadcrumb__text\" aria-current=\"page\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n } @else {\n @if (item.href) {\n <a [href]=\"item.href\" class=\"ul-breadcrumb__link\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else if (item.routerLink) {\n <a [routerLink]=\"item.routerLink\" class=\"ul-breadcrumb__link\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else {\n <span class=\"ul-breadcrumb__text\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n }\n }\n\n @if (!isLastItem($index)) {\n <span class=\"ul-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <ul-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"ul-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"ul-breadcrumb__separator-text\">·</span>\n }\n </span>\n }\n </li>\n }\n\n @if (shouldShowEllipsisOnMobile()) {\n <li class=\"ul-breadcrumb__item ul-breadcrumb__item--ellipsis\" aria-hidden=\"true\">\n <span class=\"ul-breadcrumb__ellipsis\">...</span>\n <span class=\"ul-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <ul-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"ul-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"ul-breadcrumb__separator-text\">·</span>\n }\n </span>\n </li>\n }\n </ol>\n</nav>\n","export const CSS_PREFIX = 'ul-';\n","import { computed, Directive, input } from '@angular/core';\n\nimport { CSS_PREFIX } from '../../config';\nimport type { UiSize, UiTheme } from '../shared/ui-types';\n\n/**\n * Directive that applies styling and behavior to button elements.\n * @example\n * <button udsButton size=\"md\" theme=\"fill-purple\">Click me</button>\n */\n@Directive({\n selector: '[peButton]',\n host: {\n '[attr.role]': '\"button\"',\n '[class]': 'allClasses()',\n },\n})\nexport class ButtonDirective {\n private readonly baseClass = `${CSS_PREFIX}btn`;\n\n /** The size variant of the button */\n size = input<UiSize>('md');\n\n /** The theme variant of the button */\n theme = input<UiTheme>('fill-purple');\n\n /** Whether the button only contains an icon */\n iconOnly = input<boolean>(false);\n\n /** Whether the content should be stacked vertically */\n vertical = input<boolean>(false);\n\n /** Computed property for vertical state */\n protected shouldBeVertical = computed(() => this.vertical() && this.size() === 'lg');\n\n /** All computed classes based on current state */\n protected allClasses = computed(() => {\n const classes = [this.baseClass]; // Base class\n classes.push(`${this.baseClass}--${this.size()}`); // Size variant\n classes.push(`${this.baseClass}--${this.theme()}`); // Theme variant\n if (this.iconOnly()) {\n classes.push(`${this.baseClass}--icon-only`); // Icon only state\n }\n if (this.shouldBeVertical()) {\n classes.push(`${this.baseClass}--vertical`);\n }\n return classes;\n });\n}\n","import { Component, input, output, ViewEncapsulation } from '@angular/core';\n\nimport { ButtonDirective } from './button.directive';\nimport type { UiSize, UiTheme } from '../shared/ui-types';\n\n/**\n * A reusable button component that supports various themes, sizes, and states.\n * @example\n * <uds-button size=\"md\" theme=\"fill-purple\">Click me</uds-button>\n */\n@Component({\n selector: 'ul-button',\n imports: [ButtonDirective],\n template: `\n <button\n peButton\n [attr.type]=\"type()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"disabled()\"\n [size]=\"size()\"\n [theme]=\"theme()\"\n [iconOnly]=\"iconOnly()\"\n [vertical]=\"vertical()\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\"\n >\n <ng-content />\n </button>\n `,\n styleUrls: ['./button.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ButtonComponent {\n /** The size of the button */\n size = input<UiSize>('md');\n\n /** The visual theme of the button */\n theme = input<UiTheme>('fill-purple');\n\n /** Whether the button only contains an icon */\n iconOnly = input<boolean>(false);\n\n /** Whether the button content should be stacked vertically (only applies to lg size) */\n vertical = input<boolean>(false);\n\n /** Whether the button is disabled */\n disabled = input<boolean>(false);\n\n /** The button type attribute */\n type = input<'button' | 'submit' | 'reset'>('button');\n\n /** Optional aria-label for accessibility */\n ariaLabel = input<string | undefined>(undefined);\n\n /** Click event emitter with proper type safety */\n buttonClick = output<MouseEvent>();\n\n /** Handles the click event and prevents it if button is disabled */\n protected handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.buttonClick.emit(event);\n }\n}\n","/**\n * Generates unique IDs for form field elements (control, helper, error).\n * Use this so label `for`, helper `id`, and `aria-describedby` stay in sync.\n */\nexport function createFormFieldIds(prefix: string): {\n controlId: string;\n helperId: string;\n errorId: string;\n} {\n const id = `${prefix}-${Math.random().toString(36).slice(2, 11)}`;\n return {\n controlId: id,\n helperId: `${id}-helper`,\n errorId: `${id}-error`,\n };\n}\n\n/**\n * Builds the value for `aria-describedby` from helper and error IDs.\n */\nexport function getFormFieldDescribedBy(\n helperId: string,\n errorId: string,\n hasHelperText: boolean,\n hasError: boolean,\n hasErrorText: boolean\n): string | undefined {\n const ids: string[] = [];\n if (hasHelperText) ids.push(helperId);\n if (hasError && hasErrorText) ids.push(errorId);\n return ids.length > 0 ? ids.join(' ') : undefined;\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\nimport type { UiSize } from '../ui-types';\n\n/**\n * Shared label for form fields (input, select, textarea).\n * Renders label text and optional required indicator.\n */\n@Component({\n selector: 'ul-form-field-label',\n template: `\n @if (label()) {\n <label\n [attr.for]=\"for()\"\n class=\"ul-form-field__label ul-form-field__label--{{ size() }}\"\n [class.ul-form-field__label--required]=\"required()\"\n >\n {{ label() }}\n @if (required() && !!showRequiredIndicator()) {\n <span class=\"ul-form-field__required-indicator\" aria-hidden=\"true\" title=\"Required\">\n *\n </span>\n }\n </label>\n }\n `,\n styleUrls: ['./form-field.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldLabelComponent {\n readonly label = input<string | null>(null);\n readonly required = input<boolean>(false);\n readonly for = input<string>('');\n readonly size = input<UiSize>('md');\n readonly showRequiredIndicator = input<boolean>(true);\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Shared helper/error text for form fields (input, select, textarea).\n * Shows error text when in error state, otherwise helper text.\n */\n@Component({\n selector: 'ul-form-field-helper',\n template: `\n <span\n [id]=\"id()\"\n class=\"ul-form-field__helper-text\"\n [class.ul-form-field__helper-text--error]=\"error()\"\n >\n @if (error() && errorText()) {\n {{ errorText() }}\n } @else {\n {{ helperText() }}\n }\n </span>\n `,\n styleUrls: ['./form-field.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldHelperComponent {\n readonly id = input.required<string>();\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n}\n","import { CdkMenu, CdkMenuTrigger } from '@angular/cdk/menu';\nimport {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport type { IconSize } from '../icon/icon';\nimport type { UiSize } from '../shared/ui-types';\n\nexport type CalendarMode = 'date' | 'time' | 'datetime';\n\nexport interface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\nexport interface TimeSelection {\n hour: number;\n minute: number;\n}\n\n/**\n * Calendar component. Implements FormValueControl<Date | null> for Signal Forms [formField].\n * Use [(value)] or [formField]=\"myForm().date\". Form model field should be Date | null.\n */\n@Component({\n selector: 'ul-calendar',\n imports: [\n CdkMenuTrigger,\n CdkMenu,\n ButtonComponent,\n IconComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './calendar.html',\n styleUrls: ['./calendar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarComponent implements FormValueControl<Date | null> {\n readonly mode = input<CalendarMode>('date');\n readonly value = model<Date | null>(null);\n readonly size = input<UiSize>('md');\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly readOnly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly minTime = input<Date | null>(null);\n readonly maxTime = input<Date | null>(null);\n readonly locale = input<string>('en-US');\n readonly showCalendarIcon = input<boolean>(true);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n protected readonly ids = createFormFieldIds('ul-calendar');\n\n readonly isOpen = signal(false);\n readonly currentMonth = signal<Date>(new Date());\n readonly selectedTime = signal<TimeSelection | null>(null);\n\n readonly buttonSize = computed<UiSize>(() => {\n const size = this.size();\n\n if (size === 'sm') return 'sm';\n if (size === 'md') return 'md';\n if (size === 'lg') return 'lg';\n if (size === 'xl') return 'xl';\n\n return 'md';\n });\n\n readonly iconSize = computed<IconSize>(() => {\n const size = this.size();\n\n if (size === 'sm') return '6';\n if (size === 'md') return '7';\n if (size === 'lg') return '8';\n\n // xl calendar uses a slightly larger icon\n return '10';\n });\n\n readonly defaultPlaceholder = computed(() => {\n const mode = this.mode();\n if (this.placeholder()) return this.placeholder();\n if (mode === 'date') return 'Select date';\n if (mode === 'time') return 'Select time';\n return 'Select date and time';\n });\n\n readonly displayValue = computed(() => {\n const val = this.value();\n if (!val) return '';\n const mode = this.mode();\n const locale = this.locale();\n\n if (mode === 'date') {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n }).format(val);\n }\n\n if (mode === 'time') {\n return new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).format(val);\n }\n\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).format(val);\n });\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly resolvedErrorText = computed(\n () =>\n this.errorText() ||\n (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null),\n );\n\n readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.resolvedErrorText(),\n ),\n );\n\n readonly calendarDays = computed<CalendarDay[]>(() => {\n const month = this.currentMonth();\n const selected = this.value();\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const firstDay = new Date(month.getFullYear(), month.getMonth(), 1);\n const lastDay = new Date(month.getFullYear(), month.getMonth() + 1, 0);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - startDate.getDay());\n\n const days: CalendarDay[] = [];\n const current = new Date(startDate);\n\n for (let i = 0; i < 42; i++) {\n const date = new Date(current);\n date.setHours(0, 0, 0, 0);\n\n const isCurrentMonth = date.getMonth() === month.getMonth();\n const isToday = date.getTime() === today.getTime();\n const isSelected =\n selected !== null && date.getTime() === new Date(selected).setHours(0, 0, 0, 0);\n const isDisabled = this.isDateDisabled(date);\n\n days.push({\n date,\n isCurrentMonth,\n isToday,\n isSelected,\n isDisabled,\n });\n\n current.setDate(current.getDate() + 1);\n }\n\n return days;\n });\n\n readonly monthYearLabel = computed(() => {\n const month = this.currentMonth();\n return new Intl.DateTimeFormat(this.locale(), {\n month: 'long',\n year: 'numeric',\n }).format(month);\n });\n\n readonly hourOptions = computed(() => {\n const hours: number[] = [];\n for (let i = 0; i < 24; i++) {\n hours.push(i);\n }\n return hours;\n });\n\n readonly minuteOptions = computed(() => {\n const minutes: number[] = [];\n for (let i = 0; i < 60; i += 5) {\n minutes.push(i);\n }\n return minutes;\n });\n\n readonly selectedHour = computed(() => {\n const val = this.value();\n if (!val) return this.selectedTime()?.hour ?? 0;\n return val.getHours();\n });\n\n readonly selectedMinute = computed(() => {\n const val = this.value();\n if (!val) return this.selectedTime()?.minute ?? 0;\n return val.getMinutes();\n });\n\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n constructor() {\n // Keep currentMonth and selectedTime in sync with the external value\n effect(() => {\n const val = this.value();\n if (val) {\n this.currentMonth.set(new Date(val.getFullYear(), val.getMonth(), 1));\n if (this.mode() !== 'date') {\n this.selectedTime.set({\n hour: val.getHours(),\n minute: val.getMinutes(),\n });\n }\n }\n });\n }\n\n /**\n * Closes the CDK menu by simulating an Escape key press.\n * This lets the CDK handle all focus and cleanup logic.\n */\n private closeMenuViaEscape(): void {\n const escapeEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: 27,\n bubbles: true,\n cancelable: true,\n });\n\n document.dispatchEvent(escapeEvent);\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n const dateOnly = new Date(date);\n dateOnly.setHours(0, 0, 0, 0);\n\n if (min) {\n const minOnly = new Date(min);\n minOnly.setHours(0, 0, 0, 0);\n if (dateOnly < minOnly) return true;\n }\n\n if (max) {\n const maxOnly = new Date(max);\n maxOnly.setHours(0, 0, 0, 0);\n if (dateOnly > maxOnly) return true;\n }\n\n return false;\n }\n\n isTimeDisabled(hour: number, minute: number): boolean {\n const min = this.minTime();\n const max = this.maxTime();\n if (!min && !max) return false;\n\n const testDate = new Date();\n testDate.setHours(hour, minute, 0, 0);\n\n if (min) {\n const minHour = min.getHours();\n const minMinute = min.getMinutes();\n if (hour < minHour || (hour === minHour && minute < minMinute)) {\n return true;\n }\n }\n\n if (max) {\n const maxHour = max.getHours();\n const maxMinute = max.getMinutes();\n if (hour > maxHour || (hour === maxHour && minute > maxMinute)) {\n return true;\n }\n }\n\n return false;\n }\n\n selectDate(date: Date): void {\n if (this.isDateDisabled(date)) return;\n\n const mode = this.mode();\n const currentValue = this.value();\n let newDate: Date;\n\n if (mode === 'date') {\n newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n } else if (mode === 'time') {\n const time = this.selectedTime();\n newDate = new Date(date);\n if (time) {\n newDate.setHours(time.hour, time.minute, 0, 0);\n } else {\n newDate.setHours(0, 0, 0, 0);\n }\n } else {\n const time = this.selectedTime() ?? {\n hour: currentValue?.getHours() ?? 0,\n minute: currentValue?.getMinutes() ?? 0,\n };\n newDate = new Date(date);\n newDate.setHours(time.hour, time.minute, 0, 0);\n }\n\n this.value.set(newDate);\n\n if (mode === 'date') {\n this.closeMenuViaEscape();\n }\n }\n\n selectTime(hour: number, minute: number): void {\n if (this.isTimeDisabled(hour, minute)) return;\n\n this.selectedTime.set({ hour, minute });\n\n const mode = this.mode();\n const currentValue = this.value();\n let newDate: Date;\n\n if (mode === 'time') {\n newDate = new Date();\n newDate.setHours(hour, minute, 0, 0);\n } else {\n const baseDate = currentValue ?? new Date();\n newDate = new Date(baseDate);\n newDate.setHours(hour, minute, 0, 0);\n }\n\n this.value.set(newDate);\n\n if (mode === 'time' || mode === 'datetime') {\n this.closeMenuViaEscape();\n }\n }\n\n previousMonth(): void {\n const current = this.currentMonth();\n const newMonth = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n this.currentMonth.set(newMonth);\n }\n\n nextMonth(): void {\n const current = this.currentMonth();\n const newMonth = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n this.currentMonth.set(newMonth);\n }\n\n selectToday(): void {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n this.selectDate(today);\n }\n\n clear(): void {\n this.value.set(null);\n this.selectedTime.set(null);\n }\n\n open(): void {\n if (this.disabled() || this.readOnly()) return;\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n close(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n onMenuOpened(): void {\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n onMenuClosed(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n focus(): void {\n const trigger = document.getElementById(this.ids.controlId);\n trigger?.focus();\n }\n}\n","<div\n class=\"ul-calendar ul-calendar--{{ mode() }} ul-calendar--{{ size() }}\"\n [class.ul-calendar--error]=\"hasError()\"\n [class.ul-calendar--disabled]=\"disabled()\"\n [class.ul-calendar--read-only]=\"readOnly()\"\n [class.ul-calendar--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-calendar__trigger-group\" [class.ul-calendar__trigger-group--focused]=\"isOpen()\">\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"ul-calendar__trigger\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"ids.controlId + '-menu'\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <span\n class=\"ul-calendar__trigger-text\"\n [class.ul-calendar__trigger-text--placeholder]=\"!displayValue()\"\n >\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n {{ defaultPlaceholder() }}\n }\n </span>\n </button>\n\n @if (showCalendarIcon()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [size]=\"buttonSize()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n class=\"ul-calendar__icon-button\"\n ariaLabel=\"Open calendar\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <ul-icon icon=\"calendar\" [size]=\"iconSize()\" />\n </ul-button>\n }\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n\n <ng-template #calendarMenu>\n <div cdkMenu class=\"ul-calendar__popup\" [id]=\"ids.controlId + '-menu'\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <div class=\"ul-calendar__date-picker\">\n <div class=\"ul-calendar__header\">\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Previous month\"\n (buttonClick)=\"previousMonth()\"\n >\n <ul-icon icon=\"chevron_left\" size=\"6\" />\n </ul-button>\n <div class=\"ul-calendar__month-year\">{{ monthYearLabel() }}</div>\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Next month\"\n (buttonClick)=\"nextMonth()\"\n >\n <ul-icon icon=\"chevron_right\" size=\"6\" />\n </ul-button>\n </div>\n\n <div class=\"ul-calendar__weekdays\">\n @for (day of ['S', 'M', 'T', 'W', 'T', 'F', 'S']; track $index) {\n <div class=\"ul-calendar__weekday\">{{ day }}</div>\n }\n </div>\n\n <div class=\"ul-calendar__days\">\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ul-calendar__day\"\n [class.ul-calendar__day--current-month]=\"day.isCurrentMonth\"\n [class.ul-calendar__day--today]=\"day.isToday\"\n [class.ul-calendar__day--selected]=\"day.isSelected\"\n [class.ul-calendar__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n </div>\n }\n\n @if (mode() === 'time' || mode() === 'datetime') {\n <div class=\"ul-calendar__time-picker\">\n <div class=\"ul-calendar__time-controls\">\n <select\n class=\"ul-calendar__time-select\"\n [value]=\"selectedHour()\"\n (change)=\"selectTime(+$any($event.target).value, selectedMinute())\"\n >\n @for (hour of hourOptions(); track hour) {\n <option [value]=\"hour\" [disabled]=\"isTimeDisabled(hour, selectedMinute())\">\n {{ hour.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n <span class=\"ul-calendar__time-separator\">:</span>\n <select\n class=\"ul-calendar__time-select\"\n [value]=\"selectedMinute()\"\n (change)=\"selectTime(selectedHour(), +$any($event.target).value)\"\n >\n @for (minute of minuteOptions(); track minute) {\n <option [value]=\"minute\" [disabled]=\"isTimeDisabled(selectedHour(), minute)\">\n {{ minute.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n </div>\n </div>\n }\n\n <div class=\"ul-calendar__actions\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <ul-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"selectToday()\">\n Today\n </ul-button>\n }\n @if (value()) {\n <ul-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"clear()\">\n Clear\n </ul-button>\n }\n </div>\n </div>\n </ng-template>\n</div>\n","import { booleanAttribute, Component, input, ViewEncapsulation } from '@angular/core';\n\nimport { SkeletonComponent } from '../skeleton/skeleton';\n\n// Card types\nexport type CardDirection = 'horizontal' | 'vertical';\nexport type CardCaptionSize = 'default' | 'sm';\nexport type ActionsDistribution = 'default' | 'equal';\nexport type MediaAspectRatio = 'default' | 'square' | 'portrait';\n\n@Component({\n selector: 'ul-card',\n imports: [SkeletonComponent],\n templateUrl: './card.html',\n styleUrls: ['./card.scss'],\n host: {\n class: 'ul-card',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[class.ul-card--focused]': 'focused()',\n '[class.ul-card--disabled]': 'disabled()',\n '[class.ul-card--horizontal]': 'cardDirection() === \"horizontal\"',\n '[class.ul-card--caption-sm]': 'cardCaptionSize() === \"sm\"',\n '[class.ul-card--footer-equal]': 'footerDist() === \"equal\"',\n '[class.ul-card--media-square]': 'mediaAspectRatio() === \"square\"',\n '[class.ul-card--media-portrait]': 'mediaAspectRatio() === \"portrait\"',\n '[class.ul-card--media-grayscale]': 'mediaGrayscale()',\n '[class.ul-card--loading]': 'loading()',\n '[class.ul-card--media-blurred]': 'mediaBlur()',\n },\n encapsulation: ViewEncapsulation.None,\n})\nexport class CardComponent {\n // State inputs\n focused = input<boolean, boolean>(false, { transform: booleanAttribute });\n disabled = input<boolean, boolean>(false, { transform: booleanAttribute });\n\n // Layout inputs\n cardDirection = input<CardDirection>('vertical');\n cardCaptionSize = input<CardCaptionSize>('default');\n footerDist = input<ActionsDistribution>('default');\n\n // Media inputs\n mediaAspectRatio = input<MediaAspectRatio>('default');\n mediaBlur = input<boolean, boolean>(false, { transform: booleanAttribute });\n mediaGrayscale = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n\n // Content inputs\n cardCaption = input<string>('');\n cardTitle = input<string>('');\n cardTitleSingleLine = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n cardSubtitle = input<string>('');\n cardSubtitleSingleLine = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n\n // Loading state\n loading = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n}\n","@if (loading()) {\n <div class=\"ul-card__skeleton\">\n <div class=\"ul-card__media\">\n <ul-skeleton variant=\"rect\" borderRadius=\"lg\" [show]=\"true\" />\n </div>\n <div class=\"ul-card__content\">\n <div class=\"ul-card__content-title ul-card__content-title--single-line\">\n <ul-skeleton variant=\"text\" [lines]=\"2\" borderRadius=\"sm\" />\n </div>\n <div class=\"ul-card__content-subtitle ul-card__content-subtitle--single-line\">\n <ul-skeleton variant=\"text\" [lines]=\"1\" borderRadius=\"sm\" />\n </div>\n </div>\n </div>\n} @else {\n <div class=\"ul-card__media\">\n <ng-content select=\"[ulCardMedia]\" />\n <ng-content select=\"[ulCardMediaOverlay]\" />\n </div>\n <div class=\"ul-card__media-action\">\n <ng-content select=\"[ulCardMediaAction]\" />\n </div>\n\n <div class=\"ul-card__content\">\n @if (cardCaption()) {\n <div class=\"ul-card__content-caption\">\n {{ cardCaption() }}\n </div>\n }\n @if (cardTitle()) {\n <div\n class=\"ul-card__content-title\"\n [class.ul-card__content-title--single-line]=\"cardTitleSingleLine()\"\n >\n {{ cardTitle() }}\n </div>\n }\n @if (cardSubtitle()) {\n <div\n class=\"ul-card__content-subtitle\"\n [class.ul-card__content-subtitle--single-line]=\"cardSubtitleSingleLine()\"\n >\n {{ cardSubtitle() }}\n </div>\n }\n </div>\n\n <div class=\"ul-card__footer\">\n <ng-content select=\"[ulCardFooter]\" />\n </div>\n}\n","import { Component, computed, input, model, output, signal } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url';\n\n/** Border and hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */\nexport type InputAppearance = 'border-only' | 'subtle-tint';\n\n/**\n * A reusable input component that follows UDS design system guidelines.\n * Implements FormValueControl for use with Signal Forms [formField] directive.\n *\n * Use [(value)] for two-way binding, or bind with [formField]=\"myForm().email\" for Signal Forms.\n *\n * Content projection: [ul-input-left-elements], [ul-input-right-elements].\n */\n@Component({\n selector: 'ul-input',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent, ButtonComponent, IconComponent],\n templateUrl: './input.html',\n styleUrls: ['./input.scss'],\n})\nexport class InputComponent implements FormValueControl<string> {\n readonly type = input<InputType>('text');\n readonly size = input<UiSize>('md');\n /** Border/hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */\n readonly appearance = input<InputAppearance>('border-only');\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly readOnly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly maxLength = input<number | undefined>();\n readonly minLength = input<number | undefined>();\n readonly pattern = input<readonly RegExp[]>([]);\n /** Native step for type=\"number\". Defaults to 'any' (decimals allowed) rather than the\n * browser's own default of 1, which would silently reject e.g. \"19.99\" — pass an explicit\n * step (e.g. 1) to restrict to whole numbers. */\n readonly step = input<number | 'any' | undefined>(undefined);\n readonly autocomplete = input<string>('off');\n /** When provided (e.g. by a parent form field), the input element uses this id instead of the internal one. */\n readonly controlId = input<string | undefined>();\n /** Aria-label for the toggle button when the password is hidden (i.e. the action reveals it). */\n readonly showPasswordLabel = input<string>('Show password');\n /** Aria-label for the toggle button when the password is visible (i.e. the action hides it). */\n readonly hidePasswordLabel = input<string>('Hide password');\n\n /** FormUiControl optional: bound by [formField] when invalid */\n readonly invalid = input<boolean>(false);\n /** FormUiControl optional: bound by [formField] for validation errors */\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n /** FormUiControl optional: control sets on blur */\n readonly touched = model<boolean>(false);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */\n readonly touch = output<void>();\n\n readonly value = model<string>('');\n\n protected readonly ids = createFormFieldIds('ul-input');\n protected readonly effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId);\n protected readonly effectiveHelperId = computed(() =>\n this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId,\n );\n protected readonly effectiveErrorId = computed(() =>\n this.controlId() ? `${this.controlId()}-error` : this.ids.errorId,\n );\n protected readonly isFocused = signal(false);\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n // [attr.pattern]=\"pattern()\" would stringify an empty array to \"\" instead\n // of omitting the attribute — an empty native pattern matches only the\n // empty string, so every non-empty value would fail native validation.\n // Native <input pattern> only accepts one regex source, so multiple\n // patterns are combined as alternatives.\n protected readonly nativePattern = computed<string | null>(() => {\n const patterns = this.pattern();\n return patterns.length ? patterns.map((p) => p.source).join('|') : null;\n });\n\n protected readonly nativeStep = computed<number | 'any' | null>(() => {\n const step = this.step();\n if (step !== undefined) return step;\n return this.type() === 'number' ? 'any' : null;\n });\n\n protected readonly isPasswordType = computed(() => this.type() === 'password');\n\n protected readonly passwordRevealed = signal(false);\n protected readonly effectiveType = computed(() =>\n this.isPasswordType() && this.passwordRevealed() ? 'text' : this.type(),\n );\n protected readonly passwordToggleIcon = computed(() =>\n this.passwordRevealed() ? 'eye_on' : 'eye_dashed',\n );\n protected readonly passwordToggleLabel = computed(() =>\n this.passwordRevealed() ? this.hidePasswordLabel() : this.showPasswordLabel(),\n );\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.effectiveHelperId(),\n this.effectiveErrorId(),\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n // Outputs\n readonly inputBlur = output<FocusEvent>();\n readonly inputFocus = output<FocusEvent>();\n /** Emitted when Enter is pressed in the field; typically used to submit a form. */\n readonly inputEnter = output<KeyboardEvent>();\n\n onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.value.set(value);\n }\n\n onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.inputBlur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.inputFocus.emit(event);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n this.inputEnter.emit(event);\n }\n }\n\n togglePasswordVisibility(): void {\n this.passwordRevealed.update((revealed) => !revealed);\n }\n\n /**\n * Programmatically focuses the input element\n */\n focus(): void {\n const inputEl = document.getElementById(this.effectiveControlId()) as HTMLInputElement;\n inputEl?.focus();\n }\n\n select(): void {\n const inputEl = document.getElementById(this.effectiveControlId()) as HTMLInputElement;\n inputEl?.select();\n }\n}\n","<div\n class=\"ul-input ul-input--{{ size() }} ul-input--appearance-{{ appearance() }}\"\n [class.ul-input--error]=\"hasError()\"\n [class.ul-input--disabled]=\"disabled()\"\n [class.ul-input--read-only]=\"readOnly()\"\n [class.ul-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-input__group\" [class.ul-input__group--focused]=\"isFocused()\">\n <div class=\"ul-input__left-elements\">\n <ng-content select=\"[ul-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"effectiveType()\"\n class=\"ul-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"nativePattern()\"\n [attr.step]=\"nativeStep()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"ul-input__right-elements\">\n @if (isPasswordType()) {\n <ul-button\n class=\"ul-input__password-toggle\"\n theme=\"ghost-white\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"passwordToggleLabel()\"\n (buttonClick)=\"togglePasswordVisibility()\"\n >\n <ul-icon [icon]=\"passwordToggleIcon()\" />\n </ul-button>\n }\n <ng-content select=\"[ul-input-right-elements]\" />\n </div>\n </div>\n\n <ul-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { Component, computed, input, model } from '@angular/core';\nimport type {\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiCheckboxSize } from '../shared/ui-types';\n\nexport type CheckboxZoneType = 'none' | 'accessible' | 'visible' | 'checked-visible';\n\n/**\n * Checkbox component. Implements FormCheckboxControl for Signal Forms [formField].\n * Use [(checked)] or [formField]=\"myForm().acceptTerms\". No value property.\n * Uses shared form field label and helper for alignment with input, textarea, radio-group.\n */\n@Component({\n selector: 'ul-checkbox',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent],\n template: `\n <div\n class=\"ul-checkbox ul-checkbox--{{ size() }}\"\n [class.ul-checkbox--accessible-zone]=\"zone() === 'accessible'\"\n [class.ul-checkbox--visible-zone]=\"zone() === 'visible'\"\n [class.ul-checkbox--checked-visible-zone]=\"zone() === 'checked-visible'\"\n [class.ul-checkbox--error]=\"hasError()\"\n [class.ul-checkbox--disabled]=\"disabled()\"\n [class.ul-checkbox--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size() === 'sm' ? 'sm' : 'md'\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <label\n class=\"ul-checkbox__row\"\n [class.ul-checkbox__row--accessible-zone]=\"zone() === 'accessible'\"\n [class.ul-checkbox__row--visible-zone]=\"zone() === 'visible'\"\n [class.ul-checkbox__row--checked-visible-zone]=\"zone() === 'checked-visible'\"\n [class.ul-checkbox__row--sm]=\"size() === 'sm'\"\n [class.ul-checkbox__row--lg]=\"size() === 'lg'\"\n [class.ul-checkbox__row--error]=\"hasError()\"\n [attr.for]=\"ids.controlId\"\n >\n <input\n type=\"checkbox\"\n class=\"ul-checkbox__input\"\n [id]=\"ids.controlId\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [indeterminate]=\"indeterminate()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n (change)=\"onChange($event)\"\n />\n <span class=\"ul-checkbox__pseudo-input\"></span>\n <span class=\"ul-checkbox__label\">\n <ng-content />\n </span>\n </label>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n </div>\n `,\n styleUrls: ['./checkbox.scss'],\n})\nexport class CheckboxComponent implements FormCheckboxControl {\n readonly checked = model<boolean>(false);\n\n readonly disabled = model<boolean>(false);\n readonly indeterminate = model<boolean>(false);\n readonly zone = input<CheckboxZoneType>('none');\n readonly size = input<UiCheckboxSize>('default');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly error = input<boolean>(false);\n readonly errorText = input<string | null>(null);\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n protected readonly ids = createFormFieldIds('ul-checkbox');\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly resolvedErrorText = computed(\n () =>\n this.errorText() ||\n (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null),\n );\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.resolvedErrorText(),\n ),\n );\n\n onChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n}\n","import { Component, contentChild, input } from '@angular/core';\n\nimport { CheckboxComponent } from '../checkbox/checkbox';\nimport { SkeletonComponent } from '../skeleton/skeleton';\n\nexport type ListItemTheme =\n | 'ghost-white'\n | 'transparent-white'\n | 'outline-white'\n | 'outline-purple';\n\n@Component({\n selector: 'ul-list-item',\n imports: [SkeletonComponent],\n template: `\n <ul-skeleton [show]=\"loading()\" variant=\"rect\">\n <button\n type=\"button\"\n class=\"ul-list-item ul-list-item--{{ theme() }}\"\n [class.ul-list-item--no-focus-outline]=\"hideFocusOutline()\"\n [class.ul-list-item--selected]=\"selected() || !!checkbox()?.checked()\"\n (click)=\"clickHandler()\"\n [disabled]=\"disabled() || loading()\"\n >\n <div class=\"ul-list-item__before-label\">\n <ng-content select=\"[ul-list-item-before-label]\" />\n </div>\n <div class=\"ul-list-item__label\">\n <ng-content select=\"[ul-list-item-label]\" />\n </div>\n <div class=\"ul-list-item__after-label\">\n <ng-content select=\"[ul-list-item-after-label]\" />\n </div>\n </button>\n </ul-skeleton>\n `,\n styleUrls: ['./list-item.scss'],\n})\nexport class ListItemComponent {\n checkbox = contentChild<CheckboxComponent>(CheckboxComponent);\n\n theme = input<ListItemTheme>('ghost-white');\n disabled = input<boolean>(false);\n hideFocusOutline = input<boolean>(false);\n selected = input<boolean>(false);\n\n loading = input<boolean>(false);\n\n clickHandler() {\n if (this.disabled() || this.loading()) {\n return;\n }\n\n if (!this.disabled()) {\n this.checkbox()?.checked.update((value) => !value);\n }\n }\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport {\n Component,\n computed,\n HostListener,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nexport type ModalVariant =\n | 'default'\n | 'success'\n | 'error'\n | 'custom'\n | 'bottom-sheet'\n | 'confirmation';\n\n@Component({\n selector: 'ul-modal',\n imports: [CdkTrapFocus, ButtonComponent, IconComponent],\n templateUrl: './modal.html',\n styleUrls: ['./modal.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.aria-hidden]': '!open()',\n },\n})\nexport class ModalComponent {\n /** Whether the modal is open. Supports two-way binding with [(open)]. */\n open = model<boolean>(false);\n\n /** Visual variant: default, success, error, custom, or bottom-sheet (mobile-only layout). */\n variant = input<ModalVariant>('default');\n\n /** Optional title shown in the header. */\n title = input<string | undefined>(undefined);\n\n /** Whether clicking the backdrop closes the modal. */\n closeOnBackdropClick = input<boolean>(true);\n\n /** Whether to show the close button in the header. */\n showCloseButton = input<boolean>(true);\n\n /** Label for the primary confirm action in the confirmation variant. */\n confirmLabel = input<string>('Confirm');\n\n /** Label for the secondary cancel action in the confirmation variant. */\n cancelLabel = input<string>('Cancel');\n\n /** Optional CSS class for the panel (e.g. for custom variant). */\n customClass = input<string | undefined>(undefined);\n\n /**\n * Below the phone breakpoint, fills the entire viewport edge-to-edge (no\n * margin, no rounded corners, no visible backdrop) instead of the default\n * bottom-pinned sheet every variant otherwise gets there. Has no effect\n * above that breakpoint — desktop/tablet layout is unchanged either way.\n */\n fullScreenInMobile = input<boolean>(false);\n\n /** Emitted when the modal is closed (button, backdrop, or escape). */\n closed = output<void>();\n\n /** Emitted when the user confirms in the confirmation variant. */\n confirmed = output<void>();\n\n /** Emitted when the user cancels in the confirmation variant. */\n cancelled = output<void>();\n\n readonly panelClass = computed(() => {\n const variant = this.variant();\n const custom = this.customClass();\n const classes = ['ul-modal__panel', `ul-modal__panel--${variant}`];\n if (this.fullScreenInMobile()) {\n classes.push('ul-modal__panel--fullscreen-mobile');\n }\n if (custom) {\n classes.push(custom);\n }\n return classes.join(' ');\n });\n\n readonly isConfirmation = computed(() => this.variant() === 'confirmation');\n readonly isSuccess = computed(() => this.variant() === 'success');\n readonly isError = computed(() => this.variant() === 'error');\n\n modalTitle = computed(() => (this.isSuccess() || this.isError() ? '' : this.title()));\n\n readonly titleId = `ul-modal-title-${Math.random().toString(36).slice(2, 11)}`;\n readonly bodyId = `ul-modal-body-${Math.random().toString(36).slice(2, 11)}`;\n\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n onConfirm(): void {\n if (!this.isConfirmation()) {\n return;\n }\n this.confirmed.emit();\n this.close();\n }\n\n onCancel(): void {\n if (!this.isConfirmation()) {\n return;\n }\n this.cancelled.emit();\n this.close();\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.open()) {\n this.close();\n }\n }\n}\n","@if (open()) {\n <div\n class=\"ul-modal ul-modal--backdrop\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n [attr.aria-describedby]=\"bodyId\"\n (click)=\"onBackdropClick($event)\"\n >\n <div [class]=\"panelClass()\" cdkTrapFocus (click)=\"$event.stopPropagation()\">\n @if (modalTitle() || showCloseButton()) {\n <header class=\"ul-modal__header\">\n @if (modalTitle()) {\n <h2 [id]=\"titleId\" class=\"ul-modal__title\">{{ title() }}</h2>\n }\n @if (showCloseButton()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Close\"\n class=\"ul-modal__close\"\n (buttonClick)=\"close()\"\n >\n <ul-icon icon=\"close\" size=\"6\" />\n </ul-button>\n }\n </header>\n }\n <div class=\"ul-modal__body\" [id]=\"bodyId\">\n @if (isSuccess() || isError()) {\n <div class=\"ul-modal__status\" aria-hidden=\"true\">\n <ul-icon\n class=\"ul-modal__status-icon\"\n [icon]=\"isSuccess() ? 'check_circle' : 'cross_circle'\"\n size=\"16\"\n />\n </div>\n }\n <ng-content />\n </div>\n <div class=\"ul-modal__footer\">\n @if (isConfirmation()) {\n <ul-button theme=\"ghost-white\" (buttonClick)=\"onCancel()\">\n {{ cancelLabel() }}\n </ul-button>\n <ul-button theme=\"fill-purple\" (buttonClick)=\"onConfirm()\">\n {{ confirmLabel() }}\n </ul-button>\n } @else {\n <ng-content select=\"[ul-modal-footer]\" />\n }\n </div>\n </div>\n </div>\n}\n","import {\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { IconComponent } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { ListItemComponent } from '../list-item/list-item';\nimport { ModalComponent } from '../modal/modal';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport interface CategoryPickerNode {\n id: string;\n parentId: string | null;\n label: string;\n icon?: string;\n isLeaf: boolean;\n}\n\n/**\n * Picker for a hierarchical category tree of unbounded depth: a closed field\n * that opens a drill-down + search modal (one level of children at a time,\n * with a breadcrumb trail back to root) and resolves to a single leaf\n * node's id. Implements FormValueControl for Signal Forms [formField]. Use\n * [(value)] for two-way binding.\n *\n * Rows are real buttons (ul-list-item), so Tab/Shift+Tab and Enter/Space\n * already give full keyboard access without extra arrow-key wiring — unlike\n * ul-search-select's single-line combobox overlay, there's no need for\n * ComboboxState here.\n *\n * @example\n * <ul-category-picker label=\"Category\" [nodes]=\"categoryNodes\" [(value)]=\"categoryId\" />\n */\n@Component({\n selector: 'ul-category-picker',\n imports: [\n IconComponent,\n InputComponent,\n ListItemComponent,\n ModalComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './category-picker.html',\n styleUrls: ['./category-picker.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CategoryPickerComponent implements FormValueControl<string | null> {\n readonly size = input<UiSize>('md');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('Select a category');\n readonly searchPlaceholder = input<string>('Search categories');\n readonly modalTitle = input<string>('Select a category');\n readonly rootLabel = input<string>('All categories');\n readonly noResultsText = input<string>('No results');\n readonly nodes = input<CategoryPickerNode[]>([]);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n /** Emitted when the modal closes, whether or not a value was picked — mirrors ul-select's touch. */\n readonly touch = output<void>();\n\n readonly value = model<string | null>(null);\n\n protected readonly ids = createFormFieldIds('ul-category-picker');\n protected readonly open = signal(false);\n protected readonly currentParentId = signal<string | null>(null);\n protected readonly query = signal('');\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n private readonly nodesById = computed(() => new Map(this.nodes().map((node) => [node.id, node])));\n\n protected readonly selectedNode = computed(() => {\n const id = this.value();\n return id == null ? null : (this.nodesById().get(id) ?? null);\n });\n\n protected readonly selectedLabel = computed(() => {\n const node = this.selectedNode();\n return node ? this.ancestorLabels(node.id).join(' › ') : '';\n });\n\n protected readonly currentChildren = computed(() =>\n this.nodes().filter((node) => node.parentId === this.currentParentId()),\n );\n\n /** Root→current ancestor chain, for the breadcrumb trail (empty at the root level). */\n protected readonly breadcrumb = computed(() => {\n const parentId = this.currentParentId();\n return parentId == null ? [] : this.ancestorNodes(parentId);\n });\n\n private readonly normalizedQuery = computed(() => this.query().trim().toLowerCase());\n protected readonly isSearching = computed(() => this.normalizedQuery().length > 0);\n\n protected readonly searchResults = computed(() => {\n const q = this.normalizedQuery();\n if (!q) return [];\n return this.nodes()\n .filter((node) => node.isLeaf && node.label.toLowerCase().includes(q))\n .map((node) => ({\n node,\n breadcrumb: this.ancestorLabels(node.id).slice(0, -1).join(' › '),\n }));\n });\n\n protected readonly hasNoResults = computed(\n () => this.isSearching() && this.searchResults().length === 0,\n );\n\n openPicker(): void {\n if (this.disabled()) return;\n const selected = this.selectedNode();\n this.currentParentId.set(selected ? selected.parentId : null);\n this.query.set('');\n this.open.set(true);\n }\n\n closePicker(): void {\n this.open.set(false);\n this.touch.emit();\n }\n\n selectNode(node: CategoryPickerNode): void {\n if (node.isLeaf) {\n this.value.set(node.id);\n this.closePicker();\n } else {\n this.currentParentId.set(node.id);\n this.query.set('');\n }\n }\n\n goToBreadcrumb(parentId: string | null): void {\n this.currentParentId.set(parentId);\n this.query.set('');\n }\n\n private ancestorNodes(id: string): CategoryPickerNode[] {\n const chain: CategoryPickerNode[] = [];\n let current = this.nodesById().get(id);\n while (current) {\n chain.unshift(current);\n current = current.parentId == null ? undefined : this.nodesById().get(current.parentId);\n }\n return chain;\n }\n\n private ancestorLabels(id: string): string[] {\n return this.ancestorNodes(id).map((node) => node.label);\n }\n}\n","<div\n class=\"ul-category-picker ul-category-picker--{{ size() }}\"\n [class.ul-category-picker--disabled]=\"disabled()\"\n [class.ul-category-picker--error]=\"hasError()\"\n [class.ul-category-picker--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"ul-category-picker__control\"\n [disabled]=\"disabled()\"\n (click)=\"openPicker()\"\n >\n <span\n class=\"ul-category-picker__control-text\"\n [class.ul-category-picker__control-text--placeholder]=\"!selectedNode()\"\n >\n {{ selectedLabel() || placeholder() }}\n </span>\n <ul-icon size=\"5\" icon=\"chevron_down\" />\n </button>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n\n<ul-modal\n variant=\"bottom-sheet\"\n [fullScreenInMobile]=\"true\"\n [(open)]=\"open\"\n [title]=\"modalTitle()\"\n (closed)=\"closePicker()\"\n>\n @if (open()) {\n <div class=\"ul-category-picker__modal\">\n <ul-input\n [controlId]=\"ids.controlId + '-search'\"\n [value]=\"query()\"\n (valueChange)=\"query.set($event)\"\n [placeholder]=\"searchPlaceholder()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n @if (isSearching()) {\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @if (hasNoResults()) {\n <div class=\"ul-category-picker__empty\" role=\"status\">{{ noResultsText() }}</div>\n } @else {\n @for (result of searchResults(); track result.node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(result.node)\">\n <ng-container ul-list-item-before-label>\n @if (result.node.icon) {\n <ul-icon size=\"5\" [icon]=\"result.node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>\n <div class=\"ul-category-picker__option-label\">{{ result.node.label }}</div>\n @if (result.breadcrumb) {\n <div class=\"ul-category-picker__option-breadcrumb\">{{ result.breadcrumb }}</div>\n }\n </ng-container>\n </ul-list-item>\n }\n }\n </div>\n } @else {\n @if (breadcrumb().length) {\n <div class=\"ul-category-picker__breadcrumb\">\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(null)\"\n >\n {{ rootLabel() }}\n </button>\n @for (ancestor of breadcrumb(); track ancestor.id; let last = $last) {\n <ul-icon size=\"4\" icon=\"chevron_right\" />\n @if (last) {\n <span\n class=\"ul-category-picker__breadcrumb-item ul-category-picker__breadcrumb-item--current\"\n aria-current=\"page\"\n >\n {{ ancestor.label }}\n </span>\n } @else {\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(ancestor.id)\"\n >\n {{ ancestor.label }}\n </button>\n }\n }\n </div>\n }\n\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @for (node of currentChildren(); track node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(node)\">\n <ng-container ul-list-item-before-label>\n @if (node.icon) {\n <ul-icon size=\"5\" [icon]=\"node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>{{ node.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n @if (!node.isLeaf) {\n <ul-icon size=\"5\" icon=\"chevron_right\" />\n }\n </ng-container>\n </ul-list-item>\n }\n </div>\n }\n </div>\n }\n</ul-modal>\n","import {\n AfterViewInit,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nexport type CollapseVariant = 'text' | 'icon';\n\n/**\n * A collapsible content component that supports both text and icon variants.\n * Uses CSS transitions for smooth animations and provides accessibility features.\n *\n * @example\n * ```html\n * <ul-collapse [maxHeight]=\"300\" variant=\"text\">\n * <div>Collapsible content here</div>\n * </ul-collapse>\n * ```\n */\n@Component({\n selector: 'ul-collapse',\n imports: [ButtonComponent, IconComponent],\n template: `\n <div [class]=\"computedClasses()\">\n <div\n class=\"ul-collapse__content\"\n #content\n [attr.aria-expanded]=\"!collapsed()\"\n [attr.aria-hidden]=\"collapsed()\"\n >\n <ng-content />\n </div>\n @if (isCollapsible()) {\n <div class=\"ul-collapse__toggle\">\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"variant() === 'icon'\"\n class=\"ul-collapse__toggle-button\"\n (click)=\"toggle()\"\n (keydown)=\"onToggleKeydown($event)\"\n [attr.aria-label]=\"collapsed() ? expandLabel() : collapseLabel()\"\n >\n @if (variant() === 'text') {\n <span>\n {{ collapsed() ? expandLabel() : collapseLabel() }}\n </span>\n } @else if (variant() === 'icon') {\n <ul-icon size=\"6\" icon=\"chevron_up\" />\n }\n </ul-button>\n </div>\n }\n </div>\n `,\n styleUrls: ['./collapse.scss'],\n host: {\n '[style.--ul-collapse-max-height.px]': 'maxHeight()',\n '[style.--ul-collapse-full-height.px]': 'fullHeight()',\n role: 'region',\n },\n})\nexport class CollapseComponent implements AfterViewInit {\n private readonly destroyRef = inject(DestroyRef);\n\n @ViewChild('content') content!: ElementRef<HTMLDivElement>;\n\n /**\n * The visual variant of the collapse toggle.\n * @default 'text'\n */\n variant = input<CollapseVariant>('text');\n\n /**\n * Controls the collapsed state of the component.\n * @default true\n */\n collapsed = model<boolean>(true);\n\n /**\n * Maximum height of the content when collapsed.\n * @default 200\n */\n maxHeight = input.required<number>();\n\n /**\n * Custom label for the expand action.\n * @default 'See more'\n */\n expandLabel = input<string>('See more');\n\n /**\n * Custom label for the collapse action.\n * @default 'See less'\n */\n collapseLabel = input<string>('See less');\n\n /** Current full height of the content */\n fullHeight = signal<number>(0);\n\n /** Whether the content is collapsible based on its height */\n isCollapsible = computed(() => {\n const max = Math.max(0, this.maxHeight());\n return this.fullHeight() > max;\n });\n\n ngAfterViewInit() {\n // Initial height calculation\n this.updateFullHeight();\n\n // Listen for window resize events to recalculate height\n const resizeSubscription = fromEvent(window, 'resize')\n .pipe(debounceTime(100))\n .subscribe(() => this.updateFullHeight());\n\n this.destroyRef.onDestroy(() => resizeSubscription.unsubscribe());\n }\n\n /** Updates the full height of the content */\n private updateFullHeight(): void {\n if (this.content?.nativeElement) {\n this.fullHeight.set(this.content.nativeElement.scrollHeight);\n }\n }\n\n /** Toggles the collapsed state */\n toggle(): void {\n this.collapsed.set(!this.collapsed());\n }\n\n onToggleKeydown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.toggle();\n }\n }\n\n computedClasses = computed(() => {\n return {\n 'ul-collapse': true,\n 'ul-collapse--collapsed': this.isCollapsible() && this.collapsed(),\n };\n });\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Mobile-only bottom navigation bar, styled like an app's tab bar\n * (icon-above-label items, one highlighted as active). Hidden above the\n * 'md' breakpoint (1024px) by the component's own CSS — no wrapper class or\n * media query is needed in the consuming app.\n *\n * Project `ul-dock-item`s directly; there is no data-driven `items` input,\n * since each item typically needs its own `routerLink`.\n *\n * @example\n * <ul-dock>\n * <ul-dock-item icon=\"home\" label=\"Home\" routerLink=\"/home\" routerLinkActive=\"ul-dock-item--active\" />\n * <ul-dock-item icon=\"search\" label=\"Search\" routerLink=\"/search\" routerLinkActive=\"ul-dock-item--active\" />\n * </ul-dock>\n */\n@Component({\n selector: 'ul-dock',\n templateUrl: './dock.html',\n styleUrls: ['./dock.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DockComponent {}\n","<nav class=\"ul-dock\" role=\"navigation\" aria-label=\"Primary\">\n <ng-content />\n</nav>\n","import { Directive } from '@angular/core';\n\n/** Place on the element projected into [ul-dock-item-content] so the dock item renders custom content instead of its default icon+label. */\n@Directive({\n selector: '[ul-dock-item-content]',\n})\nexport class DockItemContentSlotDirective {}\n","import { Component, computed, contentChild, input, ViewEncapsulation } from '@angular/core';\n\nimport { IconComponent, type IconName } from '../icon/icon';\nimport { DockItemContentSlotDirective } from './dock-item-slot.directive';\n\n/** Pre-built visual treatments for a dock item. 'accent' raises/highlights the item (e.g. a primary action tab like \"New\"). */\nexport type DockItemVariant = 'default' | 'accent';\n\n/**\n * A single tab in a `ul-dock`. Renders an icon above a label and tints both\n * when `active`. Attach `routerLink`/`routerLinkActive` (or any other\n * directive) directly on `ul-dock-item` for navigation.\n *\n * For the common case, content is data-driven via `icon`/`label`. To fully\n * customize an item's content (e.g. a differently laid-out icon+label pair),\n * project it with `[ul-dock-item-content]` — this replaces the default\n * icon/label rendering entirely. `badge` and `variant` apply regardless of\n * which content path is used.\n *\n * @example\n * <ul-dock-item icon=\"home\" label=\"Home\" routerLink=\"/home\" routerLinkActive=\"ul-dock-item--active\" />\n * <ul-dock-item icon=\"bell_on\" badge=\"3\" routerLink=\"/notifications\" />\n * <ul-dock-item variant=\"accent\" routerLink=\"/listings/new\">\n * <span ul-dock-item-content>\n * <ul-icon icon=\"plus\" size=\"6\" />\n * <span class=\"ul-dock-item__label\">New</span>\n * </span>\n * </ul-dock-item>\n */\n@Component({\n selector: 'ul-dock-item',\n imports: [IconComponent],\n templateUrl: './dock-item.html',\n styleUrls: ['./dock-item.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DockItemComponent {\n icon = input<IconName>();\n label = input<string>('');\n active = input<boolean>(false);\n disabled = input<boolean>(false);\n badge = input<string | number>();\n variant = input<DockItemVariant>('default');\n\n readonly contentSlot = contentChild(DockItemContentSlotDirective);\n readonly hasContentSlot = computed(() => !!this.contentSlot());\n}\n","<button\n type=\"button\"\n class=\"ul-dock-item\"\n [class.ul-dock-item--active]=\"active()\"\n [class.ul-dock-item--accent]=\"variant() === 'accent'\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n>\n @if (hasContentSlot()) {\n <ng-content select=\"[ul-dock-item-content]\" />\n } @else {\n <ul-icon [icon]=\"icon()!\" size=\"6\" />\n @if (label()) {\n <span class=\"ul-dock-item__label\">{{ label() }}</span>\n }\n }\n @if (badge()) {\n <span class=\"ul-dock-item__badge\">{{ badge() }}</span>\n }\n</button>\n","import { CdkMenuItem } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\n\nimport { IconComponent, IconName } from '../icon/icon';\nimport { ListItemComponent, ListItemTheme } from '../list-item/list-item';\n\n/** A single row in a `ul-menu` or `ul-dropdown` menu panel. */\nexport type MenuItem = {\n /** Display text for the item. */\n label: string;\n /** Optional value associated with the item. */\n value?: string;\n /** Icons to display on the left side of the item. */\n leftIcons?: IconName[];\n /** Icons to display on the right side of the item. */\n rightIcons?: IconName[];\n /** Whether the item is disabled and cannot be triggered. */\n disabled?: boolean;\n};\n\n/**\n * Renders `items` as `ul-list-item` + `cdkMenuItem` rows inside an\n * already-open `cdkMenu` panel. Shared by `ul-dropdown` (which passes\n * `selectedIndex` so the current choice renders with a checkmark) and\n * `ul-menu` (which leaves `selectedIndex` as `null` — every item there is a\n * one-off action, never a persisted \"current selection\").\n */\n@Component({\n selector: 'ul-menu-items',\n imports: [CdkMenuItem, NgTemplateOutlet, ListItemComponent, IconComponent],\n template: `\n <ng-template #renderIcons let-icons>\n @for (icon of icons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n </ng-template>\n\n @for (item of items(); track $index) {\n <ul-list-item\n cdkMenuItem\n [theme]=\"theme()\"\n [disabled]=\"!!item.disabled\"\n (cdkMenuItemTriggered)=\"itemTriggered.emit($index)\"\n [attr.role]=\"selectedIndex() === null ? 'menuitem' : 'menuitemradio'\"\n [attr.aria-checked]=\"\n selectedIndex() === null ? null : selectedIndex() === $index ? 'true' : 'false'\n \"\n >\n <ng-container ul-list-item-before-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.leftIcons }\" />\n </ng-container>\n <ng-container ul-list-item-label>{{ item.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.rightIcons }\" />\n @if (selectedIndex() === $index) {\n <ul-icon size=\"5\" icon=\"check\" />\n }\n </ng-container>\n </ul-list-item>\n }\n `,\n})\nexport class MenuItemsComponent {\n items = input<MenuItem[]>([]);\n theme = input<ListItemTheme>('ghost-white');\n /**\n * Index of the item to render as checked/selected.\n * @default null - no item is ever shown as checked (the action-menu case).\n */\n selectedIndex = input<number | null>(null);\n itemTriggered = output<number>();\n}\n","import { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, output, TemplateRef, viewChild } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\nimport { ListItemComponent, ListItemTheme } from '../list-item/list-item';\n\n/**\n * The trigger button shared by `ul-dropdown` and `ul-menu`: either an\n * icon-only button (`iconOnly`, e.g. a \"more options\" `⋮`) or a\n * `ul-list-item`-styled button showing a label with optional icons on\n * either side. Wires `cdkMenuTriggerFor` plus the ARIA attributes a menu\n * trigger needs, and exposes `close()` so the panel it opens can be\n * dismissed programmatically (e.g. a tap on a mobile bottom-sheet backdrop,\n * which CDK's own outside-click handling won't catch since the backdrop\n * lives inside the same overlay pane).\n */\n@Component({\n selector: 'ul-menu-trigger',\n imports: [CdkMenuTrigger, NgTemplateOutlet, ButtonComponent, ListItemComponent, IconComponent],\n template: `\n <ng-template #renderIcons let-icons>\n @for (icon of icons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n </ng-template>\n\n @if (iconOnly(); as iconName) {\n <ul-button\n [theme]=\"theme()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menuTemplate()\"\n class=\"ul-menu-trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId()\"\n [attr.aria-label]=\"iconOnlyLabel()\"\n (cdkMenuOpened)=\"opened.emit()\"\n (cdkMenuClosed)=\"closed.emit()\"\n >\n <ul-icon [icon]=\"iconName\" />\n </ul-button>\n } @else {\n <ul-list-item\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menuTemplate()\"\n class=\"ul-menu-trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId()\"\n (cdkMenuOpened)=\"opened.emit()\"\n (cdkMenuClosed)=\"closed.emit()\"\n >\n <ng-container ul-list-item-before-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: leftIcons() }\" />\n </ng-container>\n <ng-container ul-list-item-label>{{ label() }}</ng-container>\n <ng-container ul-list-item-after-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: rightIcons() }\" />\n </ng-container>\n </ul-list-item>\n }\n `,\n})\nexport class MenuTriggerComponent {\n theme = input<ListItemTheme>('ghost-white');\n disabled = input(false);\n iconOnly = input<IconName>();\n iconOnlyLabel = input('Open menu');\n label = input('');\n leftIcons = input<IconName[]>([]);\n rightIcons = input<IconName[]>([]);\n menuTemplate = input.required<TemplateRef<unknown>>();\n menuId = input.required<string>();\n isOpen = input(false);\n\n opened = output<void>();\n closed = output<void>();\n\n private readonly trigger = viewChild(CdkMenuTrigger);\n\n close(): void {\n this.trigger()?.close();\n }\n}\n","import { CdkMenu } from '@angular/cdk/menu';\nimport {\n Component,\n computed,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { IconName } from '../icon/icon';\nimport { ListItemTheme } from '../list-item/list-item';\nimport { MenuItem, MenuItemsComponent } from '../menu/menu-items';\nimport { MenuTriggerComponent } from '../menu/menu-trigger';\n\n/** @deprecated Import from `../menu/menu-items` instead — kept here so existing `DropdownItem` imports keep working. */\nexport type DropdownItem = MenuItem;\n\nconst DEFAULT_MENU_TRIGGER_ICONS: Pick<MenuItem, 'leftIcons' | 'rightIcons'> = {\n rightIcons: ['chevron_down'],\n};\n\n/**\n * A customizable dropdown component that displays a list of selectable items.\n *\n * Features:\n * - Configurable themes (ghost-white, transparent-white)\n * - Icon support for items and trigger button\n * - Customizable trigger appearance\n * - Disabled item support\n * - Two-way binding for selected item\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <uds-dropdown\n * [items]=\"dropdownItems\"\n * [theme]=\"'transparent-white'\"\n * (selectedItemChange)=\"onItemSelected($event)\">\n * </uds-dropdown>\n *\n * <!-- More options menu -->\n * <uds-dropdown\n * [items]=\"actionItems\"\n * [onlyMenuTriggerIcon]=\"'more_options'\">\n * </uds-dropdown>\n * ```\n */\n@Component({\n selector: 'ul-dropdown',\n imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent],\n templateUrl: './dropdown.html',\n styleUrls: ['./dropdown.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DropdownComponent {\n /**\n * The visual theme for the dropdown.\n * @default 'ghost-white'\n */\n theme = input<ListItemTheme>('ghost-white');\n\n /**\n * Array of items to display in the dropdown menu.\n * @default []\n */\n items = input<MenuItem[]>([]);\n\n /**\n * Whether the dropdown is disabled.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Overrides the icons of the selected item in the trigger button.\n * Can override leftIcons, rightIcons, or both.\n * @default { rightIcons: ['chevron_down'] }\n *\n * @example\n * ```typescript\n * menuTriggerIcons = {\n * chevron_down\n * }\n * ```\n */\n menuTriggerIcons = input<Pick<MenuItem, 'leftIcons' | 'rightIcons'> | undefined>(\n DEFAULT_MENU_TRIGGER_ICONS,\n );\n\n /**\n * Shows only a single icon in the trigger button, hiding the selected item's label and icons.\n * Commonly used with 'more_options' for action menus.\n * @default undefined\n *\n * @example\n * ```typescript\n * triggerIconOnly = 'more_options'\n * ```\n */\n triggerIconOnly = input<IconName>();\n\n /**\n * Accessible label for the icon-only trigger button.\n * @default 'Open menu'\n */\n iconOnlyLabel = input<string>('Open menu');\n\n /**\n * The index of the currently selected item.\n * Supports two-way binding with [(selectedIndex)].\n * @default 0\n */\n selectedIndex = model<number>(0);\n\n /**\n * The currently selected item with any trigger icon overrides applied.\n */\n selectedItem = computed(() => {\n const items = this.items();\n const index = this.selectedIndex();\n const fallback: MenuItem = {\n label: '',\n value: undefined,\n leftIcons: [],\n rightIcons: [],\n disabled: false,\n };\n const item = items[index] ?? items[0] ?? fallback;\n\n return {\n ...item,\n ...(this.menuTriggerIcons() ?? DEFAULT_MENU_TRIGGER_ICONS),\n };\n });\n\n /**\n * Right icons for the trigger: when default is chevron_down, shows chevron_down when closed\n * and chevron_up when open. Otherwise uses selectedItem().rightIcons as-is.\n */\n triggerRightIcons = computed(() => {\n const right = this.selectedItem().rightIcons ?? [];\n const open = this.isOpen();\n if (right.length === 1 && right[0] === 'chevron_down') {\n return open ? (['chevron_up'] as IconName[]) : (['chevron_down'] as IconName[]);\n }\n return right;\n });\n\n /**\n * Tracks whether the menu is currently open for ARIA.\n */\n isOpen = signal(false);\n\n /**\n * Stable id used to link the trigger to the menu container.\n */\n readonly menuId = `ul-dropdown-menu-${Math.random().toString(36).slice(2, 11)}`;\n\n /**\n * Emitted when a new item is selected from the dropdown.\n */\n selectedItemChange = output<MenuItem>();\n\n /**\n * Emitted when the menu closes, whether or not a selection was made —\n * the closest thing this component has to a \"blur\" for form controls\n * built on top of it (see ul-select's touch output).\n */\n closed = output<void>();\n\n private readonly trigger = viewChild(MenuTriggerComponent);\n\n /**\n * Handles the selection of a dropdown item.\n * @param index - The index of the selected item\n */\n handleItemTriggered(index: number) {\n this.selectedIndex.set(index);\n this.selectedItemChange.emit(this.items()[index]);\n }\n\n /**\n * Closes the panel. CDK auto-closes on a `cdkMenuItem` trigger already —\n * this is for the mobile backdrop tap, which isn't one.\n */\n closeMenu(): void {\n this.trigger()?.close();\n }\n\n onMenuOpened(): void {\n this.isOpen.set(true);\n }\n\n onMenuClosed(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n}\n","<div class=\"ul-dropdown\">\n <ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"selectedItem().label\"\n [leftIcons]=\"selectedItem().leftIcons ?? []\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n />\n\n <ng-template #menu>\n <div class=\"ul-dropdown__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-dropdown__content ul-scrollable\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n [selectedIndex]=\"selectedIndex()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n </div>\n </ng-template>\n</div>\n","import {\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\n/** Border and hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */\nexport type FileInputAppearance = 'border-only' | 'subtle-tint';\n\n/**\n * File input component with label, helper/error text, and optional slots.\n * Implements FormValueControl<FileList | null> for use with Signal Forms [formField].\n *\n * Uses hidden native file input + visible trigger + selected file label.\n * Content projection: [ul-file-input-left-elements], [ul-file-input-right-elements].\n */\n@Component({\n selector: 'ul-file-input',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent],\n templateUrl: './file-input.html',\n styleUrls: ['./file-input.scss'],\n})\nexport class FileInputComponent implements FormValueControl<FileList | null> {\n readonly size = input<UiSize>('md');\n readonly appearance = input<FileInputAppearance>('border-only');\n readonly accept = input<string>('');\n readonly multiple = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n /** Placeholder when no file is selected (e.g. \"Choose file\" or \"No file chosen\"). */\n readonly placeholderText = input<string>('No file chosen');\n readonly controlId = input<string | undefined>();\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model<boolean>(false);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */\n readonly touch = output<void>();\n readonly error = input<boolean>(false);\n\n readonly value = model<FileList | null>(null);\n\n protected readonly fileInputRef = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n protected readonly ids = createFormFieldIds('ul-file-input');\n protected readonly effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId);\n protected readonly effectiveHelperId = computed(() =>\n this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId,\n );\n protected readonly effectiveErrorId = computed(() =>\n this.controlId() ? `${this.controlId()}-error` : this.ids.errorId,\n );\n protected readonly isFocused = signal(false);\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.effectiveHelperId(),\n this.effectiveErrorId(),\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n /** Display text for selected file(s). */\n protected readonly selectedLabel = computed(() => {\n const files = this.value();\n if (!files?.length) return this.placeholderText();\n if (files.length === 1) return files[0].name;\n return `${files.length} files selected`;\n });\n\n readonly inputBlur = output<FocusEvent>();\n readonly inputFocus = output<FocusEvent>();\n\n constructor() {\n effect(() => {\n if (this.value() === null) {\n const el = this.fileInputRef()?.nativeElement;\n if (el) el.value = '';\n }\n });\n }\n\n onFileChange(event: Event): void {\n const inputEl = event.target as HTMLInputElement;\n const fileList = inputEl.files;\n const next = fileList && fileList.length > 0 ? fileList : null;\n this.value.set(next);\n }\n\n onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.inputBlur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.inputFocus.emit(event);\n }\n\n triggerClick(): void {\n if (this.disabled()) return;\n this.fileInputRef()?.nativeElement?.click();\n }\n\n focus(): void {\n const el = document.getElementById(this.effectiveControlId());\n if (el instanceof HTMLInputElement) el.focus();\n }\n}\n","<div\n class=\"ul-file-input ul-file-input--{{ size() }} ul-file-input--appearance-{{ appearance() }}\"\n [class.ul-file-input--error]=\"hasError()\"\n [class.ul-file-input--disabled]=\"disabled()\"\n [class.ul-file-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-file-input__group\" [class.ul-file-input__group--focused]=\"isFocused()\">\n <div class=\"ul-file-input__left-elements\">\n <ng-content select=\"[ul-file-input-left-elements]\" />\n </div>\n\n <input\n #fileInput\n [id]=\"effectiveControlId()\"\n type=\"file\"\n class=\"ul-file-input__native\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n (change)=\"onFileChange($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <button\n type=\"button\"\n class=\"ul-file-input__trigger\"\n [disabled]=\"disabled()\"\n (click)=\"triggerClick()\"\n >\n Choose file\n </button>\n <span class=\"ul-file-input__label\">{{ selectedLabel() }}</span>\n\n <div class=\"ul-file-input__right-elements\">\n <ng-content select=\"[ul-file-input-right-elements]\" />\n </div>\n </div>\n\n <ul-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { Component, input } from '@angular/core';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\n@Component({\n selector: 'ul-footer',\n templateUrl: 'footer.html',\n styleUrls: ['./footer.scss'],\n imports: [ButtonComponent, IconComponent],\n})\nexport class FooterComponent {\n socialLinks = input<{ url: string; icon: IconName }[]>([]);\n links = input<{ url: string; text: string }[]>([]);\n\n navigate(url: string) {\n window.location.href = url;\n }\n}\n","<div class=\"ul-footer\">\n <p class=\"ul-footer__copyright\">\n <ng-content select=\"[ul-copyright]\" />\n </p>\n @if (socialLinks()) {\n <ul class=\"ul-footer__social-links\">\n @for (link of socialLinks(); track link.url) {\n <li class=\"ul-footer__social-link\">\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n [disabled]=\"false\"\n (buttonClick)=\"navigate(link.url)\"\n >\n <ul-icon [icon]=\"link.icon\" />\n </ul-button>\n </li>\n }\n </ul>\n }\n @for (link of links(); track link.url) {\n <a [href]=\"link.url\" class=\"ul-link ul-body-m--medium\">{{ link.text }}</a>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, output } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nexport type PillSize = 'sm' | 'md' | 'lg';\n\nexport type PillVariant =\n | 'interactive'\n | 'interactive-rounded'\n | 'read-only'\n | 'dismissible'\n | 'selectable';\n\nexport type PillTheme =\n | 'fill-white'\n | 'fill-black'\n | 'fill-purple'\n | 'fill-red'\n | 'fill-green'\n | 'transparent-white'\n | 'transparent-purple'\n | 'transparent-red'\n | 'transparent-green'\n | 'stroke-white'\n | 'outline-white'\n | 'outline-purple'\n | 'outline-red'\n | 'outline-green';\n\n@Component({\n selector: 'ul-pill',\n imports: [CommonModule, ButtonComponent, IconComponent],\n templateUrl: './pill.html',\n styleUrls: ['./pill.scss'],\n})\nexport class PillComponent {\n variant = input<PillVariant>('interactive');\n theme = input<PillTheme>('transparent-white');\n size = input<PillSize>('md');\n disabled = input<boolean>(false);\n\n dismiss = output<void>();\n\n dismissibleButtonTheme = computed(() => {\n const t = this.theme();\n if (t === 'transparent-purple' || t === 'outline-purple') return 'ghost-purple';\n if (t === 'outline-red') return 'ghost-red';\n if (t === 'outline-green') return 'ghost-green';\n return 'ghost-white';\n });\n\n modifierClass = computed(() => {\n const classes = [\n 'ul-pill',\n `ul-pill--${this.variant()}`,\n `ul-pill--${this.theme()}`,\n `ul-pill--${this.size()}`,\n ];\n\n if (this.disabled()) {\n classes.push('ul-pill--disabled');\n }\n\n return classes;\n });\n}\n","@if (variant() === 'selectable') {\n <label [class]=\"modifierClass()\" [class.ul-pill--disabled]=\"disabled()\">\n <input type=\"checkbox\" class=\"ul-pill__checkbox\" />\n <ng-container *ngTemplateOutlet=\"content\" />\n </label>\n} @else if (['dismissible', 'read-only'].includes(variant())) {\n <div [class]=\"modifierClass()\" [class.ul-pill--disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n @if (variant() === 'dismissible') {\n <ul-button\n [theme]=\"dismissibleButtonTheme()\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n (click)=\"dismiss.emit()\"\n >\n <ul-icon icon=\"close\" />\n </ul-button>\n }\n </div>\n} @else if (['interactive', 'interactive-rounded'].includes(variant())) {\n <button [class]=\"modifierClass()\" [disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n}\n\n<ng-template #content>\n <ng-content />\n</ng-template>\n","import { Directive } from '@angular/core';\n\n/** Place on the element projected into [ul-hero-badges] so the hero can detect custom badges content. */\n@Directive({\n selector: '[ul-hero-badges]',\n})\nexport class PeHeroBadgesSlotDirective {}\n\n/** Place on the element projected into [ul-hero-title] so the hero can detect custom title content. */\n@Directive({\n selector: '[ul-hero-title]',\n})\nexport class PeHeroTitleSlotDirective {}\n\n/** Place on the element projected into [ul-hero-subtitle] so the hero can detect custom subtitle content. */\n@Directive({\n selector: '[ul-hero-subtitle]',\n})\nexport class PeHeroSubtitleSlotDirective {}\n\n/** Place on the element projected into [ul-hero-actions] so the hero can detect custom actions content. */\n@Directive({\n selector: '[ul-hero-actions]',\n})\nexport class PeHeroActionsSlotDirective {}\n\n/** Place on the element projected into [ul-hero-content] for optional extra content (e.g. between subtitle and actions). */\n@Directive({\n selector: '[ul-hero-content]',\n})\nexport class PeHeroContentSlotDirective {}\n","import { Component, computed, contentChild, input, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport type { UiSize, UiTheme } from '../shared/ui-types';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport { PillComponent } from '../pill/pill';\n\nimport {\n PeHeroActionsSlotDirective,\n PeHeroBadgesSlotDirective,\n PeHeroContentSlotDirective,\n PeHeroSubtitleSlotDirective,\n PeHeroTitleSlotDirective,\n} from './hero-slot.directive';\n\nexport interface HeroAction {\n label: string;\n href?: string;\n routerLink?: string | string[];\n icon?: string;\n theme?: UiTheme;\n size?: UiSize;\n}\n\nexport type HeroAlignment = 'left' | 'center' | 'right';\nexport type HeroSize = 'sm' | 'md' | 'lg';\n\n/**\n * Hero component for displaying prominent hero sections with title, description,\n * call-to-action buttons, optional badges, and background image support.\n * Fully responsive across mobile, tablet, and desktop.\n *\n * When slots are not projected, inputs are used (title, subtitle, badges, primaryAction, secondaryAction).\n * Content projection slots: ul-hero-badges, ul-hero-title, ul-hero-subtitle, ul-hero-actions, ul-hero-content.\n *\n * @example\n * ```html\n * <ul-hero\n * title=\"Welcome\"\n * subtitle=\"Build amazing experiences\"\n * [primaryAction]=\"{ label: 'Get Started', href: '/signup' }\"\n * [badges]=\"['New', 'Featured']\"\n * />\n * ```\n */\n@Component({\n selector: 'ul-hero',\n imports: [ButtonComponent, IconComponent, PillComponent, RouterLink],\n templateUrl: './hero.html',\n styleUrls: ['./hero.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class HeroComponent {\n /** Main headline text */\n title = input.required<string>();\n\n /** Supporting description text */\n subtitle = input<string | undefined>(undefined);\n\n /** Primary call-to-action button */\n primaryAction = input<HeroAction | undefined>(undefined);\n\n /** Secondary call-to-action button */\n secondaryAction = input<HeroAction | undefined>(undefined);\n\n /** Badge/pill labels to display above the title */\n badges = input<string[]>([]);\n\n /** Background image URL */\n backgroundImage = input<string | undefined>(undefined);\n\n /**\n * CSS gradient or color for the overlay on top of the background image.\n * E.g. \"linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.7) 100%)\" or \"rgba(0,0,0,0.5)\".\n * When unset, a default dark overlay is used when a background image is present.\n */\n backgroundOverlayGradient = input<string | undefined>(undefined);\n\n /**\n * CSS filter applied to the background image (e.g. \"brightness(0.8)\", \"blur(2px)\", \"grayscale(0.3)\").\n * Combine multiple: \"brightness(0.7) contrast(1.1)\".\n */\n backgroundFilter = input<string | undefined>(undefined);\n\n /** Text and content alignment */\n alignment = input<HeroAlignment>('center');\n\n /** Hero section size variant */\n size = input<HeroSize>('md');\n\n /** Whether hero takes full viewport height */\n fullHeight = input<boolean>(false);\n\n readonly badgesSlot = contentChild(PeHeroBadgesSlotDirective);\n readonly titleSlot = contentChild(PeHeroTitleSlotDirective);\n readonly subtitleSlot = contentChild(PeHeroSubtitleSlotDirective);\n readonly actionsSlot = contentChild(PeHeroActionsSlotDirective);\n readonly contentSlot = contentChild(PeHeroContentSlotDirective);\n\n readonly hasBadgesSlot = computed(() => !!this.badgesSlot());\n readonly hasTitleSlot = computed(() => !!this.titleSlot());\n readonly hasSubtitleSlot = computed(() => !!this.subtitleSlot());\n readonly hasActionsSlot = computed(() => !!this.actionsSlot());\n readonly hasContentSlot = computed(() => !!this.contentSlot());\n}\n","<section\n class=\"ul-hero ul-hero-alignment-{{ alignment() }} ul-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.ul-hero--full-height]=\"fullHeight()\"\n [class.ul-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"ul-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"ul-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"ul-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"ul-hero__badges\">\n <ng-content select=\"[ul-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"ul-hero__badges\">\n @for (badge of badges(); track badge) {\n <ul-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </ul-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"ul-hero__title\">\n <ng-content select=\"[ul-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"ul-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"ul-hero__subtitle\">\n <ng-content select=\"[ul-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"ul-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"ul-hero__extra\">\n <ng-content select=\"[ul-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"ul-hero__actions\">\n <ng-content select=\"[ul-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"ul-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n }\n }\n </div>\n }\n </div>\n</section>\n","import { Component, Directive, input, signal } from '@angular/core';\nimport { IconComponent, IconSize } from '../icon/icon';\n\n/**\n * Directive to handle image loading errors and display placeholders\n */\n@Directive({\n selector: '[ulCatchImageNotFound]',\n host: {\n '(load)': 'handleLoad()',\n '(error)': 'handleError()',\n '[class.ul-image--not-found]': 'imageNotFound()',\n '[style.visibility]': 'visibility()',\n },\n})\nexport class ImageNotFoundDirective {\n // Controls whether to show a placeholder when image fails to load\n showPlaceholder = input<boolean>(true);\n\n // Signal to track if image failed to load\n imageNotFound = signal<boolean>(false);\n // Signal to control alt and icon visibility of broken images.\n visibility = signal<string>('hidden');\n\n /**\n * Handles image loading errors\n * Hides the image and optionally shows placeholder\n */\n handleError() {\n this.visibility.set('hidden');\n if (this.showPlaceholder()) {\n this.imageNotFound.set(true);\n }\n }\n\n /**\n * Handles successful image load\n * Shows the image and removes placeholder\n */\n handleLoad() {\n this.imageNotFound.set(false);\n this.visibility.set('visible');\n }\n}\n\n/**\n * Standalone placeholder for the case `ulCatchImageNotFound` can't cover: there is\n * no `<img>` to fail in the first place, because the source has no URL at all.\n * Renders the same icon-over-a-grey-box look as the directive's own placeholder —\n * both draw from the design system's `image_dashed` glyph and grey-lvl-1\n * background — so a \"no image\" listing and a \"broken image\" listing read\n * identically to a user.\n *\n * Positioned to fill its nearest positioned ancestor, same as the directive's\n * pseudo-element placeholder: the caller supplies a sized, `position: relative`\n * box (a gallery slot, a card's media area) and drops this in.\n */\n@Component({\n selector: 'ul-image-not-found',\n template: `<ul-icon icon=\"image_dashed\" [size]=\"iconSize()\" />`,\n imports: [IconComponent],\n styleUrl: './image-not-found.scss',\n})\nexport class ImageNotFoundComponent {\n readonly iconSize = input<IconSize>('12');\n}\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { Dimensions, ImageTransform } from 'ngx-image-cropper';\nimport { ImageCropperComponent as NgxImageCropperComponent } from 'ngx-image-cropper';\n\nimport { ButtonComponent } from '../button/button';\nimport { ModalComponent } from '../modal/modal';\n\nconst DEFAULT_MAX_OUTPUT_SIZE = 1024;\n// Matches $spacing-spacing-60 (240px) — the longer side of the fixed crop\n// frame used in locked-aspect-ratio mode. Kept as a plain constant since\n// ngx-image-cropper's inputs take numbers, not Sass tokens.\nconst FRAME_MAX_DIMENSION = 240;\nconst MIN_ZOOM = 1;\nconst MAX_ZOOM = 3;\nconst ZOOM_STEP = 0.01;\n\n/** Visual shape of the crop mask/frame — purely cosmetic, doesn't affect the exported file. */\nexport type ImageCropperShape = 'rectangle' | 'round';\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Modal flow for cropping/resizing a photo. Wraps ngx-image-cropper so the\n * third-party crop mechanics never leak outside the design system —\n * consumers only ever see `ul-image-cropper`.\n *\n * Two interaction modes, chosen by whether `aspectRatio` is set:\n * - **Locked** (`aspectRatio` given, e.g. `1` for an avatar): a fixed-size\n * frame; the user drags/zooms the photo underneath it. ngx-image-cropper\n * applies that pan with *no bounds checking at all* (unlike its\n * frame-resize path, which does call `checkCropperWithinMaxSizeBounds`),\n * so this component clamps translateH/translateV itself — see\n * `clampPan()` — snapping the photo back to fully cover the frame the\n * moment a drag would otherwise leave a gap.\n * - **Free-form** (`aspectRatio` omitted, the default): a resizable frame\n * over a static photo; the user drags its corners to trim/straighten\n * with no ratio imposed. This path is already bounds-checked by the\n * library itself. Best for listing photos, which keep their own shape\n * today (see `um-image-upload`'s auto-width carousel).\n *\n * Emits a resized `File`, ready to hand to any upload call that accepts\n * one — this component only produces the file, it never uploads it.\n *\n * @example Locked 1:1 round (avatar)\n * <ul-image-cropper\n * [(open)]=\"showCropper\"\n * [imageFile]=\"selectedFile\"\n * shape=\"round\"\n * [aspectRatio]=\"1\"\n * [maxOutputSize]=\"512\"\n * (cropped)=\"onCropped($event)\"\n * />\n *\n * @example Free-form rectangle (listing photo)\n * <ul-image-cropper\n * [(open)]=\"showCropper\"\n * [imageFile]=\"selectedFile\"\n * [maxOutputSize]=\"1920\"\n * (cropped)=\"onCropped($event)\"\n * />\n */\n@Component({\n selector: 'ul-image-cropper',\n imports: [NgxImageCropperComponent, ModalComponent, ButtonComponent],\n templateUrl: './image-cropper.html',\n styleUrl: './image-cropper.scss',\n})\nexport class ImageCropperComponent {\n /** Whether the crop modal is open. Supports two-way binding with [(open)]. */\n readonly open = model<boolean>(false);\n\n /** The source photo to crop. Required for the modal to render its content. */\n readonly imageFile = input<File | null>(null);\n\n /** Visual shape of the crop mask. */\n readonly shape = input<ImageCropperShape>('rectangle');\n\n /**\n * Locks the crop frame to this width/height ratio and switches to\n * pan-and-zoom mode. Omit (or pass null) for a free-form resizable frame\n * with no ratio imposed.\n */\n readonly aspectRatio = input<number | null>(null);\n\n /** Longest side (px) of the final output image; scales down without distorting. */\n readonly maxOutputSize = input<number>(DEFAULT_MAX_OUTPUT_SIZE);\n\n /** Title shown in the modal header. */\n readonly title = input<string>('Adjust photo');\n\n /** Label for the confirm button. */\n readonly confirmLabel = input<string>('Save');\n\n /** Label next to the zoom slider (locked-aspect mode only). */\n readonly zoomLabel = input<string>('Zoom');\n\n /** Accessible label for the crop frame. */\n readonly frameAriaLabel = input<string>('Crop frame');\n\n /** Emitted with the cropped, resized photo once the user confirms. */\n readonly cropped = output<File>();\n\n /** Emitted when the user dismisses the modal (backdrop, Escape, close button) without cropping. */\n readonly cancelled = output<void>();\n\n /** Emitted when the source photo fails to load in the cropper. */\n readonly loadFailed = output<void>();\n\n private readonly cropperRef = viewChild(NgxImageCropperComponent);\n\n protected readonly cropperImageFile = computed(() => this.imageFile() ?? undefined);\n protected readonly isRound = computed(() => this.shape() === 'round');\n protected readonly isLocked = computed(() => this.aspectRatio() != null);\n\n /** ngx-image-cropper always wants a number here; unused while isLocked() is false. */\n protected readonly effectiveAspectRatio = computed(() => this.aspectRatio() ?? 1);\n\n // Longer side stays at FRAME_MAX_DIMENSION; the other side is derived from\n // the ratio, so non-square locked ratios (e.g. 4:3) get a proportional\n // frame instead of a squashed 240x240 one.\n private readonly fullFrameWidth = computed(() => {\n if (!this.isLocked()) return undefined;\n const ratio = this.effectiveAspectRatio();\n return ratio >= 1 ? FRAME_MAX_DIMENSION : FRAME_MAX_DIMENSION * ratio;\n });\n\n private readonly fullFrameHeight = computed(() => {\n if (!this.isLocked()) return undefined;\n const ratio = this.effectiveAspectRatio();\n return ratio >= 1 ? FRAME_MAX_DIMENSION / ratio : FRAME_MAX_DIMENSION;\n });\n\n // ngx-image-cropper clamps a static frame to the displayed photo one axis at\n // a time and never re-applies the ratio, so a photo displayed shorter or\n // narrower than the frame (a landscape photo in a narrow dialog) got a\n // frame of the wrong shape — which the output step then stretched to the\n // locked ratio. Shrinking the whole frame to fit inside the photo, ratio\n // intact, keeps the exported crop undistorted.\n private readonly frameScale = computed(() => {\n const base = this.baseImageSize();\n const width = this.fullFrameWidth();\n const height = this.fullFrameHeight();\n if (!base || !width || !height || base.width <= 0 || base.height <= 0) return 1;\n return Math.min(1, base.width / width, base.height / height);\n });\n\n protected readonly frameWidth = computed(() => {\n const width = this.fullFrameWidth();\n return width === undefined ? undefined : width * this.frameScale();\n });\n\n protected readonly frameHeight = computed(() => {\n const height = this.fullFrameHeight();\n return height === undefined ? undefined : height * this.frameScale();\n });\n\n protected readonly minZoom = MIN_ZOOM;\n protected readonly maxZoom = MAX_ZOOM;\n protected readonly zoomStep = ZOOM_STEP;\n\n protected readonly zoom = signal(MIN_ZOOM);\n protected readonly cropperReady = signal(false);\n\n // The photo's own rendered size (at zoom 1, before any pan), reported by\n // ngx-image-cropper once it has fit the photo to cover the frame — the\n // basis for clampPan()'s bounds. `pan` is what the user's drag *asked*\n // for; `clampedPan` is what actually reaches the child, corrected to\n // never uncover the frame.\n private readonly baseImageSize = signal<Dimensions | null>(null);\n private readonly pan = signal({ h: 0, v: 0 });\n\n protected readonly clampedPan = computed(() => this.clampPan(this.pan(), this.zoom()));\n protected readonly transform = computed<ImageTransform>(() => ({\n scale: this.zoom(),\n translateH: this.clampedPan().h,\n translateV: this.clampedPan().v,\n }));\n\n constructor() {\n // A fresh file (new selection, or re-opening for a retry) always starts\n // from a neutral zoom/pan rather than carrying over the previous\n // session's, and isn't croppable again until ngx-image-cropper reports\n // it loaded.\n effect(() => {\n this.imageFile();\n this.zoom.set(MIN_ZOOM);\n this.pan.set({ h: 0, v: 0 });\n this.baseImageSize.set(null);\n this.cropperReady.set(false);\n });\n }\n\n // ngx-image-cropper only bounds-checks its frame-resize path; dragging the\n // photo itself (locked mode) applies translateH/V with no clamping and\n // reports the result here on release. Re-deriving from `pan` (rather than\n // trusting the event's translate values outright) keeps this the single\n // source of truth clampedPan reads from.\n protected onTransformChange(event: ImageTransform): void {\n this.pan.set({ h: event.translateH ?? 0, v: event.translateV ?? 0 });\n }\n\n protected onZoomInput(event: Event): void {\n this.zoom.set((event.target as HTMLInputElement).valueAsNumber);\n }\n\n protected onCropperReady(size: Dimensions): void {\n this.baseImageSize.set(size);\n this.cropperReady.set(true);\n }\n\n protected async onConfirm(): Promise<void> {\n const croppedEvent = await this.cropperRef()?.crop('blob');\n const blob = croppedEvent?.blob;\n if (!blob) return;\n this.cropped.emit(new File([blob], 'photo.jpg', { type: blob.type }));\n this.open.set(false);\n }\n\n protected onClosed(): void {\n this.cancelled.emit();\n }\n\n // translateH/V are percentages of the photo's own (unscaled) box, per\n // ngx-image-cropper's default translateUnit — so the on-screen pixel\n // shift is (percent/100 * baseSize) * scale (CSS applies scale() *after*\n // translate() in the same transform, magnifying it). Solving\n // |shift| <= (baseSize*scale - frameSize) / 2 for the percent gives the\n // bound below; it comes out to exactly 0 on whichever axis the photo was\n // fit tightest to the frame (no slack to pan there without zooming in\n // first), and the true remaining slack on the other axis.\n private clampPan(pan: { h: number; v: number }, scale: number): { h: number; v: number } {\n const base = this.baseImageSize();\n const frameWidth = this.frameWidth();\n const frameHeight = this.frameHeight();\n if (!base || !frameWidth || !frameHeight || base.width <= 0 || base.height <= 0) {\n return { h: 0, v: 0 };\n }\n\n const maxH = Math.max(50 * (1 - frameWidth / (base.width * scale)), 0);\n const maxV = Math.max(50 * (1 - frameHeight / (base.height * scale)), 0);\n return {\n h: clamp(pan.h, -maxH, maxH),\n v: clamp(pan.v, -maxV, maxV),\n };\n }\n}\n","<ul-modal [(open)]=\"open\" variant=\"custom\" [title]=\"title()\" (closed)=\"onClosed()\">\n @if (imageFile()) {\n <div class=\"ul-image-cropper\">\n <image-cropper\n class=\"ul-image-cropper__frame\"\n [imageFile]=\"cropperImageFile()\"\n [maintainAspectRatio]=\"isLocked()\"\n [aspectRatio]=\"effectiveAspectRatio()\"\n [roundCropper]=\"isRound()\"\n [cropperStaticWidth]=\"frameWidth()\"\n [cropperStaticHeight]=\"frameHeight()\"\n [allowMoveImage]=\"isLocked()\"\n [transform]=\"transform()\"\n [resizeToWidth]=\"maxOutputSize()\"\n [resizeToHeight]=\"maxOutputSize()\"\n [onlyScaleDown]=\"true\"\n [cropperFrameAriaLabel]=\"frameAriaLabel()\"\n format=\"jpeg\"\n output=\"blob\"\n (cropperReady)=\"onCropperReady($event)\"\n (transformChange)=\"onTransformChange($event)\"\n (loadImageFailed)=\"loadFailed.emit()\"\n />\n\n @if (isLocked()) {\n <label class=\"ul-image-cropper__zoom\">\n <span class=\"ul-image-cropper__zoom-label\">{{ zoomLabel() }}</span>\n <input\n type=\"range\"\n class=\"ul-image-cropper__zoom-input\"\n [min]=\"minZoom\"\n [max]=\"maxZoom\"\n [step]=\"zoomStep\"\n [value]=\"zoom()\"\n (input)=\"onZoomInput($event)\"\n />\n </label>\n }\n </div>\n }\n\n <div class=\"ul-modal__foter-content\" ul-modal-footer>\n <ul-button\n theme=\"fill-purple\"\n size=\"md\"\n [disabled]=\"!cropperReady()\"\n (buttonClick)=\"onConfirm()\"\n >\n {{ confirmLabel() }}\n </ul-button>\n </div>\n</ul-modal>\n","import { Directive, input, output } from '@angular/core';\n\nconst DEFAULT_DURATION_MS = 500;\nconst MOVE_CANCEL_THRESHOLD_PX = 10;\n\n/**\n * Emits `ulLongPress` when the pointer (mouse, touch, or pen) is held down\n * on the host element for `ulLongPressDuration` without moving more than a\n * few pixels. Also suppresses the `click` that follows the triggering\n * press's release, so long-press-to-select gestures don't also activate a\n * link/button underneath.\n */\n@Directive({\n selector: '[ulLongPress]',\n host: {\n '(pointerdown)': 'handlePointerDown($event)',\n '(pointerup)': 'handlePointerEnd()',\n '(pointercancel)': 'handlePointerEnd()',\n '(pointerleave)': 'handlePointerEnd()',\n '(pointermove)': 'handlePointerMove($event)',\n '(click)': 'handleClick($event)',\n },\n})\nexport class LongPressDirective {\n ulLongPressDuration = input<number>(DEFAULT_DURATION_MS);\n\n ulLongPress = output<void>();\n\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n private startX = 0;\n private startY = 0;\n private triggered = false;\n\n handlePointerDown(event: PointerEvent): void {\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n this.startX = event.clientX;\n this.startY = event.clientY;\n this.triggered = false;\n this.timeoutId = setTimeout(() => {\n this.timeoutId = null;\n this.triggered = true;\n this.ulLongPress.emit();\n }, this.ulLongPressDuration());\n }\n\n handlePointerMove(event: PointerEvent): void {\n if (this.timeoutId === null) return;\n\n const distance = Math.hypot(event.clientX - this.startX, event.clientY - this.startY);\n if (distance > MOVE_CANCEL_THRESHOLD_PX) {\n this.cancelTimer();\n }\n }\n\n handlePointerEnd(): void {\n this.cancelTimer();\n }\n\n handleClick(event: MouseEvent): void {\n if (!this.triggered) return;\n this.triggered = false;\n event.preventDefault();\n event.stopPropagation();\n }\n\n private cancelTimer(): void {\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n}\n","import { CdkMenu } from '@angular/cdk/menu';\nimport { Component, input, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\n\nimport { IconName } from '../icon/icon';\nimport { ListItemTheme } from '../list-item/list-item';\n\nimport { MenuItem, MenuItemsComponent } from './menu-items';\nimport { MenuTriggerComponent } from './menu-trigger';\n\n/**\n * A trigger + panel for an action menu (edit, delete, share, ...). Unlike\n * `ul-dropdown`, there is no notion of a \"currently selected\" item — every\n * item is a one-off action, so nothing is ever shown as checked.\n *\n * Pass `items` for the common label+icon action-list case, and/or project\n * custom content (e.g. a `ul-list-item cdkMenuItem routerLink=\"...\">` for a\n * navigation item) — both can be combined, or you can skip `items`\n * entirely and compose the panel purely from projected content.\n *\n * Below the 'md' breakpoint the panel renders as a bottom sheet (full\n * width, pinned to the viewport, tap-outside-to-dismiss) instead of a\n * small anchored popover — the same behavior `ul-dropdown` gets.\n *\n * @example\n * ```html\n * <ul-menu\n * [items]=\"[{ label: 'Edit', value: 'edit', leftIcons: ['edit'] },\n * { label: 'Delete', value: 'delete', leftIcons: ['trash'] }]\"\n * triggerIconOnly=\"more_options\"\n * (itemSelected)=\"onAction($event)\">\n * </ul-menu>\n * ```\n */\n@Component({\n selector: 'ul-menu',\n imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent],\n templateUrl: './menu.html',\n styleUrls: ['./menu.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class MenuComponent {\n /** Visual theme, passed through to the trigger and to any items rendered via `items`. */\n theme = input<ListItemTheme>('ghost-white');\n\n /** Simple label+icon action items. Optional — content projection covers everything else. */\n items = input<MenuItem[]>([]);\n\n disabled = input(false);\n\n /**\n * Shows only a single icon in the trigger, hiding any label. Commonly\n * `'more_options'` for a row-level \"⋮\" action menu.\n */\n triggerIconOnly = input<IconName>();\n\n /** Accessible label for the icon-only trigger. */\n iconOnlyLabel = input('Open menu');\n\n /** Static label for a non-icon-only trigger (there is no \"current selection\" to show instead). */\n triggerLabel = input('');\n triggerLeftIcons = input<IconName[]>([]);\n triggerRightIcons = input<IconName[]>([]);\n\n /** Emitted when an `items`-provided entry is triggered. */\n itemSelected = output<MenuItem>();\n\n /** Emitted when the menu closes, whether or not a selection was made. */\n closed = output<void>();\n\n readonly isOpen = signal(false);\n readonly menuId = `ul-menu-${Math.random().toString(36).slice(2, 11)}`;\n\n private readonly trigger = viewChild(MenuTriggerComponent);\n\n handleItemTriggered(index: number): void {\n const item = this.items()[index];\n if (item) {\n this.itemSelected.emit(item);\n }\n }\n\n /**\n * Closes the panel. CDK auto-closes on a `cdkMenuItem` trigger already —\n * this is for the mobile backdrop tap, which isn't one.\n */\n closeMenu(): void {\n this.trigger()?.close();\n }\n\n onMenuOpened(): void {\n this.isOpen.set(true);\n }\n\n onMenuClosed(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n}\n","<ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"triggerLabel()\"\n [leftIcons]=\"triggerLeftIcons()\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n/>\n\n<ng-template #menu>\n <div class=\"ul-menu__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-menu\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n <ng-content />\n </div>\n</ng-template>\n","import { Directive } from '@angular/core';\n\n/** Place on the element projected into [ul-navbar-logo] so the navbar can detect logo content. */\n@Directive({\n selector: '[ul-navbar-logo]',\n})\nexport class NavbarLogoSlotDirective {}\n\n/** Place on the element projected into [ul-navbar-search] so the navbar can show the mobile search toggle. */\n@Directive({\n selector: '[ul-navbar-search]',\n})\nexport class NavbarSearchSlotDirective {}\n\n/** Place on the element projected into [ul-navbar-avatar] so the navbar can detect avatar content. */\n@Directive({\n selector: '[ul-navbar-avatar]',\n})\nexport class NavbarAvatarSlotDirective {}\n\n/** Place on the element projected into [ul-navbar-app-name] so the navbar can detect app-name content. Only rendered when a logo slot is not projected (it sits next to the default logo image). */\n@Directive({\n selector: '[ul-navbar-app-name]',\n})\nexport class NavbarAppNameSlotDirective {}\n","import {\n Component,\n contentChild,\n computed,\n input,\n signal,\n ViewEncapsulation,\n output,\n} from '@angular/core';\n\nimport { AvatarComponent } from '../avatar/avatar';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport {\n NavbarAppNameSlotDirective,\n NavbarAvatarSlotDirective,\n NavbarLogoSlotDirective,\n NavbarSearchSlotDirective,\n} from './navbar-slot.directive';\n\n/** 'full' shows the sidebar toggle, search, and avatar; 'minimal' shows only the logo — for auth pages and other chromeless flows. See also `searchCollapsible` for whether the search slot collapses to an icon-toggle on mobile. */\nexport type NavbarVariant = 'full' | 'minimal';\n\n@Component({\n selector: 'ul-navbar',\n imports: [AvatarComponent, ButtonComponent, IconComponent],\n templateUrl: './navbar.html',\n styleUrls: ['./navbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavbarComponent {\n /** 'full' (default) shows the sidebar toggle, search, and avatar; 'minimal' shows only the logo. */\n variant = input<NavbarVariant>('full');\n\n /** Default logo link href when logo slot is not projected. */\n logoHref = input<string>('/');\n\n /** Default logo image src when logo slot is not projected. */\n logoSrc = input<string | undefined>(undefined);\n\n /** Default logo image alt when logo slot is not projected. */\n logoAlt = input<string>('logo');\n\n /** Default avatar image src when avatar slot is not projected. */\n avatarSrc = input<string | undefined>(undefined);\n\n /** Default avatar initials when avatar slot is not projected and no image. */\n avatarInitials = input<string | undefined>(undefined);\n\n /** Default avatar image alt when avatar slot is not projected. */\n avatarAlt = input<string>('');\n\n /** For aria-expanded on the toggle button */\n sidebarOpen = input<boolean>(false);\n\n /** When true, show the sidebar toggle button even when a logo slot is projected. */\n showSidebarToggle = input<boolean>(false);\n\n /** When false, the projected search slot is always rendered expanded (no icon-toggle collapse on mobile) — use for apps that want search visible and full-width at every viewport. */\n searchCollapsible = input<boolean>(true);\n\n /** Emitted when the user clicks the sidebar toggle. Parent should flip the open state. */\n sidebarToggle = output<void>();\n\n readonly logoSlot = contentChild(NavbarLogoSlotDirective);\n readonly searchSlot = contentChild(NavbarSearchSlotDirective);\n readonly avatarSlot = contentChild(NavbarAvatarSlotDirective);\n readonly appNameSlot = contentChild(NavbarAppNameSlotDirective);\n\n readonly isMinimal = computed(() => this.variant() === 'minimal');\n\n readonly hasLogoSlot = computed(() => !!this.logoSlot());\n readonly hasSearchSlot = computed(() => !this.isMinimal() && !!this.searchSlot());\n readonly showSearchToggle = computed(() => this.hasSearchSlot() && this.searchCollapsible());\n readonly hasAvatarSlot = computed(() => !this.isMinimal() && !!this.avatarSlot());\n readonly hasAppNameSlot = computed(() => !this.hasLogoSlot() && !!this.appNameSlot());\n\n readonly showToggle = computed(\n () => !this.isMinimal() && (!this.hasLogoSlot() || this.showSidebarToggle()),\n );\n\n readonly searchExpanded = signal(false);\n\n toggleSearch(): void {\n this.searchExpanded.update((v) => !v);\n }\n\n toggleSidebar(): void {\n this.sidebarToggle.emit();\n }\n}\n","<nav class=\"ul-navbar\" role=\"navigation\">\n <div class=\"ul-navbar__bar\">\n @if (showToggle()) {\n <!-- Default 'md' size, matching the search toggle below and the\n sidebar's own close button: `sm` capped the icon at 20px (the\n `.ul-btn--sm .ul-icon` rule outranks `.ul-icon-size-*`, so the icon's\n own size input cannot raise it) and gave a 32px tap target. -->\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"ul-navbar__sidebar_toggle\"\n ariaLabel=\"Open menu\"\n [attr.aria-expanded]=\"sidebarOpen()\"\n (buttonClick)=\"toggleSidebar()\"\n >\n <ul-icon icon=\"menu\" size=\"6\" />\n </ul-button>\n }\n\n <div class=\"ul-navbar__logo\">\n @if (hasLogoSlot()) {\n <ng-content select=\"[ul-navbar-logo]\" />\n } @else {\n <img [src]=\"logoSrc()\" [alt]=\"logoAlt()\" class=\"ul-navbar__logo-img\" height=\"64\" />\n @if (hasAppNameSlot()) {\n <a [href]=\"logoHref()\" class=\"ul-navbar__logo-link ul-navbar__logo-text\">\n <ng-content select=\"[ul-navbar-app-name]\" />\n </a>\n }\n }\n </div>\n\n @if (!isMinimal()) {\n <div class=\"ul-navbar__actions\">\n @if (showSearchToggle()) {\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"ul-navbar__search-toggle\"\n ariaLabel=\"Toggle search\"\n [attr.aria-expanded]=\"searchExpanded()\"\n (buttonClick)=\"toggleSearch()\"\n >\n <ul-icon icon=\"search\" size=\"6\" />\n </ul-button>\n }\n\n <div\n class=\"ul-navbar__search-wrapper\"\n [class.ul-navbar__search-wrapper--expanded]=\"searchExpanded() || !searchCollapsible()\"\n >\n <ng-content select=\"[ul-navbar-search]\" />\n </div>\n\n <div class=\"ul-navbar__avatar\">\n @if (hasAvatarSlot()) {\n <ng-content select=\"[ul-navbar-avatar]\" />\n } @else if (avatarSrc() || avatarInitials()) {\n <ul-avatar\n [src]=\"avatarSrc()\"\n [initials]=\"avatarInitials()\"\n [alt]=\"avatarAlt()\"\n size=\"md\"\n />\n }\n </div>\n </div>\n }\n </div>\n</nav>\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Extends Angular's CurrencyPipe to use the custom symbol 'ᕫ' for 'UOS' currency code.\n * For all other codes, behaves exactly like CurrencyPipe.\n */\n@Pipe({\n name: 'peCurrency',\n})\nexport class CustomCurrencyPipe extends CurrencyPipe implements PipeTransform {\n private static readonly UOS_SYMBOL = 'ᕫ';\n\n override transform(\n value: number | string,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean,\n digitsInfo?: string,\n locale?: string,\n ): string | null;\n override transform(\n value: null | undefined,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean,\n digitsInfo?: string,\n locale?: string,\n ): null;\n override transform(\n value: number | string | null | undefined,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean,\n digitsInfo?: string,\n locale?: string,\n ): string | null {\n const customDisplay = currencyCode === 'UOS' ? CustomCurrencyPipe.UOS_SYMBOL : display;\n return this.separateCurrencyAndPrice(\n super.transform(value, currencyCode, customDisplay, digitsInfo, locale),\n );\n }\n\n private separateCurrencyAndPrice(input: string | null): string | null {\n // Match non-digits at the start (currency), then the number\n const match = input?.match(/^(\\D+)?(\\d+(\\.\\d+)?)/);\n if (match) {\n const symbol = match[1] ? match[1].trim() : '';\n const price = match[2];\n // Join with a space if symbol exists\n return symbol ? `${symbol} ${price}` : price;\n }\n // Return input if no match\n return input;\n }\n}\n","import { Component, input, output, ViewEncapsulation } from '@angular/core';\n\nimport type { UiSize, UiTheme } from '../shared/ui-types';\nimport { ButtonComponent } from '../button/button';\n\nimport { CustomCurrencyPipe } from './custom-currency.pipe';\n\nexport type SalePosition = 'left' | 'right';\nexport type Currency = 'UOS' | string;\n\n@Component({\n selector: 'ul-price-button',\n imports: [ButtonComponent, CustomCurrencyPipe],\n templateUrl: './price-button.html',\n styleUrl: './price-button.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ul-price-button',\n '[class.ul-price-button--sale-left]': 'salePosition() === \"left\"',\n },\n})\nexport class PriceButtonComponent {\n // Inputs\n readonly label = input<string>(''); // Button label\n readonly size = input<UiSize>('md'); // Button size\n readonly theme = input<UiTheme>('transparent-white'); // Button theme\n readonly disabled = input<boolean>(false); // Disabled state\n readonly salePosition = input<SalePosition>('right'); // Sale badge position\n readonly price = input<number>(0); // Price (0 = free)\n readonly originalPrice = input<number>(0); // Original price\n readonly discountBasis = input<number>(0); // Discount basis\n readonly currency = input<Currency>('USD'); // Currency\n\n // Outputs\n readonly buttonClick = output<MouseEvent>(); // Click event\n\n // Methods\n protected handleClick(event: MouseEvent): void {\n // Handle click\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.buttonClick.emit(event);\n }\n}\n","<ul-button [size]=\"size()\" [theme]=\"theme()\" [disabled]=\"disabled()\" (click)=\"handleClick($event)\">\n @if (label()) {\n {{ label() }}\n } @else if (price() > 0) {\n {{ price() | peCurrency: currency() }}\n } @else {\n Free\n }\n</ul-button>\n@if (price() !== originalPrice() && discountBasis() > 0) {\n <div class=\"ul-price-button__sale\">\n <div\n class=\"ul-price-button__discount\"\n [attr.aria-label]=\"'Discount ' + discountBasis() + '% off original price'\"\n >\n -{{ discountBasis() }}%\n </div>\n <div class=\"ul-price-button__original-price\" aria-hidden=\"true\">\n {{ originalPrice() | peCurrency: currency() }}\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\n\n/**\n * Radio button for use inside a group. For Signal Forms use ul-radio-group with [formField].\n * Use [(checked)] when controlling each radio manually, or place inside ul-radio-group for [formField] binding.\n *\n * @example\n * <ul-radio value=\"option1\" name=\"my-group\" [checked]=\"isSelected\">Option 1</ul-radio>\n */\n@Component({\n selector: 'ul-radio',\n imports: [CommonModule],\n templateUrl: './radio.html',\n styleUrls: ['./radio.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class RadioComponent {\n /**\n * The value associated with this radio button.\n * This value identifies the radio button within its group.\n */\n value = input.required<string>();\n\n /**\n * The name attribute for the radio button group.\n * All radio buttons in the same group should share the same name.\n */\n name = input.required<string>();\n\n /**\n * Whether the radio button is disabled.\n * @default false\n */\n disabled = input<boolean, boolean>(false, { transform: booleanAttribute });\n\n /**\n * Whether the radio button is currently checked/selected.\n * This is a two-way binding that can be used with [(checked)].\n */\n checked = model<boolean>(false);\n\n /**\n * Unique identifier for the radio button.\n * If not provided, one will be auto-generated.\n */\n id = input<string>();\n\n /**\n * Event emitted when the radio button is clicked.\n * Useful for additional click handling beyond the default radio behavior.\n */\n click = output<MouseEvent>();\n\n /**\n * Emitted when this radio is selected (checked becomes true).\n * Used by ul-radio-group to sync the group value.\n */\n selected = output<string>();\n\n /**\n * Internal signal for the unique ID\n */\n private readonly uniqueId = signal(`ul-radio-${Math.random().toString(36).substr(2, 9)}`);\n\n /**\n * Computed ID that uses provided ID or falls back to generated unique ID\n */\n readonly radioId = computed(() => this.id() || this.uniqueId());\n\n /**\n * Computed ARIA attributes for accessibility\n */\n readonly ariaAttributes = computed(() => ({\n 'aria-checked': this.checked(),\n 'aria-disabled': this.disabled(),\n role: 'radio' as const,\n }));\n\n /**\n * Handles the radio button change event.\n * Updates the checked state.\n *\n * @param event - The change event from the input element\n */\n onRadioChange(event: Event): void {\n if (this.disabled()) {\n return;\n }\n\n const input = event.target as HTMLInputElement;\n\n this.checked.set(input.checked);\n if (input.checked) {\n this.selected.emit(this.value());\n }\n }\n\n /**\n * Handles click events on the radio button.\n * Useful for additional click handling beyond the default radio behavior.\n *\n * @param event - The click event\n */\n onRadioClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n return;\n }\n\n this.click.emit(event);\n }\n\n /**\n * Handles keyboard events for accessibility.\n * Supports Space and Enter keys for selection.\n *\n * @param event - The keyboard event\n */\n onKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.checked.set(true);\n }\n }\n}\n","<label class=\"ul-radio-container\" [for]=\"radioId()\" [class.ul-radio-disabled]=\"disabled()\">\n <input\n type=\"radio\"\n [id]=\"radioId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-checked]=\"ariaAttributes()['aria-checked']\"\n [attr.aria-disabled]=\"ariaAttributes()['aria-disabled']\"\n [attr.role]=\"ariaAttributes()['role']\"\n (change)=\"onRadioChange($event)\"\n (click)=\"onRadioClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n class=\"ul-radio-input\"\n />\n <span class=\"ul-radio-label\">\n <ng-content />\n </span>\n</label>\n","import { Component, computed, input, model } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport { RadioComponent } from './radio';\n\nexport interface RadioGroupOption {\n value: string;\n label: string;\n}\n\n/**\n * Radio group that holds the selected option value. Implements FormValueControl for Signal Forms [formField].\n * Use [(value)] or [formField]=\"myForm().choice\". Renders ul-radio per option; value is the selected option's value.\n */\n@Component({\n selector: 'ul-radio-group',\n imports: [RadioComponent, FormFieldLabelComponent, FormFieldHelperComponent],\n template: `\n <div\n class=\"ul-radio-group\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n role=\"radiogroup\"\n [attr.aria-label]=\"label()\"\n >\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n size=\"md\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n <div class=\"ul-radio-group__radios\" [id]=\"ids.controlId\">\n @for (opt of options(); track opt.value) {\n <ul-radio\n [name]=\"name()\"\n [value]=\"opt.value\"\n [checked]=\"value() === opt.value\"\n [disabled]=\"disabled()\"\n (selected)=\"value.set(opt.value)\"\n >\n {{ opt.label }}\n </ul-radio>\n }\n </div>\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"\n errorText() || (hasError() && errors().length ? (errors()[0].message ?? null) : null)\n \"\n [error]=\"hasError()\"\n />\n </div>\n `,\n styleUrls: ['./radio-group.scss'],\n})\nexport class RadioGroupComponent implements FormValueControl<string | null> {\n readonly name = input.required<string>();\n readonly options = input<RadioGroupOption[]>([]);\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n readonly value = model<string | null>(null);\n\n protected readonly ids = createFormFieldIds('ul-radio-group');\n protected readonly hasError = computed(() => this.error() || this.invalid());\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n}\n","import { booleanAttribute, Component, computed, input } from '@angular/core';\n\ntype RadialSize = 96 | 64 | 48 | 32 | 24 | 20 | 16;\n\nconst lineWidths = {\n 96: 6,\n 64: 6,\n 48: 5,\n 32: 4,\n 24: 4,\n 20: 3,\n 16: 3,\n};\n\n@Component({\n selector: 'ul-radial',\n templateUrl: './radial.html',\n styleUrl: './radial.scss',\n})\nexport class RadialComponent {\n // size of the radial component in px\n readonly size = input<RadialSize>(96);\n // if true, the radial will rotate indefinitely\n readonly infinite = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n // percentage of the radial that is filled\n readonly percentage = input<number>(0);\n\n // optional accessible label for the radial\n readonly ariaLabel = input<string | null>(null);\n\n readonly lineWidth = computed(() => lineWidths[this.size()]);\n}\n","<div\n class=\"ul-radial\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-valuenow]=\"percentage()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [class.ul-radial--infinite]=\"infinite()\"\n [style.width.px]=\"size()\"\n [style.padding.px]=\"lineWidth()\"\n [style.--ul-radial-percentage]=\"percentage() + '%'\"\n></div>\n","import {\n Component,\n computed,\n inject,\n input,\n SecurityContext,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nexport type RichTextTone = 'default' | 'muted' | 'inverse';\nexport type RichTextSize = 'body-m' | 'body-l';\n\n/**\n * Display-only rich text component. Renders sanitized HTML from the API (or from\n * ul-rich-text-editor) with no Quill dependency. HTML is sanitized before rendering.\n *\n * Use [content] for HTML strings (e.g. from API or editor), or project markup via\n * ng-content when content is empty.\n */\n@Component({\n selector: 'ul-rich-text',\n template: ` @if (content()) {\n <div\n class=\"ul-rich-text\"\n [class.ul-rich-text--body-m]=\"size() === 'body-m'\"\n [innerHTML]=\"sanitizedContent()\"\n ></div>\n } @else {\n <div class=\"ul-rich-text\" [class.ul-rich-text--body-m]=\"size() === 'body-m'\">\n <ng-content />\n </div>\n }`,\n host: {\n class: 'ul-rich-text-host',\n },\n encapsulation: ViewEncapsulation.None,\n})\nexport class RichTextComponent {\n readonly content = input<string | null>(null);\n readonly size = input<RichTextSize>('body-l');\n\n private readonly domSanitizer = inject(DomSanitizer);\n\n protected readonly sanitizedContent = computed(() => {\n const html = this.content() ?? '';\n return this.domSanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n });\n}\n","import { Component, computed, input } from '@angular/core';\n\n/**\n * Presentational step indicator for a multi-step flow (e.g. onboarding,\n * checkout) — dots connected by a line, current/completed/upcoming states.\n * Purely visual: it has no notion of step content or navigation, the\n * consumer owns that. `currentStep` is 1-indexed.\n */\n@Component({\n selector: 'ul-stepper',\n template: `\n <ol class=\"ul-stepper\" [attr.aria-label]=\"ariaLabel()\">\n @for (step of stepIndexes(); track step) {\n <li\n class=\"ul-stepper__item\"\n [class.ul-stepper__item--completed]=\"step < currentStep()\"\n [class.ul-stepper__item--current]=\"step === currentStep()\"\n [attr.aria-current]=\"step === currentStep() ? 'step' : null\"\n >\n <span class=\"ul-stepper__dot\"></span>\n @if (labels()[step - 1]) {\n <span class=\"ul-stepper__label\">{{ labels()[step - 1] }}</span>\n }\n </li>\n }\n </ol>\n `,\n styleUrls: ['./stepper.scss'],\n})\nexport class StepperComponent {\n readonly totalSteps = input.required<number>();\n readonly currentStep = input.required<number>();\n readonly labels = input<string[]>([]);\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly stepIndexes = computed(() =>\n Array.from({ length: this.totalSteps() }, (_, i) => i + 1),\n );\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\n\nexport type ToastKind = 'info' | 'success' | 'warning' | 'error';\n\nexport const toastIcon = (kind: ToastKind) => {\n switch (kind) {\n case 'success':\n return 'check_circle';\n case 'warning':\n return 'alert';\n case 'error':\n return 'cross_circle';\n case 'info':\n return 'info';\n }\n};\n\nexport interface ToastConfig {\n readonly id: string;\n readonly message: string;\n readonly title?: string;\n readonly kind: ToastKind;\n readonly dismissible: boolean;\n /**\n * Auto-dismiss delay in milliseconds. When null or 0, the toast\n * will stay visible until the user dismisses it explicitly.\n */\n readonly durationMs: number | null;\n readonly showIcon: boolean;\n}\n\nexport type ToastWithRole = {\n readonly id: string;\n readonly title?: string;\n readonly message: string;\n readonly kind: ToastKind;\n readonly dismissible: boolean;\n readonly role: 'status' | 'alert';\n readonly icon: string;\n readonly showIcon: boolean;\n};\n\ntype NewToastConfig = Omit<ToastConfig, 'id'>;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n private readonly toastsSignal = signal<ToastConfig[]>([]);\n\n readonly toasts = computed<ToastWithRole[]>(() =>\n this.toastsSignal().map((toast) => ({\n id: toast.id,\n title: toast.title,\n message: toast.message,\n kind: toast.kind,\n dismissible: toast.dismissible,\n role: toast.kind === 'error' || toast.kind === 'warning' ? 'alert' : 'status',\n icon: toastIcon(toast.kind),\n showIcon: toast.showIcon,\n })),\n );\n\n show(message: string, config?: Partial<NewToastConfig>): string {\n const id = this.createId();\n const merged: ToastConfig = {\n id,\n message,\n title: config?.title,\n kind: config?.kind ?? 'info',\n dismissible: config?.dismissible ?? true,\n durationMs: config?.durationMs ?? 5000,\n showIcon: config?.showIcon ?? false,\n };\n\n this.toastsSignal.update((current) => [...current, merged]);\n\n if (merged.durationMs && merged.durationMs > 0) {\n window.setTimeout(() => {\n this.dismiss(id);\n }, merged.durationMs);\n }\n\n return id;\n }\n\n info(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'info' });\n }\n\n success(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'success' });\n }\n\n warning(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'warning' });\n }\n\n error(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'error' });\n }\n\n dismiss(id: string): void {\n this.toastsSignal.update((current) => current.filter((toast) => toast.id !== id));\n }\n\n clear(): void {\n this.toastsSignal.set([]);\n }\n\n private createId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n // eslint-disable-next-line no-restricted-globals\n return crypto.randomUUID();\n }\n\n return `ul-toast-${Math.random().toString(36).slice(2, 11)}`;\n }\n}\n\n","import { Component, ViewEncapsulation, computed, inject } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nimport { ToastService, ToastWithRole } from './toast.service';\n\n@Component({\n selector: 'ul-toast-container',\n imports: [ButtonComponent, IconComponent],\n templateUrl: './toast.html',\n styleUrl: './toast.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ToastContainerComponent {\n private readonly toastService = inject(ToastService);\n readonly toasts = this.toastService.toasts;\n\n trackById(_: number, toast: ToastWithRole): string {\n return toast.id;\n }\n\n dismiss(id: string): void {\n this.toastService.dismiss(id);\n }\n}\n","<div class=\"ul-toast-container\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toasts(); track trackById($index, toast)) {\n <section class=\"ul-toast ul-toast--{{ toast.kind }}\" [attr.role]=\"toast.role\">\n <div class=\"ul-toast__icon\">\n @if (toast.showIcon) {\n <ul-icon [icon]=\"toast.icon\" size=\"6\" iconWeight=\"bold\" />\n }\n </div>\n\n <div class=\"ul-toast__body\">\n @if (toast.title) {\n <h3 class=\"ul-toast__title\">\n {{ toast.title }}\n </h3>\n }\n <p class=\"ul-toast__message\">\n {{ toast.message }}\n </p>\n </div>\n\n @if (toast.dismissible) {\n <ul-button\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n class=\"ul-toast__close\"\n ariaLabel=\"Dismiss notification\"\n (buttonClick)=\"dismiss(toast.id)\"\n >\n <ul-icon icon=\"cross\" size=\"5\" />\n </ul-button>\n }\n </section>\n }\n</div>\n","import { Component, computed, input, model } from '@angular/core';\nimport type {\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiCheckboxSize } from '../shared/ui-types';\n\n/**\n * On/off switch. Implements FormCheckboxControl for Signal Forms [formField],\n * the switch equivalent of ul-checkbox. Prefer this over ul-checkbox when the\n * change takes effect immediately (e.g. a setting) rather than being\n * submitted later with the rest of a form.\n * Use [(checked)] or [formField]=\"myForm().notificationsEnabled\". No value property.\n */\n@Component({\n selector: 'ul-toggle',\n imports: [FormFieldHelperComponent],\n template: `\n <div\n class=\"ul-toggle ul-toggle--{{ size() }}\"\n [class.ul-toggle--error]=\"hasError()\"\n [class.ul-toggle--disabled]=\"disabled()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n <label\n class=\"ul-toggle__row\"\n [class.ul-toggle__row--sm]=\"size() === 'sm'\"\n [class.ul-toggle__row--lg]=\"size() === 'lg'\"\n [class.ul-toggle__row--error]=\"hasError()\"\n [attr.for]=\"ids.controlId\"\n >\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"ul-toggle__input\"\n [id]=\"ids.controlId\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n (change)=\"onChange($event)\"\n (keydown.enter)=\"onEnter($event)\"\n />\n <span class=\"ul-toggle__track\">\n <span class=\"ul-toggle__thumb\"></span>\n </span>\n <span class=\"ul-toggle__label\">\n @if (label()) {\n {{ label() }}\n }\n <ng-content />\n </span>\n </label>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n </div>\n `,\n styleUrls: ['./toggle.scss'],\n})\nexport class ToggleComponent implements FormCheckboxControl {\n readonly checked = model<boolean>(false);\n\n readonly disabled = model<boolean>(false);\n readonly size = input<UiCheckboxSize>('default');\n /** Rendered inline next to the switch (not stacked above it, unlike ul-input/ul-checkbox's form-field label). Use ng-content instead for richer projected content. */\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly errorText = input<string | null>(null);\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n protected readonly ids = createFormFieldIds('ul-toggle');\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly resolvedErrorText = computed(\n () =>\n this.errorText() ||\n (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null),\n );\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.resolvedErrorText(),\n ),\n );\n\n onChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n\n onEnter(event: Event): void {\n if (this.disabled()) return;\n event.preventDefault();\n this.checked.set(!this.checked());\n }\n}\n","import {\n Component,\n HostBinding,\n HostListener,\n ViewEncapsulation,\n input,\n signal,\n} from '@angular/core';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Component({\n selector: 'ul-tooltip',\n templateUrl: './tooltip.html',\n styleUrl: './tooltip.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class TooltipComponent {\n text = input<string>('');\n position = input<TooltipPosition>('top');\n disabled = input<boolean>(false);\n showDelay = input<number>(150);\n hideDelay = input<number>(100);\n\n private readonly visible = signal<boolean>(false);\n private showTimeoutId: number | null = null;\n private hideTimeoutId: number | null = null;\n\n readonly tooltipId = `ul-tooltip-${Math.random().toString(36).slice(2, 11)}`;\n\n @HostBinding('attr.aria-describedby')\n get ariaDescribedBy(): string | null {\n return this.visible() && !!this.text() ? this.tooltipId : null;\n }\n\n @HostListener('mouseenter')\n @HostListener('focusin')\n handlePointerEnter(): void {\n if (this.disabled() || !this.text()) return;\n this.scheduleShow();\n }\n\n @HostListener('mouseleave')\n @HostListener('focusout')\n handlePointerLeave(): void {\n this.scheduleHide();\n }\n\n readonly isVisible = this.visible.asReadonly();\n\n private scheduleShow(): void {\n this.cancelHide();\n if (this.visible()) return;\n\n const delay = this.showDelay();\n if (delay <= 0) {\n this.visible.set(true);\n return;\n }\n\n this.showTimeoutId = window.setTimeout(() => {\n this.visible.set(true);\n }, delay);\n }\n\n private scheduleHide(): void {\n this.cancelShow();\n if (!this.visible()) return;\n\n const delay = this.hideDelay();\n if (delay <= 0) {\n this.visible.set(false);\n return;\n }\n\n this.hideTimeoutId = window.setTimeout(() => {\n this.visible.set(false);\n }, delay);\n }\n\n private cancelShow(): void {\n if (this.showTimeoutId !== null) {\n window.clearTimeout(this.showTimeoutId);\n this.showTimeoutId = null;\n }\n }\n\n private cancelHide(): void {\n if (this.hideTimeoutId !== null) {\n window.clearTimeout(this.hideTimeoutId);\n this.hideTimeoutId = null;\n }\n }\n}\n","<span class=\"ul-tooltip-wrapper\">\n <ng-content />\n\n @if (isVisible() && text()) {\n <span\n class=\"ul-tooltip ul-tooltip--{{ position() }}\"\n role=\"tooltip\"\n [attr.id]=\"tooltipId\"\n >\n {{ text() }}\n </span>\n }\n</span>\n\n","import { signal } from '@angular/core';\n\n/**\n * Open/focus/highlight state and keyboard navigation shared by combobox-\n * style inputs (a text field paired with a listbox of options) —\n * `ul-search-select` (closed list, one selection) and `ul-search-input`\n * (free text plus suggestions/results) need identical open/close timing and\n * arrow-key/Escape mechanics despite having different value semantics. This\n * holds only that shared mechanics; each consumer still owns its own list,\n * selection, and what Enter does when nothing is highlighted.\n */\nexport class ComboboxState {\n readonly isOpen = signal(false);\n readonly isFocused = signal(false);\n readonly highlightedIndex = signal(0);\n\n private closeTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Cancels any pending blur-close and opens immediately — for focus/typing. */\n open(): void {\n this.cancelScheduledClose();\n this.isFocused.set(true);\n this.isOpen.set(true);\n }\n\n /**\n * Closes after a short delay instead of immediately, so a mousedown on an\n * option (which fires before the field's blur) can still register before\n * the panel disappears. `onClosed` runs once the delay elapses, unless a\n * subsequent `open()`/`close()` cancels it first.\n */\n scheduleClose(onClosed?: () => void, delay = 150): void {\n this.isFocused.set(false);\n this.closeTimeout = setTimeout(() => {\n this.closeTimeout = null;\n this.isOpen.set(false);\n onClosed?.();\n }, delay);\n }\n\n /** Closes immediately — for selecting an option, submitting, or Escape. */\n close(): void {\n this.cancelScheduledClose();\n this.isOpen.set(false);\n }\n\n cancelScheduledClose(): void {\n if (this.closeTimeout != null) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n }\n }\n\n resetHighlight(): void {\n this.highlightedIndex.set(0);\n }\n\n /**\n * Handles ArrowDown/ArrowUp (cycling over `listLength`) and Escape\n * (closes). Returns whether it handled the key, so the caller's own\n * keydown handler knows whether to fall through to its own Enter logic —\n * Enter is deliberately not handled here, since selecting the highlighted\n * option vs. falling back to something else (e.g. `ul-search-input`'s\n * free-text submit) is caller-specific.\n */\n handleNavigationKey(event: KeyboardEvent, listLength: number): boolean {\n switch (event.key) {\n case 'ArrowDown':\n if (listLength === 0) return false;\n event.preventDefault();\n this.highlightedIndex.set((this.highlightedIndex() + 1) % listLength);\n return true;\n case 'ArrowUp':\n if (listLength === 0) return false;\n event.preventDefault();\n this.highlightedIndex.set(\n this.highlightedIndex() <= 0 ? listLength - 1 : this.highlightedIndex() - 1,\n );\n return true;\n case 'Escape':\n event.preventDefault();\n this.close();\n return true;\n default:\n return false;\n }\n }\n}\n\n/** DOM id for the option at `index` inside the listbox owned by `controlId`. */\nexport function comboboxOptionId(controlId: string, index: number): string {\n return `${controlId}-option-${index}`;\n}\n\n/**\n * `aria-activedescendant` value for a combobox's current highlight, or\n * `undefined` when there's nothing to point at (empty list).\n */\nexport function comboboxActiveDescendantId(\n controlId: string,\n listLength: number,\n highlightedIndex: number,\n): string | undefined {\n if (listLength === 0) return undefined;\n const safeIndex = Math.min(Math.max(0, highlightedIndex), listLength - 1);\n return comboboxOptionId(controlId, safeIndex);\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { map } from 'rxjs';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { ListItemComponent } from '../list-item/list-item';\nimport { ModalComponent } from '../modal/modal';\nimport { comboboxActiveDescendantId, comboboxOptionId, ComboboxState } from '../shared/combobox';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport interface SearchSuggestion {\n value: string;\n label: string;\n icon?: IconName;\n}\n\n/**\n * Free-text search box with a results panel: `suggestions` (e.g. recent\n * searches) while the query is empty, swapped for `results` as soon as the\n * user types. On desktop the panel is an anchored dropdown below the field.\n * Below the phone breakpoint, tapping the field opens a full-screen `ul-modal`\n * (via `fullScreenInMobile`) instead — the same pattern as X/Twitter, Google,\n * etc.: a back button and the real field pinned to the top, results filling\n * the rest of the screen edge to edge, no card, no backdrop. `ul-modal`\n * supplies the focus trap, dialog role, and Escape-to-close; this component\n * just projects its own header/results as the modal's body content.\n * Consumers never branch on viewport or manage this themselves.\n *\n * Implements FormValueControl for Signal Forms. Use `[(value)]` for two-way\n * binding.\n */\n@Component({\n selector: 'ul-search-input',\n imports: [\n NgTemplateOutlet,\n InputComponent,\n IconComponent,\n ButtonComponent,\n ListItemComponent,\n ModalComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './search-input.html',\n styleUrls: ['./search-input.scss'],\n})\nexport class SearchInputComponent implements FormValueControl<string> {\n readonly size = input<UiSize>('md');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly placeholder = input<string>('Search...');\n /** Aria-label for the back button shown in the mobile takeover. */\n readonly backLabel = input<string>('Back');\n /** Aria-label for the clear button shown in the mobile takeover when query is not empty. */\n readonly clearLabel = input<string>('Clear');\n /** Shown while the query is empty — e.g. recent searches. Replaced by `results` as soon as the user types. The consumer owns the data/persistence; this component only renders and reports selection. */\n readonly suggestions = input<SearchSuggestion[]>([]);\n /** Heading shown above `suggestions`, e.g. \"Recent searches\". Not shown once `results` takes over. */\n readonly suggestionsLabel = input<string | null>(null);\n /** Shown once the query is non-empty — e.g. live search results. The consumer computes/fetches these as `value` changes (via `[(value)]`/`valueChange`). */\n readonly results = input<SearchSuggestion[]>([]);\n /**\n * When set, always projects this arbitrary content (e.g. rich cards with\n * images/prices) into the panel instead of the built-in plain-text rows —\n * for both `suggestions` (query empty) and `results` (query non-empty).\n * The consumer's own template is responsible for varying its content by\n * query if it needs to. Arrow-key/Enter option-highlighting is skipped\n * while this is set — Enter always falls through to `searchSubmit` since\n * the projected content owns its own selection interaction.\n */\n readonly resultsTemplate = input<TemplateRef<unknown> | null>(null);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n readonly value = model<string>('');\n\n /** Emitted when the user picks a suggestion, by click or keyboard. */\n readonly suggestionSelected = output<SearchSuggestion>();\n /** Emitted on Enter when no suggestion is highlighted — the free-typed query. */\n readonly searchSubmit = output<string>();\n\n protected readonly ids = createFormFieldIds('ul-search-input');\n /** Open/focus/highlight state and arrow-key/Escape mechanics shared with ul-search-select. */\n protected readonly combobox = new ComboboxState();\n\n private readonly mobileInput = viewChild<InputComponent>('mobileInput');\n\n /** Phone-sized viewport — below this, tapping the field opens the full-screen takeover instead of the anchored dropdown. */\n protected readonly isMobile = toSignal(\n inject(BreakpointObserver)\n .observe('(max-width: 767px)')\n .pipe(map((state) => state.matches)),\n { initialValue: false },\n );\n\n protected readonly listId = `${this.ids.controlId}-list`;\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n /** Whether the query is non-empty — `results` replaces `suggestions` (and its heading) once true. */\n protected readonly hasQuery = computed(() => this.value().trim().length > 0);\n protected readonly activeList = computed(() =>\n this.hasQuery() ? this.results() : this.suggestions(),\n );\n protected readonly activeListLabel = computed(() =>\n this.hasQuery() ? null : this.suggestionsLabel(),\n );\n\n protected readonly hasCustomResults = computed(() => !!this.resultsTemplate());\n\n protected readonly shouldShowPanel = computed(\n () => this.combobox.isOpen() && (this.activeList().length > 0 || this.hasCustomResults()),\n );\n\n protected readonly optionId = (index: number) => comboboxOptionId(this.ids.controlId, index);\n\n protected readonly activeDescendantId = computed(() => {\n if (!this.shouldShowPanel() || this.hasCustomResults()) return undefined;\n return comboboxActiveDescendantId(\n this.ids.controlId,\n this.activeList().length,\n this.combobox.highlightedIndex(),\n );\n });\n\n onValueChange(text: string): void {\n this.value.set(text);\n this.combobox.isOpen.set(true);\n this.combobox.resetHighlight();\n }\n\n onInputFocus(): void {\n this.combobox.open();\n }\n\n onInputBlur(): void {\n this.combobox.scheduleClose();\n }\n\n /** The visible field on mobile is a read-only trigger — typing happens in the takeover's own field, focused once it renders. */\n openMobileSearch(): void {\n this.combobox.isOpen.set(true);\n setTimeout(() => this.mobileInput()?.focus());\n }\n\n closeMobileSearch(): void {\n this.combobox.close();\n }\n\n clearInput(): void {\n this.onValueChange('');\n }\n\n onKeydown(event: KeyboardEvent): void {\n const list = this.activeList();\n const panelActive = this.shouldShowPanel() && list.length > 0;\n if (panelActive && this.combobox.handleNavigationKey(event, list.length)) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n if (panelActive) {\n this.selectSuggestion(list[this.combobox.highlightedIndex()]);\n } else {\n this.submitSearch();\n }\n }\n }\n\n selectSuggestion(suggestion: SearchSuggestion): void {\n this.combobox.close();\n this.value.set(suggestion.label);\n this.suggestionSelected.emit(suggestion);\n }\n\n private submitSearch(): void {\n this.combobox.close();\n this.searchSubmit.emit(this.value());\n }\n}\n","<ng-template #resultsList>\n @if (activeListLabel()) {\n <div class=\"ul-search-input__list-label\" role=\"presentation\">{{ activeListLabel() }}</div>\n }\n @for (result of activeList(); track result.value; let i = $index) {\n <div\n class=\"ul-search-input__option\"\n [class.ul-search-input__option--highlighted]=\"combobox.highlightedIndex() === i\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"value() === result.label\"\n (mousedown)=\"selectSuggestion(result)\"\n >\n <ul-list-item theme=\"ghost-white\" [hideFocusOutline]=\"true\">\n @if (result.icon) {\n <ng-container ul-list-item-before-label>\n <ul-icon size=\"5\" [icon]=\"result.icon\" />\n </ng-container>\n }\n <ng-container ul-list-item-label>{{ result.label }}</ng-container>\n </ul-list-item>\n </div>\n }\n</ng-template>\n\n<div\n class=\"ul-search-input ul-search-input--{{ size() }}\"\n [class.ul-search-input--error]=\"hasError()\"\n [class.ul-search-input--disabled]=\"disabled()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"false\"\n />\n\n @if (isMobile()) {\n <ul-input\n [controlId]=\"ids.controlId\"\n [value]=\"value()\"\n [readOnly]=\"true\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n (click)=\"openMobileSearch()\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n <ul-modal [(open)]=\"combobox.isOpen\" [fullScreenInMobile]=\"true\" [showCloseButton]=\"false\">\n <div\n class=\"ul-search-input__combobox ul-search-input__combobox--takeover\"\n role=\"combobox\"\n [attr.aria-expanded]=\"shouldShowPanel()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <div class=\"ul-search-input__header\">\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"backLabel()\"\n (buttonClick)=\"closeMobileSearch()\"\n >\n <ul-icon icon=\"arrow_left\" size=\"6\" />\n </ul-button>\n\n <ul-input\n #mobileInput\n class=\"ul-search-input__field\"\n [value]=\"value()\"\n (valueChange)=\"onValueChange($event)\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-left-elements>\n <ul-icon icon=\"search\" size=\"4\" />\n </ng-container>\n\n <ng-container ul-input-right-elements>\n @if (hasQuery()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"clearLabel()\"\n (buttonClick)=\"clearInput()\"\n >\n <ul-icon icon=\"cross\" size=\"4\" />\n </ul-button>\n }\n </ng-container>\n </ul-input>\n </div>\n\n @if (shouldShowPanel()) {\n <div\n class=\"ul-search-input__list ul-search-input__list--takeover ul-scrollable\"\n [id]=\"listId\"\n [attr.role]=\"hasCustomResults() ? null : 'listbox'\"\n [attr.aria-label]=\"hasCustomResults() ? null : activeListLabel()\"\n >\n @if (hasCustomResults()) {\n <ng-container *ngTemplateOutlet=\"resultsTemplate()!\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"resultsList\" />\n }\n </div>\n }\n </div>\n </ul-modal>\n } @else {\n <div\n class=\"ul-search-input__combobox\"\n role=\"combobox\"\n [attr.aria-expanded]=\"shouldShowPanel()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <ul-input\n [controlId]=\"ids.controlId\"\n [value]=\"value()\"\n (valueChange)=\"onValueChange($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-left-elements>\n <ul-icon icon=\"search\" size=\"4\" />\n </ng-container>\n\n <ng-container ul-input-right-elements>\n @if (hasQuery()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"clearLabel()\"\n (buttonClick)=\"clearInput()\"\n >\n <ul-icon icon=\"cross\" size=\"4\" />\n </ul-button>\n }\n </ng-container>\n </ul-input>\n\n @if (shouldShowPanel()) {\n <div\n class=\"ul-search-input__list ul-scrollable\"\n [id]=\"listId\"\n [attr.role]=\"hasCustomResults() ? null : 'listbox'\"\n [attr.aria-label]=\"hasCustomResults() ? null : activeListLabel()\"\n >\n @if (hasCustomResults()) {\n <ng-container *ngTemplateOutlet=\"resultsTemplate()!\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"resultsList\" />\n }\n </div>\n }\n </div>\n }\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { Component, computed, input, model, signal } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { IconComponent } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { ListItemComponent } from '../list-item/list-item';\nimport { comboboxActiveDescendantId, comboboxOptionId, ComboboxState } from '../shared/combobox';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport interface SearchSelectOption {\n label: string;\n value: string;\n}\n\n/**\n * Combobox: search input with filterable dropdown. User types to filter options and selects a result.\n * Implements FormValueControl for use with Signal Forms [formField]. Use [(value)] for two-way binding.\n */\n@Component({\n selector: 'ul-search-select',\n imports: [\n InputComponent,\n IconComponent,\n ListItemComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './search-select.html',\n styleUrls: ['./search-select.scss'],\n})\nexport class SearchSelectComponent implements FormValueControl<string | null> {\n readonly size = input<UiSize>('md');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('Search...');\n readonly options = input<SearchSelectOption[]>([]);\n readonly minCharsToOpen = input<number>(0);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n readonly value = model<string | null>(null);\n\n protected readonly ids = createFormFieldIds('ul-search-select');\n protected readonly query = signal('');\n /** Open/focus/highlight state and arrow-key/Escape mechanics shared with ul-search-input. */\n protected readonly combobox = new ComboboxState();\n\n protected readonly listId = `${this.ids.controlId}-list`;\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n protected readonly selectedOption = computed(() => {\n const v = this.value();\n if (v == null) return null;\n return this.options().find((opt) => opt.value === v) ?? null;\n });\n\n protected readonly selectedLabel = computed(() => this.selectedOption()?.label ?? '');\n\n protected readonly filteredOptions = computed(() => {\n const q = this.query().trim().toLowerCase();\n const opts = this.options();\n if (!q) return opts;\n return opts.filter((opt) => opt.label.toLowerCase().includes(q));\n });\n\n protected readonly displayText = computed(() => {\n if (this.combobox.isOpen()) return this.query();\n if (this.value() != null) return this.selectedLabel();\n return this.query();\n });\n\n protected readonly shouldShowPanel = computed(() => {\n if (!this.combobox.isOpen()) return false;\n const min = this.minCharsToOpen();\n return this.query().trim().length >= min;\n });\n\n protected readonly hasNoResults = computed(\n () => this.shouldShowPanel() && this.filteredOptions().length === 0,\n );\n\n protected readonly optionId = (index: number) => comboboxOptionId(this.ids.controlId, index);\n\n protected readonly activeDescendantId = computed(() =>\n comboboxActiveDescendantId(\n this.ids.controlId,\n this.filteredOptions().length,\n this.combobox.highlightedIndex(),\n ),\n );\n\n onInputValueChange(text: string): void {\n this.query.set(text);\n this.combobox.isOpen.set(true);\n this.combobox.resetHighlight();\n if (this.value() != null && text !== this.selectedLabel()) {\n this.value.set(null);\n }\n }\n\n onInputFocus(): void {\n this.combobox.open();\n if (this.value() != null) this.query.set(this.selectedLabel());\n this.combobox.resetHighlight();\n }\n\n onInputBlur(): void {\n this.combobox.scheduleClose(() => {\n if (this.value() != null) this.query.set(this.selectedLabel());\n });\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.shouldShowPanel()) return;\n const list = this.filteredOptions();\n if (list.length === 0) return;\n\n if (this.combobox.handleNavigationKey(event, list.length)) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectOption(list[this.combobox.highlightedIndex()]);\n }\n }\n\n selectOption(opt: SearchSelectOption): void {\n this.combobox.close();\n this.value.set(opt.value);\n this.query.set(opt.label);\n }\n}\n","<div\n class=\"ul-search-select ul-search-select--{{ size() }}\"\n [class.ul-search-select--open]=\"combobox.isOpen()\"\n [class.ul-search-select--error]=\"hasError()\"\n [class.ul-search-select--disabled]=\"disabled()\"\n [class.ul-search-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div\n class=\"ul-search-select__control\"\n [class.ul-search-select__control--focused]=\"combobox.isFocused()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"combobox.isOpen()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <ul-input\n [controlId]=\"ids.controlId\"\n [value]=\"displayText()\"\n (valueChange)=\"onInputValueChange($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n @if (shouldShowPanel()) {\n <div\n class=\"ul-search-select__list ul-scrollable\"\n [class.ul-search-select__list--empty]=\"hasNoResults()\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (hasNoResults()) {\n <div class=\"ul-search-select__empty\" role=\"status\">No results</div>\n } @else {\n @for (opt of filteredOptions(); track opt.value; let i = $index) {\n <div\n class=\"ul-search-select__option\"\n [class.ul-search-select__option--highlighted]=\"combobox.highlightedIndex() === i\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"value() === opt.value\"\n (mousedown)=\"selectOption(opt)\"\n >\n <ul-list-item\n theme=\"ghost-white\"\n [selected]=\"value() === opt.value\"\n [hideFocusOutline]=\"true\"\n >\n <ng-container ul-list-item-label>{{ opt.label }}</ng-container>\n </ul-list-item>\n </div>\n }\n }\n </div>\n }\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { DropdownComponent, DropdownItem } from '../dropdown/dropdown';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\nimport type { ListItemTheme } from '../list-item/list-item';\n\nexport interface SelectOption extends DropdownItem {\n /** Required value associated with the option */\n value: string;\n}\n\n/**\n * Form-friendly select built on the dropdown. Implements FormValueControl for Signal Forms [formField].\n * Use [(value)] or [formField]=\"myForm().country\".\n *\n * @example\n * <ul-select label=\"Sort by\" [options]=\"options\" [(value)]=\"selected\" />\n */\n@Component({\n selector: 'ul-select',\n imports: [DropdownComponent, FormFieldLabelComponent, FormFieldHelperComponent],\n templateUrl: './select.html',\n styleUrls: ['./select.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SelectComponent implements FormValueControl<string | null> {\n readonly size = input<UiSize>('md');\n readonly theme = input<ListItemTheme>('transparent-white');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('Select an option');\n readonly options = input<SelectOption[]>([]);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched when the dropdown closes */\n readonly touch = output<void>();\n\n readonly value = model<string | null>(null);\n protected readonly selectedIndex = model<number>(0);\n\n protected readonly ids = createFormFieldIds('ul-select');\n\n protected readonly items = computed<DropdownItem[]>(() => {\n const opts = this.options();\n if (!opts.length) return [];\n return opts.map((option) => ({\n label: option.label ?? option.value,\n value: option.value,\n leftIcons: option.leftIcons,\n rightIcons: option.rightIcons,\n disabled: option.disabled,\n }));\n });\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n constructor() {\n // Keep selectedIndex in sync when value or options change\n effect(() => {\n const currentValue = this.value();\n const options = this.options();\n\n if (currentValue == null) {\n this.selectedIndex.set(0);\n return;\n }\n\n const index = options.findIndex((opt) => opt.value === currentValue);\n this.selectedIndex.set(index >= 0 ? index : 0);\n });\n }\n\n /** Handles index changes coming from the dropdown */\n protected onSelectedIndexChange(index: number): void {\n const options = this.options();\n const option = options[index];\n\n this.selectedIndex.set(index);\n this.value.set(option?.value ?? null);\n }\n\n protected onDropdownClosed(): void {\n this.touch.emit();\n }\n}\n","<div\n class=\"ul-select ul-select--{{ size() }}\"\n [class.ul-select--disabled]=\"disabled()\"\n [class.ul-select--error]=\"hasError()\"\n [class.ul-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div\n class=\"ul-select__control\"\n [id]=\"ids.controlId\"\n [class.ul-select__control--disabled]=\"disabled()\"\n >\n <ul-dropdown\n class=\"ul-select__dropdown\"\n [theme]=\"theme()\"\n [items]=\"items()\"\n [disabled]=\"disabled()\"\n [(selectedIndex)]=\"selectedIndex\"\n (selectedIndexChange)=\"onSelectedIndexChange($event)\"\n (closed)=\"onDropdownClosed()\"\n />\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\n\nimport { CheckboxComponent } from '../checkbox/checkbox';\nimport { LongPressDirective } from '../long-press/long-press.directive';\n\n/**\n * Makes any row of projected content (thumbnail/media + label content, plus\n * anything else — a status pill, actions) selectable in a bulk-select list,\n * without the consumer having to hand-roll device detection or gesture\n * wiring themselves:\n *\n * - Fine-pointer/real-hover devices (desktop): a checkbox is always present\n * but invisible until the row is hovered, keyboard-focused, or already\n * checked — Gmail-list style.\n * - Coarse-pointer/no-hover devices (touch): long-press a row to select it;\n * every row then swaps its projected `[ul-selectable-row-media]` content\n * for a large checkbox — there's rarely room for both a thumbnail and an\n * easy-to-hit checkbox on a small card.\n *\n * This component only decides what to *show* and detects the long-press\n * gesture — it doesn't know about routing, so a consumer whose media/content\n * slots contain a routerLink-driven anchor still needs to null that binding\n * out itself while `selectionActive` (see ul-selectable-row's own usage in\n * undermarket's profile-listings for the pattern).\n *\n * @example\n * ```html\n * <ul-selectable-row\n * [selected]=\"isSelected(item.id)\"\n * [selectionActive]=\"hasSelection()\"\n * [ariaLabel]=\"'Select ' + item.title\"\n * (selectedChange)=\"toggleSelect(item.id, $event)\"\n * (longPress)=\"onRowLongPress(item.id)\"\n * >\n * <img ul-selectable-row-media [src]=\"item.imageUrl\" alt=\"\" />\n * <div ul-selectable-row-content>{{ item.title }}</div>\n * <ul-pill>{{ item.status }}</ul-pill>\n * </ul-selectable-row>\n * ```\n */\n@Component({\n selector: 'ul-selectable-row',\n imports: [CheckboxComponent],\n hostDirectives: [LongPressDirective],\n host: {\n '[class.ul-selectable-row]': 'selected()',\n '(click)': 'onHostClick($event)',\n },\n template: `\n @if (selectable() && isCompact() && selectionActive()) {\n <ul-checkbox\n size=\"lg\"\n [checked]=\"selected()\"\n [attr.aria-label]=\"ariaLabel()\"\n (checkedChange)=\"selectedChange.emit($event)\"\n />\n } @else {\n <ng-content select=\"[ul-selectable-row-media]\" />\n }\n @if (selectable() && !isCompact()) {\n <ul-checkbox\n class=\"ul-selectable-row__hover-checkbox\"\n [checked]=\"selected()\"\n [attr.aria-label]=\"ariaLabel()\"\n (checkedChange)=\"selectedChange.emit($event)\"\n />\n }\n <ng-content select=\"[ul-selectable-row-content]\" />\n <ng-content />\n `,\n styleUrls: ['./selectable-row.scss'],\n})\nexport class SelectableRowComponent {\n /** Whether this row is currently selected. */\n selected = input<boolean>(false);\n /**\n * Whether the list is in selection mode (something, anywhere, is\n * selected) — drives the compact-mode media-for-checkbox swap.\n */\n selectionActive = input<boolean>(false);\n /**\n * Whether this row supports selection at all. False renders it as a plain\n * row — no checkbox (hover or compact), no long-press, no click-to-toggle\n * — for a list that doesn't offer bulk actions right now.\n */\n selectable = input<boolean>(true);\n /** Accessible label for this row's checkbox(es). */\n ariaLabel = input<string | null>(null);\n\n selectedChange = output<boolean>();\n longPress = output<void>();\n\n /**\n * Same distinction the hover-reveal CSS relies on — a width breakpoint\n * alone would misclassify a wide tablet in landscape, which has no real\n * hover, as \"desktop\".\n */\n private readonly hasFinePointer = toSignal(\n inject(BreakpointObserver)\n .observe('(hover: hover) and (pointer: fine)')\n .pipe(map((state) => state.matches)),\n { initialValue: true },\n );\n readonly isCompact = computed(() => !this.hasFinePointer());\n\n // Set for the click that immediately follows a successful long-press, so\n // that trailing click doesn't also toggle the row straight back off via\n // onHostClick below (see the same problem/fix in undermarket's\n // profile-listings for the version of this before it moved into here).\n private justLongPressed = false;\n\n constructor() {\n inject(LongPressDirective).ulLongPress.subscribe(() => {\n if (!this.selectable()) return;\n this.justLongPressed = true;\n this.longPress.emit();\n });\n }\n\n /**\n * While selecting, a tap anywhere in the row toggles it — not just on the\n * checkbox. This applies on every device, not only once the checkbox has\n * replaced the media (compact): otherwise the row's content on\n * fine-pointer devices would only be togglable by precisely hitting the\n * small hover-revealed checkbox, which is inconsistent with how compact\n * mode behaves and isn't how Gmail/Photos-style bulk-select works even on\n * desktop web. It's safe to do unconditionally (regardless of what's\n * projected) because a consumer whose content contains a routerLink is\n * already expected to have nulled that binding out while\n * `selectionActive` — so there's no competing navigation to accidentally\n * trigger.\n */\n onHostClick(event: MouseEvent): void {\n if (this.justLongPressed) {\n this.justLongPressed = false;\n return;\n }\n if (!this.selectable() || !this.selectionActive()) return;\n // The checkbox already has its own (checkedChange) handler — without\n // this, a tap on it would toggle twice (once from checkedChange, once\n // from this handler catching the same click as it bubbles up).\n if ((event.target as HTMLElement).closest('ul-checkbox')) return;\n this.selectedChange.emit(!this.selected());\n }\n}\n","import { Component, HostListener, input, model, output, ViewEncapsulation } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\nimport { ListItemComponent, ListItemTheme } from '../list-item/list-item';\n\nexport type SidebarItem = {\n label: string;\n value?: string;\n leftIcons?: IconName[];\n rightIcons?: IconName[];\n disabled?: boolean;\n};\n\n@Component({\n selector: 'ul-sidebar',\n imports: [ButtonComponent, IconComponent, ListItemComponent],\n templateUrl: './sidebar.html',\n styleUrls: ['./sidebar.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.aria-hidden]': '!open()',\n },\n})\nexport class SidebarComponent {\n items = input<SidebarItem[]>([]);\n theme = input<ListItemTheme>('ghost-white');\n selectedIndex = model<number>(0);\n open = model<boolean>(false);\n closeOnBackdropClick = input<boolean>(true);\n hideItemFocusOutline = input<boolean>(true);\n\n itemSelected = output<SidebarItem>();\n\n close(): void {\n this.open.set(false);\n }\n\n onOverlayClick(): void {\n if (this.closeOnBackdropClick()) {\n this.close();\n }\n }\n\n onItemClick(item: SidebarItem, index: number): void {\n if (item.disabled) {\n return;\n }\n this.selectedIndex.set(index);\n this.itemSelected.emit(item);\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.open()) {\n this.close();\n }\n }\n}\n","<div class=\"ul-sidebar\">\n <div\n class=\"ul-sidebar__overlay\"\n [class.ul-sidebar__overlay--visible]=\"open()\"\n [attr.aria-hidden]=\"!open()\"\n (click)=\"onOverlayClick()\"\n ></div>\n\n <aside\n class=\"ul-sidebar__drawer\"\n [class.ul-sidebar__drawer--open]=\"open()\"\n role=\"navigation\"\n [attr.aria-hidden]=\"!open()\"\n >\n <div class=\"ul-sidebar__inner\">\n <header class=\"ul-sidebar__header\">\n @if (open()) {\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"ul-sidebar__close\"\n ariaLabel=\"Close menu\"\n (buttonClick)=\"close()\"\n >\n <ul-icon icon=\"close\" size=\"6\" />\n </ul-button>\n }\n <ng-content select=\"[ul-sidebar-header]\" />\n </header>\n <nav class=\"ul-sidebar__nav ul-scrollable\">\n @if (items().length > 0) {\n @for (item of items(); track $index) {\n <ul-list-item\n [theme]=\"theme()\"\n [disabled]=\"!!item.disabled\"\n [selected]=\"selectedIndex() === $index\"\n [hideFocusOutline]=\"hideItemFocusOutline()\"\n (click)=\"onItemClick(item, $index)\"\n >\n <ng-container ul-list-item-before-label>\n @if (item.leftIcons) {\n @for (icon of item.leftIcons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n <ng-container ul-list-item-label>{{ item.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n @if (item.rightIcons) {\n @for (icon of item.rightIcons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n </ul-list-item>\n }\n } @else {\n <ng-content select=\"[ul-sidebar-nav]\" />\n }\n </nav>\n <footer class=\"ul-sidebar__footer\">\n <ng-content select=\"[ul-sidebar-footer]\" />\n </footer>\n </div>\n </aside>\n</div>\n","import { Component, computed, input } from '@angular/core';\n\nimport { IconComponent, IconName } from '../icon/icon';\nimport { RadialComponent } from '../radial/radial';\n\nexport type Status = 'confirm' | 'alert' | 'error' | 'pending' | 'info';\n\n@Component({\n selector: 'ul-status',\n imports: [IconComponent, RadialComponent],\n templateUrl: './status.html',\n styleUrl: './status.scss',\n})\nexport class StatusComponent {\n status = input<Status>('info');\n customIcon = input<IconName>();\n loadingAnimation = input<boolean>(false);\n\n get icon(): IconName {\n const customIcon = this.customIcon();\n if (customIcon) {\n return customIcon;\n }\n\n const statusIcons: Record<Status, IconName> = {\n confirm: 'check',\n alert: 'alert',\n error: 'cross',\n pending: 'hourglass',\n info: 'info',\n };\n\n return statusIcons[this.status()] || 'info';\n }\n\n computedClasses = computed(() => ({\n 'ul-status': true,\n 'ul-status--confirm': this.status() === 'confirm',\n 'ul-status--alert': this.status() === 'alert',\n 'ul-status--error': this.status() === 'error',\n 'ul-status--pending': this.status() === 'pending',\n 'ul-status--info': this.status() === 'info',\n }));\n}\n","<div [class]=\"computedClasses()\">\n <div class=\"ul-status-icon\">\n <ul-icon [icon]=\"icon\" size=\"12\" />\n @if (loadingAnimation()) {\n <div class=\"ul-status-loading\">\n <ul-radial [size]=\"96\" [percentage]=\"50\" [infinite]=\"true\" />\n </div>\n }\n </div>\n <div class=\"ul-status-title-container\">\n <div class=\"ul-status-title\">\n <ng-content select=\"[ul-status-title]\" />\n </div>\n <div class=\"ul-status-subtitle\">\n <ng-content select=\"[ul-status-subtitle]\" />\n </div>\n </div>\n <div class=\"ul-status-description\">\n <ng-content select=\"[ul-status-description]\" />\n </div>\n</div>\n","import { Component, computed, input, model, output, signal } from '@angular/core';\n\nimport { IconComponent } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { SkeletonComponent } from '../skeleton/skeleton';\n\nexport interface TableColumn {\n id: string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n}\n\nexport type SortDirection = 'asc' | 'desc';\n\n/**\n * Table component for tabular data with optional sort (per-column) and global filter.\n * Uses semantic table markup; responsive with horizontal scroll on small viewports.\n */\n@Component({\n selector: 'ul-table',\n imports: [InputComponent, IconComponent, SkeletonComponent],\n templateUrl: './table.html',\n styleUrls: ['./table.scss'],\n})\nexport class TableComponent {\n readonly columns = input<TableColumn[]>([]);\n readonly data = input<Record<string, unknown>[]>([]);\n readonly sortColumn = model<string | null>(null);\n readonly sortDirection = model<SortDirection>('asc');\n readonly filterPlaceholder = input<string>('Filter...');\n readonly filterLabel = input<string>('Filter');\n readonly showGlobalFilter = input<boolean>(false);\n readonly emptyMessage = input<string>('No data');\n\n readonly loading = input<boolean>(false);\n\n readonly sortChange = output<{ column: string | null; direction: SortDirection }>();\n readonly filterChange = output<string>();\n\n protected readonly filterQuery = signal('');\n\n protected readonly hasSortableColumn = computed(() =>\n this.columns().some((col) => col.sortable === true),\n );\n\n protected readonly filteredData = computed(() => {\n const rows = this.data();\n const query = this.filterQuery().trim().toLowerCase();\n const cols = this.columns();\n if (!query) return rows;\n return rows.filter((row) => {\n return cols.some((col) => {\n const val = this.getCellValue(row, col.id);\n return String(val).toLowerCase().includes(query);\n });\n });\n });\n\n protected readonly sortedData = computed(() => {\n const rows = this.filteredData();\n const colId = this.sortColumn();\n const dir = this.sortDirection();\n if (!colId) return rows;\n return [...rows].sort((a, b) => {\n const aVal = this.getCellValue(a, colId);\n const bVal = this.getCellValue(b, colId);\n const aStr = String(aVal ?? '');\n const bStr = String(bVal ?? '');\n const cmp = aStr.localeCompare(bStr, undefined, { numeric: true });\n return dir === 'asc' ? cmp : -cmp;\n });\n });\n\n protected readonly filterId = `ul-table-filter-${Math.random().toString(36).slice(2, 9)}`;\n\n getCellValue(row: Record<string, unknown>, columnId: string): unknown {\n return row[columnId];\n }\n\n onFilterInput(value: string): void {\n this.filterQuery.set(value);\n this.filterChange.emit(value);\n }\n\n toggleSort(columnId: string): void {\n const col = this.columns().find((c) => c.id === columnId);\n if (!col?.sortable) return;\n const current = this.sortColumn();\n const currentDir = this.sortDirection();\n if (current === columnId) {\n const nextDir: SortDirection = currentDir === 'asc' ? 'desc' : 'asc';\n this.sortDirection.set(nextDir);\n this.sortChange.emit({ column: columnId, direction: nextDir });\n return;\n } else {\n this.sortColumn.set(columnId);\n this.sortDirection.set('asc');\n this.sortChange.emit({ column: columnId, direction: 'asc' });\n }\n }\n\n getSortAriaSort(columnId: string): 'ascending' | 'descending' | 'none' {\n if (this.sortColumn() !== columnId) return 'none';\n return this.sortDirection() === 'asc' ? 'ascending' : 'descending';\n }\n}\n","<div\n class=\"ul-table\"\n [class.ul-table--sortable]=\"hasSortableColumn()\"\n [class.ul-table--filterable]=\"showGlobalFilter()\"\n>\n @if (showGlobalFilter()) {\n <div class=\"ul-table__toolbar\">\n <ul-input\n [controlId]=\"filterId\"\n [label]=\"filterLabel()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterQuery()\"\n (valueChange)=\"onFilterInput($event)\"\n size=\"sm\"\n >\n <ng-container ul-input-left-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n </div>\n }\n\n <div class=\"ul-table__scroll ul-scrollable\">\n <ul-skeleton [show]=\"loading()\" variant=\"rect\">\n <table class=\"ul-table__table\">\n <thead class=\"ul-table__head\">\n <tr class=\"ul-table__row ul-table__row--head\">\n @for (col of columns(); track col.id) {\n <th\n class=\"ul-table__th\"\n [class.ul-table__th--sortable]=\"col.sortable\"\n [class.ul-table__th--sort-asc]=\"sortColumn() === col.id && sortDirection() === 'asc'\"\n [class.ul-table__th--sort-desc]=\"sortColumn() === col.id && sortDirection() === 'desc'\"\n [attr.scope]=\"'col'\"\n [attr.aria-sort]=\"col.sortable ? getSortAriaSort(col.id) : null\"\n >\n @if (col.sortable) {\n <button\n type=\"button\"\n class=\"ul-table__th-button\"\n [attr.aria-label]=\"'Sort by ' + col.label\"\n (click)=\"toggleSort(col.id)\"\n >\n <span class=\"ul-table__th-label\">{{ col.label }}</span>\n @if (sortColumn() === col.id && sortDirection() === 'asc') {\n <ul-icon size=\"5\" icon=\"arrow_up\" />\n } @else if (sortColumn() === col.id && sortDirection() === 'desc') {\n <ul-icon size=\"5\" icon=\"arrow_down\" />\n } @else {\n <ul-icon size=\"5\" icon=\"sort\" />\n }\n </button>\n } @else {\n <span class=\"ul-table__th-label\">{{ col.label }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"ul-table__body\">\n @if (sortedData().length === 0) {\n <tr class=\"ul-table__row ul-table__row--empty\">\n <td class=\"ul-table__cell ul-table__cell--empty\" [attr.colspan]=\"columns().length || 1\">\n {{ emptyMessage() }}\n </td>\n </tr>\n } @else {\n @for (row of sortedData(); track $index) {\n <tr class=\"ul-table__row\">\n @for (col of columns(); track col.id) {\n <td class=\"ul-table__cell\">{{ getCellValue(row, col.id) }}</td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </ul-skeleton>\n </div>\n</div>\n","import { Directive } from '@angular/core';\n\n/**\n * When projected into ul-textarea, replaces the native textarea with custom content (e.g. Quill).\n * Use with [ul-textarea-field] on the element to project.\n */\n@Directive({\n selector: '[ul-textarea-field]',\n})\nexport class TextareaFieldDirective {}\n","import { Component, computed, contentChild, input, model, output, signal } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nimport { TextareaFieldDirective } from './textarea-field.directive';\n\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\n/**\n * Reusable textarea. Implements FormValueControl for Signal Forms [formField].\n * Use [(value)] for two-way binding or [formField]=\"myForm().message\".\n *\n * Content projection: [ul-textarea-field] (replaces native textarea), [ul-textarea-left-elements], [ul-textarea-right-elements].\n */\n@Component({\n selector: 'ul-textarea',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent],\n templateUrl: './textarea.html',\n styleUrls: ['./textarea.scss'],\n})\nexport class TextareaComponent implements FormValueControl<string> {\n readonly size = input<UiSize>('md');\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly readOnly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly maxLength = input<number | undefined>();\n readonly minLength = input<number | undefined>();\n readonly autocomplete = input<string>('off');\n readonly rows = input<number>(3);\n readonly resize = input<TextareaResize>('vertical');\n\n /** When using [ul-textarea-field], pass focus state so the group border reflects it. */\n readonly groupFocused = input<boolean | null>(null);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model<boolean>(false);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */\n readonly touch = output<void>();\n\n readonly value = model<string>('');\n\n protected readonly customField = contentChild(TextareaFieldDirective);\n protected readonly ids = createFormFieldIds('ul-textarea');\n protected readonly isFocused = signal(false);\n protected readonly groupFocusedState = computed(() => this.groupFocused() ?? this.isFocused());\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n readonly inputBlur = output<FocusEvent>();\n readonly inputFocus = output<FocusEvent>();\n\n onInput(event: Event): void {\n const value = (event.target as HTMLTextAreaElement).value;\n this.value.set(value);\n }\n\n onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.inputBlur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.inputFocus.emit(event);\n }\n\n focus(): void {\n if (this.customField()) return;\n const el = document.getElementById(this.ids.controlId) as HTMLTextAreaElement;\n el?.focus();\n }\n\n select(): void {\n const el = document.getElementById(this.ids.controlId) as HTMLTextAreaElement;\n el?.select();\n }\n}\n","<div\n class=\"ul-textarea ul-textarea--{{ size() }}\"\n [class.ul-textarea--error]=\"hasError()\"\n [class.ul-textarea--disabled]=\"disabled()\"\n [class.ul-textarea--read-only]=\"readOnly()\"\n [class.ul-textarea--required]=\"required()\"\n [class.ul-textarea--resize-none]=\"resize() === 'none'\"\n [class.ul-textarea--resize-vertical]=\"resize() === 'vertical'\"\n [class.ul-textarea--resize-horizontal]=\"resize() === 'horizontal'\"\n [class.ul-textarea--resize-both]=\"resize() === 'both'\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div\n class=\"ul-textarea__group\"\n [class.ul-textarea__group--focused]=\"groupFocusedState()\"\n [style.--ul-textarea-rows]=\"rows()\"\n >\n <div class=\"ul-textarea__left-elements\">\n <ng-content select=\"[ul-textarea-left-elements]\" />\n </div>\n\n <ng-content select=\"[ul-textarea-field]\" />\n @if (!customField()) {\n <textarea\n [id]=\"ids.controlId\"\n class=\"ul-textarea__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.rows]=\"rows()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n ></textarea>\n }\n\n <div class=\"ul-textarea__right-elements\">\n <ng-content select=\"[ul-textarea-right-elements]\" />\n </div>\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"\n (errorText() || (hasError() && errors().length ? errors()[0].message : null)) ?? null\n \"\n [error]=\"hasError()\"\n />\n</div>\n","/*\n * Public API Surface of ui\n */\n\nexport * from './components';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","NgxImageCropperComponent","i1.LongPressDirective"],"mappings":";;;;;;;;;;;;;;;;AAYA;;;;AAIG;MAqDU,sBAAsB,CAAA;AACjC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1B,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAE7D;;AAEG;AACM,IAAA,SAAS,GAAG,CAAA,qBAAA,EAAwB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AAEtF;;AAEG;AACM,IAAA,SAAS,GAAG,CAAA,qBAAA,EAAwB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;IAEtF,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YAClC;QACF;AACA,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;IAChC;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YAClC;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE;YACf;QACF;;AAGA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC;QACxE,IAAI,CAAC,SAAS,EAAE;YACd;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,SAAS,CAAC,gBAAgB,CAAC,wCAAwC,CAAC,CAC9C;AACxB,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC;AAEvE,QAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB;QACF;QAEA,IAAI,WAAW,GAAkB,IAAI;AAErC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;gBACvE;AACF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACvE;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,WAAW,GAAG,CAAC;gBACf;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACjC;;QAGJ,IAAI,WAAW,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE;AACjD,YAAA,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAC/B;IACF;uGAvEW,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,mBAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlDvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g/JAAA,CAAA,EAAA,CAAA;;2FAUU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApDlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,QAAA,EACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCT,EAAA,cAAA,EAEe;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,gBAAgB;AAC3B,4BAAA,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;4BAChC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC;AAC7D,yBAAA;AACF,qBAAA,EAAA,MAAA,EAAA,CAAA,g/JAAA,CAAA,EAAA;;AA4EH;;;;AAIG;MAgBU,kBAAkB,CAAA;IACpB,WAAW,GAAG,KAAK,CAAU,KAAK;oFAAC;IACnC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;AAErB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,cAAc,GAAG,eAAe,CAC/C,sBAAsB,sFAEpB,IAAI,EAAE,gBAAgB,EAAA,CAEzB;IAED,eAAe,GAAA;QACb,IAAI,CAAC,yBAAyB,EAAE;IAClC;AAEA;;;AAGG;IACK,yBAAyB,GAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;;QAGnC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YACjC;QACF;;AAGA,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;gBACnF,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;AACnD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;AACK,IAAA,qBAAqB,CAC3B,WAA6B,EAC7B,QAAiB,EACjB,QAAqC,EAAA;;QAGrC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAC7B;QACF;;AAGA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACxB,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzC,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;uGA1DW,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,cAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAM3B,sBAAsB,EAAA,IAAA,EAEd,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBhB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g/JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,YAAY,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,QAAA,EACd;;;;;;;;;GAST,EAAA,OAAA,EAEQ,CAAC,YAAY,CAAC,EAAA,MAAA,EAAA,CAAA,g/JAAA,CAAA,EAAA;AAQrB,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,sBAAsB,CAAA,EAAA,EAAA,GACtB;AACE,4BAAA,IAAI,EAAE,gBAAgB;AACvB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1KL;;;;;;;;;AASG;MAMU,iBAAiB,CAAA;;IAEnB,OAAO,GAAG,KAAK,CAAS,EAAE;gFAAC;IAC3B,eAAe,GAAG,KAAK,CAAU,IAAI;wFAAC;IACtC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;;AAGtC,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,EAAE,CAAC;AACzB,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B,CAAC;8EAAC;IAEO,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;kFAAC;AAE/C,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;oFAAC;;AAGO,IAAA,MAAM,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;uGArBhE,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,4eCjB9B,2zBAmBA,EAAA,MAAA,EAAA,CAAA,g2HAAA,CAAA,EAAA,CAAA;;2FDFa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,2zBAAA,EAAA,MAAA,EAAA,CAAA,g2HAAA,CAAA,EAAA;;;AEF1B;MASa,aAAa,CAAA;IACxB,IAAI,GAAG,KAAK,CAAW,GAAG;6EAAC;IAC3B,MAAM,GAAG,KAAK,CAAa,QAAQ;+EAAC;IACpC,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAY;AAExB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,OAAO,wBAAwB,IAAI,CAAC,IAAI,EAAE,mBAAmB,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC,IAAI,EAAE,EAAE;IACrG,CAAC;oFAAC;uGAPS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,ueANd,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMD,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,QAAQ,EAAE,CAAA,CAAE;oBACZ,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA;AACF,iBAAA;;;MCLY,iBAAiB,CAAA;IACnB,OAAO,GAAG,KAAK,CAAkB,MAAM;gFAAC;IACxC,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,MAAM,GAAG,KAAK,CAAgB,IAAI;+EAAC;IACnC,KAAK,GAAG,KAAK,CAAS,CAAC;8EAAC;IACxB,YAAY,GAAG,KAAK,CAA8B,IAAI;qFAAC;IACvD,IAAI,GAAG,KAAK,CAAU,IAAI;6EAAC;AAE3B,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAE5B,OAAO;YACL,KAAK,EAAE,KAAK,IAAI,IAAI;YACpB,MAAM,EAAE,MAAM,IAAI,IAAI;SACd;IACZ,CAAC;mFAAC;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,MAAM,GAAa,EAAE;AAE3B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;YAC7C,MAAM,IAAI,GAAG,GAAG;YAChB,MAAM,IAAI,GAAG,CAAC;AACd,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;AAC/C,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA,CAAA,CAAG,CAAC;QAC1B;AAEA,QAAA,OAAO,MAAM;IACf,CAAC;mFAAC;AAEO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;QAClC,OAAO,MAAM,GAAG,CAAA,oBAAA,EAAuB,MAAM,CAAA,CAAE,GAAG,IAAI;IACxD,CAAC;oFAAC;AAEF,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO,KAAK;IACd;uGAvCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd9B,i4BA4BA,EAAA,MAAA,EAAA,CAAA,g4HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBY,YAAY,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,CAAC,YAAY,CAAC,EAAA,aAAA,EAGR,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,i4BAAA,EAAA,MAAA,EAAA,CAAA,g4HAAA,CAAA,EAAA;;;AEGvC;;;;;AAKG;MAiCU,eAAe,CAAA;;IAE1B,IAAI,GAAG,KAAK,CAAa,IAAI;6EAAC;;IAG9B,GAAG,GAAG,KAAK,CAAqB,SAAS;4EAAC;;IAG1C,QAAQ,GAAG,KAAK,CAAqB,SAAS;iFAAC;;IAG/C,IAAI,GAAG,KAAK,CAAuB,SAAS;6EAAC;;IAG7C,GAAG,GAAG,KAAK,CAAS,EAAE;4EAAC;;IAGvB,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;AAE/B;;;;;;;AAOG;IACH,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;IAGb,UAAU,GAAG,MAAM,CAAC,KAAK;mFAAC;AAE1B,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;iFAAC;;AAGvE,IAAA,QAAQ,GAAG,QAAQ,CAAW,MAAK;AAC1C,QAAA,MAAM,OAAO,GAAiC;AAC5C,YAAA,EAAE,EAAE,GAAG;AACP,YAAA,EAAE,EAAE,GAAG;AACP,YAAA,EAAE,EAAE,GAAG;AACP,YAAA,EAAE,EAAE,GAAG;AACP,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;SACZ;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;iFAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,GAAG,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;;IAGU,gBAAgB,GAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;uGA1DW,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,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7BhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o8JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1BS,aAAa,wFAAE,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA8B/B,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhC3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAA,QAAA,EACjC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,o8JAAA,CAAA,EAAA;;;ACtCvC;;;;;AAKG;MAgCU,oBAAoB,CAAA;;IAE/B,OAAO,GAAG,KAAK,CAAC,QAAQ;gFAAgB;;IAGxC,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAG1B,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;;IAGvC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;;AAGtB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO;IAClE,CAAC;uFAAC;;AAGO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC;IACjD,CAAC;uFAAC;uGAzBS,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,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BrB;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ynJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzBS,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA6Bd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA/BhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;GAwBT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,ynJAAA,CAAA,EAAA;;;AClCvC;;;;;;;;;;;;;;AAcG;MAQU,mBAAmB,CAAA;;IAE9B,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAoB;;IAG1C,SAAS,GAAG,KAAK,CAAsB,eAAe;kFAAC;;IAGvD,QAAQ,GAAG,KAAK,CAAqB,SAAS;iFAAC;;AAG/C,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,OAAO,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;IAC1C;;AAGA,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;AAAE,YAAA,OAAO,IAAI;QAC5C,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;AAC7B,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;AAC3C,QAAA,OAAO,KAAK;IACd;;IAGA,0BAA0B,GAAA;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;AAAE,YAAA,OAAO,KAAK;QAC7C,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAChC;uGA/BW,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,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpChC,oyFAuEA,EAAA,MAAA,EAAA,CAAA,k7JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxCY,aAAa,wFAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKxB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACE,eAAe,EAAA,OAAA,EAChB,CAAC,aAAa,EAAE,UAAU,CAAC,EAAA,aAAA,EAGrB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,oyFAAA,EAAA,MAAA,EAAA,CAAA,k7JAAA,CAAA,EAAA;;;AElChC,MAAM,UAAU,GAAG,KAAK;;ACK/B;;;;AAIG;MAQU,eAAe,CAAA;AACT,IAAA,SAAS,GAAG,CAAA,EAAG,UAAU,CAAA,GAAA,CAAK;;IAG/C,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAG1B,KAAK,GAAG,KAAK,CAAU,aAAa;8EAAC;;IAGrC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;IAGhC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;AAGtB,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;yFAAC;;AAG1E,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QACnC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,CAAC,CAAC;AAClD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE,CAAC,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,WAAA,CAAa,CAAC,CAAC;QAC/C;AACA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,UAAA,CAAY,CAAC;QAC7C;AACA,QAAA,OAAO,OAAO;IAChB,CAAC;mFAAC;uGA9BS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACJ,wBAAA,aAAa,EAAE,UAAU;AACzB,wBAAA,SAAS,EAAE,cAAc;AAC1B,qBAAA;AACF,iBAAA;;;ACXD;;;;AAIG;MAuBU,eAAe,CAAA;;IAE1B,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAG1B,KAAK,GAAG,KAAK,CAAU,aAAa;8EAAC;;IAGrC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;IAGhC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;IAGhC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;IAGhC,IAAI,GAAG,KAAK,CAAgC,QAAQ;6EAAC;;IAGrD,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;;IAGhD,WAAW,GAAG,MAAM,EAAc;;AAGxB,IAAA,WAAW,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;uGAjCW,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,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBhB;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,s3VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhBS,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAoBd,eAAe,EAAA,UAAA,EAAA,CAAA;kBAtB3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EACZ,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;GAeT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,s3VAAA,CAAA,EAAA;;;AC9BvC;;;AAGG;AACG,SAAU,kBAAkB,CAAC,MAAc,EAAA;IAK/C,MAAM,EAAE,GAAG,CAAA,EAAG,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,CAAE;IACjE,OAAO;AACL,QAAA,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,CAAA,EAAG,EAAE,CAAA,OAAA,CAAS;QACxB,OAAO,EAAE,CAAA,EAAG,EAAE,CAAA,MAAA,CAAQ;KACvB;AACH;AAEA;;AAEG;AACG,SAAU,uBAAuB,CACrC,QAAgB,EAChB,OAAe,EACf,aAAsB,EACtB,QAAiB,EACjB,YAAqB,EAAA;IAErB,MAAM,GAAG,GAAa,EAAE;AACxB,IAAA,IAAI,aAAa;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrC,IAAI,QAAQ,IAAI,YAAY;AAAE,QAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/C,IAAA,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;AACnD;;AC3BA;;;AAGG;MAsBU,uBAAuB,CAAA;IACzB,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,GAAG,GAAG,KAAK,CAAS,EAAE;4EAAC;IACvB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;uGAL1C,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,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBxB;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ypHAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAIU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,QAAA,EACrB;;;;;;;;;;;;;;;GAeT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,ypHAAA,CAAA,EAAA;;;ACzBvC;;;AAGG;MAmBU,wBAAwB,CAAA;IAC1B,EAAE,GAAG,KAAK,CAAC,QAAQ;2EAAU;IAC7B,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;uGAJ3B,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,sBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBzB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ypHAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAIU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;GAYT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,ypHAAA,CAAA,EAAA;;;ACqBvC;;;AAGG;MAeU,iBAAiB,CAAA;IACnB,IAAI,GAAG,KAAK,CAAe,MAAM;6EAAC;IAClC,KAAK,GAAG,KAAK,CAAc,IAAI;8EAAC;IAChC,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;IAC/B,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,OAAO,GAAG,KAAK,CAAc,IAAI;gFAAC;IAClC,OAAO,GAAG,KAAK,CAAc,IAAI;gFAAC;IAClC,OAAO,GAAG,KAAK,CAAc,IAAI;gFAAC;IAClC,OAAO,GAAG,KAAK,CAAc,IAAI;gFAAC;IAClC,MAAM,GAAG,KAAK,CAAS,OAAO;+EAAC;IAC/B,gBAAgB,GAAG,KAAK,CAAU,IAAI;yFAAC;IAEvC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;AAE3D,IAAA,GAAG,GAAG,kBAAkB,CAAC,aAAa,CAAC;IAEjD,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;AACtB,IAAA,YAAY,GAAG,MAAM,CAAO,IAAI,IAAI,EAAE;qFAAC;IACvC,YAAY,GAAG,MAAM,CAAuB,IAAI;qFAAC;AAEjD,IAAA,UAAU,GAAG,QAAQ,CAAS,MAAK;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QAExB,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC9B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC9B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC9B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AAE9B,QAAA,OAAO,IAAI;IACb,CAAC;mFAAC;AAEO,IAAA,QAAQ,GAAG,QAAQ,CAAW,MAAK;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QAExB,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,GAAG;QAC7B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,GAAG;QAC7B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,GAAG;;AAG7B,QAAA,OAAO,IAAI;IACb,CAAC;iFAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;QACjD,IAAI,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,aAAa;QACzC,IAAI,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,aAAa;AACzC,QAAA,OAAO,sBAAsB;IAC/B,CAAC;2FAAC;AAEO,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACrC,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,GAAG,EAAE,SAAS;AACf,aAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAChB;AAEA,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACrC,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,MAAM,EAAE,KAAK;AACd,aAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAChB;AAEA,QAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACrC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAChB,CAAC;qFAAC;AAEiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,iBAAiB,GAAG,QAAQ,CAC7C,MACE,IAAI,CAAC,SAAS,EAAE;AAChB,SAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC;0FACzF;AAEQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAC9B,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAC3B;oFACF;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAgB,MAAK;AACnD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;QACxB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnE,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACtE,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;AACpC,QAAA,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QAE3D,MAAM,IAAI,GAAkB,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;AAEnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAEzB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;YAClD,MAAM,UAAU,GACd,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAE5C,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI;gBACJ,cAAc;gBACd,OAAO;gBACP,UAAU;gBACV,UAAU;AACX,aAAA,CAAC;YAEF,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxC;AAEA,QAAA,OAAO,IAAI;IACb,CAAC;qFAAC;AAEO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;QACjC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAC5C,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAClB,CAAC;uFAAC;AAEO,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACnC,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACf;AACA,QAAA,OAAO,KAAK;IACd,CAAC;oFAAC;AAEO,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QACrC,MAAM,OAAO,GAAa,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB;AACA,QAAA,OAAO,OAAO;IAChB,CAAC;sFAAC;AAEO,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,CAAC;AAC/C,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE;IACvB,CAAC;qFAAC;AAEO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,IAAI,CAAC;AACjD,QAAA,OAAO,GAAG,CAAC,UAAU,EAAE;IACzB,CAAC;uFAAC;IAEO,MAAM,GAAG,MAAM,EAAQ;IACvB,MAAM,GAAG,MAAM,EAAQ;AAEhC,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;YACxB,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;AAC1B,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACpB,wBAAA,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE;AACpB,wBAAA,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE;AACzB,qBAAA,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACK,kBAAkB,GAAA;AACxB,QAAA,MAAM,WAAW,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE;AAC/C,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;AAEF,QAAA,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAC/B,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAE7B,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,QAAQ,GAAG,OAAO;AAAE,gBAAA,OAAO,IAAI;QACrC;QAEA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,QAAQ,GAAG,OAAO;AAAE,gBAAA,OAAO,IAAI;QACrC;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,cAAc,CAAC,IAAY,EAAE,MAAc,EAAA;AACzC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK;AAE9B,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;QAC3B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC9B,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,IAAI,GAAG,OAAO,KAAK,IAAI,KAAK,OAAO,IAAI,MAAM,GAAG,SAAS,CAAC,EAAE;AAC9D,gBAAA,OAAO,IAAI;YACb;QACF;QAEA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC9B,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,IAAI,GAAG,OAAO,KAAK,IAAI,KAAK,OAAO,IAAI,MAAM,GAAG,SAAS,CAAC,EAAE;AAC9D,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE;AAE/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,OAAa;AAEjB,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9B;AAAO,aAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AAC1B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;YACxB,IAAI,IAAI,EAAE;AACR,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD;iBAAO;gBACL,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9B;QACF;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI;AAClC,gBAAA,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC;AACnC,gBAAA,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC;aACxC;AACD,YAAA,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAChD;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAEvB,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;IAEA,UAAU,CAAC,IAAY,EAAE,MAAc,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;YAAE;QAEvC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAEvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,OAAa;AAEjB,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,OAAO,GAAG,IAAI,IAAI,EAAE;YACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACtC;aAAO;AACL,YAAA,MAAM,QAAQ,GAAG,YAAY,IAAI,IAAI,IAAI,EAAE;AAC3C,YAAA,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;YAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACtC;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;QAEvB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,EAAE;YAC1C,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;QACxB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE;IAClB;uGAtXW,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,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7D9B,uyLAsKA,EAAA,MAAA,EAAA,CAAA,w0TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDpHI,cAAc,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,uBAAuB,uIACvB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EACd;wBACP,cAAc;wBACd,OAAO;wBACP,eAAe;wBACf,aAAa;wBACb,uBAAuB;wBACvB,wBAAwB;qBACzB,EAAA,aAAA,EAGc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,uyLAAA,EAAA,MAAA,EAAA,CAAA,w0TAAA,CAAA,EAAA;;;ME5B1B,aAAa,CAAA;;IAExB,OAAO,GAAG,KAAK,CAAmB,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACzE,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,aAAa,GAAG,KAAK,CAAgB,UAAU;sFAAC;IAChD,eAAe,GAAG,KAAK,CAAkB,SAAS;wFAAC;IACnD,UAAU,GAAG,KAAK,CAAsB,SAAS;mFAAC;;IAGlD,gBAAgB,GAAG,KAAK,CAAmB,SAAS;yFAAC;IACrD,SAAS,GAAG,KAAK,CAAmB,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC3E,cAAc,GAAG,KAAK,CAAmB,KAAK,sFAC5C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGF,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;IAC/B,SAAS,GAAG,KAAK,CAAS,EAAE;kFAAC;IAC7B,mBAAmB,GAAG,KAAK,CAAmB,KAAK,2FACjD,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACF,YAAY,GAAG,KAAK,CAAS,EAAE;qFAAC;IAChC,sBAAsB,GAAG,KAAK,CAAmB,KAAK,8FACpD,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGF,OAAO,GAAG,KAAK,CAAmB,KAAK,+EACrC,SAAS,EAAE,gBAAgB,EAAA,CAC3B;uGA/BS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,2BAAA,EAAA,oCAAA,EAAA,2BAAA,EAAA,8BAAA,EAAA,6BAAA,EAAA,4BAAA,EAAA,6BAAA,EAAA,mCAAA,EAAA,+BAAA,EAAA,qCAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/B1B,whDAmDA,EAAA,MAAA,EAAA,CAAA,qpMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvCY,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAmBhB,aAAa,EAAA,UAAA,EAAA,CAAA;kBArBzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,OAAA,EACV,CAAC,iBAAiB,CAAC,EAAA,IAAA,EAGtB;AACJ,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,0BAA0B,EAAE,WAAW;AACvC,wBAAA,2BAA2B,EAAE,YAAY;AACzC,wBAAA,6BAA6B,EAAE,kCAAkC;AACjE,wBAAA,6BAA6B,EAAE,4BAA4B;AAC3D,wBAAA,+BAA+B,EAAE,0BAA0B;AAC3D,wBAAA,+BAA+B,EAAE,iCAAiC;AAClE,wBAAA,iCAAiC,EAAE,mCAAmC;AACtE,wBAAA,kCAAkC,EAAE,kBAAkB;AACtD,wBAAA,0BAA0B,EAAE,WAAW;AACvC,wBAAA,gCAAgC,EAAE,aAAa;qBAChD,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,whDAAA,EAAA,MAAA,EAAA,CAAA,qpMAAA,CAAA,EAAA;;;AEPvC;;;;;;;AAOG;MAOU,cAAc,CAAA;IAChB,IAAI,GAAG,KAAK,CAAY,MAAM;6EAAC;IAC/B,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,UAAU,GAAG,KAAK,CAAkB,aAAa;mFAAC;IAClD,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;IAC/B,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;AACtC,IAAA,SAAS,GAAG,KAAK;6FAAsB;AACvC,IAAA,SAAS,GAAG,KAAK;6FAAsB;IACvC,OAAO,GAAG,KAAK,CAAoB,EAAE;gFAAC;AAC/C;;AAEiD;IACxC,IAAI,GAAG,KAAK,CAA6B,SAAS;6EAAC;IACnD,YAAY,GAAG,KAAK,CAAS,KAAK;qFAAC;;AAEnC,IAAA,SAAS,GAAG,KAAK;6FAAsB;;IAEvC,iBAAiB,GAAG,KAAK,CAAS,eAAe;0FAAC;;IAElD,iBAAiB,GAAG,KAAK,CAAS,eAAe;0FAAC;;IAGlD,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;;IAE/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;;IAErE,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;;IAE/B,KAAK,GAAG,MAAM,EAAQ;IAEtB,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;AAEf,IAAA,GAAG,GAAG,kBAAkB,CAAC,UAAU,CAAC;AACpC,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;2FAAC;IAC3E,iBAAiB,GAAG,QAAQ,CAAC,MAC9C,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA,OAAA,CAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;0FACpE;IACkB,gBAAgB,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA,MAAA,CAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;yFAClE;IACkB,SAAS,GAAG,MAAM,CAAC,KAAK;kFAAC;AACzB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;;;;;;AAOzD,IAAA,aAAa,GAAG,QAAQ,CAAgB,MAAK;AAC9D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;AAC/B,QAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IACzE,CAAC;sFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAwB,MAAK;AACnE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;IAChD,CAAC;mFAAC;IAEiB,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU;uFAAC;IAE3D,gBAAgB,GAAG,MAAM,CAAC,KAAK;yFAAC;IAChC,aAAa,GAAG,QAAQ,CAAC,MAC1C,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;sFACxE;AACkB,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAC/C,IAAI,CAAC,gBAAgB,EAAE,GAAG,QAAQ,GAAG,YAAY;2FAClD;IACkB,mBAAmB,GAAG,QAAQ,CAAC,MAChD,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;4FAC9E;IAEkB,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,iBAAiB,EAAE,EACxB,IAAI,CAAC,gBAAgB,EAAE,EACvB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;;IAGQ,SAAS,GAAG,MAAM,EAAc;IAChC,UAAU,GAAG,MAAM,EAAc;;IAEjC,UAAU,GAAG,MAAM,EAAiB;AAE7C,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B;IACF;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC;IACvD;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAqB;QACtF,OAAO,EAAE,KAAK,EAAE;IAClB;IAEA,MAAM,GAAA;QACJ,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAqB;QACtF,OAAO,EAAE,MAAM,EAAE;IACnB;uGAtIW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC3B,mzEAuEA,EAAA,MAAA,EAAA,CAAA,w8LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvCY,uBAAuB,uIAAE,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIhF,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;+BACE,UAAU,EAAA,OAAA,EACX,CAAC,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,mzEAAA,EAAA,MAAA,EAAA,CAAA,w8LAAA,CAAA,EAAA;;;AEf9F;;;;AAIG;MA+DU,iBAAiB,CAAA;IACnB,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAE/B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,aAAa,GAAG,KAAK,CAAU,KAAK;sFAAC;IACrC,IAAI,GAAG,KAAK,CAAmB,MAAM;6EAAC;IACtC,IAAI,GAAG,KAAK,CAAiB,SAAS;6EAAC;IACvC,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;AAE3D,IAAA,GAAG,GAAG,kBAAkB,CAAC,aAAa,CAAC;AACvC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,iBAAiB,GAAG,QAAQ,CAC7C,MACE,IAAI,CAAC,SAAS,EAAE;AAChB,SAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC;0FACzF;AAEkB,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAC3B;oFACF;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IACjC;uGAtCW,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,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3DlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4iPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzDS,uBAAuB,uIAAE,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA4DhD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA9D7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4iPAAA,CAAA,EAAA;;;MC3CU,iBAAiB,CAAA;IAC5B,QAAQ,GAAG,YAAY,CAAoB,iBAAiB;iFAAC;IAE7D,KAAK,GAAG,KAAK,CAAgB,aAAa;8EAAC;IAC3C,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,gBAAgB,GAAG,KAAK,CAAU,KAAK;yFAAC;IACxC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAEhC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAE/B,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;QACpD;IACF;uGAlBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACe,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBlD;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,itKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtBS,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAyBhB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA3B7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,OAAA,EACf,CAAC,iBAAiB,CAAC,EAAA,QAAA,EAClB;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,itKAAA,CAAA,EAAA;6FAI0C,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCPjD,cAAc,CAAA;;IAEzB,IAAI,GAAG,KAAK,CAAU,KAAK;6EAAC;;IAG5B,OAAO,GAAG,KAAK,CAAe,SAAS;gFAAC;;IAGxC,KAAK,GAAG,KAAK,CAAqB,SAAS;8EAAC;;IAG5C,oBAAoB,GAAG,KAAK,CAAU,IAAI;6FAAC;;IAG3C,eAAe,GAAG,KAAK,CAAU,IAAI;wFAAC;;IAGtC,YAAY,GAAG,KAAK,CAAS,SAAS;qFAAC;;IAGvC,WAAW,GAAG,KAAK,CAAS,QAAQ;oFAAC;;IAGrC,WAAW,GAAG,KAAK,CAAqB,SAAS;oFAAC;AAElD;;;;;AAKG;IACH,kBAAkB,GAAG,KAAK,CAAU,KAAK;2FAAC;;IAG1C,MAAM,GAAG,MAAM,EAAQ;;IAGvB,SAAS,GAAG,MAAM,EAAQ;;IAG1B,SAAS,GAAG,MAAM,EAAQ;AAEjB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;QACjC,MAAM,OAAO,GAAG,CAAC,iBAAiB,EAAE,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAC;AAClE,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC;QACpD;QACA,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACtB;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B,CAAC;mFAAC;IAEO,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,cAAc;uFAAC;IAClE,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS;kFAAC;IACxD,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,OAAO;gFAAC;IAE7D,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;mFAAC;AAE5E,IAAA,OAAO,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACrE,IAAA,MAAM,GAAG,CAAA,cAAA,EAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;IAE5E,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1B;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1B;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,EAAE;IACd;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE;YACvE,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;QACd;IACF;uGAhGW,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,0gDChC3B,m0DAwDA,EAAA,MAAA,EAAA,CAAA,ipKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhCY,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,oKAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQ3C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,OAAA,EACX,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,aAAA,EAGxC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,oBAAoB,EAAE,SAAS;AAChC,qBAAA,EAAA,QAAA,EAAA,m0DAAA,EAAA,MAAA,EAAA,CAAA,ipKAAA,CAAA,EAAA;;sBA6FA,YAAY;uBAAC,yBAAyB;;;AExFzC;;;;;;;;;;;;;;AAcG;MAeU,uBAAuB,CAAA;IACzB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,WAAW,GAAG,KAAK,CAAS,mBAAmB;oFAAC;IAChD,iBAAiB,GAAG,KAAK,CAAS,mBAAmB;0FAAC;IACtD,UAAU,GAAG,KAAK,CAAS,mBAAmB;mFAAC;IAC/C,SAAS,GAAG,KAAK,CAAS,gBAAgB;kFAAC;IAC3C,aAAa,GAAG,KAAK,CAAS,YAAY;sFAAC;IAC3C,KAAK,GAAG,KAAK,CAAuB,EAAE;8EAAC;IAEvC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;;IAErE,KAAK,GAAG,MAAM,EAAQ;IAEtB,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;AAExB,IAAA,GAAG,GAAG,kBAAkB,CAAC,oBAAoB,CAAC;IAC9C,IAAI,GAAG,MAAM,CAAC,KAAK;6EAAC;IACpB,eAAe,GAAG,MAAM,CAAgB,IAAI;wFAAC;IAC7C,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;AAElB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;AAEgB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;kFAAC;AAE9E,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;QACvB,OAAO,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IAC/D,CAAC;qFAAC;AAEiB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;QAChC,OAAO,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;IAC7D,CAAC;sFAAC;IAEiB,eAAe,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;wFACxE;;AAGkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,OAAO,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC7D,CAAC;mFAAC;AAEe,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;wFAAC;AACjE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC;oFAAC;AAE/D,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE;AAChC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;QACjB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpE,aAAA,GAAG,CAAC,CAAC,IAAI,MAAM;YACd,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AAClE,SAAA,CAAC,CAAC;IACP,CAAC;sFAAC;AAEiB,IAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC;qFAC9D;IAED,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACrB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;AAEA,IAAA,UAAU,CAAC,IAAwB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;YACL,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB;IACF;AAEA,IAAA,cAAc,CAAC,QAAuB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpB;AAEQ,IAAA,aAAa,CAAC,EAAU,EAAA;QAC9B,MAAM,KAAK,GAAyB,EAAE;QACtC,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,OAAO,EAAE;AACd,YAAA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACtB,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzF;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,cAAc,CAAC,EAAU,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;IACzD;uGAxHW,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,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChEpC,uyJA2IA,EAAA,MAAA,EAAA,CAAA,kwJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtFI,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,uBAAuB,uIACvB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAdnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EACrB;wBACP,aAAa;wBACb,cAAc;wBACd,iBAAiB;wBACjB,cAAc;wBACd,uBAAuB;wBACvB,wBAAwB;qBACzB,EAAA,aAAA,EAGc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,uyJAAA,EAAA,MAAA,EAAA,CAAA,kwJAAA,CAAA,EAAA;;;AE1CvC;;;;;;;;;;AAUG;MA2CU,iBAAiB,CAAA;AACX,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE1B,IAAA,OAAO;AAE7B;;;AAGG;IACH,OAAO,GAAG,KAAK,CAAkB,MAAM;gFAAC;AAExC;;;AAGG;IACH,SAAS,GAAG,KAAK,CAAU,IAAI;kFAAC;AAEhC;;;AAGG;IACH,SAAS,GAAG,KAAK,CAAC,QAAQ;kFAAU;AAEpC;;;AAGG;IACH,WAAW,GAAG,KAAK,CAAS,UAAU;oFAAC;AAEvC;;;AAGG;IACH,aAAa,GAAG,KAAK,CAAS,UAAU;sFAAC;;IAGzC,UAAU,GAAG,MAAM,CAAS,CAAC;mFAAC;;AAG9B,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG;IAChC,CAAC;sFAAC;IAEF,eAAe,GAAA;;QAEb,IAAI,CAAC,gBAAgB,EAAE;;AAGvB,QAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ;AAClD,aAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;aACtB,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAE3C,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC;IACnE;;IAGQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;QAC9D;IACF;;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACvC;AAEA,IAAA,eAAe,CAAC,KAAoB,EAAA;AAClC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,MAAM,EAAE;QACf;IACF;AAEA,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,OAAO;AACL,YAAA,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;SACnE;IACH,CAAC;wFAAC;uGAhFS,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,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mCAAA,EAAA,aAAA,EAAA,oCAAA,EAAA,cAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6nHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhCS,eAAe,oKAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAwC7B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA1C7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,CAAC,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BT,EAAA,IAAA,EAEK;AACJ,wBAAA,qCAAqC,EAAE,aAAa;AACpD,wBAAA,sCAAsC,EAAE,cAAc;AACtD,wBAAA,IAAI,EAAE,QAAQ;AACf,qBAAA,EAAA,MAAA,EAAA,CAAA,6nHAAA,CAAA,EAAA;;sBAKA,SAAS;uBAAC,SAAS;;;AC1EtB;;;;;;;;;;;;;;AAcG;MAOU,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,mECvB1B,gGAGA,EAAA,MAAA,EAAA,CAAA,ypGAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FDoBa,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;+BACE,SAAS,EAAA,aAAA,EAGJ,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,gGAAA,EAAA,MAAA,EAAA,CAAA,ypGAAA,CAAA,EAAA;;;AEnBvC;MAIa,4BAA4B,CAAA;uGAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AACnC,iBAAA;;;ACGD;;;;;;;;;;;;;;;;;;;;AAoBG;MAQU,iBAAiB,CAAA;AAC5B,IAAA,IAAI,GAAG,KAAK;wFAAY;IACxB,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;IACzB,MAAM,GAAG,KAAK,CAAU,KAAK;+EAAC;IAC9B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;AAChC,IAAA,KAAK,GAAG,KAAK;yFAAmB;IAChC,OAAO,GAAG,KAAK,CAAkB,SAAS;gFAAC;IAElC,WAAW,GAAG,YAAY,CAAC,4BAA4B;oFAAC;IACxD,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;uFAAC;uGATnD,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,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQQ,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5ClE,okBAoBA,48HDWY,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKZ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,WACf,CAAC,aAAa,CAAC,EAAA,aAAA,EAGT,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,okBAAA,EAAA,MAAA,EAAA,CAAA,o5HAAA,CAAA,EAAA;soBAUD,4BAA4B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEvBlE;;;;;;AAMG;MAoCU,kBAAkB,CAAA;IAC7B,KAAK,GAAG,KAAK,CAAa,EAAE;8EAAC;IAC7B,KAAK,GAAG,KAAK,CAAgB,aAAa;8EAAC;AAC3C;;;AAGG;IACH,aAAa,GAAG,KAAK,CAAgB,IAAI;sFAAC;IAC1C,aAAa,GAAG,MAAM,EAAU;uGARrB,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,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/BS,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,mIAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAiC9D,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnC9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;oBACzB,OAAO,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,CAAC;AAC1E,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA;AACF,iBAAA;;;ACtDD;;;;;;;;;AASG;MAkDU,oBAAoB,CAAA;IAC/B,KAAK,GAAG,KAAK,CAAgB,aAAa;8EAAC;IAC3C,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;AACvB,IAAA,QAAQ,GAAG,KAAK;4FAAY;IAC5B,aAAa,GAAG,KAAK,CAAC,WAAW;sFAAC;IAClC,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,SAAS,GAAG,KAAK,CAAa,EAAE;kFAAC;IACjC,UAAU,GAAG,KAAK,CAAa,EAAE;mFAAC;IAClC,YAAY,GAAG,KAAK,CAAC,QAAQ;qFAAwB;IACrD,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAU;IACjC,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IAErB,MAAM,GAAG,MAAM,EAAQ;IACvB,MAAM,GAAG,MAAM,EAAQ;IAEN,OAAO,GAAG,SAAS,CAAC,cAAc;gFAAC;IAEpD,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;IACzB;uGAnBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAeM,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7DzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA7CS,cAAc,yPAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,mIAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA+ClF,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjDhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE,CAAC,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,CAAC;AAC9F,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA;AACF,iBAAA;6nCAgBsC,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC9DrD,MAAM,0BAA0B,GAA+C;IAC7E,UAAU,EAAE,CAAC,cAAc,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MAQU,iBAAiB,CAAA;AAC5B;;;AAGG;IACH,KAAK,GAAG,KAAK,CAAgB,aAAa;8EAAC;AAE3C;;;AAGG;IACH,KAAK,GAAG,KAAK,CAAa,EAAE;8EAAC;AAE7B;;;AAGG;IACH,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;AAEhC;;;;;;;;;;;AAWG;IACH,gBAAgB,GAAG,KAAK,CACtB,0BAA0B;yFAC3B;AAED;;;;;;;;;AASG;AACH,IAAA,eAAe,GAAG,KAAK;mGAAY;AAEnC;;;AAGG;IACH,aAAa,GAAG,KAAK,CAAS,WAAW;sFAAC;AAE1C;;;;AAIG;IACH,aAAa,GAAG,KAAK,CAAS,CAAC;sFAAC;AAEhC;;AAEG;AACH,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAa;AACzB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,QAAQ,EAAE,KAAK;SAChB;AACD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ;QAEjD,OAAO;AACL,YAAA,GAAG,IAAI;AACP,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,0BAA0B,CAAC;SAC3D;IACH,CAAC;qFAAC;AAEF;;;AAGG;AACH,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,IAAI,EAAE;AAClD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;AACrD,YAAA,OAAO,IAAI,GAAI,CAAC,YAAY,CAAgB,GAAI,CAAC,cAAc,CAAgB;QACjF;AACA,QAAA,OAAO,KAAK;IACd,CAAC;0FAAC;AAEF;;AAEG;IACH,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;AAEtB;;AAEG;AACM,IAAA,MAAM,GAAG,CAAA,iBAAA,EAAoB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AAE/E;;AAEG;IACH,kBAAkB,GAAG,MAAM,EAAY;AAEvC;;;;AAIG;IACH,MAAM,GAAG,MAAM,EAAQ;IAEN,OAAO,GAAG,SAAS,CAAC,oBAAoB;gFAAC;AAE1D;;;AAGG;AACH,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IACnD;AAEA;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;IACzB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;uGA9IW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAoHS,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7K3D,+2BA4BA,guHDwBY,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKhD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACE,aAAa,EAAA,OAAA,EACd,CAAC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,EAAA,aAAA,EAG7C,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,+2BAAA,EAAA,MAAA,EAAA,CAAA,wqHAAA,CAAA,EAAA;68BAsHA,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEjJ3D;;;;;;AAMG;MAOU,kBAAkB,CAAA;IACpB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,UAAU,GAAG,KAAK,CAAsB,aAAa;mFAAC;IACtD,MAAM,GAAG,KAAK,CAAS,EAAE;+EAAC;IAC1B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;;IAEtC,eAAe,GAAG,KAAK,CAAS,gBAAgB;wFAAC;AACjD,IAAA,SAAS,GAAG,KAAK;6FAAsB;IAEvC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;IACrE,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;;IAE/B,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAE7B,KAAK,GAAG,KAAK,CAAkB,IAAI;8EAAC;IAE1B,YAAY,GAAG,SAAS,CAA+B,WAAW;qFAAC;AAEnE,IAAA,GAAG,GAAG,kBAAkB,CAAC,eAAe,CAAC;AACzC,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;2FAAC;IAC3E,iBAAiB,GAAG,QAAQ,CAAC,MAC9C,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA,OAAA,CAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;0FACpE;IACkB,gBAAgB,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA,MAAA,CAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;yFAClE;IACkB,SAAS,GAAG,MAAM,CAAC,KAAK;kFAAC;AACzB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,iBAAiB,EAAE,EACxB,IAAI,CAAC,gBAAgB,EAAE,EACvB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;;AAGkB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,IAAI,CAAC,KAAK,EAAE,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,eAAe,EAAE;AACjD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;AAC5C,QAAA,OAAO,CAAA,EAAG,KAAK,CAAC,MAAM,iBAAiB;IACzC,CAAC;sFAAC;IAEO,SAAS,GAAG,MAAM,EAAc;IAChC,UAAU,GAAG,MAAM,EAAc;AAE1C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;gBACzB,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa;AAC7C,gBAAA,IAAI,EAAE;AAAE,oBAAA,EAAE,CAAC,KAAK,GAAG,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAA0B;AAChD,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK;AAC9B,QAAA,MAAM,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI;AAC9D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;IAEA,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;IAC7C;IAEA,KAAK,GAAA;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7D,IAAI,EAAE,YAAY,gBAAgB;YAAE,EAAE,CAAC,KAAK,EAAE;IAChD;uGA9FW,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,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzC/B,45DA6DA,EAAA,MAAA,EAAA,CAAA,itMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxBY,uBAAuB,uIAAE,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIhD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,45DAAA,EAAA,MAAA,EAAA,CAAA,itMAAA,CAAA,EAAA;21DA4Bc,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MExD1E,eAAe,CAAA;IAC1B,WAAW,GAAG,KAAK,CAAoC,EAAE;oFAAC;IAC1D,KAAK,GAAG,KAAK,CAAkC,EAAE;8EAAC;AAElD,IAAA,QAAQ,CAAC,GAAW,EAAA;AAClB,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG;IAC5B;uGANW,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,WAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECT5B,ytBAwBA,EAAA,MAAA,EAAA,CAAA,8qGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjBY,eAAe,oKAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE7B,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EAGZ,CAAC,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,ytBAAA,EAAA,MAAA,EAAA,CAAA,8qGAAA,CAAA,EAAA;;;ME8B9B,aAAa,CAAA;IACxB,OAAO,GAAG,KAAK,CAAc,aAAa;gFAAC;IAC3C,KAAK,GAAG,KAAK,CAAY,mBAAmB;8EAAC;IAC7C,IAAI,GAAG,KAAK,CAAW,IAAI;6EAAC;IAC5B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAEhC,OAAO,GAAG,MAAM,EAAQ;AAExB,IAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,KAAK,oBAAoB,IAAI,CAAC,KAAK,gBAAgB;AAAE,YAAA,OAAO,cAAc;QAC/E,IAAI,CAAC,KAAK,aAAa;AAAE,YAAA,OAAO,WAAW;QAC3C,IAAI,CAAC,KAAK,eAAe;AAAE,YAAA,OAAO,aAAa;AAC/C,QAAA,OAAO,aAAa;IACtB,CAAC;+FAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,OAAO,GAAG;YACd,SAAS;AACT,YAAA,CAAA,SAAA,EAAY,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE;AAC5B,YAAA,CAAA,SAAA,EAAY,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE;AAC1B,YAAA,CAAA,SAAA,EAAY,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE;SAC1B;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnC;AAEA,QAAA,OAAO,OAAO;IAChB,CAAC;sFAAC;uGA7BS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,4lBCrC1B,u/BA6BA,EAAA,MAAA,EAAA,CAAA,kn8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDIY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,oKAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI3C,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,WACV,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,u/BAAA,EAAA,MAAA,EAAA,CAAA,kn8BAAA,CAAA,EAAA;;;AE/BzD;MAIa,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;AAGD;MAIa,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,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;AAGD;MAIa,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;;AAGD;MAIa,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;AAGD;MAIa,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;;ACDD;;;;;;;;;;;;;;;;;AAiBG;MAQU,aAAa,CAAA;;IAExB,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAU;;IAGhC,QAAQ,GAAG,KAAK,CAAqB,SAAS;iFAAC;;IAG/C,aAAa,GAAG,KAAK,CAAyB,SAAS;sFAAC;;IAGxD,eAAe,GAAG,KAAK,CAAyB,SAAS;wFAAC;;IAG1D,MAAM,GAAG,KAAK,CAAW,EAAE;+EAAC;;IAG5B,eAAe,GAAG,KAAK,CAAqB,SAAS;wFAAC;AAEtD;;;;AAIG;IACH,yBAAyB,GAAG,KAAK,CAAqB,SAAS;kGAAC;AAEhE;;;AAGG;IACH,gBAAgB,GAAG,KAAK,CAAqB,SAAS;yFAAC;;IAGvD,SAAS,GAAG,KAAK,CAAgB,QAAQ;kFAAC;;IAG1C,IAAI,GAAG,KAAK,CAAW,IAAI;6EAAC;;IAG5B,UAAU,GAAG,KAAK,CAAU,KAAK;mFAAC;IAEzB,UAAU,GAAG,YAAY,CAAC,yBAAyB;mFAAC;IACpD,SAAS,GAAG,YAAY,CAAC,wBAAwB;kFAAC;IAClD,YAAY,GAAG,YAAY,CAAC,2BAA2B;qFAAC;IACxD,WAAW,GAAG,YAAY,CAAC,0BAA0B;oFAAC;IACtD,WAAW,GAAG,YAAY,CAAC,0BAA0B;oFAAC;IAEtD,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;sFAAC;IACnD,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;qFAAC;IACjD,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;wFAAC;IACvD,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;uFAAC;IACrD,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;uFAAC;uGAnDnD,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,mnDAyCW,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC1B,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACrB,2BAA2B,8FAC5B,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC1B,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClGhE,24JA2IA,yvND3FY,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,4HAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKxD,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,OAAA,EACV,CAAC,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,CAAC,EAAA,aAAA,EAGrD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,24JAAA,EAAA,MAAA,EAAA,CAAA,isNAAA,CAAA,EAAA;AA2CF,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,yBAAyB,2FAC1B,wBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACrB,2BAA2B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAC5B,0BAA0B,6FAC1B,0BAA0B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE/FhE;;AAEG;MAUU,sBAAsB,CAAA;;IAEjC,eAAe,GAAG,KAAK,CAAU,IAAI;wFAAC;;IAGtC,aAAa,GAAG,MAAM,CAAU,KAAK;sFAAC;;IAEtC,UAAU,GAAG,MAAM,CAAS,QAAQ;mFAAC;AAErC;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B;IACF;AAEA;;;AAGG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC;uGA3BW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,IAAI,EAAE;AACJ,wBAAA,QAAQ,EAAE,cAAc;AACxB,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,oBAAoB,EAAE,cAAc;AACrC,qBAAA;AACF,iBAAA;;AA+BD;;;;;;;;;;;AAWG;MAOU,sBAAsB,CAAA;IACxB,QAAQ,GAAG,KAAK,CAAW,IAAI;iFAAC;uGAD9B,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJvB,CAAA,mDAAA,CAAqD,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,w8FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrD,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,QAAA,EACpB,CAAA,mDAAA,CAAqD,EAAA,OAAA,EACtD,CAAC,aAAa,CAAC,EAAA,MAAA,EAAA,CAAA,w8FAAA,CAAA,EAAA;;;AC5C1B,MAAM,uBAAuB,GAAG,IAAI;AACpC;AACA;AACA;AACA,MAAM,mBAAmB,GAAG,GAAG;AAC/B,MAAM,QAAQ,GAAG,CAAC;AAClB,MAAM,QAAQ,GAAG,CAAC;AAClB,MAAM,SAAS,GAAG,IAAI;AAKtB,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;AACpD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;AAC5C;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;MAOU,qBAAqB,CAAA;;IAEvB,IAAI,GAAG,KAAK,CAAU,KAAK;6EAAC;;IAG5B,SAAS,GAAG,KAAK,CAAc,IAAI;kFAAC;;IAGpC,KAAK,GAAG,KAAK,CAAoB,WAAW;8EAAC;AAEtD;;;;AAIG;IACM,WAAW,GAAG,KAAK,CAAgB,IAAI;oFAAC;;IAGxC,aAAa,GAAG,KAAK,CAAS,uBAAuB;sFAAC;;IAGtD,KAAK,GAAG,KAAK,CAAS,cAAc;8EAAC;;IAGrC,YAAY,GAAG,KAAK,CAAS,MAAM;qFAAC;;IAGpC,SAAS,GAAG,KAAK,CAAS,MAAM;kFAAC;;IAGjC,cAAc,GAAG,KAAK,CAAS,YAAY;uFAAC;;IAG5C,OAAO,GAAG,MAAM,EAAQ;;IAGxB,SAAS,GAAG,MAAM,EAAQ;;IAG1B,UAAU,GAAG,MAAM,EAAQ;IAEnB,UAAU,GAAG,SAAS,CAACC,uBAAwB;mFAAC;IAE9C,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,SAAS;yFAAC;IAChE,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,OAAO;gFAAC;IAClD,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI;iFAAC;;IAGrD,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;6FAAC;;;;AAKhE,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,SAAS;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzC,QAAA,OAAO,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,KAAK;IACvE,CAAC;uFAAC;AAEe,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,SAAS;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzC,QAAA,OAAO,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,KAAK,GAAG,mBAAmB;IACvE,CAAC;wFAAC;;;;;;;AAQe,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC;AAC/E,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9D,CAAC;mFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,OAAO,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;IACpE,CAAC;mFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,OAAO,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;IACtE,CAAC;oFAAC;IAEiB,OAAO,GAAG,QAAQ;IAClB,OAAO,GAAG,QAAQ;IAClB,QAAQ,GAAG,SAAS;IAEpB,IAAI,GAAG,MAAM,CAAC,QAAQ;6EAAC;IACvB,YAAY,GAAG,MAAM,CAAC,KAAK;qFAAC;;;;;;IAO9B,aAAa,GAAG,MAAM,CAAoB,IAAI;sFAAC;IAC/C,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;4EAAC;AAE1B,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;mFAAC;AACnE,IAAA,SAAS,GAAG,QAAQ,CAAiB,OAAO;AAC7D,QAAA,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;AAClB,QAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AAC/B,QAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;KAChC,CAAC;kFAAC;AAEH,IAAA,WAAA,GAAA;;;;;QAKE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;;;;;;AAOU,IAAA,iBAAiB,CAAC,KAAqB,EAAA;QAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;IACtE;AAEU,IAAA,WAAW,CAAC,KAAY,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,aAAa,CAAC;IACjE;AAEU,IAAA,cAAc,CAAC,IAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;AAEU,IAAA,MAAM,SAAS,GAAA;AACvB,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1D,QAAA,MAAM,IAAI,GAAG,YAAY,EAAE,IAAI;AAC/B,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACtB;IAEU,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;;;;;;;;;IAUQ,QAAQ,CAAC,GAA6B,EAAE,KAAa,EAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAC/E,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACvB;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;YAC5B,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;SAC7B;IACH;uGAjLW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyCQA,uBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvHlE,osDAoDA,mrHDsBYA,uBAAwB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIxD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,CAACA,uBAAwB,EAAE,cAAc,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,osDAAA,EAAA,MAAA,EAAA,CAAA,2nHAAA,CAAA,EAAA;wrCA6C5BA,uBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AErHlE,MAAM,mBAAmB,GAAG,GAAG;AAC/B,MAAM,wBAAwB,GAAG,EAAE;AAEnC;;;;;;AAMG;MAYU,kBAAkB,CAAA;IAC7B,mBAAmB,GAAG,KAAK,CAAS,mBAAmB;4FAAC;IAExD,WAAW,GAAG,MAAM,EAAQ;IAEpB,SAAS,GAAyC,IAAI;IACtD,MAAM,GAAG,CAAC;IACV,MAAM,GAAG,CAAC;IACV,SAAS,GAAG,KAAK;AAEzB,IAAA,iBAAiB,CAAC,KAAmB,EAAA;QACnC,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AAEzD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACzB,QAAA,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAChC;AAEA,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;YAAE;QAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AACrF,QAAA,IAAI,QAAQ,GAAG,wBAAwB,EAAE;YACvC,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IACzB;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;IACF;uGAhDW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,IAAI,EAAE;AACJ,wBAAA,eAAe,EAAE,2BAA2B;AAC5C,wBAAA,aAAa,EAAE,oBAAoB;AACnC,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,gBAAgB,EAAE,oBAAoB;AACtC,wBAAA,eAAe,EAAE,2BAA2B;AAC5C,wBAAA,SAAS,EAAE,qBAAqB;AACjC,qBAAA;AACF,iBAAA;;;ACbD;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAQU,aAAa,CAAA;;IAExB,KAAK,GAAG,KAAK,CAAgB,aAAa;8EAAC;;IAG3C,KAAK,GAAG,KAAK,CAAa,EAAE;8EAAC;IAE7B,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;AAEvB;;;AAGG;AACH,IAAA,eAAe,GAAG,KAAK;mGAAY;;IAGnC,aAAa,GAAG,KAAK,CAAC,WAAW;sFAAC;;IAGlC,YAAY,GAAG,KAAK,CAAC,EAAE;qFAAC;IACxB,gBAAgB,GAAG,KAAK,CAAa,EAAE;yFAAC;IACxC,iBAAiB,GAAG,KAAK,CAAa,EAAE;0FAAC;;IAGzC,YAAY,GAAG,MAAM,EAAY;;IAGjC,MAAM,GAAG,MAAM,EAAQ;IAEd,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;AACtB,IAAA,MAAM,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;IAErD,OAAO,GAAG,SAAS,CAAC,oBAAoB;gFAAC;AAE1D,IAAA,mBAAmB,CAAC,KAAa,EAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QAChC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;IACF;AAEA;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;IACzB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;uGAxDW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgCa,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxE3D,gtBA0BA,slHDSY,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKhD,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;+BACE,SAAS,EAAA,OAAA,EACV,CAAC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,EAAA,aAAA,EAG7C,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,gtBAAA,EAAA,MAAA,EAAA,CAAA,8hHAAA,CAAA,EAAA;6/BAkCA,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtE3D;MAIa,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;AAGD;MAIa,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;;AAGD;MAIa,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA;;AAGD;MAIa,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA;;;MCOY,eAAe,CAAA;;IAE1B,OAAO,GAAG,KAAK,CAAgB,MAAM;gFAAC;;IAGtC,QAAQ,GAAG,KAAK,CAAS,GAAG;iFAAC;;IAG7B,OAAO,GAAG,KAAK,CAAqB,SAAS;gFAAC;;IAG9C,OAAO,GAAG,KAAK,CAAS,MAAM;gFAAC;;IAG/B,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;;IAGhD,cAAc,GAAG,KAAK,CAAqB,SAAS;uFAAC;;IAGrD,SAAS,GAAG,KAAK,CAAS,EAAE;kFAAC;;IAG7B,WAAW,GAAG,KAAK,CAAU,KAAK;oFAAC;;IAGnC,iBAAiB,GAAG,KAAK,CAAU,KAAK;0FAAC;;IAGzC,iBAAiB,GAAG,KAAK,CAAU,IAAI;0FAAC;;IAGxC,aAAa,GAAG,MAAM,EAAQ;IAErB,QAAQ,GAAG,YAAY,CAAC,uBAAuB;iFAAC;IAChD,UAAU,GAAG,YAAY,CAAC,yBAAyB;mFAAC;IACpD,UAAU,GAAG,YAAY,CAAC,yBAAyB;mFAAC;IACpD,WAAW,GAAG,YAAY,CAAC,0BAA0B;oFAAC;IAEtD,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS;kFAAC;IAExD,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;oFAAC;AAC/C,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;sFAAC;AACxE,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE;yFAAC;AACnF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;sFAAC;AACxE,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;uFAAC;IAE5E,UAAU,GAAG,QAAQ,CAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;mFAC7E;IAEQ,cAAc,GAAG,MAAM,CAAC,KAAK;uFAAC;IAEvC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;uGA3DW,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,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkCO,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACrB,yBAAyB,6FACzB,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACxB,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnEhE,40EAsEA,EAAA,MAAA,EAAA,CAAA,8lKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7CY,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,oKAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAK9C,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACE,WAAW,EAAA,OAAA,EACZ,CAAC,eAAe,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,aAAA,EAG3C,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,40EAAA,EAAA,MAAA,EAAA,CAAA,8lKAAA,CAAA,EAAA;AAoCJ,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,uBAAuB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACrB,yBAAyB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACzB,yBAAyB,6FACxB,0BAA0B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhEhE;;;AAGG;AAIG,MAAO,kBAAmB,SAAQ,YAAY,CAAA;AAC1C,IAAA,OAAgB,UAAU,GAAG,GAAG;IAgB/B,SAAS,CAChB,KAAyC,EACzC,YAAqB,EACrB,OAAgE,EAChE,UAAmB,EACnB,MAAe,EAAA;AAEf,QAAA,MAAM,aAAa,GAAG,YAAY,KAAK,KAAK,GAAG,kBAAkB,CAAC,UAAU,GAAG,OAAO;AACtF,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAClC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,CACxE;IACH;AAEQ,IAAA,wBAAwB,CAAC,KAAoB,EAAA;;QAEnD,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC,sBAAsB,CAAC;QAClD,IAAI,KAAK,EAAE;YACT,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;AAC9C,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;;AAEtB,YAAA,OAAO,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,GAAG,KAAK;QAC9C;;AAEA,QAAA,OAAO,KAAK;IACd;uGAzCW,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AACnB,iBAAA;;;MCYY,oBAAoB,CAAA;;IAEtB,KAAK,GAAG,KAAK,CAAS,EAAE;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IAC1B,IAAI,GAAG,KAAK,CAAS,IAAI;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IAC3B,KAAK,GAAG,KAAK,CAAU,mBAAmB;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IAC5C,QAAQ,GAAG,KAAK,CAAU,KAAK;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IACjC,YAAY,GAAG,KAAK,CAAe,OAAO;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IAC5C,KAAK,GAAG,KAAK,CAAS,CAAC;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IACzB,aAAa,GAAG,KAAK,CAAS,CAAC;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IACjC,aAAa,GAAG,KAAK,CAAS,CAAC;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;IACjC,QAAQ,GAAG,KAAK,CAAW,KAAK;AAAC,IAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAC;;AAGlC,IAAA,WAAW,GAAG,MAAM,EAAc,CAAC;;AAGlC,IAAA,WAAW,CAAC,KAAiB,EAAA;;AAErC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;uGAxBW,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,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kCAAA,EAAA,6BAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBjC,ksBAsBA,EAAA,MAAA,EAAA,CAAA,s2GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDVY,eAAe,+JAAE,kBAAkB,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FASlC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAClB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EAAA,aAAA,EAG/B,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,oCAAoC,EAAE,2BAA2B;AAClE,qBAAA,EAAA,QAAA,EAAA,ksBAAA,EAAA,MAAA,EAAA,CAAA,s2GAAA,CAAA,EAAA;;;AEPH;;;;;;AAMG;MAQU,cAAc,CAAA;AACzB;;;AAGG;IACH,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAU;AAEhC;;;AAGG;IACH,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAU;AAE/B;;;AAGG;IACH,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE1E;;;AAGG;IACH,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;AAE/B;;;AAGG;AACH,IAAA,EAAE,GAAG,KAAK;sFAAU;AAEpB;;;AAGG;IACH,KAAK,GAAG,MAAM,EAAc;AAE5B;;;AAGG;IACH,QAAQ,GAAG,MAAM,EAAU;AAE3B;;AAEG;IACc,QAAQ,GAAG,MAAM,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;iFAAC;AAEzF;;AAEG;AACM,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;gFAAC;AAE/D;;AAEG;AACM,IAAA,cAAc,GAAG,QAAQ,CAAC,OAAO;AACxC,QAAA,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,EAAE,OAAgB;KACvB,CAAC;uFAAC;AAEH;;;;;AAKG;AACH,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAE9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC;IACF;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB;AAEA;;;;;AAKG;AACH,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB;IACF;uGA/GW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B3B,spBAoBA,EAAA,MAAA,EAAA,CAAA,29IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCY,YAAY,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,CAAC,YAAY,CAAC,EAAA,aAAA,EAGR,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,spBAAA,EAAA,MAAA,EAAA,CAAA,29IAAA,CAAA,EAAA;;;AEJvC;;;AAGG;MA6CU,mBAAmB,CAAA;IACrB,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAU;IAC/B,OAAO,GAAG,KAAK,CAAqB,EAAE;gFAAC;IACvC,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;IAErE,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;AAExB,IAAA,GAAG,GAAG,kBAAkB,CAAC,gBAAgB,CAAC;AAC1C,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IACzD,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;uGAzBU,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,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzCpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAvCS,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA0ChE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA5C/B,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,cAAc,EAAE,uBAAuB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAClE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uIAAA,CAAA,EAAA;;;AC7DH,MAAM,UAAU,GAAG;AACjB,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;CACN;MAOY,eAAe,CAAA;;IAEjB,IAAI,GAAG,KAAK,CAAa,EAAE;6EAAC;;IAE5B,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAC/C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAEO,UAAU,GAAG,KAAK,CAAS,CAAC;mFAAC;;IAG7B,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;AAEtC,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;kFAAC;uGAbjD,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,klBCnB5B,kXAYA,EAAA,MAAA,EAAA,CAAA,48GAAA,CAAA,EAAA,CAAA;;2FDOa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,WAAW,EAAA,QAAA,EAAA,kXAAA,EAAA,MAAA,EAAA,CAAA,48GAAA,CAAA,EAAA;;;AEFvB;;;;;;AAMG;MAmBU,iBAAiB,CAAA;IACnB,OAAO,GAAG,KAAK,CAAgB,IAAI;gFAAC;IACpC,IAAI,GAAG,KAAK,CAAe,QAAQ;6EAAC;AAE5B,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEjC,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AACjC,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;IACrE,CAAC;yFAAC;uGATS,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,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBlB,CAAA;;;;;;;;;;AAUN,KAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAMO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUN,KAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,mBAAmB;AAC3B,qBAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACtC,iBAAA;;;ACnCD;;;;;AAKG;MAsBU,gBAAgB,CAAA;IAClB,UAAU,GAAG,KAAK,CAAC,QAAQ;mFAAU;IACrC,WAAW,GAAG,KAAK,CAAC,QAAQ;oFAAU;IACtC,MAAM,GAAG,KAAK,CAAW,EAAE;+EAAC;IAC5B,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;AAE5B,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oFAC3D;uGARU,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,YAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBjB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,whIAAA,CAAA,EAAA,CAAA;;2FAGU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,QAAA,EACZ;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,whIAAA,CAAA,EAAA;;;ACtBI,MAAM,SAAS,GAAG,CAAC,IAAe,KAAI;IAC3C,QAAQ,IAAI;AACV,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,cAAc;AACvB,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,cAAc;AACvB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,MAAM;;AAEnB;MAgCa,YAAY,CAAA;IACN,YAAY,GAAG,MAAM,CAAgB,EAAE;qFAAC;AAEhD,IAAA,MAAM,GAAG,QAAQ,CAAkB,MAC1C,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;QAClC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9B,QAAA,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ;AAC7E,QAAA,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACzB,KAAA,CAAC,CAAC;+EACJ;IAED,IAAI,CAAC,OAAe,EAAE,MAAgC,EAAA;AACpD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAgB;YAC1B,EAAE;YACF,OAAO;YACP,KAAK,EAAE,MAAM,EAAE,KAAK;AACpB,YAAA,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM;AAC5B,YAAA,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI;AACxC,YAAA,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;AACtC,YAAA,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,KAAK;SACpC;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3D,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE;AAC9C,YAAA,MAAM,CAAC,UAAU,CAAC,MAAK;AACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,YAAA,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;QACvB;AAEA,QAAA,OAAO,EAAE;IACX;IAEA,IAAI,CAAC,OAAe,EAAE,MAA8C,EAAA;AAClE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxD;IAEA,OAAO,CAAC,OAAe,EAAE,MAA8C,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3D;IAEA,OAAO,CAAC,OAAe,EAAE,MAA8C,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3D;IAEA,KAAK,CAAC,OAAe,EAAE,MAA8C,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACzD;AAEA,IAAA,OAAO,CAAC,EAAU,EAAA;QAChB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3B;IAEQ,QAAQ,GAAA;QACd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM,EAAE;;AAE3D,YAAA,OAAO,MAAM,CAAC,UAAU,EAAE;QAC5B;AAEA,QAAA,OAAO,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;IAC9D;uGAtEW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MChCY,uBAAuB,CAAA;AACjB,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAC3C,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;IAE1C,SAAS,CAAC,CAAS,EAAE,KAAoB,EAAA;QACvC,OAAO,KAAK,CAAC,EAAE;IACjB;AAEA,IAAA,OAAO,CAAC,EAAU,EAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/B;uGAVW,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,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdpC,uiCAmCA,EAAA,MAAA,EAAA,CAAA,i/HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1BY,eAAe,oKAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAK7B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;+BACE,oBAAoB,EAAA,OAAA,EACrB,CAAC,eAAe,EAAE,aAAa,CAAC,EAAA,aAAA,EAG1B,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,uiCAAA,EAAA,MAAA,EAAA,CAAA,i/HAAA,CAAA,EAAA;;;AEEvC;;;;;;AAMG;MAqDU,eAAe,CAAA;IACjB,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAE/B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,IAAI,GAAG,KAAK,CAAiB,SAAS;6EAAC;;IAEvC,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;AAE3D,IAAA,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC;AACrC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,iBAAiB,GAAG,QAAQ,CAC7C,MACE,IAAI,CAAC,SAAS,EAAE;AAChB,SAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC;0FACzF;AAEkB,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAC3B;oFACF;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IACjC;AAEA,IAAA,OAAO,CAAC,KAAY,EAAA;QAClB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACnC;uGAzCW,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,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjDhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+iLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/CS,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAkDvB,eAAe,EAAA,UAAA,EAAA,CAAA;kBApD3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EACZ,CAAC,wBAAwB,CAAC,EAAA,QAAA,EACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+iLAAA,CAAA,EAAA;;;MCrDU,gBAAgB,CAAA;IAC3B,IAAI,GAAG,KAAK,CAAS,EAAE;6EAAC;IACxB,QAAQ,GAAG,KAAK,CAAkB,KAAK;iFAAC;IACxC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,SAAS,GAAG,KAAK,CAAS,GAAG;kFAAC;IAC9B,SAAS,GAAG,KAAK,CAAS,GAAG;kFAAC;IAEb,OAAO,GAAG,MAAM,CAAU,KAAK;gFAAC;IACzC,aAAa,GAAkB,IAAI;IACnC,aAAa,GAAkB,IAAI;AAElC,IAAA,SAAS,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AAE5E,IAAA,IACI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;IAChE;IAIA,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;QACrC,IAAI,CAAC,YAAY,EAAE;IACrB;IAIA,kBAAkB,GAAA;QAChB,IAAI,CAAC,YAAY,EAAE;IACrB;AAES,IAAA,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;IAEtC,YAAY,GAAA;QAClB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE;AAEpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB;QACF;QAEA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB,CAAC,EAAE,KAAK,CAAC;IACX;IAEQ,YAAY,GAAA;QAClB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;QACF;QAEA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,CAAC,EAAE,KAAK,CAAC;IACX;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAC/B,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;IACF;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAC/B,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;IACF;uGA3EW,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,87BCjB7B,+QAcA,EAAA,MAAA,EAAA,CAAA,o/GAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FDGa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACE,YAAY,EAAA,aAAA,EAGP,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,+QAAA,EAAA,MAAA,EAAA,CAAA,o/GAAA,CAAA,EAAA;;sBAepC,WAAW;uBAAC,uBAAuB;;sBAKnC,YAAY;uBAAC,YAAY;;sBACzB,YAAY;uBAAC,SAAS;;sBAMtB,YAAY;uBAAC,YAAY;;sBACzB,YAAY;uBAAC,UAAU;;;AEzC1B;;;;;;;;AAQG;MACU,aAAa,CAAA;IACf,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;IACtB,SAAS,GAAG,MAAM,CAAC,KAAK;kFAAC;IACzB,gBAAgB,GAAG,MAAM,CAAC,CAAC;yFAAC;IAE7B,YAAY,GAAyC,IAAI;;IAGjE,IAAI,GAAA;QACF,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA;;;;;AAKG;AACH,IAAA,aAAa,CAAC,QAAqB,EAAE,KAAK,GAAG,GAAG,EAAA;AAC9C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB,QAAQ,IAAI;QACd,CAAC,EAAE,KAAK,CAAC;IACX;;IAGA,KAAK,GAAA;QACH,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AAC7B,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B;AAEA;;;;;;;AAOG;IACH,mBAAmB,CAAC,KAAoB,EAAE,UAAkB,EAAA;AAC1D,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,IAAI,UAAU,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK;gBAClC,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC;AACrE,gBAAA,OAAO,IAAI;AACb,YAAA,KAAK,SAAS;gBACZ,IAAI,UAAU,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK;gBAClC,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAC5E;AACD,gBAAA,OAAO,IAAI;AACb,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,OAAO,IAAI;AACb,YAAA;AACE,gBAAA,OAAO,KAAK;;IAElB;AACD;AAED;AACM,SAAU,gBAAgB,CAAC,SAAiB,EAAE,KAAa,EAAA;AAC/D,IAAA,OAAO,CAAA,EAAG,SAAS,CAAA,QAAA,EAAW,KAAK,EAAE;AACvC;AAEA;;;AAGG;SACa,0BAA0B,CACxC,SAAiB,EACjB,UAAkB,EAClB,gBAAwB,EAAA;IAExB,IAAI,UAAU,KAAK,CAAC;AAAE,QAAA,OAAO,SAAS;AACtC,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;AACzE,IAAA,OAAO,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AAC/C;;AClEA;;;;;;;;;;;;;;AAcG;MAgBU,oBAAoB,CAAA;IACtB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,WAAW,GAAG,KAAK,CAAS,WAAW;oFAAC;;IAExC,SAAS,GAAG,KAAK,CAAS,MAAM;kFAAC;;IAEjC,UAAU,GAAG,KAAK,CAAS,OAAO;mFAAC;;IAEnC,WAAW,GAAG,KAAK,CAAqB,EAAE;oFAAC;;IAE3C,gBAAgB,GAAG,KAAK,CAAgB,IAAI;yFAAC;;IAE7C,OAAO,GAAG,KAAK,CAAqB,EAAE;gFAAC;AAChD;;;;;;;;AAQG;IACM,eAAe,GAAG,KAAK,CAA8B,IAAI;wFAAC;IAE1D,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;IAErE,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;;IAGzB,kBAAkB,GAAG,MAAM,EAAoB;;IAE/C,YAAY,GAAG,MAAM,EAAU;AAErB,IAAA,GAAG,GAAG,kBAAkB,CAAC,iBAAiB,CAAC;;AAE3C,IAAA,QAAQ,GAAG,IAAI,aAAa,EAAE;IAEhC,WAAW,GAAG,SAAS,CAAiB,aAAa;oFAAC;;AAGpD,IAAA,QAAQ,GAAG,QAAQ,CACpC,MAAM,CAAC,kBAAkB;SACtB,OAAO,CAAC,oBAAoB;SAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,EACtC,EAAE,YAAY,EAAE,KAAK,EAAE,CACxB;IAEkB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,OAAO;AAErC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;;AAGkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;iFAAC;IACzD,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;mFACtD;IACkB,eAAe,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;wFACjD;IAEkB,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE;yFAAC;IAE3D,eAAe,GAAG,QAAQ,CAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;wFAC1F;AAEkB,IAAA,QAAQ,GAAG,CAAC,KAAa,KAAK,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;AAEzE,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;QACpD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAAE,YAAA,OAAO,SAAS;QACxE,OAAO,0BAA0B,CAC/B,IAAI,CAAC,GAAG,CAAC,SAAS,EAClB,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,EACxB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CACjC;IACH,CAAC;2FAAC;AAEF,IAAA,aAAa,CAAC,IAAY,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;IAChC;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;IAC/B;;IAGA,gBAAgB,GAAA;QACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC;IAC/C;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACvB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IACxB;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAC7D,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YAAE;AAC1E,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC/D;iBAAO;gBACL,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;IACF;AAEA,IAAA,gBAAgB,CAAC,UAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACtC;uGAhJW,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,42ECtEjC,umMA6LA,EAAA,MAAA,EAAA,CAAA,oiIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnII,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,eAAe,oKACf,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,uBAAuB,uIACvB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAfhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB;wBACP,gBAAgB;wBAChB,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,iBAAiB;wBACjB,cAAc;wBACd,uBAAuB;wBACvB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,umMAAA,EAAA,MAAA,EAAA,CAAA,oiIAAA,CAAA,EAAA;+wDA+CwD,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzFxE;;;AAGG;MAaU,qBAAqB,CAAA;IACvB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,WAAW,GAAG,KAAK,CAAS,WAAW;oFAAC;IACxC,OAAO,GAAG,KAAK,CAAuB,EAAE;gFAAC;IACzC,cAAc,GAAG,KAAK,CAAS,CAAC;uFAAC;IAEjC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;IAErE,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;AAExB,IAAA,GAAG,GAAG,kBAAkB,CAAC,kBAAkB,CAAC;IAC5C,KAAK,GAAG,MAAM,CAAC,EAAE;8EAAC;;AAElB,IAAA,QAAQ,GAAG,IAAI,aAAa,EAAE;IAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,OAAO;AAErC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;AAEkB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;QAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI;IAC9D,CAAC;uFAAC;AAEiB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,IAAI,EAAE;sFAAC;AAElE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACjD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;wFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE;AAC/C,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE;AACrD,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE;IACrB,CAAC;oFAAC;AAEiB,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,KAAK;AACzC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;QACjC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,GAAG;IAC1C,CAAC;wFAAC;AAEiB,IAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,KAAK,CAAC;qFACpE;AAEkB,IAAA,QAAQ,GAAG,CAAC,KAAa,KAAK,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;IAEzE,kBAAkB,GAAG,QAAQ,CAAC,MAC/C,0BAA0B,CACxB,IAAI,CAAC,GAAG,CAAC,SAAS,EAClB,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAC7B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CACjC;2FACF;AAED,IAAA,kBAAkB,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE,EAAE;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB;IACF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;IAChC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAK;AAC/B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAChE,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AACnC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE;QAEvB,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YAAE;AAC3D,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC3D;IACF;AAEA,IAAA,YAAY,CAAC,GAAuB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;uGAnHW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxClC,0zFAqFA,EAAA,MAAA,EAAA,CAAA,y+HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtDI,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,KAAA,EAAA,MAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACP,cAAc;wBACd,aAAa;wBACb,iBAAiB;wBACjB,uBAAuB;wBACvB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,0zFAAA,EAAA,MAAA,EAAA,CAAA,y+HAAA,CAAA,EAAA;;;AENH;;;;;;AAMG;MAQU,eAAe,CAAA;IACjB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,KAAK,GAAG,KAAK,CAAgB,mBAAmB;8EAAC;IACjD,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IACtC,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,WAAW,GAAG,KAAK,CAAS,kBAAkB;oFAAC;IAC/C,OAAO,GAAG,KAAK,CAAiB,EAAE;gFAAC;IAEnC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;;IAErE,KAAK,GAAG,MAAM,EAAQ;IAEtB,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IACxB,aAAa,GAAG,KAAK,CAAS,CAAC;sFAAC;AAEhC,IAAA,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC;AAErC,IAAA,KAAK,GAAG,QAAQ,CAAiB,MAAK;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AAC3B,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC1B,SAAA,CAAC,CAAC;IACL,CAAC;8EAAC;AAEiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;AAED,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAE9B,YAAA,IAAI,YAAY,IAAI,IAAI,EAAE;AACxB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,YAAY,CAAC;AACpE,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC;IACJ;;AAGU,IAAA,qBAAqB,CAAC,KAAa,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;AAE7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC;IACvC;IAEU,gBAAgB,GAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;uGA1EW,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,qkEC5C5B,+pCAwCA,EAAA,MAAA,EAAA,CAAA,6qHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDY,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,uIAAE,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKnE,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACE,WAAW,EAAA,OAAA,EACZ,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,wBAAwB,CAAC,EAAA,aAAA,EAGhE,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,+pCAAA,EAAA,MAAA,EAAA,CAAA,6qHAAA,CAAA,EAAA;;;AElCvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCG;MAiCU,sBAAsB,CAAA;;IAEjC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;AAChC;;;AAGG;IACH,eAAe,GAAG,KAAK,CAAU,KAAK;wFAAC;AACvC;;;;AAIG;IACH,UAAU,GAAG,KAAK,CAAU,IAAI;mFAAC;;IAEjC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;IAEtC,cAAc,GAAG,MAAM,EAAW;IAClC,SAAS,GAAG,MAAM,EAAQ;AAE1B;;;;AAIG;AACc,IAAA,cAAc,GAAG,QAAQ,CACxC,MAAM,CAAC,kBAAkB;SACtB,OAAO,CAAC,oCAAoC;SAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,EACtC,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB;IACQ,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;kFAAC;;;;;IAMnD,eAAe,GAAG,KAAK;AAE/B,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACpD,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAAE;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;;;;AAYG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B;QACF;QACA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAAE;;;;AAInD,QAAA,IAAK,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,aAAa,CAAC;YAAE;QAC1D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5C;uGAvEW,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,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBvB;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uxGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3BS,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA8BhB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhClC,SAAS;+BACE,mBAAmB,EAAA,OAAA,EACpB,CAAC,iBAAiB,CAAC,kBACZ,CAAC,kBAAkB,CAAC,EAAA,IAAA,EAC9B;AACJ,wBAAA,2BAA2B,EAAE,YAAY;AACzC,wBAAA,SAAS,EAAE,qBAAqB;qBACjC,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uxGAAA,CAAA,EAAA;;;MChDU,gBAAgB,CAAA;IAC3B,KAAK,GAAG,KAAK,CAAgB,EAAE;8EAAC;IAChC,KAAK,GAAG,KAAK,CAAgB,aAAa;8EAAC;IAC3C,aAAa,GAAG,KAAK,CAAS,CAAC;sFAAC;IAChC,IAAI,GAAG,KAAK,CAAU,KAAK;6EAAC;IAC5B,oBAAoB,GAAG,KAAK,CAAU,IAAI;6FAAC;IAC3C,oBAAoB,GAAG,KAAK,CAAU,IAAI;6FAAC;IAE3C,YAAY,GAAG,MAAM,EAAe;IAEpC,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACtB;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAC/B,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,WAAW,CAAC,IAAiB,EAAE,KAAa,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;QACd;IACF;uGAjCW,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,umCCxB7B,8rEAkEA,EAAA,MAAA,EAAA,CAAA,+rJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlDY,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,wFAAE,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQhD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb,CAAC,eAAe,EAAE,aAAa,EAAE,iBAAiB,CAAC,EAAA,aAAA,EAG7C,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,oBAAoB,EAAE,SAAS;AAChC,qBAAA,EAAA,QAAA,EAAA,8rEAAA,EAAA,MAAA,EAAA,CAAA,+rJAAA,CAAA,EAAA;;sBA8BA,YAAY;uBAAC,yBAAyB;;;MEvC5B,eAAe,CAAA;IAC1B,MAAM,GAAG,KAAK,CAAS,MAAM;+EAAC;AAC9B,IAAA,UAAU,GAAG,KAAK;8FAAY;IAC9B,gBAAgB,GAAG,KAAK,CAAU,KAAK;yFAAC;AAExC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;QACnB;AAEA,QAAA,MAAM,WAAW,GAA6B;AAC5C,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,IAAI,EAAE,MAAM;SACb;QAED,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM;IAC7C;AAEA,IAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;AAChC,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,oBAAoB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,SAAS;AACjD,QAAA,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,OAAO;AAC7C,QAAA,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,OAAO;AAC7C,QAAA,oBAAoB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,SAAS;AACjD,QAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,MAAM;KAC5C,CAAC;wFAAC;uGA7BQ,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,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb5B,kqBAqBA,EAAA,MAAA,EAAA,CAAA,gyHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDZY,aAAa,wFAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI7B,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EACZ,CAAC,aAAa,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,kqBAAA,EAAA,MAAA,EAAA,CAAA,gyHAAA,CAAA,EAAA;;;AEM3C;;;AAGG;MAOU,cAAc,CAAA;IAChB,OAAO,GAAG,KAAK,CAAgB,EAAE;gFAAC;IAClC,IAAI,GAAG,KAAK,CAA4B,EAAE;6EAAC;IAC3C,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,aAAa,GAAG,KAAK,CAAgB,KAAK;sFAAC;IAC3C,iBAAiB,GAAG,KAAK,CAAS,WAAW;0FAAC;IAC9C,WAAW,GAAG,KAAK,CAAS,QAAQ;oFAAC;IACrC,gBAAgB,GAAG,KAAK,CAAU,KAAK;yFAAC;IACxC,YAAY,GAAG,KAAK,CAAS,SAAS;qFAAC;IAEvC,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAE/B,UAAU,GAAG,MAAM,EAAuD;IAC1E,YAAY,GAAG,MAAM,EAAU;IAErB,WAAW,GAAG,MAAM,CAAC,EAAE;oFAAC;IAExB,iBAAiB,GAAG,QAAQ,CAAC,MAC9C,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC;0FACpD;AAEkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AACzB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACvB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAC1C,gBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ,CAAC;qFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;AAChC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC/B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClE,YAAA,OAAO,GAAG,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG;AACnC,QAAA,CAAC,CAAC;IACJ,CAAC;mFAAC;AAEiB,IAAA,QAAQ,GAAG,CAAA,gBAAA,EAAmB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAEzF,YAAY,CAAC,GAA4B,EAAE,QAAgB,EAAA;AACzD,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC;IACtB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,UAAU,CAAC,QAAgB,EAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QACzD,IAAI,CAAC,GAAG,EAAE,QAAQ;YAAE;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACvC,QAAA,IAAI,OAAO,KAAK,QAAQ,EAAE;AACxB,YAAA,MAAM,OAAO,GAAkB,UAAU,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;AACpE,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YAC9D;QACF;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9D;IACF;AAEA,IAAA,eAAe,CAAC,QAAgB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;AAAE,YAAA,OAAO,MAAM;AACjD,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;IACpE;uGAhFW,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,+6CCzB3B,2kGAgFA,EAAA,MAAA,EAAA,CAAA,20JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3DY,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,wFAAE,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI/C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,CAAC,cAAc,EAAE,aAAa,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,2kGAAA,EAAA,MAAA,EAAA,CAAA,20JAAA,CAAA,EAAA;;;AEnB7D;;;AAGG;MAIU,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,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAChC,iBAAA;;;ACWD;;;;;AAKG;MAOU,iBAAiB,CAAA;IACnB,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,KAAK,GAAG,KAAK,CAAU,KAAK;8EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAChC,qBAAqB,GAAG,KAAK,CAAU,IAAI;8FAAC;IAC5C,WAAW,GAAG,KAAK,CAAS,EAAE;oFAAC;IAC/B,KAAK,GAAG,KAAK,CAAgB,IAAI;8EAAC;IAClC,UAAU,GAAG,KAAK,CAAgB,IAAI;mFAAC;IACvC,SAAS,GAAG,KAAK,CAAgB,IAAI;kFAAC;AACtC,IAAA,SAAS,GAAG,KAAK;6FAAsB;AACvC,IAAA,SAAS,GAAG,KAAK;6FAAsB;IACvC,YAAY,GAAG,KAAK,CAAS,KAAK;qFAAC;IACnC,IAAI,GAAG,KAAK,CAAS,CAAC;6EAAC;IACvB,MAAM,GAAG,KAAK,CAAiB,UAAU;+EAAC;;IAG1C,YAAY,GAAG,KAAK,CAAiB,IAAI;qFAAC;IAE1C,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;IAC/B,MAAM,GAAG,KAAK,CAAoD,EAAE;+EAAC;IACrE,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;;IAE/B,KAAK,GAAG,MAAM,EAAQ;IAEtB,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;IAEf,WAAW,GAAG,YAAY,CAAC,sBAAsB;oFAAC;AAClD,IAAA,GAAG,GAAG,kBAAkB,CAAC,aAAa,CAAC;IACvC,SAAS,GAAG,MAAM,CAAC,KAAK;kFAAC;AACzB,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;0FAAC;AAE3E,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;iFAAC;IAEzD,WAAW,GAAG,QAAQ,CAAC,MACxC,uBAAuB,CACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAChB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,QAAQ,EAAE,EACf,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAC/C;oFACF;IAEQ,SAAS,GAAG,MAAM,EAAc;IAChC,UAAU,GAAG,MAAM,EAAc;AAE1C,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA8B,CAAC,KAAK;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;IAEA,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AACxB,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAwB;QAC7E,EAAE,EAAE,KAAK,EAAE;IACb;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAwB;QAC7E,EAAE,EAAE,MAAM,EAAE;IACd;uGA1EW,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,iyFA4BkB,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3DtE,quEAoEA,EAAA,MAAA,EAAA,CAAA,gpMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzCY,uBAAuB,uIAAE,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIhD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EACd,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,quEAAA,EAAA,MAAA,EAAA,CAAA,gpMAAA,CAAA,EAAA;qnEAgCd,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE3DtE;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"underlayerdev-ui.mjs","sources":["../../../projects/ui/src/components/accordion/accordion.ts","../../../projects/ui/src/components/area-code/area-code.ts","../../../projects/ui/src/components/area-code/area-code.html","../../../projects/ui/src/components/icon/icon.ts","../../../projects/ui/src/components/skeleton/skeleton.ts","../../../projects/ui/src/components/skeleton/skeleton.html","../../../projects/ui/src/components/avatar/avatar.ts","../../../projects/ui/src/components/avatar/avatar-group.ts","../../../projects/ui/src/components/breadcrumb/breadcrumb.ts","../../../projects/ui/src/components/breadcrumb/breadcrumb.html","../../../projects/ui/src/config.ts","../../../projects/ui/src/components/button/button.directive.ts","../../../projects/ui/src/components/button/button.ts","../../../projects/ui/src/components/shared/form-field/form-field-ids.ts","../../../projects/ui/src/components/shared/form-field/form-field-label.ts","../../../projects/ui/src/components/shared/form-field/form-field-helper.ts","../../../projects/ui/src/components/calendar/calendar.ts","../../../projects/ui/src/components/calendar/calendar.html","../../../projects/ui/src/components/card/card.ts","../../../projects/ui/src/components/card/card.html","../../../projects/ui/src/components/input/input.ts","../../../projects/ui/src/components/input/input.html","../../../projects/ui/src/components/checkbox/checkbox.ts","../../../projects/ui/src/components/list-item/list-item.ts","../../../projects/ui/src/components/modal/modal.ts","../../../projects/ui/src/components/modal/modal.html","../../../projects/ui/src/components/category-picker/category-picker.ts","../../../projects/ui/src/components/category-picker/category-picker.html","../../../projects/ui/src/components/collapse/collapse.ts","../../../projects/ui/src/components/dock/dock.ts","../../../projects/ui/src/components/dock/dock.html","../../../projects/ui/src/components/dock/dock-item-slot.directive.ts","../../../projects/ui/src/components/dock/dock-item.ts","../../../projects/ui/src/components/dock/dock-item.html","../../../projects/ui/src/components/menu/menu-items.ts","../../../projects/ui/src/components/menu/menu-trigger.ts","../../../projects/ui/src/components/dropdown/dropdown.ts","../../../projects/ui/src/components/dropdown/dropdown.html","../../../projects/ui/src/components/file-input/file-input.ts","../../../projects/ui/src/components/file-input/file-input.html","../../../projects/ui/src/components/footer/footer.ts","../../../projects/ui/src/components/footer/footer.html","../../../projects/ui/src/components/pill/pill.ts","../../../projects/ui/src/components/pill/pill.html","../../../projects/ui/src/components/hero/hero-slot.directive.ts","../../../projects/ui/src/components/hero/hero.ts","../../../projects/ui/src/components/hero/hero.html","../../../projects/ui/src/components/image/image-not-found.ts","../../../projects/ui/src/components/image-cropper/image-cropper.ts","../../../projects/ui/src/components/image-cropper/image-cropper.html","../../../projects/ui/src/components/long-press/long-press.directive.ts","../../../projects/ui/src/components/menu/menu.ts","../../../projects/ui/src/components/menu/menu.html","../../../projects/ui/src/components/navbar/navbar-slot.directive.ts","../../../projects/ui/src/components/navbar/navbar.ts","../../../projects/ui/src/components/navbar/navbar.html","../../../projects/ui/src/components/price-button/custom-currency.pipe.ts","../../../projects/ui/src/components/price-button/price-button.ts","../../../projects/ui/src/components/price-button/price-button.html","../../../projects/ui/src/components/radio/radio.ts","../../../projects/ui/src/components/radio/radio.html","../../../projects/ui/src/components/radio/radio-group.ts","../../../projects/ui/src/components/radial/radial.ts","../../../projects/ui/src/components/radial/radial.html","../../../projects/ui/src/components/rich-text/rich-text.ts","../../../projects/ui/src/components/stepper/stepper.ts","../../../projects/ui/src/components/toast/toast.service.ts","../../../projects/ui/src/components/toast/toast.ts","../../../projects/ui/src/components/toast/toast.html","../../../projects/ui/src/components/toggle/toggle.ts","../../../projects/ui/src/components/tooltip/tooltip.ts","../../../projects/ui/src/components/tooltip/tooltip.html","../../../projects/ui/src/components/shared/combobox/combobox-state.ts","../../../projects/ui/src/components/search-input/search-input.ts","../../../projects/ui/src/components/search-input/search-input.html","../../../projects/ui/src/components/search-select/search-select.ts","../../../projects/ui/src/components/search-select/search-select.html","../../../projects/ui/src/components/select/select.ts","../../../projects/ui/src/components/select/select.html","../../../projects/ui/src/components/selectable-row/selectable-row.ts","../../../projects/ui/src/components/sidebar/sidebar.ts","../../../projects/ui/src/components/sidebar/sidebar.html","../../../projects/ui/src/components/status/status.ts","../../../projects/ui/src/components/status/status.html","../../../projects/ui/src/components/table/table.ts","../../../projects/ui/src/components/table/table.html","../../../projects/ui/src/components/textarea/textarea-field.directive.ts","../../../projects/ui/src/components/textarea/textarea.ts","../../../projects/ui/src/components/textarea/textarea.html","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/underlayerdev-ui.ts"],"sourcesContent":["import { CdkAccordion, CdkAccordionItem } from '@angular/cdk/accordion';\nimport {\n AfterViewInit,\n Component,\n contentChildren,\n DestroyRef,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * AccordionItemComponent is a standalone Angular component that extends CdkAccordionItem.\n * It represents an item within an accordion, providing configurable expansion behavior\n * and accessibility features.\n */\n@Component({\n selector: 'ul-accordion-item',\n template: `\n <div\n class=\"ul-accordion__item\"\n [class.ul-accordion__item--expanded]=\"cdkAccordionItem.expanded\"\n [class.ul-accordion__item--disabled]=\"cdkAccordionItem.disabled\"\n >\n <button\n (click)=\"onToggle()\"\n class=\"ul-accordion__trigger\"\n [id]=\"triggerId\"\n [attr.aria-expanded]=\"cdkAccordionItem.expanded\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-disabled]=\"cdkAccordionItem.disabled ? 'true' : null\"\n [disabled]=\"cdkAccordionItem.disabled\"\n (keydown)=\"onKeydown($event)\"\n type=\"button\"\n >\n <div class=\"ul-accordion__icon\">\n <ng-content select=\"[ul-accordion-icon]\"></ng-content>\n </div>\n <div class=\"ul-accordion__label\">\n <ng-content select=\"[ul-accordion-label]\"></ng-content>\n </div>\n <div class=\"ul-accordion__status\">\n <ng-content select=\"[ul-accordion-status]\"></ng-content>\n </div>\n <span class=\"ul-accordion__indicator\">\n <i class=\"ul-icon ul-icon-size-8 ul-icon-weight-bold ul-icon-chevron_down\"></i>\n </span>\n </button>\n <div\n role=\"region\"\n class=\"ul-accordion__content\"\n [id]=\"contentId\"\n [attr.aria-labelledby]=\"triggerId\"\n [attr.aria-hidden]=\"!cdkAccordionItem.expanded\"\n >\n <ng-content select=\"[ul-accordion-content]\"></ng-content>\n </div>\n </div>\n `,\n styleUrls: ['./accordion.scss'],\n hostDirectives: [\n {\n directive: CdkAccordionItem,\n inputs: ['expanded', 'disabled'],\n outputs: ['closed', 'opened', 'destroyed', 'expandedChange'],\n },\n ],\n})\nexport class AccordionItemComponent {\n cdkAccordionItem = inject(CdkAccordionItem);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /**\n * Stable ID for the content region, used for aria-controls linkage.\n */\n readonly contentId = `ul-accordion-content-${Math.random().toString(36).slice(2, 11)}`;\n\n /**\n * Stable ID for the trigger button, used for aria-labelledby linkage.\n */\n readonly triggerId = `ul-accordion-trigger-${Math.random().toString(36).slice(2, 11)}`;\n\n onToggle(): void {\n if (this.cdkAccordionItem.disabled) {\n return;\n }\n this.cdkAccordionItem.toggle();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.cdkAccordionItem.disabled) {\n return;\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.onToggle();\n return;\n }\n\n // Handle Arrow keys, Home, and End for navigation between accordion items\n const accordion = this.elementRef.nativeElement.closest('.ul-accordion');\n if (!accordion) {\n return;\n }\n\n const triggers = Array.from(\n accordion.querySelectorAll('.ul-accordion__trigger:not([disabled])'),\n ) as HTMLButtonElement[];\n const currentIndex = triggers.findIndex((t) => t.id === this.triggerId);\n\n if (currentIndex === -1) {\n return;\n }\n\n let targetIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n targetIndex = currentIndex < triggers.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'ArrowUp':\n event.preventDefault();\n targetIndex = currentIndex > 0 ? currentIndex - 1 : triggers.length - 1;\n break;\n case 'Home':\n event.preventDefault();\n targetIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n targetIndex = triggers.length - 1;\n break;\n }\n\n if (targetIndex !== null && triggers[targetIndex]) {\n triggers[targetIndex].focus();\n }\n }\n}\n\n/**\n * AccordionComponent is a standalone Angular component that acts as a container\n * for multiple AccordionItemComponents. It provides configuration options for\n * multi-expansion behavior and manages the state of its child accordion items.\n */\n@Component({\n selector: 'ul-accordion',\n template: `\n <cdk-accordion\n #accordion\n [multi]=\"multi()\"\n class=\"ul-accordion\"\n [class.ul-accordion--divider]=\"showDivider()\"\n >\n <ng-content />\n </cdk-accordion>\n `,\n styleUrls: ['./accordion.scss'],\n imports: [CdkAccordion],\n})\nexport class AccordionComponent implements AfterViewInit {\n readonly showDivider = input<boolean>(false);\n readonly multi = input<boolean>(false);\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly accordionItems = contentChildren<AccordionItemComponent, CdkAccordionItem>(\n AccordionItemComponent,\n {\n read: CdkAccordionItem,\n },\n );\n\n ngAfterViewInit(): void {\n this.setupSingleExpansionLogic();\n }\n\n /**\n * Sets up the single expansion logic to ensure only one item is expanded at a time\n * when multi mode is disabled.\n */\n private setupSingleExpansionLogic(): void {\n const items = this.accordionItems();\n\n // Early return if no items or multi mode is enabled\n if (!items.length || this.multi()) {\n return;\n }\n\n // Subscribe to expansion changes for all items\n items.forEach((item) => {\n item.expandedChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((expanded) => {\n this.handleExpansionChange(item, expanded, items);\n });\n });\n }\n\n /**\n * Handles expansion changes and manages single-expansion behavior.\n * @param changedItem - The accordion item that changed\n * @param expanded - Whether the item is now expanded\n * @param allItems - Array of all accordion items\n */\n private handleExpansionChange(\n changedItem: CdkAccordionItem,\n expanded: boolean,\n allItems: readonly CdkAccordionItem[],\n ): void {\n // Only handle expansion (not collapse) and only when multi mode is disabled\n if (!expanded || this.multi()) {\n return;\n }\n\n // Collapse all other items except the one that was just expanded\n allItems.forEach((item) => {\n if (item !== changedItem && item.expanded) {\n item.expanded = false;\n }\n });\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\n/**\n * A code display component that shows code with automatic line numbering.\n * Features a clean two-column layout following PE design guidelines.\n *\n * @example\n * <ul-area-code\n * [content]=\"codeContent\"\n * [showLineNumbers]=\"true\"\n * />\n */\n@Component({\n selector: 'ul-area-code',\n templateUrl: './area-code.html',\n styleUrls: ['./area-code.scss'],\n})\nexport class AreaCodeComponent {\n // Core inputs\n readonly content = input<string>('');\n readonly showLineNumbers = input<boolean>(true);\n readonly maxHeight = input<string | null>(null);\n\n // Computed properties\n readonly lines = computed(() => {\n const content = this.content();\n if (!content) return [''];\n return content.split('\\n');\n });\n\n readonly lineCount = computed(() => this.lines().length);\n\n readonly lineNumbers = computed(() => {\n const count = this.lineCount();\n return Array.from({ length: count }, (_, i) => i + 1);\n });\n\n // Component properties\n readonly codeId = `ul-area-code-${Math.random().toString(36).slice(2, 11)}`;\n}\n","<div class=\"ul-area-code\" [class.ul-area-code--no-line-numbers]=\"!showLineNumbers()\">\n <div class=\"ul-area-code__container ul-scrollable\" [style.max-height]=\"maxHeight()\">\n <!-- Code Display Area -->\n <div class=\"ul-area-code__display\">\n <!-- Line Numbers Column -->\n @if (showLineNumbers()) {\n <div class=\"ul-area-code__line-numbers\" role=\"presentation\" aria-hidden=\"true\">\n @for (lineNumber of lineNumbers(); track lineNumber) {\n <span class=\"ul-area-code__line-number\">{{ lineNumber }}.</span>\n }\n </div>\n }\n <!-- Code Content Column -->\n <div class=\"ul-area-code__content\">\n <pre class=\"ul-area-code__code\" [id]=\"codeId\"><code>{{ content() }}</code></pre>\n </div>\n </div>\n </div>\n</div>\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\n\n/** Icon size keys from design tokens (iconography.font.size). */\nexport type IconSize = '4' | '5' | '6' | '7' | '8' | '10' | '12' | '16' | '24' | '32';\n\n/** Icon weight keys from design tokens (iconography.font.weight). */\nexport type IconWeight = 'medium' | 'bold';\n\n/** Icon name / glyph key from design tokens (content['icon-glyph']). Valid values match token keys. */\nexport type IconName = string;\n\n// <ul-icon class=\"ul-icon ul-icon-size-${size} ul-icon-weight-${weight} ul-icon-${icon}\" />\n// (no ul-icon-weight-* class when weight is null)\n@Component({\n selector: 'ul-icon',\n template: ``,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class IconComponent {\n size = input<IconSize>('8');\n /**\n * Stroke weight of the glyph. Pass `null` to leave it out entirely, so the\n * icon takes the surrounding `font-weight` (e.g. inside bold text) instead\n * of always forcing `medium`.\n */\n weight = input<IconWeight | null>('medium');\n icon = input.required<IconName>();\n\n readonly hostClasses = computed(() => {\n const weight = this.weight();\n const weightClass = weight ? ` ul-icon-weight-${weight}` : '';\n return `ul-icon ul-icon-size-${this.size()}${weightClass} ul-icon-${this.icon()}`;\n });\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, input } from '@angular/core';\n\nexport type SkeletonVariant = 'rect' | 'text';\n\nexport type SkeletonBorderRadius = 'xs' | 'sm' | 'md' | 'lg' | 'full';\n\n@Component({\n selector: 'ul-skeleton',\n imports: [CommonModule],\n templateUrl: './skeleton.html',\n styleUrls: ['./skeleton.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SkeletonComponent {\n readonly variant = input<SkeletonVariant>('rect');\n readonly width = input<string | null>(null);\n readonly height = input<string | null>(null);\n readonly lines = input<number>(3);\n readonly borderRadius = input<SkeletonBorderRadius | null>(null);\n readonly show = input<boolean>(true);\n\n readonly hostStyles = computed(() => {\n const width = this.width();\n const height = this.height();\n\n return {\n width: width ?? null,\n height: height ?? null,\n } as const;\n });\n\n readonly lineWidths = computed(() => {\n const count = Math.max(1, this.lines());\n const widths: string[] = [];\n\n for (let index = 0; index < count; index += 1) {\n const base = 100;\n const step = 8;\n const value = Math.max(40, base - index * step);\n widths.push(`${value}%`);\n }\n\n return widths;\n });\n\n readonly radiusClass = computed(() => {\n const radius = this.borderRadius();\n return radius ? `ul-skeleton--radius-${radius}` : null;\n });\n\n trackByIndex(index: number): number {\n return index;\n }\n}\n","<div\n class=\"ul-skeleton\"\n [class.ul-skeleton--active]=\"show()\"\n [class.ul-skeleton--rect]=\"variant() === 'rect'\"\n [class.ul-skeleton--text]=\"variant() === 'text'\"\n [class]=\"radiusClass() || ''\"\n [style.width]=\"hostStyles().width\"\n [style.height]=\"hostStyles().height\"\n>\n <div class=\"ul-skeleton__content\">\n <ng-content />\n </div>\n\n @if (show()) {\n @if (variant() === 'text') {\n <div class=\"ul-skeleton__overlay ul-skeleton__overlay--text\">\n @for (lineWidth of lineWidths(); track trackByIndex($index)) {\n <div class=\"ul-skeleton__block ul-skeleton__block--line\" [style.width]=\"lineWidth\"></div>\n }\n </div>\n } @else {\n <div class=\"ul-skeleton__overlay ul-skeleton__overlay--rect\">\n <div class=\"ul-skeleton__block ul-skeleton__block--rect\"></div>\n </div>\n }\n }\n</div>\n\n","import { Component, computed, effect, input, signal, ViewEncapsulation } from '@angular/core';\n\nimport { IconComponent, IconName } from '../icon/icon';\nimport { SkeletonComponent } from '../skeleton/skeleton';\nimport type { UiSize } from '../shared/ui-types';\ntype IconSize = '5' | '6' | '7' | '8' | '16';\n\n/**\n * Avatar-only size scale: the shared UiSize sizes, plus larger '2xl'/'3xl' for\n * contexts where the avatar itself is the focal point (e.g. an onboarding\n * photo step) rather than one control among many. Deliberately not folded\n * into UiSize — a giant size doesn't make sense on a button or input.\n */\nexport type AvatarSize = UiSize | '2xl' | '3xl';\n\n/**\n * A reusable avatar component that displays user images, initials, or icons.\n * Supports multiple sizes and fallback options when an image is not available.\n * @example\n * <ul-avatar size=\"md\" [src]=\"userImageUrl\" [initials]=\"'JD'\" />\n */\n@Component({\n selector: 'ul-avatar',\n imports: [IconComponent, SkeletonComponent],\n template: `\n <ul-skeleton\n class=\"ul-avatar ul-avatar--{{ size() }}\"\n [show]=\"loading()\"\n variant=\"rect\"\n borderRadius=\"full\"\n >\n <div class=\"ul-avatar ul-avatar--{{ size() }}\">\n @if (hasPhoto()) {\n <img [src]=\"src()\" [alt]=\"alt()\" (error)=\"handleImageError()\" class=\"ul-avatar__image\" />\n } @else if (initials()) {\n <span class=\"ul-avatar__initials\">{{ initials() }}</span>\n } @else if (icon()) {\n <ul-icon [icon]=\"icon()!\" [size]=\"iconSize()\" />\n } @else if (editable()) {\n <ul-icon icon=\"user\" [size]=\"iconSize()\" />\n }\n\n @if (editable()) {\n <div class=\"ul-avatar__edit-overlay\" aria-hidden=\"true\">\n <ul-icon icon=\"photo\" [size]=\"iconSize()\" />\n </div>\n }\n </div>\n </ul-skeleton>\n `,\n styleUrls: ['./avatar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AvatarComponent {\n /** The size of the avatar */\n size = input<AvatarSize>('md');\n\n /** The image source URL */\n src = input<string | undefined>(undefined);\n\n /** Fallback initials to display when image is not available */\n initials = input<string | undefined>(undefined);\n\n /** Fallback icon to display when image and initials are not available */\n icon = input<IconName | undefined>(undefined);\n\n /** Alt text for the avatar image */\n alt = input<string>('');\n\n /** Show a skeleton placeholder instead of content while loading. */\n loading = input<boolean>(false);\n\n /**\n * Marks this avatar as a photo picker: when there's no photo to show, a\n * default person icon fills in for initials/icon, and a dimmed overlay\n * with a photo icon is layered on top to signal it's clickable — shown\n * even once a photo is set, so the user can tell they can still change\n * it, not just add one the first time. Purely visual — wrap the avatar\n * in your own button/link to actually handle the click.\n */\n editable = input<boolean>(false);\n\n /** Internal signal to track image loading errors */\n protected readonly imageError = signal(false);\n\n protected readonly hasPhoto = computed(() => !!this.src() && !this.imageError());\n\n /** Computed icon size based on avatar size */\n readonly iconSize = computed<IconSize>(() => {\n const sizeMap: Record<AvatarSize, IconSize> = {\n sm: '5',\n md: '6',\n lg: '7',\n xl: '8',\n '2xl': '16',\n '3xl': '16',\n };\n return sizeMap[this.size()];\n });\n\n constructor() {\n // Reset image error when src changes\n effect(() => {\n this.src();\n this.imageError.set(false);\n });\n }\n\n /** Handles image loading errors */\n protected handleImageError(): void {\n this.imageError.set(true);\n }\n}\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\n\nimport { AvatarComponent } from './avatar';\nimport type { UiSize } from '../shared/ui-types';\nimport type { IconName } from '../icon/icon';\n\nexport interface AvatarData {\n src?: string;\n initials?: string;\n icon?: IconName;\n alt?: string;\n}\n\n/**\n * A reusable avatar group component that displays multiple avatars with overflow handling.\n * Supports maximum visible count and shows a \"+X\" indicator for remaining avatars.\n * @example\n * <ul-avatar-group [avatars]=\"userAvatars\" [maxVisible]=\"3\" size=\"md\" />\n */\n@Component({\n selector: 'ul-avatar-group',\n imports: [AvatarComponent],\n template: `\n <div\n class=\"ul-avatar-group ul-avatar-group--{{ this.size() }}\"\n [class.ul-avatar-group--stacked]=\"stacked()\"\n >\n @for (avatar of visibleAvatars(); track $index) {\n <ul-avatar\n [size]=\"size()\"\n [src]=\"avatar.src\"\n [initials]=\"avatar.initials\"\n [icon]=\"avatar.icon\"\n [alt]=\"avatar.alt || ''\"\n [class.ul-avatar-group__avatar]=\"!stacked() && $index > 0\"\n />\n }\n @if (remainingCount() > 0) {\n <div\n class=\"ul-avatar-group__overflow ul-avatar-group__overflow--{{ this.size() }}\"\n [class.ul-avatar-group__overflow-avatar]=\"!stacked()\"\n >\n <span class=\"ul-avatar-group__overflow-text\">+{{ remainingCount() }}</span>\n </div>\n }\n </div>\n `,\n styleUrls: ['./avatar-group.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AvatarGroupComponent {\n /** Array of avatar data to display */\n avatars = input.required<AvatarData[]>();\n\n /** The size of all avatars in the group */\n size = input<UiSize>('md');\n\n /** Maximum number of avatars to display before showing overflow indicator */\n maxVisible = input<number | null>(null);\n\n /** Whether avatars should overlap (stacked) or have spacing between them */\n stacked = input<boolean>(false);\n\n /** Computed list of visible avatars */\n readonly visibleAvatars = computed(() => {\n const max = this.maxVisible();\n const avatars = this.avatars();\n return max !== null && max > 0 ? avatars.slice(0, max) : avatars;\n });\n\n /** Computed count of remaining avatars not shown */\n readonly remainingCount = computed(() => {\n const max = this.maxVisible();\n if (max === null || max <= 0) return 0;\n return Math.max(0, this.avatars().length - max);\n });\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport { IconComponent } from '../icon/icon';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n routerLink?: string | any[];\n icon?: string;\n}\n\nexport type BreadcrumbSeparator = 'chevron_right' | 'slash' | 'dot';\n\n/**\n * Breadcrumb component for displaying navigation hierarchy.\n * Supports responsive collapsing on mobile devices and customizable separators.\n *\n * @example\n * ```html\n * <ul-breadcrumb\n * [items]=\"[\n * { label: 'Home', href: '/' },\n * { label: 'Products', href: '/products' },\n * { label: 'Current Page' }\n * ]\"\n * />\n * ```\n */\n@Component({\n selector: 'ul-breadcrumb',\n imports: [IconComponent, RouterLink],\n templateUrl: './breadcrumb.html',\n styleUrls: ['./breadcrumb.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class BreadcrumbComponent {\n /** Array of breadcrumb items to display */\n items = input.required<BreadcrumbItem[]>();\n\n /** Separator type between breadcrumb items */\n separator = input<BreadcrumbSeparator>('chevron_right');\n\n /** Maximum number of items to show before collapsing (for responsive behavior) */\n maxItems = input<number | undefined>(undefined);\n\n /** Check if an item is the last item */\n isLastItem(index: number): boolean {\n return index === this.items().length - 1;\n }\n\n /** Check if an item should be shown on mobile (first, last, or within maxItems) */\n shouldShowOnMobile(index: number): boolean {\n const items = this.items();\n const max = this.maxItems();\n if (!max || items.length <= max) return true;\n if (index === 0) return true; // Always show first\n if (index >= items.length - 2) return true; // Always show last 2\n return false;\n }\n\n /** Check if ellipsis should be shown on mobile */\n shouldShowEllipsisOnMobile(): boolean {\n const items = this.items();\n const max = this.maxItems();\n if (!max || items.length <= max) return false;\n return items.length > max + 1; // Show ellipsis if we're hiding items\n }\n}\n","<nav class=\"ul-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"ul-breadcrumb__list\">\n @for (item of items(); track $index) {\n <li\n class=\"ul-breadcrumb__item\"\n [class.ul-breadcrumb__item--current]=\"isLastItem($index)\"\n [class.ul-breadcrumb__item--with-icon]=\"item.icon\"\n [class.ul-breadcrumb__item--hidden-mobile]=\"maxItems() && !shouldShowOnMobile($index)\"\n >\n @if (isLastItem($index)) {\n <span class=\"ul-breadcrumb__text\" aria-current=\"page\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n } @else {\n @if (item.href) {\n <a [href]=\"item.href\" class=\"ul-breadcrumb__link\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else if (item.routerLink) {\n <a [routerLink]=\"item.routerLink\" class=\"ul-breadcrumb__link\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </a>\n } @else {\n <span class=\"ul-breadcrumb__text\">\n @if (item.icon) {\n <ul-icon [icon]=\"item.icon\" size=\"5\" class=\"ul-breadcrumb__icon\" />\n }\n {{ item.label }}\n </span>\n }\n }\n\n @if (!isLastItem($index)) {\n <span class=\"ul-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <ul-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"ul-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"ul-breadcrumb__separator-text\">·</span>\n }\n </span>\n }\n </li>\n }\n\n @if (shouldShowEllipsisOnMobile()) {\n <li class=\"ul-breadcrumb__item ul-breadcrumb__item--ellipsis\" aria-hidden=\"true\">\n <span class=\"ul-breadcrumb__ellipsis\">...</span>\n <span class=\"ul-breadcrumb__separator\" aria-hidden=\"true\">\n @if (separator() === 'chevron_right') {\n <ul-icon icon=\"chevron_right\" size=\"5\" />\n } @else if (separator() === 'slash') {\n <span class=\"ul-breadcrumb__separator-text\">/</span>\n } @else if (separator() === 'dot') {\n <span class=\"ul-breadcrumb__separator-text\">·</span>\n }\n </span>\n </li>\n }\n </ol>\n</nav>\n","export const CSS_PREFIX = 'ul-';\n","import { computed, Directive, input } from '@angular/core';\n\nimport { CSS_PREFIX } from '../../config';\nimport type { UiSize, UiTheme } from '../shared/ui-types';\n\n/**\n * Directive that applies styling and behavior to button elements.\n * @example\n * <button udsButton size=\"md\" theme=\"fill-purple\">Click me</button>\n */\n@Directive({\n selector: '[peButton]',\n host: {\n '[attr.role]': '\"button\"',\n '[class]': 'allClasses()',\n },\n})\nexport class ButtonDirective {\n private readonly baseClass = `${CSS_PREFIX}btn`;\n\n /** The size variant of the button */\n size = input<UiSize>('md');\n\n /** The theme variant of the button */\n theme = input<UiTheme>('fill-purple');\n\n /** Whether the button only contains an icon */\n iconOnly = input<boolean>(false);\n\n /** Whether the content should be stacked vertically */\n vertical = input<boolean>(false);\n\n /** Computed property for vertical state */\n protected shouldBeVertical = computed(() => this.vertical() && this.size() === 'lg');\n\n /** All computed classes based on current state */\n protected allClasses = computed(() => {\n const classes = [this.baseClass]; // Base class\n classes.push(`${this.baseClass}--${this.size()}`); // Size variant\n classes.push(`${this.baseClass}--${this.theme()}`); // Theme variant\n if (this.iconOnly()) {\n classes.push(`${this.baseClass}--icon-only`); // Icon only state\n }\n if (this.shouldBeVertical()) {\n classes.push(`${this.baseClass}--vertical`);\n }\n return classes;\n });\n}\n","import { Component, input, output, ViewEncapsulation } from '@angular/core';\n\nimport { ButtonDirective } from './button.directive';\nimport type { UiSize, UiTheme } from '../shared/ui-types';\n\n/**\n * A reusable button component that supports various themes, sizes, and states.\n * @example\n * <uds-button size=\"md\" theme=\"fill-purple\">Click me</uds-button>\n */\n@Component({\n selector: 'ul-button',\n imports: [ButtonDirective],\n template: `\n <button\n peButton\n [attr.type]=\"type()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"disabled()\"\n [size]=\"size()\"\n [theme]=\"theme()\"\n [iconOnly]=\"iconOnly()\"\n [vertical]=\"vertical()\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\"\n >\n <ng-content />\n </button>\n `,\n styleUrls: ['./button.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ButtonComponent {\n /** The size of the button */\n size = input<UiSize>('md');\n\n /** The visual theme of the button */\n theme = input<UiTheme>('fill-purple');\n\n /** Whether the button only contains an icon */\n iconOnly = input<boolean>(false);\n\n /** Whether the button content should be stacked vertically (only applies to lg size) */\n vertical = input<boolean>(false);\n\n /** Whether the button is disabled */\n disabled = input<boolean>(false);\n\n /** The button type attribute */\n type = input<'button' | 'submit' | 'reset'>('button');\n\n /** Optional aria-label for accessibility */\n ariaLabel = input<string | undefined>(undefined);\n\n /** Click event emitter with proper type safety */\n buttonClick = output<MouseEvent>();\n\n /** Handles the click event and prevents it if button is disabled */\n protected handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.buttonClick.emit(event);\n }\n}\n","/**\n * Generates unique IDs for form field elements (control, helper, error).\n * Use this so label `for`, helper `id`, and `aria-describedby` stay in sync.\n */\nexport function createFormFieldIds(prefix: string): {\n controlId: string;\n helperId: string;\n errorId: string;\n} {\n const id = `${prefix}-${Math.random().toString(36).slice(2, 11)}`;\n return {\n controlId: id,\n helperId: `${id}-helper`,\n errorId: `${id}-error`,\n };\n}\n\n/**\n * Builds the value for `aria-describedby` from helper and error IDs.\n */\nexport function getFormFieldDescribedBy(\n helperId: string,\n errorId: string,\n hasHelperText: boolean,\n hasError: boolean,\n hasErrorText: boolean\n): string | undefined {\n const ids: string[] = [];\n if (hasHelperText) ids.push(helperId);\n if (hasError && hasErrorText) ids.push(errorId);\n return ids.length > 0 ? ids.join(' ') : undefined;\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\nimport type { UiSize } from '../ui-types';\n\n/**\n * Shared label for form fields (input, select, textarea).\n * Renders label text and optional required indicator.\n */\n@Component({\n selector: 'ul-form-field-label',\n template: `\n @if (label()) {\n <label\n [attr.for]=\"for()\"\n class=\"ul-form-field__label ul-form-field__label--{{ size() }}\"\n [class.ul-form-field__label--required]=\"required()\"\n >\n {{ label() }}\n @if (required() && !!showRequiredIndicator()) {\n <span class=\"ul-form-field__required-indicator\" aria-hidden=\"true\" title=\"Required\">\n *\n </span>\n }\n </label>\n }\n `,\n styleUrls: ['./form-field.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldLabelComponent {\n readonly label = input<string | null>(null);\n readonly required = input<boolean>(false);\n readonly for = input<string>('');\n readonly size = input<UiSize>('md');\n readonly showRequiredIndicator = input<boolean>(true);\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Shared helper/error text for form fields (input, select, textarea).\n * Shows error text when in error state, otherwise helper text.\n */\n@Component({\n selector: 'ul-form-field-helper',\n template: `\n <span\n [id]=\"id()\"\n class=\"ul-form-field__helper-text\"\n [class.ul-form-field__helper-text--error]=\"error()\"\n >\n @if (error() && errorText()) {\n {{ errorText() }}\n } @else {\n {{ helperText() }}\n }\n </span>\n `,\n styleUrls: ['./form-field.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldHelperComponent {\n readonly id = input.required<string>();\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n}\n","import { CdkMenu, CdkMenuTrigger } from '@angular/cdk/menu';\nimport {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport type { IconSize } from '../icon/icon';\nimport type { UiSize } from '../shared/ui-types';\n\nexport type CalendarMode = 'date' | 'time' | 'datetime';\n\nexport interface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n}\n\nexport interface TimeSelection {\n hour: number;\n minute: number;\n}\n\n/**\n * Calendar component. Implements FormValueControl<Date | null> for Signal Forms [formField].\n * Use [(value)] or [formField]=\"myForm().date\". Form model field should be Date | null.\n */\n@Component({\n selector: 'ul-calendar',\n imports: [\n CdkMenuTrigger,\n CdkMenu,\n ButtonComponent,\n IconComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './calendar.html',\n styleUrls: ['./calendar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarComponent implements FormValueControl<Date | null> {\n readonly mode = input<CalendarMode>('date');\n readonly value = model<Date | null>(null);\n readonly size = input<UiSize>('md');\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly readOnly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly minTime = input<Date | null>(null);\n readonly maxTime = input<Date | null>(null);\n readonly locale = input<string>('en-US');\n readonly showCalendarIcon = input<boolean>(true);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n protected readonly ids = createFormFieldIds('ul-calendar');\n\n readonly isOpen = signal(false);\n readonly currentMonth = signal<Date>(new Date());\n readonly selectedTime = signal<TimeSelection | null>(null);\n\n readonly buttonSize = computed<UiSize>(() => {\n const size = this.size();\n\n if (size === 'sm') return 'sm';\n if (size === 'md') return 'md';\n if (size === 'lg') return 'lg';\n if (size === 'xl') return 'xl';\n\n return 'md';\n });\n\n readonly iconSize = computed<IconSize>(() => {\n const size = this.size();\n\n if (size === 'sm') return '6';\n if (size === 'md') return '7';\n if (size === 'lg') return '8';\n\n // xl calendar uses a slightly larger icon\n return '10';\n });\n\n readonly defaultPlaceholder = computed(() => {\n const mode = this.mode();\n if (this.placeholder()) return this.placeholder();\n if (mode === 'date') return 'Select date';\n if (mode === 'time') return 'Select time';\n return 'Select date and time';\n });\n\n readonly displayValue = computed(() => {\n const val = this.value();\n if (!val) return '';\n const mode = this.mode();\n const locale = this.locale();\n\n if (mode === 'date') {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n }).format(val);\n }\n\n if (mode === 'time') {\n return new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).format(val);\n }\n\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).format(val);\n });\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly resolvedErrorText = computed(\n () =>\n this.errorText() ||\n (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null),\n );\n\n readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.resolvedErrorText(),\n ),\n );\n\n readonly calendarDays = computed<CalendarDay[]>(() => {\n const month = this.currentMonth();\n const selected = this.value();\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const firstDay = new Date(month.getFullYear(), month.getMonth(), 1);\n const lastDay = new Date(month.getFullYear(), month.getMonth() + 1, 0);\n const startDate = new Date(firstDay);\n startDate.setDate(startDate.getDate() - startDate.getDay());\n\n const days: CalendarDay[] = [];\n const current = new Date(startDate);\n\n for (let i = 0; i < 42; i++) {\n const date = new Date(current);\n date.setHours(0, 0, 0, 0);\n\n const isCurrentMonth = date.getMonth() === month.getMonth();\n const isToday = date.getTime() === today.getTime();\n const isSelected =\n selected !== null && date.getTime() === new Date(selected).setHours(0, 0, 0, 0);\n const isDisabled = this.isDateDisabled(date);\n\n days.push({\n date,\n isCurrentMonth,\n isToday,\n isSelected,\n isDisabled,\n });\n\n current.setDate(current.getDate() + 1);\n }\n\n return days;\n });\n\n readonly monthYearLabel = computed(() => {\n const month = this.currentMonth();\n return new Intl.DateTimeFormat(this.locale(), {\n month: 'long',\n year: 'numeric',\n }).format(month);\n });\n\n readonly hourOptions = computed(() => {\n const hours: number[] = [];\n for (let i = 0; i < 24; i++) {\n hours.push(i);\n }\n return hours;\n });\n\n readonly minuteOptions = computed(() => {\n const minutes: number[] = [];\n for (let i = 0; i < 60; i += 5) {\n minutes.push(i);\n }\n return minutes;\n });\n\n readonly selectedHour = computed(() => {\n const val = this.value();\n if (!val) return this.selectedTime()?.hour ?? 0;\n return val.getHours();\n });\n\n readonly selectedMinute = computed(() => {\n const val = this.value();\n if (!val) return this.selectedTime()?.minute ?? 0;\n return val.getMinutes();\n });\n\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n constructor() {\n // Keep currentMonth and selectedTime in sync with the external value\n effect(() => {\n const val = this.value();\n if (val) {\n this.currentMonth.set(new Date(val.getFullYear(), val.getMonth(), 1));\n if (this.mode() !== 'date') {\n this.selectedTime.set({\n hour: val.getHours(),\n minute: val.getMinutes(),\n });\n }\n }\n });\n }\n\n /**\n * Closes the CDK menu by simulating an Escape key press.\n * This lets the CDK handle all focus and cleanup logic.\n */\n private closeMenuViaEscape(): void {\n const escapeEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: 27,\n bubbles: true,\n cancelable: true,\n });\n\n document.dispatchEvent(escapeEvent);\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n const dateOnly = new Date(date);\n dateOnly.setHours(0, 0, 0, 0);\n\n if (min) {\n const minOnly = new Date(min);\n minOnly.setHours(0, 0, 0, 0);\n if (dateOnly < minOnly) return true;\n }\n\n if (max) {\n const maxOnly = new Date(max);\n maxOnly.setHours(0, 0, 0, 0);\n if (dateOnly > maxOnly) return true;\n }\n\n return false;\n }\n\n isTimeDisabled(hour: number, minute: number): boolean {\n const min = this.minTime();\n const max = this.maxTime();\n if (!min && !max) return false;\n\n const testDate = new Date();\n testDate.setHours(hour, minute, 0, 0);\n\n if (min) {\n const minHour = min.getHours();\n const minMinute = min.getMinutes();\n if (hour < minHour || (hour === minHour && minute < minMinute)) {\n return true;\n }\n }\n\n if (max) {\n const maxHour = max.getHours();\n const maxMinute = max.getMinutes();\n if (hour > maxHour || (hour === maxHour && minute > maxMinute)) {\n return true;\n }\n }\n\n return false;\n }\n\n selectDate(date: Date): void {\n if (this.isDateDisabled(date)) return;\n\n const mode = this.mode();\n const currentValue = this.value();\n let newDate: Date;\n\n if (mode === 'date') {\n newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n } else if (mode === 'time') {\n const time = this.selectedTime();\n newDate = new Date(date);\n if (time) {\n newDate.setHours(time.hour, time.minute, 0, 0);\n } else {\n newDate.setHours(0, 0, 0, 0);\n }\n } else {\n const time = this.selectedTime() ?? {\n hour: currentValue?.getHours() ?? 0,\n minute: currentValue?.getMinutes() ?? 0,\n };\n newDate = new Date(date);\n newDate.setHours(time.hour, time.minute, 0, 0);\n }\n\n this.value.set(newDate);\n\n if (mode === 'date') {\n this.closeMenuViaEscape();\n }\n }\n\n selectTime(hour: number, minute: number): void {\n if (this.isTimeDisabled(hour, minute)) return;\n\n this.selectedTime.set({ hour, minute });\n\n const mode = this.mode();\n const currentValue = this.value();\n let newDate: Date;\n\n if (mode === 'time') {\n newDate = new Date();\n newDate.setHours(hour, minute, 0, 0);\n } else {\n const baseDate = currentValue ?? new Date();\n newDate = new Date(baseDate);\n newDate.setHours(hour, minute, 0, 0);\n }\n\n this.value.set(newDate);\n\n if (mode === 'time' || mode === 'datetime') {\n this.closeMenuViaEscape();\n }\n }\n\n previousMonth(): void {\n const current = this.currentMonth();\n const newMonth = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n this.currentMonth.set(newMonth);\n }\n\n nextMonth(): void {\n const current = this.currentMonth();\n const newMonth = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n this.currentMonth.set(newMonth);\n }\n\n selectToday(): void {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n this.selectDate(today);\n }\n\n clear(): void {\n this.value.set(null);\n this.selectedTime.set(null);\n }\n\n open(): void {\n if (this.disabled() || this.readOnly()) return;\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n close(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n onMenuOpened(): void {\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n onMenuClosed(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n focus(): void {\n const trigger = document.getElementById(this.ids.controlId);\n trigger?.focus();\n }\n}\n","<div\n class=\"ul-calendar ul-calendar--{{ mode() }} ul-calendar--{{ size() }}\"\n [class.ul-calendar--error]=\"hasError()\"\n [class.ul-calendar--disabled]=\"disabled()\"\n [class.ul-calendar--read-only]=\"readOnly()\"\n [class.ul-calendar--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-calendar__trigger-group\" [class.ul-calendar__trigger-group--focused]=\"isOpen()\">\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"ul-calendar__trigger\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"ids.controlId + '-menu'\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <span\n class=\"ul-calendar__trigger-text\"\n [class.ul-calendar__trigger-text--placeholder]=\"!displayValue()\"\n >\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n {{ defaultPlaceholder() }}\n }\n </span>\n </button>\n\n @if (showCalendarIcon()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [size]=\"buttonSize()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"calendarMenu\"\n class=\"ul-calendar__icon-button\"\n ariaLabel=\"Open calendar\"\n (cdkMenuOpened)=\"onMenuOpened()\"\n (cdkMenuClosed)=\"onMenuClosed()\"\n >\n <ul-icon icon=\"calendar\" [size]=\"iconSize()\" />\n </ul-button>\n }\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n\n <ng-template #calendarMenu>\n <div cdkMenu class=\"ul-calendar__popup\" [id]=\"ids.controlId + '-menu'\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <div class=\"ul-calendar__date-picker\">\n <div class=\"ul-calendar__header\">\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Previous month\"\n (buttonClick)=\"previousMonth()\"\n >\n <ul-icon icon=\"chevron_left\" size=\"6\" />\n </ul-button>\n <div class=\"ul-calendar__month-year\">{{ monthYearLabel() }}</div>\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Next month\"\n (buttonClick)=\"nextMonth()\"\n >\n <ul-icon icon=\"chevron_right\" size=\"6\" />\n </ul-button>\n </div>\n\n <div class=\"ul-calendar__weekdays\">\n @for (day of ['S', 'M', 'T', 'W', 'T', 'F', 'S']; track $index) {\n <div class=\"ul-calendar__weekday\">{{ day }}</div>\n }\n </div>\n\n <div class=\"ul-calendar__days\">\n @for (day of calendarDays(); track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ul-calendar__day\"\n [class.ul-calendar__day--current-month]=\"day.isCurrentMonth\"\n [class.ul-calendar__day--today]=\"day.isToday\"\n [class.ul-calendar__day--selected]=\"day.isSelected\"\n [class.ul-calendar__day--disabled]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.date.getDate() }}\n </button>\n }\n </div>\n </div>\n }\n\n @if (mode() === 'time' || mode() === 'datetime') {\n <div class=\"ul-calendar__time-picker\">\n <div class=\"ul-calendar__time-controls\">\n <select\n class=\"ul-calendar__time-select\"\n [value]=\"selectedHour()\"\n (change)=\"selectTime(+$any($event.target).value, selectedMinute())\"\n >\n @for (hour of hourOptions(); track hour) {\n <option [value]=\"hour\" [disabled]=\"isTimeDisabled(hour, selectedMinute())\">\n {{ hour.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n <span class=\"ul-calendar__time-separator\">:</span>\n <select\n class=\"ul-calendar__time-select\"\n [value]=\"selectedMinute()\"\n (change)=\"selectTime(selectedHour(), +$any($event.target).value)\"\n >\n @for (minute of minuteOptions(); track minute) {\n <option [value]=\"minute\" [disabled]=\"isTimeDisabled(selectedHour(), minute)\">\n {{ minute.toString().padStart(2, '0') }}\n </option>\n }\n </select>\n </div>\n </div>\n }\n\n <div class=\"ul-calendar__actions\">\n @if (mode() === 'date' || mode() === 'datetime') {\n <ul-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"selectToday()\">\n Today\n </ul-button>\n }\n @if (value()) {\n <ul-button type=\"button\" theme=\"transparent-white\" (buttonClick)=\"clear()\">\n Clear\n </ul-button>\n }\n </div>\n </div>\n </ng-template>\n</div>\n","import { booleanAttribute, Component, input, ViewEncapsulation } from '@angular/core';\n\nimport { SkeletonComponent } from '../skeleton/skeleton';\n\n// Card types\nexport type CardDirection = 'horizontal' | 'vertical';\nexport type CardCaptionSize = 'default' | 'sm';\nexport type ActionsDistribution = 'default' | 'equal';\nexport type MediaAspectRatio = 'default' | 'square' | 'portrait';\n\n@Component({\n selector: 'ul-card',\n imports: [SkeletonComponent],\n templateUrl: './card.html',\n styleUrls: ['./card.scss'],\n host: {\n class: 'ul-card',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[class.ul-card--focused]': 'focused()',\n '[class.ul-card--disabled]': 'disabled()',\n '[class.ul-card--horizontal]': 'cardDirection() === \"horizontal\"',\n '[class.ul-card--caption-sm]': 'cardCaptionSize() === \"sm\"',\n '[class.ul-card--footer-equal]': 'footerDist() === \"equal\"',\n '[class.ul-card--media-square]': 'mediaAspectRatio() === \"square\"',\n '[class.ul-card--media-portrait]': 'mediaAspectRatio() === \"portrait\"',\n '[class.ul-card--media-grayscale]': 'mediaGrayscale()',\n '[class.ul-card--loading]': 'loading()',\n '[class.ul-card--media-blurred]': 'mediaBlur()',\n },\n encapsulation: ViewEncapsulation.None,\n})\nexport class CardComponent {\n // State inputs\n focused = input<boolean, boolean>(false, { transform: booleanAttribute });\n disabled = input<boolean, boolean>(false, { transform: booleanAttribute });\n\n // Layout inputs\n cardDirection = input<CardDirection>('vertical');\n cardCaptionSize = input<CardCaptionSize>('default');\n footerDist = input<ActionsDistribution>('default');\n\n // Media inputs\n mediaAspectRatio = input<MediaAspectRatio>('default');\n mediaBlur = input<boolean, boolean>(false, { transform: booleanAttribute });\n mediaGrayscale = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n\n // Content inputs\n cardCaption = input<string>('');\n cardTitle = input<string>('');\n cardTitleSingleLine = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n cardSubtitle = input<string>('');\n cardSubtitleSingleLine = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n\n // Loading state\n loading = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n}\n","@if (loading()) {\n <div class=\"ul-card__skeleton\">\n <div class=\"ul-card__media\">\n <ul-skeleton variant=\"rect\" borderRadius=\"lg\" [show]=\"true\" />\n </div>\n <div class=\"ul-card__content\">\n <div class=\"ul-card__content-title ul-card__content-title--single-line\">\n <ul-skeleton variant=\"text\" [lines]=\"2\" borderRadius=\"sm\" />\n </div>\n <div class=\"ul-card__content-subtitle ul-card__content-subtitle--single-line\">\n <ul-skeleton variant=\"text\" [lines]=\"1\" borderRadius=\"sm\" />\n </div>\n </div>\n </div>\n} @else {\n <div class=\"ul-card__media\">\n <ng-content select=\"[ulCardMedia]\" />\n <ng-content select=\"[ulCardMediaOverlay]\" />\n </div>\n <div class=\"ul-card__media-action\">\n <ng-content select=\"[ulCardMediaAction]\" />\n </div>\n\n <div class=\"ul-card__content\">\n @if (cardCaption()) {\n <div class=\"ul-card__content-caption\">\n {{ cardCaption() }}\n </div>\n }\n @if (cardTitle()) {\n <div\n class=\"ul-card__content-title\"\n [class.ul-card__content-title--single-line]=\"cardTitleSingleLine()\"\n >\n {{ cardTitle() }}\n </div>\n }\n @if (cardSubtitle()) {\n <div\n class=\"ul-card__content-subtitle\"\n [class.ul-card__content-subtitle--single-line]=\"cardSubtitleSingleLine()\"\n >\n {{ cardSubtitle() }}\n </div>\n }\n </div>\n\n <div class=\"ul-card__footer\">\n <ng-content select=\"[ulCardFooter]\" />\n </div>\n}\n","import { Component, computed, input, model, output, signal } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url';\n\n/** Border and hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */\nexport type InputAppearance = 'border-only' | 'subtle-tint';\n\n/**\n * A reusable input component that follows UDS design system guidelines.\n * Implements FormValueControl for use with Signal Forms [formField] directive.\n *\n * Use [(value)] for two-way binding, or bind with [formField]=\"myForm().email\" for Signal Forms.\n *\n * Content projection: [ul-input-left-elements], [ul-input-right-elements].\n */\n@Component({\n selector: 'ul-input',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent, ButtonComponent, IconComponent],\n templateUrl: './input.html',\n styleUrls: ['./input.scss'],\n})\nexport class InputComponent implements FormValueControl<string> {\n readonly type = input<InputType>('text');\n readonly size = input<UiSize>('md');\n /** Border/hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */\n readonly appearance = input<InputAppearance>('border-only');\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly readOnly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly maxLength = input<number | undefined>();\n readonly minLength = input<number | undefined>();\n readonly pattern = input<readonly RegExp[]>([]);\n /** Native step for type=\"number\". Defaults to 'any' (decimals allowed) rather than the\n * browser's own default of 1, which would silently reject e.g. \"19.99\" — pass an explicit\n * step (e.g. 1) to restrict to whole numbers. */\n readonly step = input<number | 'any' | undefined>(undefined);\n readonly autocomplete = input<string>('off');\n /** When provided (e.g. by a parent form field), the input element uses this id instead of the internal one. */\n readonly controlId = input<string | undefined>();\n /** Aria-label for the toggle button when the password is hidden (i.e. the action reveals it). */\n readonly showPasswordLabel = input<string>('Show password');\n /** Aria-label for the toggle button when the password is visible (i.e. the action hides it). */\n readonly hidePasswordLabel = input<string>('Hide password');\n\n /** FormUiControl optional: bound by [formField] when invalid */\n readonly invalid = input<boolean>(false);\n /** FormUiControl optional: bound by [formField] for validation errors */\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n /** FormUiControl optional: control sets on blur */\n readonly touched = model<boolean>(false);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */\n readonly touch = output<void>();\n\n readonly value = model<string>('');\n\n protected readonly ids = createFormFieldIds('ul-input');\n protected readonly effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId);\n protected readonly effectiveHelperId = computed(() =>\n this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId,\n );\n protected readonly effectiveErrorId = computed(() =>\n this.controlId() ? `${this.controlId()}-error` : this.ids.errorId,\n );\n protected readonly isFocused = signal(false);\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n // [attr.pattern]=\"pattern()\" would stringify an empty array to \"\" instead\n // of omitting the attribute — an empty native pattern matches only the\n // empty string, so every non-empty value would fail native validation.\n // Native <input pattern> only accepts one regex source, so multiple\n // patterns are combined as alternatives.\n protected readonly nativePattern = computed<string | null>(() => {\n const patterns = this.pattern();\n return patterns.length ? patterns.map((p) => p.source).join('|') : null;\n });\n\n protected readonly nativeStep = computed<number | 'any' | null>(() => {\n const step = this.step();\n if (step !== undefined) return step;\n return this.type() === 'number' ? 'any' : null;\n });\n\n protected readonly isPasswordType = computed(() => this.type() === 'password');\n\n protected readonly passwordRevealed = signal(false);\n protected readonly effectiveType = computed(() =>\n this.isPasswordType() && this.passwordRevealed() ? 'text' : this.type(),\n );\n protected readonly passwordToggleIcon = computed(() =>\n this.passwordRevealed() ? 'eye_on' : 'eye_dashed',\n );\n protected readonly passwordToggleLabel = computed(() =>\n this.passwordRevealed() ? this.hidePasswordLabel() : this.showPasswordLabel(),\n );\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.effectiveHelperId(),\n this.effectiveErrorId(),\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n // Outputs\n readonly inputBlur = output<FocusEvent>();\n readonly inputFocus = output<FocusEvent>();\n /** Emitted when Enter is pressed in the field; typically used to submit a form. */\n readonly inputEnter = output<KeyboardEvent>();\n\n onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.value.set(value);\n }\n\n onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.inputBlur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.inputFocus.emit(event);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n this.inputEnter.emit(event);\n }\n }\n\n togglePasswordVisibility(): void {\n this.passwordRevealed.update((revealed) => !revealed);\n }\n\n /**\n * Programmatically focuses the input element\n */\n focus(): void {\n const inputEl = document.getElementById(this.effectiveControlId()) as HTMLInputElement;\n inputEl?.focus();\n }\n\n select(): void {\n const inputEl = document.getElementById(this.effectiveControlId()) as HTMLInputElement;\n inputEl?.select();\n }\n}\n","<div\n class=\"ul-input ul-input--{{ size() }} ul-input--appearance-{{ appearance() }}\"\n [class.ul-input--error]=\"hasError()\"\n [class.ul-input--disabled]=\"disabled()\"\n [class.ul-input--read-only]=\"readOnly()\"\n [class.ul-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-input__group\" [class.ul-input__group--focused]=\"isFocused()\">\n <div class=\"ul-input__left-elements\">\n <ng-content select=\"[ul-input-left-elements]\" />\n </div>\n\n <input\n [id]=\"effectiveControlId()\"\n [type]=\"effectiveType()\"\n class=\"ul-input__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.pattern]=\"nativePattern()\"\n [attr.step]=\"nativeStep()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <div class=\"ul-input__right-elements\">\n @if (isPasswordType()) {\n <ul-button\n class=\"ul-input__password-toggle\"\n theme=\"ghost-white\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"passwordToggleLabel()\"\n (buttonClick)=\"togglePasswordVisibility()\"\n >\n <ul-icon [icon]=\"passwordToggleIcon()\" />\n </ul-button>\n }\n <ng-content select=\"[ul-input-right-elements]\" />\n </div>\n </div>\n\n <ul-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { Component, computed, input, model } from '@angular/core';\nimport type {\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiCheckboxSize } from '../shared/ui-types';\n\nexport type CheckboxZoneType = 'none' | 'accessible' | 'visible' | 'checked-visible';\n\n/**\n * Checkbox component. Implements FormCheckboxControl for Signal Forms [formField].\n * Use [(checked)] or [formField]=\"myForm().acceptTerms\". No value property.\n * Uses shared form field label and helper for alignment with input, textarea, radio-group.\n */\n@Component({\n selector: 'ul-checkbox',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent],\n template: `\n <div\n class=\"ul-checkbox ul-checkbox--{{ size() }}\"\n [class.ul-checkbox--accessible-zone]=\"zone() === 'accessible'\"\n [class.ul-checkbox--visible-zone]=\"zone() === 'visible'\"\n [class.ul-checkbox--checked-visible-zone]=\"zone() === 'checked-visible'\"\n [class.ul-checkbox--error]=\"hasError()\"\n [class.ul-checkbox--disabled]=\"disabled()\"\n [class.ul-checkbox--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size() === 'sm' ? 'sm' : 'md'\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <label\n class=\"ul-checkbox__row\"\n [class.ul-checkbox__row--accessible-zone]=\"zone() === 'accessible'\"\n [class.ul-checkbox__row--visible-zone]=\"zone() === 'visible'\"\n [class.ul-checkbox__row--checked-visible-zone]=\"zone() === 'checked-visible'\"\n [class.ul-checkbox__row--sm]=\"size() === 'sm'\"\n [class.ul-checkbox__row--lg]=\"size() === 'lg'\"\n [class.ul-checkbox__row--error]=\"hasError()\"\n [attr.for]=\"ids.controlId\"\n >\n <input\n type=\"checkbox\"\n class=\"ul-checkbox__input\"\n [id]=\"ids.controlId\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [indeterminate]=\"indeterminate()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n (change)=\"onChange($event)\"\n />\n <span class=\"ul-checkbox__pseudo-input\"></span>\n <span class=\"ul-checkbox__label\">\n <ng-content />\n </span>\n </label>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n </div>\n `,\n styleUrls: ['./checkbox.scss'],\n})\nexport class CheckboxComponent implements FormCheckboxControl {\n readonly checked = model<boolean>(false);\n\n readonly disabled = model<boolean>(false);\n readonly indeterminate = model<boolean>(false);\n readonly zone = input<CheckboxZoneType>('none');\n readonly size = input<UiCheckboxSize>('default');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly error = input<boolean>(false);\n readonly errorText = input<string | null>(null);\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n protected readonly ids = createFormFieldIds('ul-checkbox');\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly resolvedErrorText = computed(\n () =>\n this.errorText() ||\n (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null),\n );\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.resolvedErrorText(),\n ),\n );\n\n onChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n}\n","import { Component, contentChild, input } from '@angular/core';\n\nimport { CheckboxComponent } from '../checkbox/checkbox';\nimport { SkeletonComponent } from '../skeleton/skeleton';\n\nexport type ListItemTheme =\n | 'ghost-white'\n | 'transparent-white'\n | 'outline-white'\n | 'outline-purple';\n\n@Component({\n selector: 'ul-list-item',\n imports: [SkeletonComponent],\n template: `\n <ul-skeleton [show]=\"loading()\" variant=\"rect\">\n <button\n type=\"button\"\n class=\"ul-list-item ul-list-item--{{ theme() }}\"\n [class.ul-list-item--no-focus-outline]=\"hideFocusOutline()\"\n [class.ul-list-item--selected]=\"selected() || !!checkbox()?.checked()\"\n (click)=\"clickHandler()\"\n [disabled]=\"disabled() || loading()\"\n >\n <div class=\"ul-list-item__before-label\">\n <ng-content select=\"[ul-list-item-before-label]\" />\n </div>\n <div class=\"ul-list-item__label\">\n <ng-content select=\"[ul-list-item-label]\" />\n </div>\n <div class=\"ul-list-item__after-label\">\n <ng-content select=\"[ul-list-item-after-label]\" />\n </div>\n </button>\n </ul-skeleton>\n `,\n styleUrls: ['./list-item.scss'],\n})\nexport class ListItemComponent {\n checkbox = contentChild<CheckboxComponent>(CheckboxComponent);\n\n theme = input<ListItemTheme>('ghost-white');\n disabled = input<boolean>(false);\n hideFocusOutline = input<boolean>(false);\n selected = input<boolean>(false);\n\n loading = input<boolean>(false);\n\n clickHandler() {\n if (this.disabled() || this.loading()) {\n return;\n }\n\n if (!this.disabled()) {\n this.checkbox()?.checked.update((value) => !value);\n }\n }\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport {\n Component,\n computed,\n HostListener,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nexport type ModalVariant =\n | 'default'\n | 'success'\n | 'error'\n | 'custom'\n | 'bottom-sheet'\n | 'confirmation';\n\n@Component({\n selector: 'ul-modal',\n imports: [CdkTrapFocus, ButtonComponent, IconComponent],\n templateUrl: './modal.html',\n styleUrls: ['./modal.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.aria-hidden]': '!open()',\n },\n})\nexport class ModalComponent {\n /** Whether the modal is open. Supports two-way binding with [(open)]. */\n open = model<boolean>(false);\n\n /** Visual variant: default, success, error, custom, or bottom-sheet (mobile-only layout). */\n variant = input<ModalVariant>('default');\n\n /** Optional title shown in the header. */\n title = input<string | undefined>(undefined);\n\n /** Whether clicking the backdrop closes the modal. */\n closeOnBackdropClick = input<boolean>(true);\n\n /** Whether to show the close button in the header. */\n showCloseButton = input<boolean>(true);\n\n /** Label for the primary confirm action in the confirmation variant. */\n confirmLabel = input<string>('Confirm');\n\n /** Label for the secondary cancel action in the confirmation variant. */\n cancelLabel = input<string>('Cancel');\n\n /** Optional CSS class for the panel (e.g. for custom variant). */\n customClass = input<string | undefined>(undefined);\n\n /**\n * Below the phone breakpoint, fills the entire viewport edge-to-edge (no\n * margin, no rounded corners, no visible backdrop) instead of the default\n * bottom-pinned sheet every variant otherwise gets there. Has no effect\n * above that breakpoint — desktop/tablet layout is unchanged either way.\n */\n fullScreenInMobile = input<boolean>(false);\n\n /** Emitted when the modal is closed (button, backdrop, or escape). */\n closed = output<void>();\n\n /** Emitted when the user confirms in the confirmation variant. */\n confirmed = output<void>();\n\n /** Emitted when the user cancels in the confirmation variant. */\n cancelled = output<void>();\n\n readonly panelClass = computed(() => {\n const variant = this.variant();\n const custom = this.customClass();\n const classes = ['ul-modal__panel', `ul-modal__panel--${variant}`];\n if (this.fullScreenInMobile()) {\n classes.push('ul-modal__panel--fullscreen-mobile');\n }\n if (custom) {\n classes.push(custom);\n }\n return classes.join(' ');\n });\n\n readonly isConfirmation = computed(() => this.variant() === 'confirmation');\n readonly isSuccess = computed(() => this.variant() === 'success');\n readonly isError = computed(() => this.variant() === 'error');\n\n modalTitle = computed(() => (this.isSuccess() || this.isError() ? '' : this.title()));\n\n readonly titleId = `ul-modal-title-${Math.random().toString(36).slice(2, 11)}`;\n readonly bodyId = `ul-modal-body-${Math.random().toString(36).slice(2, 11)}`;\n\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n onConfirm(): void {\n if (!this.isConfirmation()) {\n return;\n }\n this.confirmed.emit();\n this.close();\n }\n\n onCancel(): void {\n if (!this.isConfirmation()) {\n return;\n }\n this.cancelled.emit();\n this.close();\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.open()) {\n this.close();\n }\n }\n}\n","@if (open()) {\n <div\n class=\"ul-modal ul-modal--backdrop\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n [attr.aria-describedby]=\"bodyId\"\n (click)=\"onBackdropClick($event)\"\n >\n <div [class]=\"panelClass()\" cdkTrapFocus (click)=\"$event.stopPropagation()\">\n @if (modalTitle() || showCloseButton()) {\n <header class=\"ul-modal__header\">\n @if (modalTitle()) {\n <h2 [id]=\"titleId\" class=\"ul-modal__title\">{{ title() }}</h2>\n }\n @if (showCloseButton()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n ariaLabel=\"Close\"\n class=\"ul-modal__close\"\n (buttonClick)=\"close()\"\n >\n <ul-icon icon=\"close\" size=\"6\" />\n </ul-button>\n }\n </header>\n }\n <div class=\"ul-modal__body\" [id]=\"bodyId\">\n @if (isSuccess() || isError()) {\n <div class=\"ul-modal__status\" aria-hidden=\"true\">\n <ul-icon\n class=\"ul-modal__status-icon\"\n [icon]=\"isSuccess() ? 'check_circle' : 'cross_circle'\"\n size=\"16\"\n />\n </div>\n }\n <ng-content />\n </div>\n <div class=\"ul-modal__footer\">\n @if (isConfirmation()) {\n <ul-button theme=\"ghost-white\" (buttonClick)=\"onCancel()\">\n {{ cancelLabel() }}\n </ul-button>\n <ul-button theme=\"fill-purple\" (buttonClick)=\"onConfirm()\">\n {{ confirmLabel() }}\n </ul-button>\n } @else {\n <ng-content select=\"[ul-modal-footer]\" />\n }\n </div>\n </div>\n </div>\n}\n","import {\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { IconComponent } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { ListItemComponent } from '../list-item/list-item';\nimport { ModalComponent } from '../modal/modal';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport interface CategoryPickerNode {\n id: string;\n parentId: string | null;\n label: string;\n icon?: string;\n isLeaf: boolean;\n}\n\n/**\n * Picker for a hierarchical category tree of unbounded depth: a closed field\n * that opens a drill-down + search modal (one level of children at a time,\n * with a breadcrumb trail back to root) and resolves to a single leaf\n * node's id. Implements FormValueControl for Signal Forms [formField]. Use\n * [(value)] for two-way binding.\n *\n * Rows are real buttons (ul-list-item), so Tab/Shift+Tab and Enter/Space\n * already give full keyboard access without extra arrow-key wiring — unlike\n * ul-search-select's single-line combobox overlay, there's no need for\n * ComboboxState here.\n *\n * @example\n * <ul-category-picker label=\"Category\" [nodes]=\"categoryNodes\" [(value)]=\"categoryId\" />\n */\n@Component({\n selector: 'ul-category-picker',\n imports: [\n IconComponent,\n InputComponent,\n ListItemComponent,\n ModalComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './category-picker.html',\n styleUrls: ['./category-picker.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class CategoryPickerComponent implements FormValueControl<string | null> {\n readonly size = input<UiSize>('md');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('Select a category');\n readonly searchPlaceholder = input<string>('Search categories');\n readonly modalTitle = input<string>('Select a category');\n readonly rootLabel = input<string>('All categories');\n readonly noResultsText = input<string>('No results');\n readonly nodes = input<CategoryPickerNode[]>([]);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n /** Emitted when the modal closes, whether or not a value was picked — mirrors ul-select's touch. */\n readonly touch = output<void>();\n\n readonly value = model<string | null>(null);\n\n protected readonly ids = createFormFieldIds('ul-category-picker');\n protected readonly open = signal(false);\n protected readonly currentParentId = signal<string | null>(null);\n protected readonly query = signal('');\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n private readonly nodesById = computed(() => new Map(this.nodes().map((node) => [node.id, node])));\n\n protected readonly selectedNode = computed(() => {\n const id = this.value();\n return id == null ? null : (this.nodesById().get(id) ?? null);\n });\n\n protected readonly selectedLabel = computed(() => {\n const node = this.selectedNode();\n return node ? this.ancestorLabels(node.id).join(' › ') : '';\n });\n\n protected readonly currentChildren = computed(() =>\n this.nodes().filter((node) => node.parentId === this.currentParentId()),\n );\n\n /** Root→current ancestor chain, for the breadcrumb trail (empty at the root level). */\n protected readonly breadcrumb = computed(() => {\n const parentId = this.currentParentId();\n return parentId == null ? [] : this.ancestorNodes(parentId);\n });\n\n private readonly normalizedQuery = computed(() => this.query().trim().toLowerCase());\n protected readonly isSearching = computed(() => this.normalizedQuery().length > 0);\n\n protected readonly searchResults = computed(() => {\n const q = this.normalizedQuery();\n if (!q) return [];\n return this.nodes()\n .filter((node) => node.isLeaf && node.label.toLowerCase().includes(q))\n .map((node) => ({\n node,\n breadcrumb: this.ancestorLabels(node.id).slice(0, -1).join(' › '),\n }));\n });\n\n protected readonly hasNoResults = computed(\n () => this.isSearching() && this.searchResults().length === 0,\n );\n\n openPicker(): void {\n if (this.disabled()) return;\n const selected = this.selectedNode();\n this.currentParentId.set(selected ? selected.parentId : null);\n this.query.set('');\n this.open.set(true);\n }\n\n closePicker(): void {\n this.open.set(false);\n this.touch.emit();\n }\n\n selectNode(node: CategoryPickerNode): void {\n if (node.isLeaf) {\n this.value.set(node.id);\n this.closePicker();\n } else {\n this.currentParentId.set(node.id);\n this.query.set('');\n }\n }\n\n goToBreadcrumb(parentId: string | null): void {\n this.currentParentId.set(parentId);\n this.query.set('');\n }\n\n private ancestorNodes(id: string): CategoryPickerNode[] {\n const chain: CategoryPickerNode[] = [];\n let current = this.nodesById().get(id);\n while (current) {\n chain.unshift(current);\n current = current.parentId == null ? undefined : this.nodesById().get(current.parentId);\n }\n return chain;\n }\n\n private ancestorLabels(id: string): string[] {\n return this.ancestorNodes(id).map((node) => node.label);\n }\n}\n","<div\n class=\"ul-category-picker ul-category-picker--{{ size() }}\"\n [class.ul-category-picker--disabled]=\"disabled()\"\n [class.ul-category-picker--error]=\"hasError()\"\n [class.ul-category-picker--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <button\n type=\"button\"\n [id]=\"ids.controlId\"\n class=\"ul-category-picker__control\"\n [disabled]=\"disabled()\"\n (click)=\"openPicker()\"\n >\n <span\n class=\"ul-category-picker__control-text\"\n [class.ul-category-picker__control-text--placeholder]=\"!selectedNode()\"\n >\n {{ selectedLabel() || placeholder() }}\n </span>\n <ul-icon size=\"5\" icon=\"chevron_down\" />\n </button>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n\n<ul-modal\n variant=\"bottom-sheet\"\n [fullScreenInMobile]=\"true\"\n [(open)]=\"open\"\n [title]=\"modalTitle()\"\n (closed)=\"closePicker()\"\n>\n @if (open()) {\n <div class=\"ul-category-picker__modal\">\n <ul-input\n [controlId]=\"ids.controlId + '-search'\"\n [value]=\"query()\"\n (valueChange)=\"query.set($event)\"\n [placeholder]=\"searchPlaceholder()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n @if (isSearching()) {\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @if (hasNoResults()) {\n <div class=\"ul-category-picker__empty\" role=\"status\">{{ noResultsText() }}</div>\n } @else {\n @for (result of searchResults(); track result.node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(result.node)\">\n <ng-container ul-list-item-before-label>\n @if (result.node.icon) {\n <ul-icon size=\"5\" [icon]=\"result.node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>\n <div class=\"ul-category-picker__option-label\">{{ result.node.label }}</div>\n @if (result.breadcrumb) {\n <div class=\"ul-category-picker__option-breadcrumb\">{{ result.breadcrumb }}</div>\n }\n </ng-container>\n </ul-list-item>\n }\n }\n </div>\n } @else {\n @if (breadcrumb().length) {\n <div class=\"ul-category-picker__breadcrumb\">\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(null)\"\n >\n {{ rootLabel() }}\n </button>\n @for (ancestor of breadcrumb(); track ancestor.id; let last = $last) {\n <ul-icon size=\"4\" icon=\"chevron_right\" />\n @if (last) {\n <span\n class=\"ul-category-picker__breadcrumb-item ul-category-picker__breadcrumb-item--current\"\n aria-current=\"page\"\n >\n {{ ancestor.label }}\n </span>\n } @else {\n <button\n type=\"button\"\n class=\"ul-category-picker__breadcrumb-item\"\n (click)=\"goToBreadcrumb(ancestor.id)\"\n >\n {{ ancestor.label }}\n </button>\n }\n }\n </div>\n }\n\n <div class=\"ul-category-picker__list ul-scrollable\" role=\"listbox\">\n @for (node of currentChildren(); track node.id) {\n <ul-list-item theme=\"ghost-white\" (click)=\"selectNode(node)\">\n <ng-container ul-list-item-before-label>\n @if (node.icon) {\n <ul-icon size=\"5\" [icon]=\"node.icon\" />\n }\n </ng-container>\n <ng-container ul-list-item-label>{{ node.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n @if (!node.isLeaf) {\n <ul-icon size=\"5\" icon=\"chevron_right\" />\n }\n </ng-container>\n </ul-list-item>\n }\n </div>\n }\n </div>\n }\n</ul-modal>\n","import {\n AfterViewInit,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nexport type CollapseVariant = 'text' | 'icon';\n\n/**\n * A collapsible content component that supports both text and icon variants.\n * Uses CSS transitions for smooth animations and provides accessibility features.\n *\n * @example\n * ```html\n * <ul-collapse [maxHeight]=\"300\" variant=\"text\">\n * <div>Collapsible content here</div>\n * </ul-collapse>\n * ```\n */\n@Component({\n selector: 'ul-collapse',\n imports: [ButtonComponent, IconComponent],\n template: `\n <div [class]=\"computedClasses()\">\n <div\n class=\"ul-collapse__content\"\n #content\n [attr.aria-expanded]=\"!collapsed()\"\n [attr.aria-hidden]=\"collapsed()\"\n >\n <ng-content />\n </div>\n @if (isCollapsible()) {\n <div class=\"ul-collapse__toggle\">\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"variant() === 'icon'\"\n class=\"ul-collapse__toggle-button\"\n (click)=\"toggle()\"\n (keydown)=\"onToggleKeydown($event)\"\n [attr.aria-label]=\"collapsed() ? expandLabel() : collapseLabel()\"\n >\n @if (variant() === 'text') {\n <span>\n {{ collapsed() ? expandLabel() : collapseLabel() }}\n </span>\n } @else if (variant() === 'icon') {\n <ul-icon size=\"6\" icon=\"chevron_up\" />\n }\n </ul-button>\n </div>\n }\n </div>\n `,\n styleUrls: ['./collapse.scss'],\n host: {\n '[style.--ul-collapse-max-height.px]': 'maxHeight()',\n '[style.--ul-collapse-full-height.px]': 'fullHeight()',\n role: 'region',\n },\n})\nexport class CollapseComponent implements AfterViewInit {\n private readonly destroyRef = inject(DestroyRef);\n\n @ViewChild('content') content!: ElementRef<HTMLDivElement>;\n\n /**\n * The visual variant of the collapse toggle.\n * @default 'text'\n */\n variant = input<CollapseVariant>('text');\n\n /**\n * Controls the collapsed state of the component.\n * @default true\n */\n collapsed = model<boolean>(true);\n\n /**\n * Maximum height of the content when collapsed.\n * @default 200\n */\n maxHeight = input.required<number>();\n\n /**\n * Custom label for the expand action.\n * @default 'See more'\n */\n expandLabel = input<string>('See more');\n\n /**\n * Custom label for the collapse action.\n * @default 'See less'\n */\n collapseLabel = input<string>('See less');\n\n /** Current full height of the content */\n fullHeight = signal<number>(0);\n\n /** Whether the content is collapsible based on its height */\n isCollapsible = computed(() => {\n const max = Math.max(0, this.maxHeight());\n return this.fullHeight() > max;\n });\n\n ngAfterViewInit() {\n // Initial height calculation\n this.updateFullHeight();\n\n // Listen for window resize events to recalculate height\n const resizeSubscription = fromEvent(window, 'resize')\n .pipe(debounceTime(100))\n .subscribe(() => this.updateFullHeight());\n\n this.destroyRef.onDestroy(() => resizeSubscription.unsubscribe());\n }\n\n /** Updates the full height of the content */\n private updateFullHeight(): void {\n if (this.content?.nativeElement) {\n this.fullHeight.set(this.content.nativeElement.scrollHeight);\n }\n }\n\n /** Toggles the collapsed state */\n toggle(): void {\n this.collapsed.set(!this.collapsed());\n }\n\n onToggleKeydown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.toggle();\n }\n }\n\n computedClasses = computed(() => {\n return {\n 'ul-collapse': true,\n 'ul-collapse--collapsed': this.isCollapsible() && this.collapsed(),\n };\n });\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Mobile-only bottom navigation bar, styled like an app's tab bar\n * (icon-above-label items, one highlighted as active). Hidden above the\n * 'md' breakpoint (1024px) by the component's own CSS — no wrapper class or\n * media query is needed in the consuming app.\n *\n * Project `ul-dock-item`s directly; there is no data-driven `items` input,\n * since each item typically needs its own `routerLink`.\n *\n * @example\n * <ul-dock>\n * <ul-dock-item icon=\"home\" label=\"Home\" routerLink=\"/home\" routerLinkActive=\"ul-dock-item--active\" />\n * <ul-dock-item icon=\"search\" label=\"Search\" routerLink=\"/search\" routerLinkActive=\"ul-dock-item--active\" />\n * </ul-dock>\n */\n@Component({\n selector: 'ul-dock',\n templateUrl: './dock.html',\n styleUrls: ['./dock.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DockComponent {}\n","<nav class=\"ul-dock\" role=\"navigation\" aria-label=\"Primary\">\n <ng-content />\n</nav>\n","import { Directive } from '@angular/core';\n\n/** Place on the element projected into [ul-dock-item-content] so the dock item renders custom content instead of its default icon+label. */\n@Directive({\n selector: '[ul-dock-item-content]',\n})\nexport class DockItemContentSlotDirective {}\n","import { Component, computed, contentChild, input, ViewEncapsulation } from '@angular/core';\n\nimport { IconComponent, type IconName } from '../icon/icon';\nimport { DockItemContentSlotDirective } from './dock-item-slot.directive';\n\n/** Pre-built visual treatments for a dock item. 'accent' raises/highlights the item (e.g. a primary action tab like \"New\"). */\nexport type DockItemVariant = 'default' | 'accent';\n\n/**\n * A single tab in a `ul-dock`. Renders an icon above a label and tints both\n * when `active`. Attach `routerLink`/`routerLinkActive` (or any other\n * directive) directly on `ul-dock-item` for navigation.\n *\n * For the common case, content is data-driven via `icon`/`label`. To fully\n * customize an item's content (e.g. a differently laid-out icon+label pair),\n * project it with `[ul-dock-item-content]` — this replaces the default\n * icon/label rendering entirely. `badge` and `variant` apply regardless of\n * which content path is used.\n *\n * @example\n * <ul-dock-item icon=\"home\" label=\"Home\" routerLink=\"/home\" routerLinkActive=\"ul-dock-item--active\" />\n * <ul-dock-item icon=\"bell_on\" badge=\"3\" routerLink=\"/notifications\" />\n * <ul-dock-item variant=\"accent\" routerLink=\"/listings/new\">\n * <span ul-dock-item-content>\n * <ul-icon icon=\"plus\" size=\"6\" />\n * <span class=\"ul-dock-item__label\">New</span>\n * </span>\n * </ul-dock-item>\n */\n@Component({\n selector: 'ul-dock-item',\n imports: [IconComponent],\n templateUrl: './dock-item.html',\n styleUrls: ['./dock-item.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DockItemComponent {\n icon = input<IconName>();\n label = input<string>('');\n active = input<boolean>(false);\n disabled = input<boolean>(false);\n badge = input<string | number>();\n variant = input<DockItemVariant>('default');\n\n readonly contentSlot = contentChild(DockItemContentSlotDirective);\n readonly hasContentSlot = computed(() => !!this.contentSlot());\n}\n","<button\n type=\"button\"\n class=\"ul-dock-item\"\n [class.ul-dock-item--active]=\"active()\"\n [class.ul-dock-item--accent]=\"variant() === 'accent'\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n>\n @if (hasContentSlot()) {\n <ng-content select=\"[ul-dock-item-content]\" />\n } @else {\n <ul-icon [icon]=\"icon()!\" size=\"6\" />\n @if (label()) {\n <span class=\"ul-dock-item__label\">{{ label() }}</span>\n }\n }\n @if (badge()) {\n <span class=\"ul-dock-item__badge\">{{ badge() }}</span>\n }\n</button>\n","import { CdkMenuItem } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\n\nimport { IconComponent, IconName } from '../icon/icon';\nimport { ListItemComponent, ListItemTheme } from '../list-item/list-item';\n\n/** A single row in a `ul-menu` or `ul-dropdown` menu panel. */\nexport type MenuItem = {\n /** Display text for the item. */\n label: string;\n /** Optional value associated with the item. */\n value?: string;\n /** Icons to display on the left side of the item. */\n leftIcons?: IconName[];\n /** Icons to display on the right side of the item. */\n rightIcons?: IconName[];\n /** Whether the item is disabled and cannot be triggered. */\n disabled?: boolean;\n};\n\n/**\n * Renders `items` as `ul-list-item` + `cdkMenuItem` rows inside an\n * already-open `cdkMenu` panel. Shared by `ul-dropdown` (which passes\n * `selectedIndex` so the current choice renders with a checkmark) and\n * `ul-menu` (which leaves `selectedIndex` as `null` — every item there is a\n * one-off action, never a persisted \"current selection\").\n */\n@Component({\n selector: 'ul-menu-items',\n imports: [CdkMenuItem, NgTemplateOutlet, ListItemComponent, IconComponent],\n template: `\n <ng-template #renderIcons let-icons>\n @for (icon of icons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n </ng-template>\n\n @for (item of items(); track $index) {\n <ul-list-item\n cdkMenuItem\n [theme]=\"theme()\"\n [disabled]=\"!!item.disabled\"\n (cdkMenuItemTriggered)=\"itemTriggered.emit($index)\"\n [attr.role]=\"selectedIndex() === null ? 'menuitem' : 'menuitemradio'\"\n [attr.aria-checked]=\"\n selectedIndex() === null ? null : selectedIndex() === $index ? 'true' : 'false'\n \"\n >\n <ng-container ul-list-item-before-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.leftIcons }\" />\n </ng-container>\n <ng-container ul-list-item-label>{{ item.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: item.rightIcons }\" />\n @if (selectedIndex() === $index) {\n <ul-icon size=\"5\" icon=\"check\" />\n }\n </ng-container>\n </ul-list-item>\n }\n `,\n})\nexport class MenuItemsComponent {\n items = input<MenuItem[]>([]);\n theme = input<ListItemTheme>('ghost-white');\n /**\n * Index of the item to render as checked/selected.\n * @default null - no item is ever shown as checked (the action-menu case).\n */\n selectedIndex = input<number | null>(null);\n itemTriggered = output<number>();\n}\n","import { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, output, TemplateRef, viewChild } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\nimport { ListItemComponent, ListItemTheme } from '../list-item/list-item';\n\n/**\n * The trigger button shared by `ul-dropdown` and `ul-menu`: either an\n * icon-only button (`iconOnly`, e.g. a \"more options\" `⋮`) or a\n * `ul-list-item`-styled button showing a label with optional icons on\n * either side. Wires `cdkMenuTriggerFor` plus the ARIA attributes a menu\n * trigger needs, and exposes `close()` so the panel it opens can be\n * dismissed programmatically (e.g. a tap on a mobile bottom-sheet backdrop,\n * which CDK's own outside-click handling won't catch since the backdrop\n * lives inside the same overlay pane).\n */\n@Component({\n selector: 'ul-menu-trigger',\n imports: [CdkMenuTrigger, NgTemplateOutlet, ButtonComponent, ListItemComponent, IconComponent],\n template: `\n <ng-template #renderIcons let-icons>\n @for (icon of icons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n </ng-template>\n\n @if (iconOnly(); as iconName) {\n <ul-button\n [theme]=\"theme()\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menuTemplate()\"\n class=\"ul-menu-trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId()\"\n [attr.aria-label]=\"iconOnlyLabel()\"\n (cdkMenuOpened)=\"opened.emit()\"\n (cdkMenuClosed)=\"closed.emit()\"\n >\n <ul-icon [icon]=\"iconName\" />\n </ul-button>\n } @else {\n <ul-list-item\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [cdkMenuTriggerFor]=\"menuTemplate()\"\n class=\"ul-menu-trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"menuId()\"\n (cdkMenuOpened)=\"opened.emit()\"\n (cdkMenuClosed)=\"closed.emit()\"\n >\n <ng-container ul-list-item-before-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: leftIcons() }\" />\n </ng-container>\n <ng-container ul-list-item-label>{{ label() }}</ng-container>\n <ng-container ul-list-item-after-label>\n <ng-container *ngTemplateOutlet=\"renderIcons; context: { $implicit: rightIcons() }\" />\n </ng-container>\n </ul-list-item>\n }\n `,\n})\nexport class MenuTriggerComponent {\n theme = input<ListItemTheme>('ghost-white');\n disabled = input(false);\n iconOnly = input<IconName>();\n iconOnlyLabel = input('Open menu');\n label = input('');\n leftIcons = input<IconName[]>([]);\n rightIcons = input<IconName[]>([]);\n menuTemplate = input.required<TemplateRef<unknown>>();\n menuId = input.required<string>();\n isOpen = input(false);\n\n opened = output<void>();\n closed = output<void>();\n\n private readonly trigger = viewChild(CdkMenuTrigger);\n\n close(): void {\n this.trigger()?.close();\n }\n}\n","import { CdkMenu } from '@angular/cdk/menu';\nimport {\n Component,\n computed,\n input,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { IconName } from '../icon/icon';\nimport { ListItemTheme } from '../list-item/list-item';\nimport { MenuItem, MenuItemsComponent } from '../menu/menu-items';\nimport { MenuTriggerComponent } from '../menu/menu-trigger';\n\n/** @deprecated Import from `../menu/menu-items` instead — kept here so existing `DropdownItem` imports keep working. */\nexport type DropdownItem = MenuItem;\n\nconst DEFAULT_MENU_TRIGGER_ICONS: Pick<MenuItem, 'leftIcons' | 'rightIcons'> = {\n rightIcons: ['chevron_down'],\n};\n\n/**\n * A customizable dropdown component that displays a list of selectable items.\n *\n * Features:\n * - Configurable themes (ghost-white, transparent-white)\n * - Icon support for items and trigger button\n * - Customizable trigger appearance\n * - Disabled item support\n * - Two-way binding for selected item\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <uds-dropdown\n * [items]=\"dropdownItems\"\n * [theme]=\"'transparent-white'\"\n * (selectedItemChange)=\"onItemSelected($event)\">\n * </uds-dropdown>\n *\n * <!-- More options menu -->\n * <uds-dropdown\n * [items]=\"actionItems\"\n * [onlyMenuTriggerIcon]=\"'more_options'\">\n * </uds-dropdown>\n * ```\n */\n@Component({\n selector: 'ul-dropdown',\n imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent],\n templateUrl: './dropdown.html',\n styleUrls: ['./dropdown.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DropdownComponent {\n /**\n * The visual theme for the dropdown.\n * @default 'ghost-white'\n */\n theme = input<ListItemTheme>('ghost-white');\n\n /**\n * Array of items to display in the dropdown menu.\n * @default []\n */\n items = input<MenuItem[]>([]);\n\n /**\n * Whether the dropdown is disabled.\n * @default false\n */\n disabled = input<boolean>(false);\n\n /**\n * Overrides the icons of the selected item in the trigger button.\n * Can override leftIcons, rightIcons, or both.\n * @default { rightIcons: ['chevron_down'] }\n *\n * @example\n * ```typescript\n * menuTriggerIcons = {\n * chevron_down\n * }\n * ```\n */\n menuTriggerIcons = input<Pick<MenuItem, 'leftIcons' | 'rightIcons'> | undefined>(\n DEFAULT_MENU_TRIGGER_ICONS,\n );\n\n /**\n * Shows only a single icon in the trigger button, hiding the selected item's label and icons.\n * Commonly used with 'more_options' for action menus.\n * @default undefined\n *\n * @example\n * ```typescript\n * triggerIconOnly = 'more_options'\n * ```\n */\n triggerIconOnly = input<IconName>();\n\n /**\n * Accessible label for the icon-only trigger button.\n * @default 'Open menu'\n */\n iconOnlyLabel = input<string>('Open menu');\n\n /**\n * The index of the currently selected item.\n * Supports two-way binding with [(selectedIndex)].\n * @default 0\n */\n selectedIndex = model<number>(0);\n\n /**\n * The currently selected item with any trigger icon overrides applied.\n */\n selectedItem = computed(() => {\n const items = this.items();\n const index = this.selectedIndex();\n const fallback: MenuItem = {\n label: '',\n value: undefined,\n leftIcons: [],\n rightIcons: [],\n disabled: false,\n };\n const item = items[index] ?? items[0] ?? fallback;\n\n return {\n ...item,\n ...(this.menuTriggerIcons() ?? DEFAULT_MENU_TRIGGER_ICONS),\n };\n });\n\n /**\n * Right icons for the trigger: when default is chevron_down, shows chevron_down when closed\n * and chevron_up when open. Otherwise uses selectedItem().rightIcons as-is.\n */\n triggerRightIcons = computed(() => {\n const right = this.selectedItem().rightIcons ?? [];\n const open = this.isOpen();\n if (right.length === 1 && right[0] === 'chevron_down') {\n return open ? (['chevron_up'] as IconName[]) : (['chevron_down'] as IconName[]);\n }\n return right;\n });\n\n /**\n * Tracks whether the menu is currently open for ARIA.\n */\n isOpen = signal(false);\n\n /**\n * Stable id used to link the trigger to the menu container.\n */\n readonly menuId = `ul-dropdown-menu-${Math.random().toString(36).slice(2, 11)}`;\n\n /**\n * Emitted when a new item is selected from the dropdown.\n */\n selectedItemChange = output<MenuItem>();\n\n /**\n * Emitted when the menu closes, whether or not a selection was made —\n * the closest thing this component has to a \"blur\" for form controls\n * built on top of it (see ul-select's touch output).\n */\n closed = output<void>();\n\n private readonly trigger = viewChild(MenuTriggerComponent);\n\n /**\n * Handles the selection of a dropdown item.\n * @param index - The index of the selected item\n */\n handleItemTriggered(index: number) {\n this.selectedIndex.set(index);\n this.selectedItemChange.emit(this.items()[index]);\n }\n\n /**\n * Closes the panel. CDK auto-closes on a `cdkMenuItem` trigger already —\n * this is for the mobile backdrop tap, which isn't one.\n */\n closeMenu(): void {\n this.trigger()?.close();\n }\n\n onMenuOpened(): void {\n this.isOpen.set(true);\n }\n\n onMenuClosed(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n}\n","<div class=\"ul-dropdown\">\n <ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"selectedItem().label\"\n [leftIcons]=\"selectedItem().leftIcons ?? []\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n />\n\n <ng-template #menu>\n <div class=\"ul-dropdown__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-dropdown__content ul-scrollable\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n [selectedIndex]=\"selectedIndex()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n </div>\n </ng-template>\n</div>\n","import {\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\n/** Border and hover style: border-only (hover = border only), subtle-tint (hover = border + 5% fill). */\nexport type FileInputAppearance = 'border-only' | 'subtle-tint';\n\n/**\n * File input component with label, helper/error text, and optional slots.\n * Implements FormValueControl<FileList | null> for use with Signal Forms [formField].\n *\n * Uses hidden native file input + visible trigger + selected file label.\n * Content projection: [ul-file-input-left-elements], [ul-file-input-right-elements].\n */\n@Component({\n selector: 'ul-file-input',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent],\n templateUrl: './file-input.html',\n styleUrls: ['./file-input.scss'],\n})\nexport class FileInputComponent implements FormValueControl<FileList | null> {\n readonly size = input<UiSize>('md');\n readonly appearance = input<FileInputAppearance>('border-only');\n readonly accept = input<string>('');\n readonly multiple = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n /** Placeholder when no file is selected (e.g. \"Choose file\" or \"No file chosen\"). */\n readonly placeholderText = input<string>('No file chosen');\n readonly controlId = input<string | undefined>();\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model<boolean>(false);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */\n readonly touch = output<void>();\n readonly error = input<boolean>(false);\n\n readonly value = model<FileList | null>(null);\n\n protected readonly fileInputRef = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n protected readonly ids = createFormFieldIds('ul-file-input');\n protected readonly effectiveControlId = computed(() => this.controlId() ?? this.ids.controlId);\n protected readonly effectiveHelperId = computed(() =>\n this.controlId() ? `${this.controlId()}-helper` : this.ids.helperId,\n );\n protected readonly effectiveErrorId = computed(() =>\n this.controlId() ? `${this.controlId()}-error` : this.ids.errorId,\n );\n protected readonly isFocused = signal(false);\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.effectiveHelperId(),\n this.effectiveErrorId(),\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n /** Display text for selected file(s). */\n protected readonly selectedLabel = computed(() => {\n const files = this.value();\n if (!files?.length) return this.placeholderText();\n if (files.length === 1) return files[0].name;\n return `${files.length} files selected`;\n });\n\n readonly inputBlur = output<FocusEvent>();\n readonly inputFocus = output<FocusEvent>();\n\n constructor() {\n effect(() => {\n if (this.value() === null) {\n const el = this.fileInputRef()?.nativeElement;\n if (el) el.value = '';\n }\n });\n }\n\n onFileChange(event: Event): void {\n const inputEl = event.target as HTMLInputElement;\n const fileList = inputEl.files;\n const next = fileList && fileList.length > 0 ? fileList : null;\n this.value.set(next);\n }\n\n onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.inputBlur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.inputFocus.emit(event);\n }\n\n triggerClick(): void {\n if (this.disabled()) return;\n this.fileInputRef()?.nativeElement?.click();\n }\n\n focus(): void {\n const el = document.getElementById(this.effectiveControlId());\n if (el instanceof HTMLInputElement) el.focus();\n }\n}\n","<div\n class=\"ul-file-input ul-file-input--{{ size() }} ul-file-input--appearance-{{ appearance() }}\"\n [class.ul-file-input--error]=\"hasError()\"\n [class.ul-file-input--disabled]=\"disabled()\"\n [class.ul-file-input--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"effectiveControlId()\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div class=\"ul-file-input__group\" [class.ul-file-input__group--focused]=\"isFocused()\">\n <div class=\"ul-file-input__left-elements\">\n <ng-content select=\"[ul-file-input-left-elements]\" />\n </div>\n\n <input\n #fileInput\n [id]=\"effectiveControlId()\"\n type=\"file\"\n class=\"ul-file-input__native\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n (change)=\"onFileChange($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n />\n\n <button\n type=\"button\"\n class=\"ul-file-input__trigger\"\n [disabled]=\"disabled()\"\n (click)=\"triggerClick()\"\n >\n Choose file\n </button>\n <span class=\"ul-file-input__label\">{{ selectedLabel() }}</span>\n\n <div class=\"ul-file-input__right-elements\">\n <ng-content select=\"[ul-file-input-right-elements]\" />\n </div>\n </div>\n\n <ul-form-field-helper\n [id]=\"effectiveHelperId()\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { Component, input } from '@angular/core';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\n@Component({\n selector: 'ul-footer',\n templateUrl: 'footer.html',\n styleUrls: ['./footer.scss'],\n imports: [ButtonComponent, IconComponent],\n})\nexport class FooterComponent {\n socialLinks = input<{ url: string; icon: IconName }[]>([]);\n links = input<{ url: string; text: string }[]>([]);\n\n navigate(url: string) {\n window.location.href = url;\n }\n}\n","<div class=\"ul-footer\">\n <p class=\"ul-footer__copyright\">\n <ng-content select=\"[ul-copyright]\" />\n </p>\n @if (socialLinks()) {\n <ul class=\"ul-footer__social-links\">\n @for (link of socialLinks(); track link.url) {\n <li class=\"ul-footer__social-link\">\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n [disabled]=\"false\"\n (buttonClick)=\"navigate(link.url)\"\n >\n <ul-icon [icon]=\"link.icon\" />\n </ul-button>\n </li>\n }\n </ul>\n }\n @for (link of links(); track link.url) {\n <a [href]=\"link.url\" class=\"ul-link ul-body-m--medium\">{{ link.text }}</a>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, output } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nexport type PillSize = 'sm' | 'md' | 'lg';\n\nexport type PillVariant =\n | 'interactive'\n | 'interactive-rounded'\n | 'read-only'\n | 'dismissible'\n | 'selectable';\n\nexport type PillTheme =\n | 'fill-white'\n | 'fill-black'\n | 'fill-purple'\n | 'fill-red'\n | 'fill-green'\n | 'transparent-white'\n | 'transparent-purple'\n | 'transparent-red'\n | 'transparent-green'\n | 'stroke-white'\n | 'outline-white'\n | 'outline-purple'\n | 'outline-red'\n | 'outline-green';\n\n@Component({\n selector: 'ul-pill',\n imports: [CommonModule, ButtonComponent, IconComponent],\n templateUrl: './pill.html',\n styleUrls: ['./pill.scss'],\n})\nexport class PillComponent {\n variant = input<PillVariant>('interactive');\n theme = input<PillTheme>('transparent-white');\n size = input<PillSize>('md');\n disabled = input<boolean>(false);\n\n dismiss = output<void>();\n\n dismissibleButtonTheme = computed(() => {\n const t = this.theme();\n if (t === 'transparent-purple' || t === 'outline-purple') return 'ghost-purple';\n if (t === 'outline-red') return 'ghost-red';\n if (t === 'outline-green') return 'ghost-green';\n return 'ghost-white';\n });\n\n modifierClass = computed(() => {\n const classes = [\n 'ul-pill',\n `ul-pill--${this.variant()}`,\n `ul-pill--${this.theme()}`,\n `ul-pill--${this.size()}`,\n ];\n\n if (this.disabled()) {\n classes.push('ul-pill--disabled');\n }\n\n return classes;\n });\n}\n","@if (variant() === 'selectable') {\n <label [class]=\"modifierClass()\" [class.ul-pill--disabled]=\"disabled()\">\n <input type=\"checkbox\" class=\"ul-pill__checkbox\" />\n <ng-container *ngTemplateOutlet=\"content\" />\n </label>\n} @else if (['dismissible', 'read-only'].includes(variant())) {\n <div [class]=\"modifierClass()\" [class.ul-pill--disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n @if (variant() === 'dismissible') {\n <ul-button\n [theme]=\"dismissibleButtonTheme()\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"disabled()\"\n (click)=\"dismiss.emit()\"\n >\n <ul-icon icon=\"close\" />\n </ul-button>\n }\n </div>\n} @else if (['interactive', 'interactive-rounded'].includes(variant())) {\n <button [class]=\"modifierClass()\" [disabled]=\"disabled()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n}\n\n<ng-template #content>\n <ng-content />\n</ng-template>\n","import { Directive } from '@angular/core';\n\n/** Place on the element projected into [ul-hero-badges] so the hero can detect custom badges content. */\n@Directive({\n selector: '[ul-hero-badges]',\n})\nexport class PeHeroBadgesSlotDirective {}\n\n/** Place on the element projected into [ul-hero-title] so the hero can detect custom title content. */\n@Directive({\n selector: '[ul-hero-title]',\n})\nexport class PeHeroTitleSlotDirective {}\n\n/** Place on the element projected into [ul-hero-subtitle] so the hero can detect custom subtitle content. */\n@Directive({\n selector: '[ul-hero-subtitle]',\n})\nexport class PeHeroSubtitleSlotDirective {}\n\n/** Place on the element projected into [ul-hero-actions] so the hero can detect custom actions content. */\n@Directive({\n selector: '[ul-hero-actions]',\n})\nexport class PeHeroActionsSlotDirective {}\n\n/** Place on the element projected into [ul-hero-content] for optional extra content (e.g. between subtitle and actions). */\n@Directive({\n selector: '[ul-hero-content]',\n})\nexport class PeHeroContentSlotDirective {}\n","import { Component, computed, contentChild, input, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport type { UiSize, UiTheme } from '../shared/ui-types';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport { PillComponent } from '../pill/pill';\n\nimport {\n PeHeroActionsSlotDirective,\n PeHeroBadgesSlotDirective,\n PeHeroContentSlotDirective,\n PeHeroSubtitleSlotDirective,\n PeHeroTitleSlotDirective,\n} from './hero-slot.directive';\n\nexport interface HeroAction {\n label: string;\n href?: string;\n routerLink?: string | string[];\n icon?: string;\n theme?: UiTheme;\n size?: UiSize;\n}\n\nexport type HeroAlignment = 'left' | 'center' | 'right';\nexport type HeroSize = 'sm' | 'md' | 'lg';\n\n/**\n * Hero component for displaying prominent hero sections with title, description,\n * call-to-action buttons, optional badges, and background image support.\n * Fully responsive across mobile, tablet, and desktop.\n *\n * When slots are not projected, inputs are used (title, subtitle, badges, primaryAction, secondaryAction).\n * Content projection slots: ul-hero-badges, ul-hero-title, ul-hero-subtitle, ul-hero-actions, ul-hero-content.\n *\n * @example\n * ```html\n * <ul-hero\n * title=\"Welcome\"\n * subtitle=\"Build amazing experiences\"\n * [primaryAction]=\"{ label: 'Get Started', href: '/signup' }\"\n * [badges]=\"['New', 'Featured']\"\n * />\n * ```\n */\n@Component({\n selector: 'ul-hero',\n imports: [ButtonComponent, IconComponent, PillComponent, RouterLink],\n templateUrl: './hero.html',\n styleUrls: ['./hero.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class HeroComponent {\n /** Main headline text */\n title = input.required<string>();\n\n /** Supporting description text */\n subtitle = input<string | undefined>(undefined);\n\n /** Primary call-to-action button */\n primaryAction = input<HeroAction | undefined>(undefined);\n\n /** Secondary call-to-action button */\n secondaryAction = input<HeroAction | undefined>(undefined);\n\n /** Badge/pill labels to display above the title */\n badges = input<string[]>([]);\n\n /** Background image URL */\n backgroundImage = input<string | undefined>(undefined);\n\n /**\n * CSS gradient or color for the overlay on top of the background image.\n * E.g. \"linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.7) 100%)\" or \"rgba(0,0,0,0.5)\".\n * When unset, a default dark overlay is used when a background image is present.\n */\n backgroundOverlayGradient = input<string | undefined>(undefined);\n\n /**\n * CSS filter applied to the background image (e.g. \"brightness(0.8)\", \"blur(2px)\", \"grayscale(0.3)\").\n * Combine multiple: \"brightness(0.7) contrast(1.1)\".\n */\n backgroundFilter = input<string | undefined>(undefined);\n\n /** Text and content alignment */\n alignment = input<HeroAlignment>('center');\n\n /** Hero section size variant */\n size = input<HeroSize>('md');\n\n /** Whether hero takes full viewport height */\n fullHeight = input<boolean>(false);\n\n readonly badgesSlot = contentChild(PeHeroBadgesSlotDirective);\n readonly titleSlot = contentChild(PeHeroTitleSlotDirective);\n readonly subtitleSlot = contentChild(PeHeroSubtitleSlotDirective);\n readonly actionsSlot = contentChild(PeHeroActionsSlotDirective);\n readonly contentSlot = contentChild(PeHeroContentSlotDirective);\n\n readonly hasBadgesSlot = computed(() => !!this.badgesSlot());\n readonly hasTitleSlot = computed(() => !!this.titleSlot());\n readonly hasSubtitleSlot = computed(() => !!this.subtitleSlot());\n readonly hasActionsSlot = computed(() => !!this.actionsSlot());\n readonly hasContentSlot = computed(() => !!this.contentSlot());\n}\n","<section\n class=\"ul-hero ul-hero-alignment-{{ alignment() }} ul-hero-size-{{ size() }}\"\n role=\"banner\"\n [attr.aria-label]=\"title()\"\n [class.ul-hero--full-height]=\"fullHeight()\"\n [class.ul-hero--has-background]=\"!!backgroundImage()\"\n>\n @if (backgroundImage()) {\n <div\n class=\"ul-hero__background\"\n [style.background-image]=\"'url(' + backgroundImage() + ')'\"\n [style.filter]=\"backgroundFilter() || null\"\n aria-hidden=\"true\"\n ></div>\n <div\n class=\"ul-hero__overlay\"\n [style.background]=\"backgroundOverlayGradient() || 'rgba(0, 0, 0, 0.4)'\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <div class=\"ul-hero__content\">\n @if (hasBadgesSlot()) {\n <div class=\"ul-hero__badges\">\n <ng-content select=\"[ul-hero-badges]\" />\n </div>\n } @else if (badges().length) {\n <div class=\"ul-hero__badges\">\n @for (badge of badges(); track badge) {\n <ul-pill variant=\"read-only\" theme=\"transparent-white\" size=\"md\">\n {{ badge }}\n </ul-pill>\n }\n </div>\n }\n\n @if (hasTitleSlot()) {\n <div class=\"ul-hero__title\">\n <ng-content select=\"[ul-hero-title]\" />\n </div>\n } @else {\n <h1 class=\"ul-hero__title\">{{ title() }}</h1>\n }\n\n @if (hasSubtitleSlot()) {\n <div class=\"ul-hero__subtitle\">\n <ng-content select=\"[ul-hero-subtitle]\" />\n </div>\n } @else if (subtitle()) {\n <p class=\"ul-hero__subtitle\">{{ subtitle() }}</p>\n }\n\n @if (hasContentSlot()) {\n <div class=\"ul-hero__extra\">\n <ng-content select=\"[ul-hero-content]\" />\n </div>\n }\n\n @if (hasActionsSlot()) {\n <div class=\"ul-hero__actions\">\n <ng-content select=\"[ul-hero-actions]\" />\n </div>\n } @else if (primaryAction() || secondaryAction()) {\n <div class=\"ul-hero__actions\">\n @if (primaryAction()) {\n @if (primaryAction()!.href) {\n <a [href]=\"primaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (primaryAction()!.routerLink) {\n <a [routerLink]=\"primaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"primaryAction()!.theme ?? 'fill-purple'\"\n [size]=\"primaryAction()!.size ?? 'md'\"\n >\n @if (primaryAction()!.icon) {\n <ul-icon [icon]=\"primaryAction()!.icon!\" size=\"6\" />\n }\n {{ primaryAction()!.label }}\n </ul-button>\n }\n }\n @if (secondaryAction()) {\n @if (secondaryAction()!.href) {\n <a [href]=\"secondaryAction()!.href\" class=\"ul-hero__action-link\">\n <ul-button theme=\"ghost-white\" [size]=\"secondaryAction()!.size ?? 'md'\">\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else if (secondaryAction()!.routerLink) {\n <a [routerLink]=\"secondaryAction()!.routerLink\" class=\"ul-hero__action-link\">\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n </a>\n } @else {\n <ul-button\n [theme]=\"secondaryAction()!.theme ?? 'ghost-white'\"\n [size]=\"secondaryAction()!.size ?? 'md'\"\n >\n @if (secondaryAction()!.icon) {\n <ul-icon [icon]=\"secondaryAction()!.icon!\" size=\"6\" />\n }\n {{ secondaryAction()!.label }}\n </ul-button>\n }\n }\n </div>\n }\n </div>\n</section>\n","import { Component, Directive, input, signal } from '@angular/core';\nimport { IconComponent, IconSize } from '../icon/icon';\n\n/**\n * Directive to handle image loading errors and display placeholders\n */\n@Directive({\n selector: '[ulCatchImageNotFound]',\n host: {\n '(load)': 'handleLoad()',\n '(error)': 'handleError()',\n '[class.ul-image--not-found]': 'imageNotFound()',\n '[style.visibility]': 'visibility()',\n },\n})\nexport class ImageNotFoundDirective {\n // Controls whether to show a placeholder when image fails to load\n showPlaceholder = input<boolean>(true);\n\n // Signal to track if image failed to load\n imageNotFound = signal<boolean>(false);\n // Signal to control alt and icon visibility of broken images.\n visibility = signal<string>('hidden');\n\n /**\n * Handles image loading errors\n * Hides the image and optionally shows placeholder\n */\n handleError() {\n this.visibility.set('hidden');\n if (this.showPlaceholder()) {\n this.imageNotFound.set(true);\n }\n }\n\n /**\n * Handles successful image load\n * Shows the image and removes placeholder\n */\n handleLoad() {\n this.imageNotFound.set(false);\n this.visibility.set('visible');\n }\n}\n\n/**\n * Standalone placeholder for the case `ulCatchImageNotFound` can't cover: there is\n * no `<img>` to fail in the first place, because the source has no URL at all.\n * Renders the same icon-over-a-grey-box look as the directive's own placeholder —\n * both draw from the design system's `image_dashed` glyph and grey-lvl-1\n * background — so a \"no image\" listing and a \"broken image\" listing read\n * identically to a user.\n *\n * Positioned to fill its nearest positioned ancestor, same as the directive's\n * pseudo-element placeholder: the caller supplies a sized, `position: relative`\n * box (a gallery slot, a card's media area) and drops this in.\n */\n@Component({\n selector: 'ul-image-not-found',\n template: `<ul-icon icon=\"image_dashed\" [size]=\"iconSize()\" />`,\n imports: [IconComponent],\n styleUrl: './image-not-found.scss',\n})\nexport class ImageNotFoundComponent {\n readonly iconSize = input<IconSize>('12');\n}\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { Dimensions, ImageTransform } from 'ngx-image-cropper';\nimport { ImageCropperComponent as NgxImageCropperComponent } from 'ngx-image-cropper';\n\nimport { ButtonComponent } from '../button/button';\nimport { ModalComponent } from '../modal/modal';\n\nconst DEFAULT_MAX_OUTPUT_SIZE = 1024;\n// Matches $spacing-spacing-60 (240px) — the longer side of the fixed crop\n// frame used in locked-aspect-ratio mode. Kept as a plain constant since\n// ngx-image-cropper's inputs take numbers, not Sass tokens.\nconst FRAME_MAX_DIMENSION = 240;\nconst MIN_ZOOM = 1;\nconst MAX_ZOOM = 3;\nconst ZOOM_STEP = 0.01;\n\n/** Visual shape of the crop mask/frame — purely cosmetic, doesn't affect the exported file. */\nexport type ImageCropperShape = 'rectangle' | 'round';\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Modal flow for cropping/resizing a photo. Wraps ngx-image-cropper so the\n * third-party crop mechanics never leak outside the design system —\n * consumers only ever see `ul-image-cropper`.\n *\n * Two interaction modes, chosen by whether `aspectRatio` is set:\n * - **Locked** (`aspectRatio` given, e.g. `1` for an avatar): a fixed-size\n * frame; the user drags/zooms the photo underneath it. ngx-image-cropper\n * applies that pan with *no bounds checking at all* (unlike its\n * frame-resize path, which does call `checkCropperWithinMaxSizeBounds`),\n * so this component clamps translateH/translateV itself — see\n * `clampPan()` — snapping the photo back to fully cover the frame the\n * moment a drag would otherwise leave a gap.\n * - **Free-form** (`aspectRatio` omitted, the default): a resizable frame\n * over a static photo; the user drags its corners to trim/straighten\n * with no ratio imposed. This path is already bounds-checked by the\n * library itself. Best for listing photos, which keep their own shape\n * today (see `um-image-upload`'s auto-width carousel).\n *\n * Emits a resized `File`, ready to hand to any upload call that accepts\n * one — this component only produces the file, it never uploads it.\n *\n * @example Locked 1:1 round (avatar)\n * <ul-image-cropper\n * [(open)]=\"showCropper\"\n * [imageFile]=\"selectedFile\"\n * shape=\"round\"\n * [aspectRatio]=\"1\"\n * [maxOutputSize]=\"512\"\n * (cropped)=\"onCropped($event)\"\n * />\n *\n * @example Free-form rectangle (listing photo)\n * <ul-image-cropper\n * [(open)]=\"showCropper\"\n * [imageFile]=\"selectedFile\"\n * [maxOutputSize]=\"1920\"\n * (cropped)=\"onCropped($event)\"\n * />\n */\n@Component({\n selector: 'ul-image-cropper',\n imports: [NgxImageCropperComponent, ModalComponent, ButtonComponent],\n templateUrl: './image-cropper.html',\n styleUrl: './image-cropper.scss',\n})\nexport class ImageCropperComponent {\n /** Whether the crop modal is open. Supports two-way binding with [(open)]. */\n readonly open = model<boolean>(false);\n\n /** The source photo to crop. Required for the modal to render its content. */\n readonly imageFile = input<File | null>(null);\n\n /** Visual shape of the crop mask. */\n readonly shape = input<ImageCropperShape>('rectangle');\n\n /**\n * Locks the crop frame to this width/height ratio and switches to\n * pan-and-zoom mode. Omit (or pass null) for a free-form resizable frame\n * with no ratio imposed.\n */\n readonly aspectRatio = input<number | null>(null);\n\n /** Longest side (px) of the final output image; scales down without distorting. */\n readonly maxOutputSize = input<number>(DEFAULT_MAX_OUTPUT_SIZE);\n\n /** Title shown in the modal header. */\n readonly title = input<string>('Adjust photo');\n\n /** Label for the confirm button. */\n readonly confirmLabel = input<string>('Save');\n\n /** Label next to the zoom slider (locked-aspect mode only). */\n readonly zoomLabel = input<string>('Zoom');\n\n /** Accessible label for the crop frame. */\n readonly frameAriaLabel = input<string>('Crop frame');\n\n /** Emitted with the cropped, resized photo once the user confirms. */\n readonly cropped = output<File>();\n\n /** Emitted when the user dismisses the modal (backdrop, Escape, close button) without cropping. */\n readonly cancelled = output<void>();\n\n /** Emitted when the source photo fails to load in the cropper. */\n readonly loadFailed = output<void>();\n\n private readonly cropperRef = viewChild(NgxImageCropperComponent);\n\n protected readonly cropperImageFile = computed(() => this.imageFile() ?? undefined);\n protected readonly isRound = computed(() => this.shape() === 'round');\n protected readonly isLocked = computed(() => this.aspectRatio() != null);\n\n /** ngx-image-cropper always wants a number here; unused while isLocked() is false. */\n protected readonly effectiveAspectRatio = computed(() => this.aspectRatio() ?? 1);\n\n // Longer side stays at FRAME_MAX_DIMENSION; the other side is derived from\n // the ratio, so non-square locked ratios (e.g. 4:3) get a proportional\n // frame instead of a squashed 240x240 one.\n private readonly fullFrameWidth = computed(() => {\n if (!this.isLocked()) return undefined;\n const ratio = this.effectiveAspectRatio();\n return ratio >= 1 ? FRAME_MAX_DIMENSION : FRAME_MAX_DIMENSION * ratio;\n });\n\n private readonly fullFrameHeight = computed(() => {\n if (!this.isLocked()) return undefined;\n const ratio = this.effectiveAspectRatio();\n return ratio >= 1 ? FRAME_MAX_DIMENSION / ratio : FRAME_MAX_DIMENSION;\n });\n\n // ngx-image-cropper clamps a static frame to the displayed photo one axis at\n // a time and never re-applies the ratio, so a photo displayed shorter or\n // narrower than the frame (a landscape photo in a narrow dialog) got a\n // frame of the wrong shape — which the output step then stretched to the\n // locked ratio. Shrinking the whole frame to fit inside the photo, ratio\n // intact, keeps the exported crop undistorted.\n private readonly frameScale = computed(() => {\n const base = this.baseImageSize();\n const width = this.fullFrameWidth();\n const height = this.fullFrameHeight();\n if (!base || !width || !height || base.width <= 0 || base.height <= 0) return 1;\n return Math.min(1, base.width / width, base.height / height);\n });\n\n protected readonly frameWidth = computed(() => {\n const width = this.fullFrameWidth();\n return width === undefined ? undefined : width * this.frameScale();\n });\n\n protected readonly frameHeight = computed(() => {\n const height = this.fullFrameHeight();\n return height === undefined ? undefined : height * this.frameScale();\n });\n\n protected readonly minZoom = MIN_ZOOM;\n protected readonly maxZoom = MAX_ZOOM;\n protected readonly zoomStep = ZOOM_STEP;\n\n protected readonly zoom = signal(MIN_ZOOM);\n protected readonly cropperReady = signal(false);\n\n // The photo's own rendered size (at zoom 1, before any pan), reported by\n // ngx-image-cropper once it has fit the photo to cover the frame — the\n // basis for clampPan()'s bounds. `pan` is what the user's drag *asked*\n // for; `clampedPan` is what actually reaches the child, corrected to\n // never uncover the frame.\n private readonly baseImageSize = signal<Dimensions | null>(null);\n private readonly pan = signal({ h: 0, v: 0 });\n\n protected readonly clampedPan = computed(() => this.clampPan(this.pan(), this.zoom()));\n protected readonly transform = computed<ImageTransform>(() => ({\n scale: this.zoom(),\n translateH: this.clampedPan().h,\n translateV: this.clampedPan().v,\n }));\n\n constructor() {\n // A fresh file (new selection, or re-opening for a retry) always starts\n // from a neutral zoom/pan rather than carrying over the previous\n // session's, and isn't croppable again until ngx-image-cropper reports\n // it loaded.\n effect(() => {\n this.imageFile();\n this.zoom.set(MIN_ZOOM);\n this.pan.set({ h: 0, v: 0 });\n this.baseImageSize.set(null);\n this.cropperReady.set(false);\n });\n }\n\n // ngx-image-cropper only bounds-checks its frame-resize path; dragging the\n // photo itself (locked mode) applies translateH/V with no clamping and\n // reports the result here on release. Re-deriving from `pan` (rather than\n // trusting the event's translate values outright) keeps this the single\n // source of truth clampedPan reads from.\n protected onTransformChange(event: ImageTransform): void {\n this.pan.set({ h: event.translateH ?? 0, v: event.translateV ?? 0 });\n }\n\n protected onZoomInput(event: Event): void {\n this.zoom.set((event.target as HTMLInputElement).valueAsNumber);\n }\n\n protected onCropperReady(size: Dimensions): void {\n this.baseImageSize.set(size);\n this.cropperReady.set(true);\n }\n\n protected async onConfirm(): Promise<void> {\n const croppedEvent = await this.cropperRef()?.crop('blob');\n const blob = croppedEvent?.blob;\n if (!blob) return;\n this.cropped.emit(new File([blob], 'photo.jpg', { type: blob.type }));\n this.open.set(false);\n }\n\n protected onClosed(): void {\n this.cancelled.emit();\n }\n\n // translateH/V are percentages of the photo's own (unscaled) box, per\n // ngx-image-cropper's default translateUnit — so the on-screen pixel\n // shift is (percent/100 * baseSize) * scale (CSS applies scale() *after*\n // translate() in the same transform, magnifying it). Solving\n // |shift| <= (baseSize*scale - frameSize) / 2 for the percent gives the\n // bound below; it comes out to exactly 0 on whichever axis the photo was\n // fit tightest to the frame (no slack to pan there without zooming in\n // first), and the true remaining slack on the other axis.\n private clampPan(pan: { h: number; v: number }, scale: number): { h: number; v: number } {\n const base = this.baseImageSize();\n const frameWidth = this.frameWidth();\n const frameHeight = this.frameHeight();\n if (!base || !frameWidth || !frameHeight || base.width <= 0 || base.height <= 0) {\n return { h: 0, v: 0 };\n }\n\n const maxH = Math.max(50 * (1 - frameWidth / (base.width * scale)), 0);\n const maxV = Math.max(50 * (1 - frameHeight / (base.height * scale)), 0);\n return {\n h: clamp(pan.h, -maxH, maxH),\n v: clamp(pan.v, -maxV, maxV),\n };\n }\n}\n","<ul-modal [(open)]=\"open\" variant=\"custom\" [title]=\"title()\" (closed)=\"onClosed()\">\n @if (imageFile()) {\n <div class=\"ul-image-cropper\">\n <image-cropper\n class=\"ul-image-cropper__frame\"\n [imageFile]=\"cropperImageFile()\"\n [maintainAspectRatio]=\"isLocked()\"\n [aspectRatio]=\"effectiveAspectRatio()\"\n [roundCropper]=\"isRound()\"\n [cropperStaticWidth]=\"frameWidth()\"\n [cropperStaticHeight]=\"frameHeight()\"\n [allowMoveImage]=\"isLocked()\"\n [transform]=\"transform()\"\n [resizeToWidth]=\"maxOutputSize()\"\n [resizeToHeight]=\"maxOutputSize()\"\n [onlyScaleDown]=\"true\"\n [cropperFrameAriaLabel]=\"frameAriaLabel()\"\n format=\"jpeg\"\n output=\"blob\"\n (cropperReady)=\"onCropperReady($event)\"\n (transformChange)=\"onTransformChange($event)\"\n (loadImageFailed)=\"loadFailed.emit()\"\n />\n\n @if (isLocked()) {\n <label class=\"ul-image-cropper__zoom\">\n <span class=\"ul-image-cropper__zoom-label\">{{ zoomLabel() }}</span>\n <input\n type=\"range\"\n class=\"ul-image-cropper__zoom-input\"\n [min]=\"minZoom\"\n [max]=\"maxZoom\"\n [step]=\"zoomStep\"\n [value]=\"zoom()\"\n (input)=\"onZoomInput($event)\"\n />\n </label>\n }\n </div>\n }\n\n <div class=\"ul-modal__foter-content\" ul-modal-footer>\n <ul-button\n theme=\"fill-purple\"\n size=\"md\"\n [disabled]=\"!cropperReady()\"\n (buttonClick)=\"onConfirm()\"\n >\n {{ confirmLabel() }}\n </ul-button>\n </div>\n</ul-modal>\n","import { Directive, input, output } from '@angular/core';\n\nconst DEFAULT_DURATION_MS = 500;\nconst MOVE_CANCEL_THRESHOLD_PX = 10;\n\n/**\n * Emits `ulLongPress` when the pointer (mouse, touch, or pen) is held down\n * on the host element for `ulLongPressDuration` without moving more than a\n * few pixels. Also suppresses the `click` that follows the triggering\n * press's release, so long-press-to-select gestures don't also activate a\n * link/button underneath.\n */\n@Directive({\n selector: '[ulLongPress]',\n host: {\n '(pointerdown)': 'handlePointerDown($event)',\n '(pointerup)': 'handlePointerEnd()',\n '(pointercancel)': 'handlePointerEnd()',\n '(pointerleave)': 'handlePointerEnd()',\n '(pointermove)': 'handlePointerMove($event)',\n '(click)': 'handleClick($event)',\n },\n})\nexport class LongPressDirective {\n ulLongPressDuration = input<number>(DEFAULT_DURATION_MS);\n\n ulLongPress = output<void>();\n\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n private startX = 0;\n private startY = 0;\n private triggered = false;\n\n handlePointerDown(event: PointerEvent): void {\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n this.startX = event.clientX;\n this.startY = event.clientY;\n this.triggered = false;\n this.timeoutId = setTimeout(() => {\n this.timeoutId = null;\n this.triggered = true;\n this.ulLongPress.emit();\n }, this.ulLongPressDuration());\n }\n\n handlePointerMove(event: PointerEvent): void {\n if (this.timeoutId === null) return;\n\n const distance = Math.hypot(event.clientX - this.startX, event.clientY - this.startY);\n if (distance > MOVE_CANCEL_THRESHOLD_PX) {\n this.cancelTimer();\n }\n }\n\n handlePointerEnd(): void {\n this.cancelTimer();\n }\n\n handleClick(event: MouseEvent): void {\n if (!this.triggered) return;\n this.triggered = false;\n event.preventDefault();\n event.stopPropagation();\n }\n\n private cancelTimer(): void {\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n}\n","import { CdkMenu } from '@angular/cdk/menu';\nimport { Component, input, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\n\nimport { IconName } from '../icon/icon';\nimport { ListItemTheme } from '../list-item/list-item';\n\nimport { MenuItem, MenuItemsComponent } from './menu-items';\nimport { MenuTriggerComponent } from './menu-trigger';\n\n/**\n * A trigger + panel for an action menu (edit, delete, share, ...). Unlike\n * `ul-dropdown`, there is no notion of a \"currently selected\" item — every\n * item is a one-off action, so nothing is ever shown as checked.\n *\n * Pass `items` for the common label+icon action-list case, and/or project\n * custom content (e.g. a `ul-list-item cdkMenuItem routerLink=\"...\">` for a\n * navigation item) — both can be combined, or you can skip `items`\n * entirely and compose the panel purely from projected content.\n *\n * Below the 'md' breakpoint the panel renders as a bottom sheet (full\n * width, pinned to the viewport, tap-outside-to-dismiss) instead of a\n * small anchored popover — the same behavior `ul-dropdown` gets.\n *\n * @example\n * ```html\n * <ul-menu\n * [items]=\"[{ label: 'Edit', value: 'edit', leftIcons: ['edit'] },\n * { label: 'Delete', value: 'delete', leftIcons: ['trash'] }]\"\n * triggerIconOnly=\"more_options\"\n * (itemSelected)=\"onAction($event)\">\n * </ul-menu>\n * ```\n */\n@Component({\n selector: 'ul-menu',\n imports: [CdkMenu, MenuItemsComponent, MenuTriggerComponent],\n templateUrl: './menu.html',\n styleUrls: ['./menu.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class MenuComponent {\n /** Visual theme, passed through to the trigger and to any items rendered via `items`. */\n theme = input<ListItemTheme>('ghost-white');\n\n /** Simple label+icon action items. Optional — content projection covers everything else. */\n items = input<MenuItem[]>([]);\n\n disabled = input(false);\n\n /**\n * Shows only a single icon in the trigger, hiding any label. Commonly\n * `'more_options'` for a row-level \"⋮\" action menu.\n */\n triggerIconOnly = input<IconName>();\n\n /** Accessible label for the icon-only trigger. */\n iconOnlyLabel = input('Open menu');\n\n /** Static label for a non-icon-only trigger (there is no \"current selection\" to show instead). */\n triggerLabel = input('');\n triggerLeftIcons = input<IconName[]>([]);\n triggerRightIcons = input<IconName[]>([]);\n\n /** Emitted when an `items`-provided entry is triggered. */\n itemSelected = output<MenuItem>();\n\n /** Emitted when the menu closes, whether or not a selection was made. */\n closed = output<void>();\n\n readonly isOpen = signal(false);\n readonly menuId = `ul-menu-${Math.random().toString(36).slice(2, 11)}`;\n\n private readonly trigger = viewChild(MenuTriggerComponent);\n\n handleItemTriggered(index: number): void {\n const item = this.items()[index];\n if (item) {\n this.itemSelected.emit(item);\n }\n }\n\n /**\n * Closes the panel. CDK auto-closes on a `cdkMenuItem` trigger already —\n * this is for the mobile backdrop tap, which isn't one.\n */\n closeMenu(): void {\n this.trigger()?.close();\n }\n\n onMenuOpened(): void {\n this.isOpen.set(true);\n }\n\n onMenuClosed(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n}\n","<ul-menu-trigger\n [theme]=\"theme()\"\n [disabled]=\"disabled()\"\n [iconOnly]=\"triggerIconOnly()\"\n [iconOnlyLabel]=\"iconOnlyLabel()\"\n [label]=\"triggerLabel()\"\n [leftIcons]=\"triggerLeftIcons()\"\n [rightIcons]=\"triggerRightIcons()\"\n [menuTemplate]=\"menu\"\n [menuId]=\"menuId\"\n [isOpen]=\"isOpen()\"\n (opened)=\"onMenuOpened()\"\n (closed)=\"onMenuClosed()\"\n/>\n\n<ng-template #menu>\n <div class=\"ul-menu__backdrop\" (click)=\"closeMenu()\"></div>\n <div cdkMenu class=\"ul-menu\" [id]=\"menuId\">\n <ul-menu-items\n [items]=\"items()\"\n [theme]=\"theme()\"\n (itemTriggered)=\"handleItemTriggered($event)\"\n />\n <ng-content />\n </div>\n</ng-template>\n","import { Directive } from '@angular/core';\n\n/** Place on the element projected into [ul-navbar-logo] so the navbar can detect logo content. */\n@Directive({\n selector: '[ul-navbar-logo]',\n})\nexport class NavbarLogoSlotDirective {}\n\n/** Place on the element projected into [ul-navbar-search] so the navbar can show the mobile search toggle. */\n@Directive({\n selector: '[ul-navbar-search]',\n})\nexport class NavbarSearchSlotDirective {}\n\n/** Place on the element projected into [ul-navbar-avatar] so the navbar can detect avatar content. */\n@Directive({\n selector: '[ul-navbar-avatar]',\n})\nexport class NavbarAvatarSlotDirective {}\n\n/** Place on the element projected into [ul-navbar-app-name] so the navbar can detect app-name content. Only rendered when a logo slot is not projected (it sits next to the default logo image). */\n@Directive({\n selector: '[ul-navbar-app-name]',\n})\nexport class NavbarAppNameSlotDirective {}\n","import {\n Component,\n contentChild,\n computed,\n input,\n signal,\n ViewEncapsulation,\n output,\n} from '@angular/core';\n\nimport { AvatarComponent } from '../avatar/avatar';\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\nimport {\n NavbarAppNameSlotDirective,\n NavbarAvatarSlotDirective,\n NavbarLogoSlotDirective,\n NavbarSearchSlotDirective,\n} from './navbar-slot.directive';\n\n/** 'full' shows the sidebar toggle, search, and avatar; 'minimal' shows only the logo — for auth pages and other chromeless flows. See also `searchCollapsible` for whether the search slot collapses to an icon-toggle on mobile. */\nexport type NavbarVariant = 'full' | 'minimal';\n\n@Component({\n selector: 'ul-navbar',\n imports: [AvatarComponent, ButtonComponent, IconComponent],\n templateUrl: './navbar.html',\n styleUrls: ['./navbar.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavbarComponent {\n /** 'full' (default) shows the sidebar toggle, search, and avatar; 'minimal' shows only the logo. */\n variant = input<NavbarVariant>('full');\n\n /** Default logo link href when logo slot is not projected. */\n logoHref = input<string>('/');\n\n /** Default logo image src when logo slot is not projected. */\n logoSrc = input<string | undefined>(undefined);\n\n /** Default logo image alt when logo slot is not projected. */\n logoAlt = input<string>('logo');\n\n /** Default avatar image src when avatar slot is not projected. */\n avatarSrc = input<string | undefined>(undefined);\n\n /** Default avatar initials when avatar slot is not projected and no image. */\n avatarInitials = input<string | undefined>(undefined);\n\n /** Default avatar image alt when avatar slot is not projected. */\n avatarAlt = input<string>('');\n\n /** For aria-expanded on the toggle button */\n sidebarOpen = input<boolean>(false);\n\n /** When true, show the sidebar toggle button even when a logo slot is projected. */\n showSidebarToggle = input<boolean>(false);\n\n /** When false, the projected search slot is always rendered expanded (no icon-toggle collapse on mobile) — use for apps that want search visible and full-width at every viewport. */\n searchCollapsible = input<boolean>(true);\n\n /** Emitted when the user clicks the sidebar toggle. Parent should flip the open state. */\n sidebarToggle = output<void>();\n\n readonly logoSlot = contentChild(NavbarLogoSlotDirective);\n readonly searchSlot = contentChild(NavbarSearchSlotDirective);\n readonly avatarSlot = contentChild(NavbarAvatarSlotDirective);\n readonly appNameSlot = contentChild(NavbarAppNameSlotDirective);\n\n readonly isMinimal = computed(() => this.variant() === 'minimal');\n\n readonly hasLogoSlot = computed(() => !!this.logoSlot());\n readonly hasSearchSlot = computed(() => !this.isMinimal() && !!this.searchSlot());\n readonly showSearchToggle = computed(() => this.hasSearchSlot() && this.searchCollapsible());\n readonly hasAvatarSlot = computed(() => !this.isMinimal() && !!this.avatarSlot());\n readonly hasAppNameSlot = computed(() => !this.hasLogoSlot() && !!this.appNameSlot());\n\n readonly showToggle = computed(\n () => !this.isMinimal() && (!this.hasLogoSlot() || this.showSidebarToggle()),\n );\n\n readonly searchExpanded = signal(false);\n\n toggleSearch(): void {\n this.searchExpanded.update((v) => !v);\n }\n\n toggleSidebar(): void {\n this.sidebarToggle.emit();\n }\n}\n","<nav class=\"ul-navbar\" role=\"navigation\">\n <div class=\"ul-navbar__bar\">\n @if (showToggle()) {\n <!-- Default 'md' size, matching the search toggle below and the\n sidebar's own close button: `sm` capped the icon at 20px (the\n `.ul-btn--sm .ul-icon` rule outranks `.ul-icon-size-*`, so the icon's\n own size input cannot raise it) and gave a 32px tap target. -->\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"ul-navbar__sidebar_toggle\"\n ariaLabel=\"Open menu\"\n [attr.aria-expanded]=\"sidebarOpen()\"\n (buttonClick)=\"toggleSidebar()\"\n >\n <ul-icon icon=\"menu\" size=\"6\" />\n </ul-button>\n }\n\n <div class=\"ul-navbar__logo\">\n @if (hasLogoSlot()) {\n <ng-content select=\"[ul-navbar-logo]\" />\n } @else {\n <img [src]=\"logoSrc()\" [alt]=\"logoAlt()\" class=\"ul-navbar__logo-img\" height=\"64\" />\n @if (hasAppNameSlot()) {\n <a [href]=\"logoHref()\" class=\"ul-navbar__logo-link ul-navbar__logo-text\">\n <ng-content select=\"[ul-navbar-app-name]\" />\n </a>\n }\n }\n </div>\n\n @if (!isMinimal()) {\n <div class=\"ul-navbar__actions\">\n @if (showSearchToggle()) {\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"ul-navbar__search-toggle\"\n ariaLabel=\"Toggle search\"\n [attr.aria-expanded]=\"searchExpanded()\"\n (buttonClick)=\"toggleSearch()\"\n >\n <ul-icon icon=\"search\" size=\"6\" />\n </ul-button>\n }\n\n <div\n class=\"ul-navbar__search-wrapper\"\n [class.ul-navbar__search-wrapper--expanded]=\"searchExpanded() || !searchCollapsible()\"\n >\n <ng-content select=\"[ul-navbar-search]\" />\n </div>\n\n <div class=\"ul-navbar__avatar\">\n @if (hasAvatarSlot()) {\n <ng-content select=\"[ul-navbar-avatar]\" />\n } @else if (avatarSrc() || avatarInitials()) {\n <ul-avatar\n [src]=\"avatarSrc()\"\n [initials]=\"avatarInitials()\"\n [alt]=\"avatarAlt()\"\n size=\"md\"\n />\n }\n </div>\n </div>\n }\n </div>\n</nav>\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Extends Angular's CurrencyPipe to use the custom symbol 'ᕫ' for 'UOS' currency code.\n * For all other codes, behaves exactly like CurrencyPipe.\n */\n@Pipe({\n name: 'peCurrency',\n})\nexport class CustomCurrencyPipe extends CurrencyPipe implements PipeTransform {\n private static readonly UOS_SYMBOL = 'ᕫ';\n\n override transform(\n value: number | string,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean,\n digitsInfo?: string,\n locale?: string,\n ): string | null;\n override transform(\n value: null | undefined,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean,\n digitsInfo?: string,\n locale?: string,\n ): null;\n override transform(\n value: number | string | null | undefined,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string | boolean,\n digitsInfo?: string,\n locale?: string,\n ): string | null {\n const customDisplay = currencyCode === 'UOS' ? CustomCurrencyPipe.UOS_SYMBOL : display;\n return this.separateCurrencyAndPrice(\n super.transform(value, currencyCode, customDisplay, digitsInfo, locale),\n );\n }\n\n private separateCurrencyAndPrice(input: string | null): string | null {\n // Match non-digits at the start (currency), then the number\n const match = input?.match(/^(\\D+)?(\\d+(\\.\\d+)?)/);\n if (match) {\n const symbol = match[1] ? match[1].trim() : '';\n const price = match[2];\n // Join with a space if symbol exists\n return symbol ? `${symbol} ${price}` : price;\n }\n // Return input if no match\n return input;\n }\n}\n","import { Component, input, output, ViewEncapsulation } from '@angular/core';\n\nimport type { UiSize, UiTheme } from '../shared/ui-types';\nimport { ButtonComponent } from '../button/button';\n\nimport { CustomCurrencyPipe } from './custom-currency.pipe';\n\nexport type SalePosition = 'left' | 'right';\nexport type Currency = 'UOS' | string;\n\n@Component({\n selector: 'ul-price-button',\n imports: [ButtonComponent, CustomCurrencyPipe],\n templateUrl: './price-button.html',\n styleUrl: './price-button.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ul-price-button',\n '[class.ul-price-button--sale-left]': 'salePosition() === \"left\"',\n },\n})\nexport class PriceButtonComponent {\n // Inputs\n readonly label = input<string>(''); // Button label\n readonly size = input<UiSize>('md'); // Button size\n readonly theme = input<UiTheme>('transparent-white'); // Button theme\n readonly disabled = input<boolean>(false); // Disabled state\n readonly salePosition = input<SalePosition>('right'); // Sale badge position\n readonly price = input<number>(0); // Price (0 = free)\n readonly originalPrice = input<number>(0); // Original price\n readonly discountBasis = input<number>(0); // Discount basis\n readonly currency = input<Currency>('USD'); // Currency\n\n // Outputs\n readonly buttonClick = output<MouseEvent>(); // Click event\n\n // Methods\n protected handleClick(event: MouseEvent): void {\n // Handle click\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.buttonClick.emit(event);\n }\n}\n","<ul-button [size]=\"size()\" [theme]=\"theme()\" [disabled]=\"disabled()\" (click)=\"handleClick($event)\">\n @if (label()) {\n {{ label() }}\n } @else if (price() > 0) {\n {{ price() | peCurrency: currency() }}\n } @else {\n Free\n }\n</ul-button>\n@if (price() !== originalPrice() && discountBasis() > 0) {\n <div class=\"ul-price-button__sale\">\n <div\n class=\"ul-price-button__discount\"\n [attr.aria-label]=\"'Discount ' + discountBasis() + '% off original price'\"\n >\n -{{ discountBasis() }}%\n </div>\n <div class=\"ul-price-button__original-price\" aria-hidden=\"true\">\n {{ originalPrice() | peCurrency: currency() }}\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\n\n/**\n * Radio button for use inside a group. For Signal Forms use ul-radio-group with [formField].\n * Use [(checked)] when controlling each radio manually, or place inside ul-radio-group for [formField] binding.\n *\n * @example\n * <ul-radio value=\"option1\" name=\"my-group\" [checked]=\"isSelected\">Option 1</ul-radio>\n */\n@Component({\n selector: 'ul-radio',\n imports: [CommonModule],\n templateUrl: './radio.html',\n styleUrls: ['./radio.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class RadioComponent {\n /**\n * The value associated with this radio button.\n * This value identifies the radio button within its group.\n */\n value = input.required<string>();\n\n /**\n * The name attribute for the radio button group.\n * All radio buttons in the same group should share the same name.\n */\n name = input.required<string>();\n\n /**\n * Whether the radio button is disabled.\n * @default false\n */\n disabled = input<boolean, boolean>(false, { transform: booleanAttribute });\n\n /**\n * Whether the radio button is currently checked/selected.\n * This is a two-way binding that can be used with [(checked)].\n */\n checked = model<boolean>(false);\n\n /**\n * Unique identifier for the radio button.\n * If not provided, one will be auto-generated.\n */\n id = input<string>();\n\n /**\n * Event emitted when the radio button is clicked.\n * Useful for additional click handling beyond the default radio behavior.\n */\n click = output<MouseEvent>();\n\n /**\n * Emitted when this radio is selected (checked becomes true).\n * Used by ul-radio-group to sync the group value.\n */\n selected = output<string>();\n\n /**\n * Internal signal for the unique ID\n */\n private readonly uniqueId = signal(`ul-radio-${Math.random().toString(36).substr(2, 9)}`);\n\n /**\n * Computed ID that uses provided ID or falls back to generated unique ID\n */\n readonly radioId = computed(() => this.id() || this.uniqueId());\n\n /**\n * Computed ARIA attributes for accessibility\n */\n readonly ariaAttributes = computed(() => ({\n 'aria-checked': this.checked(),\n 'aria-disabled': this.disabled(),\n role: 'radio' as const,\n }));\n\n /**\n * Handles the radio button change event.\n * Updates the checked state.\n *\n * @param event - The change event from the input element\n */\n onRadioChange(event: Event): void {\n if (this.disabled()) {\n return;\n }\n\n const input = event.target as HTMLInputElement;\n\n this.checked.set(input.checked);\n if (input.checked) {\n this.selected.emit(this.value());\n }\n }\n\n /**\n * Handles click events on the radio button.\n * Useful for additional click handling beyond the default radio behavior.\n *\n * @param event - The click event\n */\n onRadioClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n return;\n }\n\n this.click.emit(event);\n }\n\n /**\n * Handles keyboard events for accessibility.\n * Supports Space and Enter keys for selection.\n *\n * @param event - The keyboard event\n */\n onKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.checked.set(true);\n }\n }\n}\n","<label class=\"ul-radio-container\" [for]=\"radioId()\" [class.ul-radio-disabled]=\"disabled()\">\n <input\n type=\"radio\"\n [id]=\"radioId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-checked]=\"ariaAttributes()['aria-checked']\"\n [attr.aria-disabled]=\"ariaAttributes()['aria-disabled']\"\n [attr.role]=\"ariaAttributes()['role']\"\n (change)=\"onRadioChange($event)\"\n (click)=\"onRadioClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n class=\"ul-radio-input\"\n />\n <span class=\"ul-radio-label\">\n <ng-content />\n </span>\n</label>\n","import { Component, computed, input, model } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport { RadioComponent } from './radio';\n\nexport interface RadioGroupOption {\n value: string;\n label: string;\n}\n\n/**\n * Radio group that holds the selected option value. Implements FormValueControl for Signal Forms [formField].\n * Use [(value)] or [formField]=\"myForm().choice\". Renders ul-radio per option; value is the selected option's value.\n */\n@Component({\n selector: 'ul-radio-group',\n imports: [RadioComponent, FormFieldLabelComponent, FormFieldHelperComponent],\n template: `\n <div\n class=\"ul-radio-group\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n role=\"radiogroup\"\n [attr.aria-label]=\"label()\"\n >\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n size=\"md\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n <div class=\"ul-radio-group__radios\" [id]=\"ids.controlId\">\n @for (opt of options(); track opt.value) {\n <ul-radio\n [name]=\"name()\"\n [value]=\"opt.value\"\n [checked]=\"value() === opt.value\"\n [disabled]=\"disabled()\"\n (selected)=\"value.set(opt.value)\"\n >\n {{ opt.label }}\n </ul-radio>\n }\n </div>\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"\n errorText() || (hasError() && errors().length ? (errors()[0].message ?? null) : null)\n \"\n [error]=\"hasError()\"\n />\n </div>\n `,\n styleUrls: ['./radio-group.scss'],\n})\nexport class RadioGroupComponent implements FormValueControl<string | null> {\n readonly name = input.required<string>();\n readonly options = input<RadioGroupOption[]>([]);\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n readonly value = model<string | null>(null);\n\n protected readonly ids = createFormFieldIds('ul-radio-group');\n protected readonly hasError = computed(() => this.error() || this.invalid());\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n}\n","import { booleanAttribute, Component, computed, input } from '@angular/core';\n\ntype RadialSize = 96 | 64 | 48 | 32 | 24 | 20 | 16;\n\nconst lineWidths = {\n 96: 6,\n 64: 6,\n 48: 5,\n 32: 4,\n 24: 4,\n 20: 3,\n 16: 3,\n};\n\n@Component({\n selector: 'ul-radial',\n templateUrl: './radial.html',\n styleUrl: './radial.scss',\n})\nexport class RadialComponent {\n // size of the radial component in px\n readonly size = input<RadialSize>(96);\n // if true, the radial will rotate indefinitely\n readonly infinite = input<boolean, boolean>(false, {\n transform: booleanAttribute,\n });\n // percentage of the radial that is filled\n readonly percentage = input<number>(0);\n\n // optional accessible label for the radial\n readonly ariaLabel = input<string | null>(null);\n\n readonly lineWidth = computed(() => lineWidths[this.size()]);\n}\n","<div\n class=\"ul-radial\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-valuenow]=\"percentage()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [class.ul-radial--infinite]=\"infinite()\"\n [style.width.px]=\"size()\"\n [style.padding.px]=\"lineWidth()\"\n [style.--ul-radial-percentage]=\"percentage() + '%'\"\n></div>\n","import {\n Component,\n computed,\n inject,\n input,\n SecurityContext,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nexport type RichTextTone = 'default' | 'muted' | 'inverse';\nexport type RichTextSize = 'body-m' | 'body-l';\n\n/**\n * Display-only rich text component. Renders sanitized HTML from the API (or from\n * ul-rich-text-editor) with no Quill dependency. HTML is sanitized before rendering.\n *\n * Use [content] for HTML strings (e.g. from API or editor), or project markup via\n * ng-content when content is empty.\n */\n@Component({\n selector: 'ul-rich-text',\n template: ` @if (content()) {\n <div\n class=\"ul-rich-text\"\n [class.ul-rich-text--body-m]=\"size() === 'body-m'\"\n [innerHTML]=\"sanitizedContent()\"\n ></div>\n } @else {\n <div class=\"ul-rich-text\" [class.ul-rich-text--body-m]=\"size() === 'body-m'\">\n <ng-content />\n </div>\n }`,\n host: {\n class: 'ul-rich-text-host',\n },\n encapsulation: ViewEncapsulation.None,\n})\nexport class RichTextComponent {\n readonly content = input<string | null>(null);\n readonly size = input<RichTextSize>('body-l');\n\n private readonly domSanitizer = inject(DomSanitizer);\n\n protected readonly sanitizedContent = computed(() => {\n const html = this.content() ?? '';\n return this.domSanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n });\n}\n","import { Component, computed, input } from '@angular/core';\n\n/**\n * Presentational step indicator for a multi-step flow (e.g. onboarding,\n * checkout) — dots connected by a line, current/completed/upcoming states.\n * Purely visual: it has no notion of step content or navigation, the\n * consumer owns that. `currentStep` is 1-indexed.\n */\n@Component({\n selector: 'ul-stepper',\n template: `\n <ol class=\"ul-stepper\" [attr.aria-label]=\"ariaLabel()\">\n @for (step of stepIndexes(); track step) {\n <li\n class=\"ul-stepper__item\"\n [class.ul-stepper__item--completed]=\"step < currentStep()\"\n [class.ul-stepper__item--current]=\"step === currentStep()\"\n [attr.aria-current]=\"step === currentStep() ? 'step' : null\"\n >\n <span class=\"ul-stepper__dot\"></span>\n @if (labels()[step - 1]) {\n <span class=\"ul-stepper__label\">{{ labels()[step - 1] }}</span>\n }\n </li>\n }\n </ol>\n `,\n styleUrls: ['./stepper.scss'],\n})\nexport class StepperComponent {\n readonly totalSteps = input.required<number>();\n readonly currentStep = input.required<number>();\n readonly labels = input<string[]>([]);\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly stepIndexes = computed(() =>\n Array.from({ length: this.totalSteps() }, (_, i) => i + 1),\n );\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\n\nexport type ToastKind = 'info' | 'success' | 'warning' | 'error';\n\nexport const toastIcon = (kind: ToastKind) => {\n switch (kind) {\n case 'success':\n return 'check_circle';\n case 'warning':\n return 'alert';\n case 'error':\n return 'cross_circle';\n case 'info':\n return 'info';\n }\n};\n\nexport interface ToastConfig {\n readonly id: string;\n readonly message: string;\n readonly title?: string;\n readonly kind: ToastKind;\n readonly dismissible: boolean;\n /**\n * Auto-dismiss delay in milliseconds. When null or 0, the toast\n * will stay visible until the user dismisses it explicitly.\n */\n readonly durationMs: number | null;\n readonly showIcon: boolean;\n}\n\nexport type ToastWithRole = {\n readonly id: string;\n readonly title?: string;\n readonly message: string;\n readonly kind: ToastKind;\n readonly dismissible: boolean;\n readonly role: 'status' | 'alert';\n readonly icon: string;\n readonly showIcon: boolean;\n};\n\ntype NewToastConfig = Omit<ToastConfig, 'id'>;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n private readonly toastsSignal = signal<ToastConfig[]>([]);\n\n readonly toasts = computed<ToastWithRole[]>(() =>\n this.toastsSignal().map((toast) => ({\n id: toast.id,\n title: toast.title,\n message: toast.message,\n kind: toast.kind,\n dismissible: toast.dismissible,\n role: toast.kind === 'error' || toast.kind === 'warning' ? 'alert' : 'status',\n icon: toastIcon(toast.kind),\n showIcon: toast.showIcon,\n })),\n );\n\n show(message: string, config?: Partial<NewToastConfig>): string {\n const id = this.createId();\n const merged: ToastConfig = {\n id,\n message,\n title: config?.title,\n kind: config?.kind ?? 'info',\n dismissible: config?.dismissible ?? true,\n durationMs: config?.durationMs ?? 5000,\n showIcon: config?.showIcon ?? false,\n };\n\n this.toastsSignal.update((current) => [...current, merged]);\n\n if (merged.durationMs && merged.durationMs > 0) {\n window.setTimeout(() => {\n this.dismiss(id);\n }, merged.durationMs);\n }\n\n return id;\n }\n\n info(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'info' });\n }\n\n success(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'success' });\n }\n\n warning(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'warning' });\n }\n\n error(message: string, config?: Partial<Omit<NewToastConfig, 'kind'>>): string {\n return this.show(message, { ...config, kind: 'error' });\n }\n\n dismiss(id: string): void {\n this.toastsSignal.update((current) => current.filter((toast) => toast.id !== id));\n }\n\n clear(): void {\n this.toastsSignal.set([]);\n }\n\n private createId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n // eslint-disable-next-line no-restricted-globals\n return crypto.randomUUID();\n }\n\n return `ul-toast-${Math.random().toString(36).slice(2, 11)}`;\n }\n}\n\n","import { Component, ViewEncapsulation, computed, inject } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent } from '../icon/icon';\n\nimport { ToastService, ToastWithRole } from './toast.service';\n\n@Component({\n selector: 'ul-toast-container',\n imports: [ButtonComponent, IconComponent],\n templateUrl: './toast.html',\n styleUrl: './toast.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class ToastContainerComponent {\n private readonly toastService = inject(ToastService);\n readonly toasts = this.toastService.toasts;\n\n trackById(_: number, toast: ToastWithRole): string {\n return toast.id;\n }\n\n dismiss(id: string): void {\n this.toastService.dismiss(id);\n }\n}\n","<div class=\"ul-toast-container\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toasts(); track trackById($index, toast)) {\n <section class=\"ul-toast ul-toast--{{ toast.kind }}\" [attr.role]=\"toast.role\">\n <div class=\"ul-toast__icon\">\n @if (toast.showIcon) {\n <ul-icon [icon]=\"toast.icon\" size=\"6\" iconWeight=\"bold\" />\n }\n </div>\n\n <div class=\"ul-toast__body\">\n @if (toast.title) {\n <h3 class=\"ul-toast__title\">\n {{ toast.title }}\n </h3>\n }\n <p class=\"ul-toast__message\">\n {{ toast.message }}\n </p>\n </div>\n\n @if (toast.dismissible) {\n <ul-button\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n class=\"ul-toast__close\"\n ariaLabel=\"Dismiss notification\"\n (buttonClick)=\"dismiss(toast.id)\"\n >\n <ul-icon icon=\"cross\" size=\"5\" />\n </ul-button>\n }\n </section>\n }\n</div>\n","import { Component, computed, input, model } from '@angular/core';\nimport type {\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiCheckboxSize } from '../shared/ui-types';\n\n/**\n * On/off switch. Implements FormCheckboxControl for Signal Forms [formField],\n * the switch equivalent of ul-checkbox. Prefer this over ul-checkbox when the\n * change takes effect immediately (e.g. a setting) rather than being\n * submitted later with the rest of a form.\n * Use [(checked)] or [formField]=\"myForm().notificationsEnabled\". No value property.\n */\n@Component({\n selector: 'ul-toggle',\n imports: [FormFieldHelperComponent],\n template: `\n <div\n class=\"ul-toggle ul-toggle--{{ size() }}\"\n [class.ul-toggle--error]=\"hasError()\"\n [class.ul-toggle--disabled]=\"disabled()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n <label\n class=\"ul-toggle__row\"\n [class.ul-toggle__row--sm]=\"size() === 'sm'\"\n [class.ul-toggle__row--lg]=\"size() === 'lg'\"\n [class.ul-toggle__row--error]=\"hasError()\"\n [attr.for]=\"ids.controlId\"\n >\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"ul-toggle__input\"\n [id]=\"ids.controlId\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"hasError()\"\n (change)=\"onChange($event)\"\n (keydown.enter)=\"onEnter($event)\"\n />\n <span class=\"ul-toggle__track\">\n <span class=\"ul-toggle__thumb\"></span>\n </span>\n <span class=\"ul-toggle__label\">\n @if (label()) {\n {{ label() }}\n }\n <ng-content />\n </span>\n </label>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"resolvedErrorText()\"\n [error]=\"hasError()\"\n />\n </div>\n `,\n styleUrls: ['./toggle.scss'],\n})\nexport class ToggleComponent implements FormCheckboxControl {\n readonly checked = model<boolean>(false);\n\n readonly disabled = model<boolean>(false);\n readonly size = input<UiCheckboxSize>('default');\n /** Rendered inline next to the switch (not stacked above it, unlike ul-input/ul-checkbox's form-field label). Use ng-content instead for richer projected content. */\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly errorText = input<string | null>(null);\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n protected readonly ids = createFormFieldIds('ul-toggle');\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly resolvedErrorText = computed(\n () =>\n this.errorText() ||\n (this.hasError() && this.errors().length ? (this.errors()[0]?.message ?? null) : null),\n );\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.resolvedErrorText(),\n ),\n );\n\n onChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n\n onEnter(event: Event): void {\n if (this.disabled()) return;\n event.preventDefault();\n this.checked.set(!this.checked());\n }\n}\n","import {\n Component,\n HostBinding,\n HostListener,\n ViewEncapsulation,\n input,\n signal,\n} from '@angular/core';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Component({\n selector: 'ul-tooltip',\n templateUrl: './tooltip.html',\n styleUrl: './tooltip.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class TooltipComponent {\n text = input<string>('');\n position = input<TooltipPosition>('top');\n disabled = input<boolean>(false);\n showDelay = input<number>(150);\n hideDelay = input<number>(100);\n\n private readonly visible = signal<boolean>(false);\n private showTimeoutId: number | null = null;\n private hideTimeoutId: number | null = null;\n\n readonly tooltipId = `ul-tooltip-${Math.random().toString(36).slice(2, 11)}`;\n\n @HostBinding('attr.aria-describedby')\n get ariaDescribedBy(): string | null {\n return this.visible() && !!this.text() ? this.tooltipId : null;\n }\n\n @HostListener('mouseenter')\n @HostListener('focusin')\n handlePointerEnter(): void {\n if (this.disabled() || !this.text()) return;\n this.scheduleShow();\n }\n\n @HostListener('mouseleave')\n @HostListener('focusout')\n handlePointerLeave(): void {\n this.scheduleHide();\n }\n\n readonly isVisible = this.visible.asReadonly();\n\n private scheduleShow(): void {\n this.cancelHide();\n if (this.visible()) return;\n\n const delay = this.showDelay();\n if (delay <= 0) {\n this.visible.set(true);\n return;\n }\n\n this.showTimeoutId = window.setTimeout(() => {\n this.visible.set(true);\n }, delay);\n }\n\n private scheduleHide(): void {\n this.cancelShow();\n if (!this.visible()) return;\n\n const delay = this.hideDelay();\n if (delay <= 0) {\n this.visible.set(false);\n return;\n }\n\n this.hideTimeoutId = window.setTimeout(() => {\n this.visible.set(false);\n }, delay);\n }\n\n private cancelShow(): void {\n if (this.showTimeoutId !== null) {\n window.clearTimeout(this.showTimeoutId);\n this.showTimeoutId = null;\n }\n }\n\n private cancelHide(): void {\n if (this.hideTimeoutId !== null) {\n window.clearTimeout(this.hideTimeoutId);\n this.hideTimeoutId = null;\n }\n }\n}\n","<span class=\"ul-tooltip-wrapper\">\n <ng-content />\n\n @if (isVisible() && text()) {\n <span\n class=\"ul-tooltip ul-tooltip--{{ position() }}\"\n role=\"tooltip\"\n [attr.id]=\"tooltipId\"\n >\n {{ text() }}\n </span>\n }\n</span>\n\n","import { signal } from '@angular/core';\n\n/**\n * Open/focus/highlight state and keyboard navigation shared by combobox-\n * style inputs (a text field paired with a listbox of options) —\n * `ul-search-select` (closed list, one selection) and `ul-search-input`\n * (free text plus suggestions/results) need identical open/close timing and\n * arrow-key/Escape mechanics despite having different value semantics. This\n * holds only that shared mechanics; each consumer still owns its own list,\n * selection, and what Enter does when nothing is highlighted.\n */\nexport class ComboboxState {\n readonly isOpen = signal(false);\n readonly isFocused = signal(false);\n readonly highlightedIndex = signal(0);\n\n private closeTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Cancels any pending blur-close and opens immediately — for focus/typing. */\n open(): void {\n this.cancelScheduledClose();\n this.isFocused.set(true);\n this.isOpen.set(true);\n }\n\n /**\n * Closes after a short delay instead of immediately, so a mousedown on an\n * option (which fires before the field's blur) can still register before\n * the panel disappears. `onClosed` runs once the delay elapses, unless a\n * subsequent `open()`/`close()` cancels it first.\n */\n scheduleClose(onClosed?: () => void, delay = 150): void {\n this.isFocused.set(false);\n this.closeTimeout = setTimeout(() => {\n this.closeTimeout = null;\n this.isOpen.set(false);\n onClosed?.();\n }, delay);\n }\n\n /** Closes immediately — for selecting an option, submitting, or Escape. */\n close(): void {\n this.cancelScheduledClose();\n this.isOpen.set(false);\n }\n\n cancelScheduledClose(): void {\n if (this.closeTimeout != null) {\n clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n }\n }\n\n resetHighlight(): void {\n this.highlightedIndex.set(0);\n }\n\n /**\n * Handles ArrowDown/ArrowUp (cycling over `listLength`) and Escape\n * (closes). Returns whether it handled the key, so the caller's own\n * keydown handler knows whether to fall through to its own Enter logic —\n * Enter is deliberately not handled here, since selecting the highlighted\n * option vs. falling back to something else (e.g. `ul-search-input`'s\n * free-text submit) is caller-specific.\n */\n handleNavigationKey(event: KeyboardEvent, listLength: number): boolean {\n switch (event.key) {\n case 'ArrowDown':\n if (listLength === 0) return false;\n event.preventDefault();\n this.highlightedIndex.set((this.highlightedIndex() + 1) % listLength);\n return true;\n case 'ArrowUp':\n if (listLength === 0) return false;\n event.preventDefault();\n this.highlightedIndex.set(\n this.highlightedIndex() <= 0 ? listLength - 1 : this.highlightedIndex() - 1,\n );\n return true;\n case 'Escape':\n event.preventDefault();\n this.close();\n return true;\n default:\n return false;\n }\n }\n}\n\n/** DOM id for the option at `index` inside the listbox owned by `controlId`. */\nexport function comboboxOptionId(controlId: string, index: number): string {\n return `${controlId}-option-${index}`;\n}\n\n/**\n * `aria-activedescendant` value for a combobox's current highlight, or\n * `undefined` when there's nothing to point at (empty list).\n */\nexport function comboboxActiveDescendantId(\n controlId: string,\n listLength: number,\n highlightedIndex: number,\n): string | undefined {\n if (listLength === 0) return undefined;\n const safeIndex = Math.min(Math.max(0, highlightedIndex), listLength - 1);\n return comboboxOptionId(controlId, safeIndex);\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { map } from 'rxjs';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { ListItemComponent } from '../list-item/list-item';\nimport { ModalComponent } from '../modal/modal';\nimport { comboboxActiveDescendantId, comboboxOptionId, ComboboxState } from '../shared/combobox';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport interface SearchSuggestion {\n value: string;\n label: string;\n icon?: IconName;\n}\n\n/**\n * Free-text search box with a results panel: `suggestions` (e.g. recent\n * searches) while the query is empty, swapped for `results` as soon as the\n * user types. On desktop the panel is an anchored dropdown below the field.\n * Below the phone breakpoint, tapping the field opens a full-screen `ul-modal`\n * (via `fullScreenInMobile`) instead — the same pattern as X/Twitter, Google,\n * etc.: a back button and the real field pinned to the top, results filling\n * the rest of the screen edge to edge, no card, no backdrop. `ul-modal`\n * supplies the focus trap, dialog role, and Escape-to-close; this component\n * just projects its own header/results as the modal's body content.\n * Consumers never branch on viewport or manage this themselves.\n *\n * Implements FormValueControl for Signal Forms. Use `[(value)]` for two-way\n * binding.\n */\n@Component({\n selector: 'ul-search-input',\n imports: [\n NgTemplateOutlet,\n InputComponent,\n IconComponent,\n ButtonComponent,\n ListItemComponent,\n ModalComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './search-input.html',\n styleUrls: ['./search-input.scss'],\n})\nexport class SearchInputComponent implements FormValueControl<string> {\n readonly size = input<UiSize>('md');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly placeholder = input<string>('Search...');\n /** Aria-label for the back button shown in the mobile takeover. */\n readonly backLabel = input<string>('Back');\n /** Aria-label for the clear button shown in the mobile takeover when query is not empty. */\n readonly clearLabel = input<string>('Clear');\n /** Shown while the query is empty — e.g. recent searches. Replaced by `results` as soon as the user types. The consumer owns the data/persistence; this component only renders and reports selection. */\n readonly suggestions = input<SearchSuggestion[]>([]);\n /** Heading shown above `suggestions`, e.g. \"Recent searches\". Not shown once `results` takes over. */\n readonly suggestionsLabel = input<string | null>(null);\n /** Shown once the query is non-empty — e.g. live search results. The consumer computes/fetches these as `value` changes (via `[(value)]`/`valueChange`). */\n readonly results = input<SearchSuggestion[]>([]);\n /**\n * When set, always projects this arbitrary content (e.g. rich cards with\n * images/prices) into the panel instead of the built-in plain-text rows —\n * for both `suggestions` (query empty) and `results` (query non-empty).\n * The consumer's own template is responsible for varying its content by\n * query if it needs to. Arrow-key/Enter option-highlighting is skipped\n * while this is set — Enter always falls through to `searchSubmit` since\n * the projected content owns its own selection interaction.\n */\n readonly resultsTemplate = input<TemplateRef<unknown> | null>(null);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n readonly value = model<string>('');\n\n /** Emitted when the user picks a suggestion, by click or keyboard. */\n readonly suggestionSelected = output<SearchSuggestion>();\n /** Emitted on Enter when no suggestion is highlighted — the free-typed query. */\n readonly searchSubmit = output<string>();\n\n protected readonly ids = createFormFieldIds('ul-search-input');\n /** Open/focus/highlight state and arrow-key/Escape mechanics shared with ul-search-select. */\n protected readonly combobox = new ComboboxState();\n\n private readonly mobileInput = viewChild<InputComponent>('mobileInput');\n\n /** Phone-sized viewport — below this, tapping the field opens the full-screen takeover instead of the anchored dropdown. */\n protected readonly isMobile = toSignal(\n inject(BreakpointObserver)\n .observe('(max-width: 767px)')\n .pipe(map((state) => state.matches)),\n { initialValue: false },\n );\n\n protected readonly listId = `${this.ids.controlId}-list`;\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n /** Whether the query is non-empty — `results` replaces `suggestions` (and its heading) once true. */\n protected readonly hasQuery = computed(() => this.value().trim().length > 0);\n protected readonly activeList = computed(() =>\n this.hasQuery() ? this.results() : this.suggestions(),\n );\n protected readonly activeListLabel = computed(() =>\n this.hasQuery() ? null : this.suggestionsLabel(),\n );\n\n protected readonly hasCustomResults = computed(() => !!this.resultsTemplate());\n\n protected readonly shouldShowPanel = computed(\n () => this.combobox.isOpen() && (this.activeList().length > 0 || this.hasCustomResults()),\n );\n\n protected readonly optionId = (index: number) => comboboxOptionId(this.ids.controlId, index);\n\n protected readonly activeDescendantId = computed(() => {\n if (!this.shouldShowPanel() || this.hasCustomResults()) return undefined;\n return comboboxActiveDescendantId(\n this.ids.controlId,\n this.activeList().length,\n this.combobox.highlightedIndex(),\n );\n });\n\n onValueChange(text: string): void {\n this.value.set(text);\n this.combobox.isOpen.set(true);\n this.combobox.resetHighlight();\n }\n\n onInputFocus(): void {\n this.combobox.open();\n }\n\n onInputBlur(): void {\n this.combobox.scheduleClose();\n }\n\n /** The visible field on mobile is a read-only trigger — typing happens in the takeover's own field, focused once it renders. */\n openMobileSearch(): void {\n this.combobox.isOpen.set(true);\n setTimeout(() => this.mobileInput()?.focus());\n }\n\n closeMobileSearch(): void {\n this.combobox.close();\n }\n\n clearInput(): void {\n this.onValueChange('');\n }\n\n onKeydown(event: KeyboardEvent): void {\n const list = this.activeList();\n const panelActive = this.shouldShowPanel() && list.length > 0;\n if (panelActive && this.combobox.handleNavigationKey(event, list.length)) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n if (panelActive) {\n this.selectSuggestion(list[this.combobox.highlightedIndex()]);\n } else {\n this.submitSearch();\n }\n }\n }\n\n selectSuggestion(suggestion: SearchSuggestion): void {\n this.combobox.close();\n this.value.set(suggestion.label);\n this.suggestionSelected.emit(suggestion);\n }\n\n private submitSearch(): void {\n this.combobox.close();\n this.searchSubmit.emit(this.value());\n }\n}\n","<ng-template #resultsList>\n @if (activeListLabel()) {\n <div class=\"ul-search-input__list-label\" role=\"presentation\">{{ activeListLabel() }}</div>\n }\n @for (result of activeList(); track result.value; let i = $index) {\n <div\n class=\"ul-search-input__option\"\n [class.ul-search-input__option--highlighted]=\"combobox.highlightedIndex() === i\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"value() === result.label\"\n (mousedown)=\"selectSuggestion(result)\"\n >\n <ul-list-item theme=\"ghost-white\" [hideFocusOutline]=\"true\">\n @if (result.icon) {\n <ng-container ul-list-item-before-label>\n <ul-icon size=\"5\" [icon]=\"result.icon\" />\n </ng-container>\n }\n <ng-container ul-list-item-label>{{ result.label }}</ng-container>\n </ul-list-item>\n </div>\n }\n</ng-template>\n\n<div\n class=\"ul-search-input ul-search-input--{{ size() }}\"\n [class.ul-search-input--error]=\"hasError()\"\n [class.ul-search-input--disabled]=\"disabled()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"false\"\n />\n\n @if (isMobile()) {\n <ul-input\n [controlId]=\"ids.controlId\"\n [value]=\"value()\"\n [readOnly]=\"true\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n (click)=\"openMobileSearch()\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n <ul-modal [(open)]=\"combobox.isOpen\" [fullScreenInMobile]=\"true\" [showCloseButton]=\"false\">\n <div\n class=\"ul-search-input__combobox ul-search-input__combobox--takeover\"\n role=\"combobox\"\n [attr.aria-expanded]=\"shouldShowPanel()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <div class=\"ul-search-input__header\">\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"backLabel()\"\n (buttonClick)=\"closeMobileSearch()\"\n >\n <ul-icon icon=\"arrow_left\" size=\"6\" />\n </ul-button>\n\n <ul-input\n #mobileInput\n class=\"ul-search-input__field\"\n [value]=\"value()\"\n (valueChange)=\"onValueChange($event)\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-left-elements>\n <ul-icon icon=\"search\" size=\"4\" />\n </ng-container>\n\n <ng-container ul-input-right-elements>\n @if (hasQuery()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"clearLabel()\"\n (buttonClick)=\"clearInput()\"\n >\n <ul-icon icon=\"cross\" size=\"4\" />\n </ul-button>\n }\n </ng-container>\n </ul-input>\n </div>\n\n @if (shouldShowPanel()) {\n <div\n class=\"ul-search-input__list ul-search-input__list--takeover ul-scrollable\"\n [id]=\"listId\"\n [attr.role]=\"hasCustomResults() ? null : 'listbox'\"\n [attr.aria-label]=\"hasCustomResults() ? null : activeListLabel()\"\n >\n @if (hasCustomResults()) {\n <ng-container *ngTemplateOutlet=\"resultsTemplate()!\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"resultsList\" />\n }\n </div>\n }\n </div>\n </ul-modal>\n } @else {\n <div\n class=\"ul-search-input__combobox\"\n role=\"combobox\"\n [attr.aria-expanded]=\"shouldShowPanel()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <ul-input\n [controlId]=\"ids.controlId\"\n [value]=\"value()\"\n (valueChange)=\"onValueChange($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-left-elements>\n <ul-icon icon=\"search\" size=\"4\" />\n </ng-container>\n\n <ng-container ul-input-right-elements>\n @if (hasQuery()) {\n <ul-button\n type=\"button\"\n theme=\"ghost-white\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [ariaLabel]=\"clearLabel()\"\n (buttonClick)=\"clearInput()\"\n >\n <ul-icon icon=\"cross\" size=\"4\" />\n </ul-button>\n }\n </ng-container>\n </ul-input>\n\n @if (shouldShowPanel()) {\n <div\n class=\"ul-search-input__list ul-scrollable\"\n [id]=\"listId\"\n [attr.role]=\"hasCustomResults() ? null : 'listbox'\"\n [attr.aria-label]=\"hasCustomResults() ? null : activeListLabel()\"\n >\n @if (hasCustomResults()) {\n <ng-container *ngTemplateOutlet=\"resultsTemplate()!\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"resultsList\" />\n }\n </div>\n }\n </div>\n }\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { Component, computed, input, model, signal } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { IconComponent } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { ListItemComponent } from '../list-item/list-item';\nimport { comboboxActiveDescendantId, comboboxOptionId, ComboboxState } from '../shared/combobox';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nexport interface SearchSelectOption {\n label: string;\n value: string;\n}\n\n/**\n * Combobox: search input with filterable dropdown. User types to filter options and selects a result.\n * Implements FormValueControl for use with Signal Forms [formField]. Use [(value)] for two-way binding.\n */\n@Component({\n selector: 'ul-search-select',\n imports: [\n InputComponent,\n IconComponent,\n ListItemComponent,\n FormFieldLabelComponent,\n FormFieldHelperComponent,\n ],\n templateUrl: './search-select.html',\n styleUrls: ['./search-select.scss'],\n})\nexport class SearchSelectComponent implements FormValueControl<string | null> {\n readonly size = input<UiSize>('md');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('Search...');\n readonly options = input<SearchSelectOption[]>([]);\n readonly minCharsToOpen = input<number>(0);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n\n readonly value = model<string | null>(null);\n\n protected readonly ids = createFormFieldIds('ul-search-select');\n protected readonly query = signal('');\n /** Open/focus/highlight state and arrow-key/Escape mechanics shared with ul-search-input. */\n protected readonly combobox = new ComboboxState();\n\n protected readonly listId = `${this.ids.controlId}-list`;\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n protected readonly selectedOption = computed(() => {\n const v = this.value();\n if (v == null) return null;\n return this.options().find((opt) => opt.value === v) ?? null;\n });\n\n protected readonly selectedLabel = computed(() => this.selectedOption()?.label ?? '');\n\n protected readonly filteredOptions = computed(() => {\n const q = this.query().trim().toLowerCase();\n const opts = this.options();\n if (!q) return opts;\n return opts.filter((opt) => opt.label.toLowerCase().includes(q));\n });\n\n protected readonly displayText = computed(() => {\n if (this.combobox.isOpen()) return this.query();\n if (this.value() != null) return this.selectedLabel();\n return this.query();\n });\n\n protected readonly shouldShowPanel = computed(() => {\n if (!this.combobox.isOpen()) return false;\n const min = this.minCharsToOpen();\n return this.query().trim().length >= min;\n });\n\n protected readonly hasNoResults = computed(\n () => this.shouldShowPanel() && this.filteredOptions().length === 0,\n );\n\n protected readonly optionId = (index: number) => comboboxOptionId(this.ids.controlId, index);\n\n protected readonly activeDescendantId = computed(() =>\n comboboxActiveDescendantId(\n this.ids.controlId,\n this.filteredOptions().length,\n this.combobox.highlightedIndex(),\n ),\n );\n\n onInputValueChange(text: string): void {\n this.query.set(text);\n this.combobox.isOpen.set(true);\n this.combobox.resetHighlight();\n if (this.value() != null && text !== this.selectedLabel()) {\n this.value.set(null);\n }\n }\n\n onInputFocus(): void {\n this.combobox.open();\n if (this.value() != null) this.query.set(this.selectedLabel());\n this.combobox.resetHighlight();\n }\n\n onInputBlur(): void {\n this.combobox.scheduleClose(() => {\n if (this.value() != null) this.query.set(this.selectedLabel());\n });\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (!this.shouldShowPanel()) return;\n const list = this.filteredOptions();\n if (list.length === 0) return;\n\n if (this.combobox.handleNavigationKey(event, list.length)) return;\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectOption(list[this.combobox.highlightedIndex()]);\n }\n }\n\n selectOption(opt: SearchSelectOption): void {\n this.combobox.close();\n this.value.set(opt.value);\n this.query.set(opt.label);\n }\n}\n","<div\n class=\"ul-search-select ul-search-select--{{ size() }}\"\n [class.ul-search-select--open]=\"combobox.isOpen()\"\n [class.ul-search-select--error]=\"hasError()\"\n [class.ul-search-select--disabled]=\"disabled()\"\n [class.ul-search-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div\n class=\"ul-search-select__control\"\n [class.ul-search-select__control--focused]=\"combobox.isFocused()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"combobox.isOpen()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onKeydown($event)\"\n >\n <ul-input\n [controlId]=\"ids.controlId\"\n [value]=\"displayText()\"\n (valueChange)=\"onInputValueChange($event)\"\n (inputFocus)=\"onInputFocus()\"\n (inputBlur)=\"onInputBlur()\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [label]=\"null\"\n [helperText]=\"null\"\n [autocomplete]=\"'off'\"\n >\n <ng-container ul-input-right-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n\n @if (shouldShowPanel()) {\n <div\n class=\"ul-search-select__list ul-scrollable\"\n [class.ul-search-select__list--empty]=\"hasNoResults()\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (hasNoResults()) {\n <div class=\"ul-search-select__empty\" role=\"status\">No results</div>\n } @else {\n @for (opt of filteredOptions(); track opt.value; let i = $index) {\n <div\n class=\"ul-search-select__option\"\n [class.ul-search-select__option--highlighted]=\"combobox.highlightedIndex() === i\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"value() === opt.value\"\n (mousedown)=\"selectOption(opt)\"\n >\n <ul-list-item\n theme=\"ghost-white\"\n [selected]=\"value() === opt.value\"\n [hideFocusOutline]=\"true\"\n >\n <ng-container ul-list-item-label>{{ opt.label }}</ng-container>\n </ul-list-item>\n </div>\n }\n }\n </div>\n }\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport { DropdownComponent, DropdownItem } from '../dropdown/dropdown';\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\nimport type { ListItemTheme } from '../list-item/list-item';\n\nexport interface SelectOption extends DropdownItem {\n /** Required value associated with the option */\n value: string;\n}\n\n/**\n * Form-friendly select built on the dropdown. Implements FormValueControl for Signal Forms [formField].\n * Use [(value)] or [formField]=\"myForm().country\".\n *\n * @example\n * <ul-select label=\"Sort by\" [options]=\"options\" [(value)]=\"selected\" />\n */\n@Component({\n selector: 'ul-select',\n imports: [DropdownComponent, FormFieldLabelComponent, FormFieldHelperComponent],\n templateUrl: './select.html',\n styleUrls: ['./select.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SelectComponent implements FormValueControl<string | null> {\n readonly size = input<UiSize>('md');\n readonly theme = input<ListItemTheme>('transparent-white');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('Select an option');\n readonly options = input<SelectOption[]>([]);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched when the dropdown closes */\n readonly touch = output<void>();\n\n readonly value = model<string | null>(null);\n protected readonly selectedIndex = model<number>(0);\n\n protected readonly ids = createFormFieldIds('ul-select');\n\n protected readonly items = computed<DropdownItem[]>(() => {\n const opts = this.options();\n if (!opts.length) return [];\n return opts.map((option) => ({\n label: option.label ?? option.value,\n value: option.value,\n leftIcons: option.leftIcons,\n rightIcons: option.rightIcons,\n disabled: option.disabled,\n }));\n });\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n constructor() {\n // Keep selectedIndex in sync when value or options change\n effect(() => {\n const currentValue = this.value();\n const options = this.options();\n\n if (currentValue == null) {\n this.selectedIndex.set(0);\n return;\n }\n\n const index = options.findIndex((opt) => opt.value === currentValue);\n this.selectedIndex.set(index >= 0 ? index : 0);\n });\n }\n\n /** Handles index changes coming from the dropdown */\n protected onSelectedIndexChange(index: number): void {\n const options = this.options();\n const option = options[index];\n\n this.selectedIndex.set(index);\n this.value.set(option?.value ?? null);\n }\n\n protected onDropdownClosed(): void {\n this.touch.emit();\n }\n}\n","<div\n class=\"ul-select ul-select--{{ size() }}\"\n [class.ul-select--disabled]=\"disabled()\"\n [class.ul-select--error]=\"hasError()\"\n [class.ul-select--required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div\n class=\"ul-select__control\"\n [id]=\"ids.controlId\"\n [class.ul-select__control--disabled]=\"disabled()\"\n >\n <ul-dropdown\n class=\"ul-select__dropdown\"\n [theme]=\"theme()\"\n [items]=\"items()\"\n [disabled]=\"disabled()\"\n [(selectedIndex)]=\"selectedIndex\"\n (selectedIndexChange)=\"onSelectedIndexChange($event)\"\n (closed)=\"onDropdownClosed()\"\n />\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"errorText() || (hasError() && errors().length ? errors()[0].message : '') || null\"\n [error]=\"hasError()\"\n />\n</div>\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\n\nimport { CheckboxComponent } from '../checkbox/checkbox';\nimport { LongPressDirective } from '../long-press/long-press.directive';\n\n/**\n * Makes any row of projected content (thumbnail/media + label content, plus\n * anything else — a status pill, actions) selectable in a bulk-select list,\n * without the consumer having to hand-roll device detection or gesture\n * wiring themselves:\n *\n * - Fine-pointer/real-hover devices (desktop): a checkbox is always present\n * but invisible until the row is hovered, keyboard-focused, or already\n * checked — Gmail-list style.\n * - Coarse-pointer/no-hover devices (touch): long-press a row to select it;\n * every row then swaps its projected `[ul-selectable-row-media]` content\n * for a large checkbox — there's rarely room for both a thumbnail and an\n * easy-to-hit checkbox on a small card.\n *\n * This component only decides what to *show* and detects the long-press\n * gesture — it doesn't know about routing, so a consumer whose media/content\n * slots contain a routerLink-driven anchor still needs to null that binding\n * out itself while `selectionActive` (see ul-selectable-row's own usage in\n * undermarket's profile-listings for the pattern).\n *\n * @example\n * ```html\n * <ul-selectable-row\n * [selected]=\"isSelected(item.id)\"\n * [selectionActive]=\"hasSelection()\"\n * [ariaLabel]=\"'Select ' + item.title\"\n * (selectedChange)=\"toggleSelect(item.id, $event)\"\n * (longPress)=\"onRowLongPress(item.id)\"\n * >\n * <img ul-selectable-row-media [src]=\"item.imageUrl\" alt=\"\" />\n * <div ul-selectable-row-content>{{ item.title }}</div>\n * <ul-pill>{{ item.status }}</ul-pill>\n * </ul-selectable-row>\n * ```\n */\n@Component({\n selector: 'ul-selectable-row',\n imports: [CheckboxComponent],\n hostDirectives: [LongPressDirective],\n host: {\n '[class.ul-selectable-row]': 'selected()',\n '(click)': 'onHostClick($event)',\n },\n template: `\n @if (selectable() && isCompact() && selectionActive()) {\n <ul-checkbox\n size=\"lg\"\n [checked]=\"selected()\"\n [attr.aria-label]=\"ariaLabel()\"\n (checkedChange)=\"selectedChange.emit($event)\"\n />\n } @else {\n <ng-content select=\"[ul-selectable-row-media]\" />\n }\n @if (selectable() && !isCompact()) {\n <ul-checkbox\n class=\"ul-selectable-row__hover-checkbox\"\n [checked]=\"selected()\"\n [attr.aria-label]=\"ariaLabel()\"\n (checkedChange)=\"selectedChange.emit($event)\"\n />\n }\n <ng-content select=\"[ul-selectable-row-content]\" />\n <ng-content />\n `,\n styleUrls: ['./selectable-row.scss'],\n})\nexport class SelectableRowComponent {\n /** Whether this row is currently selected. */\n selected = input<boolean>(false);\n /**\n * Whether the list is in selection mode (something, anywhere, is\n * selected) — drives the compact-mode media-for-checkbox swap.\n */\n selectionActive = input<boolean>(false);\n /**\n * Whether this row supports selection at all. False renders it as a plain\n * row — no checkbox (hover or compact), no long-press, no click-to-toggle\n * — for a list that doesn't offer bulk actions right now.\n */\n selectable = input<boolean>(true);\n /** Accessible label for this row's checkbox(es). */\n ariaLabel = input<string | null>(null);\n\n selectedChange = output<boolean>();\n longPress = output<void>();\n\n /**\n * Same distinction the hover-reveal CSS relies on — a width breakpoint\n * alone would misclassify a wide tablet in landscape, which has no real\n * hover, as \"desktop\".\n */\n private readonly hasFinePointer = toSignal(\n inject(BreakpointObserver)\n .observe('(hover: hover) and (pointer: fine)')\n .pipe(map((state) => state.matches)),\n { initialValue: true },\n );\n readonly isCompact = computed(() => !this.hasFinePointer());\n\n // Set for the click that immediately follows a successful long-press, so\n // that trailing click doesn't also toggle the row straight back off via\n // onHostClick below (see the same problem/fix in undermarket's\n // profile-listings for the version of this before it moved into here).\n private justLongPressed = false;\n\n constructor() {\n inject(LongPressDirective).ulLongPress.subscribe(() => {\n if (!this.selectable()) return;\n this.justLongPressed = true;\n this.longPress.emit();\n });\n }\n\n /**\n * While selecting, a tap anywhere in the row toggles it — not just on the\n * checkbox. This applies on every device, not only once the checkbox has\n * replaced the media (compact): otherwise the row's content on\n * fine-pointer devices would only be togglable by precisely hitting the\n * small hover-revealed checkbox, which is inconsistent with how compact\n * mode behaves and isn't how Gmail/Photos-style bulk-select works even on\n * desktop web. It's safe to do unconditionally (regardless of what's\n * projected) because a consumer whose content contains a routerLink is\n * already expected to have nulled that binding out while\n * `selectionActive` — so there's no competing navigation to accidentally\n * trigger.\n */\n onHostClick(event: MouseEvent): void {\n if (this.justLongPressed) {\n this.justLongPressed = false;\n return;\n }\n if (!this.selectable() || !this.selectionActive()) return;\n // The checkbox already has its own (checkedChange) handler — without\n // this, a tap on it would toggle twice (once from checkedChange, once\n // from this handler catching the same click as it bubbles up).\n if ((event.target as HTMLElement).closest('ul-checkbox')) return;\n this.selectedChange.emit(!this.selected());\n }\n}\n","import { Component, HostListener, input, model, output, ViewEncapsulation } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button';\nimport { IconComponent, IconName } from '../icon/icon';\nimport { ListItemComponent, ListItemTheme } from '../list-item/list-item';\n\nexport type SidebarItem = {\n label: string;\n value?: string;\n leftIcons?: IconName[];\n rightIcons?: IconName[];\n disabled?: boolean;\n};\n\n@Component({\n selector: 'ul-sidebar',\n imports: [ButtonComponent, IconComponent, ListItemComponent],\n templateUrl: './sidebar.html',\n styleUrls: ['./sidebar.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.aria-hidden]': '!open()',\n },\n})\nexport class SidebarComponent {\n items = input<SidebarItem[]>([]);\n theme = input<ListItemTheme>('ghost-white');\n selectedIndex = model<number>(0);\n open = model<boolean>(false);\n closeOnBackdropClick = input<boolean>(true);\n hideItemFocusOutline = input<boolean>(true);\n\n itemSelected = output<SidebarItem>();\n\n close(): void {\n this.open.set(false);\n }\n\n onOverlayClick(): void {\n if (this.closeOnBackdropClick()) {\n this.close();\n }\n }\n\n onItemClick(item: SidebarItem, index: number): void {\n if (item.disabled) {\n return;\n }\n this.selectedIndex.set(index);\n this.itemSelected.emit(item);\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.open()) {\n this.close();\n }\n }\n}\n","<div class=\"ul-sidebar\">\n <div\n class=\"ul-sidebar__overlay\"\n [class.ul-sidebar__overlay--visible]=\"open()\"\n [attr.aria-hidden]=\"!open()\"\n (click)=\"onOverlayClick()\"\n ></div>\n\n <aside\n class=\"ul-sidebar__drawer\"\n [class.ul-sidebar__drawer--open]=\"open()\"\n role=\"navigation\"\n [attr.aria-hidden]=\"!open()\"\n >\n <div class=\"ul-sidebar__inner\">\n <header class=\"ul-sidebar__header\">\n @if (open()) {\n <ul-button\n theme=\"ghost-white\"\n [iconOnly]=\"true\"\n class=\"ul-sidebar__close\"\n ariaLabel=\"Close menu\"\n (buttonClick)=\"close()\"\n >\n <ul-icon icon=\"close\" size=\"6\" />\n </ul-button>\n }\n <ng-content select=\"[ul-sidebar-header]\" />\n </header>\n <nav class=\"ul-sidebar__nav ul-scrollable\">\n @if (items().length > 0) {\n @for (item of items(); track $index) {\n <ul-list-item\n [theme]=\"theme()\"\n [disabled]=\"!!item.disabled\"\n [selected]=\"selectedIndex() === $index\"\n [hideFocusOutline]=\"hideItemFocusOutline()\"\n (click)=\"onItemClick(item, $index)\"\n >\n <ng-container ul-list-item-before-label>\n @if (item.leftIcons) {\n @for (icon of item.leftIcons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n <ng-container ul-list-item-label>{{ item.label }}</ng-container>\n <ng-container ul-list-item-after-label>\n @if (item.rightIcons) {\n @for (icon of item.rightIcons; track icon) {\n <ul-icon size=\"5\" [icon]=\"icon\" />\n }\n }\n </ng-container>\n </ul-list-item>\n }\n } @else {\n <ng-content select=\"[ul-sidebar-nav]\" />\n }\n </nav>\n <footer class=\"ul-sidebar__footer\">\n <ng-content select=\"[ul-sidebar-footer]\" />\n </footer>\n </div>\n </aside>\n</div>\n","import { Component, computed, input } from '@angular/core';\n\nimport { IconComponent, IconName } from '../icon/icon';\nimport { RadialComponent } from '../radial/radial';\n\nexport type Status = 'confirm' | 'alert' | 'error' | 'pending' | 'info';\n\n@Component({\n selector: 'ul-status',\n imports: [IconComponent, RadialComponent],\n templateUrl: './status.html',\n styleUrl: './status.scss',\n})\nexport class StatusComponent {\n status = input<Status>('info');\n customIcon = input<IconName>();\n loadingAnimation = input<boolean>(false);\n\n get icon(): IconName {\n const customIcon = this.customIcon();\n if (customIcon) {\n return customIcon;\n }\n\n const statusIcons: Record<Status, IconName> = {\n confirm: 'check',\n alert: 'alert',\n error: 'cross',\n pending: 'hourglass',\n info: 'info',\n };\n\n return statusIcons[this.status()] || 'info';\n }\n\n computedClasses = computed(() => ({\n 'ul-status': true,\n 'ul-status--confirm': this.status() === 'confirm',\n 'ul-status--alert': this.status() === 'alert',\n 'ul-status--error': this.status() === 'error',\n 'ul-status--pending': this.status() === 'pending',\n 'ul-status--info': this.status() === 'info',\n }));\n}\n","<div [class]=\"computedClasses()\">\n <div class=\"ul-status-icon\">\n <ul-icon [icon]=\"icon\" size=\"12\" />\n @if (loadingAnimation()) {\n <div class=\"ul-status-loading\">\n <ul-radial [size]=\"96\" [percentage]=\"50\" [infinite]=\"true\" />\n </div>\n }\n </div>\n <div class=\"ul-status-title-container\">\n <div class=\"ul-status-title\">\n <ng-content select=\"[ul-status-title]\" />\n </div>\n <div class=\"ul-status-subtitle\">\n <ng-content select=\"[ul-status-subtitle]\" />\n </div>\n </div>\n <div class=\"ul-status-description\">\n <ng-content select=\"[ul-status-description]\" />\n </div>\n</div>\n","import { Component, computed, input, model, output, signal } from '@angular/core';\n\nimport { IconComponent } from '../icon/icon';\nimport { InputComponent } from '../input/input';\nimport { SkeletonComponent } from '../skeleton/skeleton';\n\nexport interface TableColumn {\n id: string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n}\n\nexport type SortDirection = 'asc' | 'desc';\n\n/**\n * Table component for tabular data with optional sort (per-column) and global filter.\n * Uses semantic table markup; responsive with horizontal scroll on small viewports.\n */\n@Component({\n selector: 'ul-table',\n imports: [InputComponent, IconComponent, SkeletonComponent],\n templateUrl: './table.html',\n styleUrls: ['./table.scss'],\n})\nexport class TableComponent {\n readonly columns = input<TableColumn[]>([]);\n readonly data = input<Record<string, unknown>[]>([]);\n readonly sortColumn = model<string | null>(null);\n readonly sortDirection = model<SortDirection>('asc');\n readonly filterPlaceholder = input<string>('Filter...');\n readonly filterLabel = input<string>('Filter');\n readonly showGlobalFilter = input<boolean>(false);\n readonly emptyMessage = input<string>('No data');\n\n readonly loading = input<boolean>(false);\n\n readonly sortChange = output<{ column: string | null; direction: SortDirection }>();\n readonly filterChange = output<string>();\n\n protected readonly filterQuery = signal('');\n\n protected readonly hasSortableColumn = computed(() =>\n this.columns().some((col) => col.sortable === true),\n );\n\n protected readonly filteredData = computed(() => {\n const rows = this.data();\n const query = this.filterQuery().trim().toLowerCase();\n const cols = this.columns();\n if (!query) return rows;\n return rows.filter((row) => {\n return cols.some((col) => {\n const val = this.getCellValue(row, col.id);\n return String(val).toLowerCase().includes(query);\n });\n });\n });\n\n protected readonly sortedData = computed(() => {\n const rows = this.filteredData();\n const colId = this.sortColumn();\n const dir = this.sortDirection();\n if (!colId) return rows;\n return [...rows].sort((a, b) => {\n const aVal = this.getCellValue(a, colId);\n const bVal = this.getCellValue(b, colId);\n const aStr = String(aVal ?? '');\n const bStr = String(bVal ?? '');\n const cmp = aStr.localeCompare(bStr, undefined, { numeric: true });\n return dir === 'asc' ? cmp : -cmp;\n });\n });\n\n protected readonly filterId = `ul-table-filter-${Math.random().toString(36).slice(2, 9)}`;\n\n getCellValue(row: Record<string, unknown>, columnId: string): unknown {\n return row[columnId];\n }\n\n onFilterInput(value: string): void {\n this.filterQuery.set(value);\n this.filterChange.emit(value);\n }\n\n toggleSort(columnId: string): void {\n const col = this.columns().find((c) => c.id === columnId);\n if (!col?.sortable) return;\n const current = this.sortColumn();\n const currentDir = this.sortDirection();\n if (current === columnId) {\n const nextDir: SortDirection = currentDir === 'asc' ? 'desc' : 'asc';\n this.sortDirection.set(nextDir);\n this.sortChange.emit({ column: columnId, direction: nextDir });\n return;\n } else {\n this.sortColumn.set(columnId);\n this.sortDirection.set('asc');\n this.sortChange.emit({ column: columnId, direction: 'asc' });\n }\n }\n\n getSortAriaSort(columnId: string): 'ascending' | 'descending' | 'none' {\n if (this.sortColumn() !== columnId) return 'none';\n return this.sortDirection() === 'asc' ? 'ascending' : 'descending';\n }\n}\n","<div\n class=\"ul-table\"\n [class.ul-table--sortable]=\"hasSortableColumn()\"\n [class.ul-table--filterable]=\"showGlobalFilter()\"\n>\n @if (showGlobalFilter()) {\n <div class=\"ul-table__toolbar\">\n <ul-input\n [controlId]=\"filterId\"\n [label]=\"filterLabel()\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"filterQuery()\"\n (valueChange)=\"onFilterInput($event)\"\n size=\"sm\"\n >\n <ng-container ul-input-left-elements>\n <ul-icon size=\"5\" icon=\"search\" />\n </ng-container>\n </ul-input>\n </div>\n }\n\n <div class=\"ul-table__scroll ul-scrollable\">\n <ul-skeleton [show]=\"loading()\" variant=\"rect\">\n <table class=\"ul-table__table\">\n <thead class=\"ul-table__head\">\n <tr class=\"ul-table__row ul-table__row--head\">\n @for (col of columns(); track col.id) {\n <th\n class=\"ul-table__th\"\n [class.ul-table__th--sortable]=\"col.sortable\"\n [class.ul-table__th--sort-asc]=\"sortColumn() === col.id && sortDirection() === 'asc'\"\n [class.ul-table__th--sort-desc]=\"sortColumn() === col.id && sortDirection() === 'desc'\"\n [attr.scope]=\"'col'\"\n [attr.aria-sort]=\"col.sortable ? getSortAriaSort(col.id) : null\"\n >\n @if (col.sortable) {\n <button\n type=\"button\"\n class=\"ul-table__th-button\"\n [attr.aria-label]=\"'Sort by ' + col.label\"\n (click)=\"toggleSort(col.id)\"\n >\n <span class=\"ul-table__th-label\">{{ col.label }}</span>\n @if (sortColumn() === col.id && sortDirection() === 'asc') {\n <ul-icon size=\"5\" icon=\"arrow_up\" />\n } @else if (sortColumn() === col.id && sortDirection() === 'desc') {\n <ul-icon size=\"5\" icon=\"arrow_down\" />\n } @else {\n <ul-icon size=\"5\" icon=\"sort\" />\n }\n </button>\n } @else {\n <span class=\"ul-table__th-label\">{{ col.label }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"ul-table__body\">\n @if (sortedData().length === 0) {\n <tr class=\"ul-table__row ul-table__row--empty\">\n <td class=\"ul-table__cell ul-table__cell--empty\" [attr.colspan]=\"columns().length || 1\">\n {{ emptyMessage() }}\n </td>\n </tr>\n } @else {\n @for (row of sortedData(); track $index) {\n <tr class=\"ul-table__row\">\n @for (col of columns(); track col.id) {\n <td class=\"ul-table__cell\">{{ getCellValue(row, col.id) }}</td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </ul-skeleton>\n </div>\n</div>\n","import { Directive } from '@angular/core';\n\n/**\n * When projected into ul-textarea, replaces the native textarea with custom content (e.g. Quill).\n * Use with [ul-textarea-field] on the element to project.\n */\n@Directive({\n selector: '[ul-textarea-field]',\n})\nexport class TextareaFieldDirective {}\n","import { Component, computed, contentChild, input, model, output, signal } from '@angular/core';\nimport type {\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\n\nimport {\n createFormFieldIds,\n FormFieldHelperComponent,\n FormFieldLabelComponent,\n getFormFieldDescribedBy,\n} from '../shared/form-field';\nimport type { UiSize } from '../shared/ui-types';\n\nimport { TextareaFieldDirective } from './textarea-field.directive';\n\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\n/**\n * Reusable textarea. Implements FormValueControl for Signal Forms [formField].\n * Use [(value)] for two-way binding or [formField]=\"myForm().message\".\n *\n * Content projection: [ul-textarea-field] (replaces native textarea), [ul-textarea-left-elements], [ul-textarea-right-elements].\n */\n@Component({\n selector: 'ul-textarea',\n imports: [FormFieldLabelComponent, FormFieldHelperComponent],\n templateUrl: './textarea.html',\n styleUrls: ['./textarea.scss'],\n})\nexport class TextareaComponent implements FormValueControl<string> {\n readonly size = input<UiSize>('md');\n readonly error = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly readOnly = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly showRequiredIndicator = input<boolean>(true);\n readonly placeholder = input<string>('');\n readonly label = input<string | null>(null);\n readonly helperText = input<string | null>(null);\n readonly errorText = input<string | null>(null);\n readonly maxLength = input<number | undefined>();\n readonly minLength = input<number | undefined>();\n readonly autocomplete = input<string>('off');\n readonly rows = input<number>(3);\n readonly resize = input<TextareaResize>('vertical');\n\n /** When using [ul-textarea-field], pass focus state so the group border reflects it. */\n readonly groupFocused = input<boolean | null>(null);\n\n readonly invalid = input<boolean>(false);\n readonly errors = input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model<boolean>(false);\n /** FormUiControl optional: [formField] listens to this to mark the bound field touched on blur */\n readonly touch = output<void>();\n\n readonly value = model<string>('');\n\n protected readonly customField = contentChild(TextareaFieldDirective);\n protected readonly ids = createFormFieldIds('ul-textarea');\n protected readonly isFocused = signal(false);\n protected readonly groupFocusedState = computed(() => this.groupFocused() ?? this.isFocused());\n\n protected readonly hasError = computed(() => this.error() || this.invalid());\n\n protected readonly describedBy = computed(() =>\n getFormFieldDescribedBy(\n this.ids.helperId,\n this.ids.errorId,\n !!this.helperText(),\n this.hasError(),\n !!this.errorText() || this.errors().length > 0,\n ),\n );\n\n readonly inputBlur = output<FocusEvent>();\n readonly inputFocus = output<FocusEvent>();\n\n onInput(event: Event): void {\n const value = (event.target as HTMLTextAreaElement).value;\n this.value.set(value);\n }\n\n onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.touched.set(true);\n this.touch.emit();\n this.inputBlur.emit(event);\n }\n\n onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.inputFocus.emit(event);\n }\n\n focus(): void {\n if (this.customField()) return;\n const el = document.getElementById(this.ids.controlId) as HTMLTextAreaElement;\n el?.focus();\n }\n\n select(): void {\n const el = document.getElementById(this.ids.controlId) as HTMLTextAreaElement;\n el?.select();\n }\n}\n","<div\n class=\"ul-textarea ul-textarea--{{ size() }}\"\n [class.ul-textarea--error]=\"hasError()\"\n [class.ul-textarea--disabled]=\"disabled()\"\n [class.ul-textarea--read-only]=\"readOnly()\"\n [class.ul-textarea--required]=\"required()\"\n [class.ul-textarea--resize-none]=\"resize() === 'none'\"\n [class.ul-textarea--resize-vertical]=\"resize() === 'vertical'\"\n [class.ul-textarea--resize-horizontal]=\"resize() === 'horizontal'\"\n [class.ul-textarea--resize-both]=\"resize() === 'both'\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <ul-form-field-label\n [label]=\"label()\"\n [required]=\"required()\"\n [for]=\"ids.controlId\"\n [size]=\"size()\"\n [showRequiredIndicator]=\"showRequiredIndicator()\"\n />\n\n <div\n class=\"ul-textarea__group\"\n [class.ul-textarea__group--focused]=\"groupFocusedState()\"\n [style.--ul-textarea-rows]=\"rows()\"\n >\n <div class=\"ul-textarea__left-elements\">\n <ng-content select=\"[ul-textarea-left-elements]\" />\n </div>\n\n <ng-content select=\"[ul-textarea-field]\" />\n @if (!customField()) {\n <textarea\n [id]=\"ids.controlId\"\n class=\"ul-textarea__field\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readOnly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.minlength]=\"minLength()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.rows]=\"rows()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-describedby]=\"describedBy()\"\n ></textarea>\n }\n\n <div class=\"ul-textarea__right-elements\">\n <ng-content select=\"[ul-textarea-right-elements]\" />\n </div>\n </div>\n\n <ul-form-field-helper\n [id]=\"ids.helperId\"\n [helperText]=\"helperText()\"\n [errorText]=\"\n (errorText() || (hasError() && errors().length ? errors()[0].message : null)) ?? null\n \"\n [error]=\"hasError()\"\n />\n</div>\n","/*\n * Public API Surface of ui\n */\n\nexport * from './components';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","NgxImageCropperComponent","i1.LongPressDirective"],"mappings":"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"}
|