ps-helix 6.0.0 → 6.0.2

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":"ps-helix.mjs","sources":["../../../projects/ps-helix/src/lib/components/alert/alert.component.ts","../../../projects/ps-helix/src/lib/components/alert/alert.component.html","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.ts","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.html","../../../projects/ps-helix/src/lib/components/badge/badge.component.ts","../../../projects/ps-helix/src/lib/components/badge/badge.component.html","../../../projects/ps-helix/src/lib/components/button/button.component.ts","../../../projects/ps-helix/src/lib/components/button/button.component.html","../../../projects/ps-helix/src/lib/components/card/card.component.ts","../../../projects/ps-helix/src/lib/components/card/card.component.html","../../../projects/ps-helix/src/lib/components/tag/tag.component.ts","../../../projects/ps-helix/src/lib/components/tag/tag.component.html","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.ts","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.html","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.ts","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.html","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.ts","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.html","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.html","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.ts","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.html","../../../projects/ps-helix/src/lib/a11y/overlay-position.service.ts","../../../projects/ps-helix/src/lib/a11y/click-outside.directive.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.html","../../../projects/ps-helix/src/lib/components/input/input.types.ts","../../../projects/ps-helix/src/lib/components/input/input.component.ts","../../../projects/ps-helix/src/lib/components/input/input.component.html","../../../projects/ps-helix/src/lib/components/textarea/textarea.types.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.html","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.html","../../../projects/ps-helix/src/lib/components/menu/menu.component.ts","../../../projects/ps-helix/src/lib/components/menu/menu.component.html","../../../projects/ps-helix/src/lib/a11y/focus-trap.directive.ts","../../../projects/ps-helix/src/lib/a11y/overlay.service.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.html","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.ts","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.html","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.ts","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.html","../../../projects/ps-helix/src/lib/components/radio/radio.component.ts","../../../projects/ps-helix/src/lib/components/radio/radio.component.html","../../../projects/ps-helix/src/lib/components/select/select.component.ts","../../../projects/ps-helix/src/lib/components/select/select.component.html","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.ts","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.html","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.ts","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.html","../../../projects/ps-helix/src/lib/components/stepper/step.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.html","../../../projects/ps-helix/src/lib/components/state-flow-indicator/flow-step.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.html","../../../projects/ps-helix/src/lib/components/switch/switch.component.ts","../../../projects/ps-helix/src/lib/components/switch/switch.component.html","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.ts","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.html","../../../projects/ps-helix/src/lib/components/table/table.component.ts","../../../projects/ps-helix/src/lib/components/table/table.component.html","../../../projects/ps-helix/src/lib/components/tabs/tab.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.html","../../../projects/ps-helix/src/lib/components/toast/toast.tokens.ts","../../../projects/ps-helix/src/lib/components/toast/toast.service.ts","../../../projects/ps-helix/src/lib/components/toast/toast.compat.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.html","../../../projects/ps-helix/src/lib/services/theme/utils/color.utils.ts","../../../projects/ps-helix/src/lib/services/theme/utils/wcag.utils.ts","../../../projects/ps-helix/src/lib/services/theme/theme.service.ts","../../../projects/ps-helix/src/lib/services/translation/translation.service.ts","../../../projects/ps-helix/src/lib/services/scroll.service.ts","../../../projects/ps-helix/src/lib/a11y/live-announcer.service.ts","../../../projects/ps-helix/src/ps-helix.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AlertType, IconPosition, AlertSize, AlertRole, AlertLabels } from './alert.types';\r\n\r\n// Default alert labels\r\nconst DEFAULT_LABELS: AlertLabels = {\r\n dismiss: 'Dismiss alert'\r\n};\r\n\r\n// Default alert icons\r\nconst DEFAULT_ICONS: Record<string, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n};\r\n\r\nconst DEFAULT_CONFIG = {\r\n type: 'info' as AlertType,\r\n iconPosition: 'left' as IconPosition,\r\n closable: false,\r\n size: 'medium' as AlertSize,\r\n showIcon: true\r\n};\r\n\r\n@Component({\r\n selector: 'psh-alert',\r\n imports: [CommonModule],\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAlertComponent {\r\n\r\n // Inputs\r\n type = input<AlertType>(DEFAULT_CONFIG.type);\r\n iconPosition = input<IconPosition>(DEFAULT_CONFIG.iconPosition);\r\n closable = input(DEFAULT_CONFIG.closable);\r\n size = input<AlertSize>(DEFAULT_CONFIG.size);\r\n showIcon = input(DEFAULT_CONFIG.showIcon);\r\n role = input<AlertRole>();\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n dismissLabel = input(DEFAULT_LABELS.dismiss);\r\n ariaLive = input<'polite' | 'assertive'>();\r\n content = input('');\r\n \r\n // Outputs\r\n closed = output<void>();\r\n\r\n // Computed values\r\n defaultIcon = computed(() => DEFAULT_ICONS[this.type()] || 'info');\r\n getIcon = computed(() => this.icon() || this.defaultIcon());\r\n\r\n computedAriaLive = computed(() => \r\n this.ariaLive() || (['warning', 'danger'].includes(this.type()) ? 'assertive' : 'polite')\r\n );\r\n\r\n computedRole = computed(() => \r\n this.role() || (['warning', 'danger'].includes(this.type()) ? 'alert' : 'status')\r\n );\r\n\r\n state = computed(() => {\r\n if (this.closable()) return 'closable';\r\n return this.type();\r\n });\r\n\r\n handleClose(): void {\r\n this.closed.emit();\r\n }\r\n}","<div\r\n class=\"alert\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class]=\"type()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-live]=\"computedAriaLive()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div class=\"alert-content\" [class.icon-right]=\"iconPosition() === 'right'\">\r\n @if (showIcon()) {\r\n <i class=\"ph ph-{{ getIcon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <div class=\"alert-message\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </div>\r\n </div>\r\n \r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"alert-dismiss\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AvatarSize, AvatarShape, AvatarStatus } from './avatar.types';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n size: 'medium' as AvatarSize,\r\n shape: 'circle' as AvatarShape,\r\n alt: 'User avatar',\r\n icon: 'user'\r\n};\r\n\r\n// Default status colors\r\nconst DEFAULT_STATUS_COLORS: Record<AvatarStatus, string> = {\r\n online: 'var(--success-color)',\r\n offline: 'var(--surface-400)',\r\n away: 'var(--warning-color)',\r\n busy: 'var(--danger-color)'\r\n};\r\n\r\n@Component({\r\n selector: 'psh-avatar',\r\n imports: [CommonModule],\r\n templateUrl: './avatar.component.html',\r\n styleUrls: ['./avatar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAvatarComponent {\r\n\r\n // Model inputs with defaults\r\n size = model<AvatarSize>(DEFAULT_CONFIG.size);\r\n shape = model<AvatarShape>(DEFAULT_CONFIG.shape);\r\n src = model<string | undefined>();\r\n alt = model<string>(DEFAULT_CONFIG.alt);\r\n\r\n // Regular inputs\r\n initials = input('');\r\n icon = input<string>(DEFAULT_CONFIG.icon);\r\n status = input<AvatarStatus | undefined>();\r\n ariaLabel = input<string>();\r\n\r\n // Computed values\r\n hasImage = computed(() => !!this.src());\r\n hasInitials = computed(() => !!this.initials() && !this.hasImage());\r\n hasIcon = computed(() => !this.hasImage() && !this.hasInitials());\r\n\r\n computedAriaLabel = computed(() => this.ariaLabel() || this.alt());\r\n\r\n statusColor = computed(() => {\r\n const currentStatus = this.status();\r\n if (!currentStatus) return undefined;\r\n return DEFAULT_STATUS_COLORS[currentStatus];\r\n });\r\n\r\n state = computed(() => this.status() || 'default');\r\n}","<div \r\n class=\"avatar\"\r\n [class.circle]=\"shape() === 'circle'\"\r\n [class.square]=\"shape() === 'square'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.xlarge]=\"size() === 'xlarge'\"\r\n role=\"img\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (hasImage()) {\r\n <img [src]=\"src()\" [attr.alt]=\"alt()\" class=\"avatar-image\" />\r\n } @else if (hasInitials()) {\r\n <span class=\"avatar-initials\">{{ initials() }}</span>\r\n } @else if (hasIcon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (status()) {\r\n <span \r\n class=\"avatar-status\"\r\n [class]=\"status()\"\r\n [style.background-color]=\"statusColor()\"\r\n [attr.aria-label]=\"status()\"\r\n ></span>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BadgeSize, BadgeVariant, BadgePosition, BadgeDisplayType } from './badge.types';\r\n\r\nconst DEFAULT_CONFIG = {\r\n variant: 'primary' as BadgeVariant,\r\n size: 'medium' as BadgeSize,\r\n displayType: 'text' as BadgeDisplayType,\r\n max: 99,\r\n showZero: false,\r\n position: 'top-right' as BadgePosition\r\n};\r\n\r\n@Component({\r\n selector: 'psh-badge',\r\n imports: [CommonModule],\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshBadgeComponent<T = number> {\r\n\r\n readonly variant = input<BadgeVariant>(DEFAULT_CONFIG.variant);\r\n readonly size = input<BadgeSize>(DEFAULT_CONFIG.size);\r\n readonly displayType = input<BadgeDisplayType>(DEFAULT_CONFIG.displayType);\r\n readonly content = input<string>('');\r\n readonly visible = input(true);\r\n readonly value = input<T>();\r\n readonly max = input(DEFAULT_CONFIG.max);\r\n readonly showZero = input(DEFAULT_CONFIG.showZero);\r\n readonly position = input<BadgePosition>(DEFAULT_CONFIG.position);\r\n readonly overlap = input(false);\r\n readonly ariaLabel = input<string>();\r\n readonly formatter = input<((value: T) => string) | undefined>();\r\n\r\n readonly badgeClick = output<void>();\r\n readonly valueChange = output<T>();\r\n\r\n readonly computedRole = computed(() =>\r\n this.displayType() === 'counter' ? 'status' : 'img'\r\n );\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const content = this.content();\r\n if (content) return content;\r\n\r\n return this.displayValue();\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (!this.visible()) return 'hidden';\r\n if (this.overlap()) return 'overlap';\r\n return this.displayType();\r\n });\r\n\r\n private readonly isDot = computed(() => this.displayType() === 'dot');\r\n private readonly isCounter = computed(() => this.displayType() === 'counter');\r\n private readonly hasValue = computed(() => this.value() !== undefined);\r\n\r\n private readonly shouldDisplay = computed(() => {\r\n const currentValue = this.value();\r\n if (typeof currentValue !== 'number') return true;\r\n return currentValue > 0 || this.showZero();\r\n });\r\n\r\n private readonly formattedCustomValue = computed(() => {\r\n const formatter = this.formatter();\r\n const currentValue = this.value();\r\n\r\n if (!formatter || currentValue === null || currentValue === undefined) {\r\n return null;\r\n }\r\n\r\n return formatter(currentValue);\r\n });\r\n\r\n private readonly formattedNumericValue = computed(() => {\r\n const currentValue = this.value();\r\n\r\n if (typeof currentValue !== 'number') {\r\n return currentValue !== undefined ? String(currentValue) : '';\r\n }\r\n\r\n if (!this.shouldDisplay()) {\r\n return this.content() || '';\r\n }\r\n\r\n const maxValue = this.max();\r\n return currentValue > maxValue ? `${maxValue}+` : `${currentValue}`;\r\n });\r\n\r\n readonly displayValue = computed(() => {\r\n if (this.isDot()) {\r\n return '';\r\n }\r\n\r\n if (!this.isCounter() || !this.hasValue()) {\r\n return this.content();\r\n }\r\n\r\n const customFormatted = this.formattedCustomValue();\r\n if (customFormatted !== null) {\r\n return customFormatted;\r\n }\r\n\r\n return this.formattedNumericValue();\r\n });\r\n\r\n onBadgeClick(): void {\r\n this.badgeClick.emit();\r\n }\r\n}\r\n","<!-- Badge click is an optional convenience; the badge is a status/img indicator, not a primary control. -->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n class=\"badge\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.info]=\"variant() === 'info'\"\r\n [class.disabled]=\"variant() === 'disabled'\"\r\n [class.dot]=\"displayType() === 'dot'\"\r\n [class.counter]=\"displayType() === 'counter'\"\r\n [class.overlap]=\"overlap()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.medium]=\"size() === 'medium'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.top-right]=\"position() === 'top-right'\"\r\n [class.top-left]=\"position() === 'top-left'\"\r\n [class.bottom-right]=\"position() === 'bottom-right'\"\r\n [class.bottom-left]=\"position() === 'bottom-left'\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"onBadgeClick()\"\r\n>\r\n @if (displayType() === 'text') {\r\n <ng-content></ng-content>\r\n } @else if (displayType() === 'counter') {\r\n {{ displayValue() }}\r\n }\r\n</div>\r\n","import {\r\n AfterContentChecked,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ButtonAppearance, ButtonVariant, ButtonSize, ButtonIconPosition } from './button.types';\r\n\r\n@Component({\r\n selector: 'psh-button',\r\n imports: [],\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '(click)': 'onHostClick($event)',\r\n },\r\n})\r\nexport class PshButtonComponent implements AfterContentChecked {\r\n private elementRef = inject(ElementRef);\r\n private projectedText = signal<string | undefined>(undefined);\r\n\r\n appearance = input<ButtonAppearance>('filled');\r\n variant = input<ButtonVariant>('primary');\r\n size = input<ButtonSize>('medium');\r\n disabled = input(false);\r\n loading = input(false);\r\n fullWidth = model(false);\r\n iconPosition = input<ButtonIconPosition>('left');\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n loadingText = input('Loading...');\r\n disabledText = input('This action is currently unavailable');\r\n iconOnlyText = input<string>();\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n\r\n clicked = output<MouseEvent>();\r\n disabledClick = output<MouseEvent>();\r\n\r\n ngAfterContentChecked(): void {\r\n const button = this.elementRef.nativeElement.querySelector('button');\r\n if (button) {\r\n const ngContentElement = button.querySelector('.button-content');\r\n if (ngContentElement) {\r\n const textContent = ngContentElement.textContent?.trim() || '';\r\n const currentProjectedText = this.projectedText();\r\n if (textContent && textContent !== currentProjectedText) {\r\n this.projectedText.set(textContent);\r\n } else if (!textContent && currentProjectedText) {\r\n this.projectedText.set(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n computedAriaLabel = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.loading()) return this.loadingText();\r\n if (this.disabled()) return this.disabledText();\r\n if (this.iconPosition() === 'only') {\r\n return this.iconOnlyText() || 'Button';\r\n }\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n return undefined;\r\n });\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.loading()) return 'loading';\r\n return 'default';\r\n });\r\n\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n onHostClick(event: MouseEvent): void {\r\n if (this.disabled() && !this.loading()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.disabledClick.emit(event);\r\n }\r\n }\r\n}","<button\r\n [attr.data-state]=\"state()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [type]=\"type()\"\r\n [class]=\"appearance()\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.disabled]=\"disabled()\"\r\n [class.loading]=\"loading()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.medium]=\"size() === 'medium'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.icon-only]=\"iconPosition() === 'only'\"\r\n [disabled]=\"disabled() || loading()\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <span class=\"button-content\">\r\n @if (loading()) {\r\n <span class=\"loader\" aria-hidden=\"true\"></span>\r\n @if (iconPosition() !== 'only') {\r\n {{ loadingText() }}\r\n }\r\n }\r\n @if (!loading() && icon() && (iconPosition() === 'left' || iconPosition() === 'only')) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (!loading() && iconPosition() !== 'only') {\r\n <ng-content></ng-content>\r\n }\r\n @if (!loading() && icon() && iconPosition() === 'right') {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n</button>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { CardVariant, CardColorVariant, CardDensity, CardActionsAlignment } from './card.types';\r\n\r\n/**\r\n * Composant carte métier - conteneur structuré pour contenu professionnel\r\n *\r\n * Ce composant fournit une structure de carte métier avec :\r\n * - Header enrichi avec titre, description et slots pour icônes/badges\r\n * - Body avec spacing généreux et bien défini\r\n * - Footer optionnel pour métadonnées\r\n * - Zone d'actions avec alignement configurable\r\n * - Support de différentes densités et variantes de couleur\r\n * - Dividers automatiques entre les sections\r\n *\r\n * Les boutons placés dans le slot card-actions deviennent automatiquement\r\n * pleine largeur sur mobile (< 640px) grâce à une directive automatique.\r\n *\r\n * @example\r\n * <psh-card\r\n * title=\"Mon titre\"\r\n * description=\"Ma description\"\r\n * variant=\"elevated\"\r\n * >\r\n * <p>Contenu principal</p>\r\n * <div card-actions>\r\n * <psh-button variant=\"primary\">Action</psh-button>\r\n * </div>\r\n * </psh-card>\r\n */\r\n@Component({\r\n selector: 'psh-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n style: 'display: block;',\r\n },\r\n})\r\nexport class PshCardComponent implements OnDestroy {\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private resizeObserver?: ResizeObserver;\r\n\r\n isMobile = signal<boolean>(false);\r\n // Model inputs - propriétés modifiables\r\n /** Variante visuelle de la carte (default, elevated, outlined) */\r\n variant = model<CardVariant>('default');\r\n\r\n /** Effet de survol activé (animation translateY) */\r\n hoverable = model(false);\r\n\r\n /** Carte cliquable (ajoute cursor pointer et gestion du focus) */\r\n interactive = model(false);\r\n\r\n // Regular inputs - propriétés en lecture seule\r\n /** Titre principal de la carte */\r\n title = input<string>('');\r\n\r\n /** Description/sous-titre optionnel */\r\n description = input<string>('');\r\n\r\n /** Variante de couleur pour cartes spéciales (info, success, warning, danger) */\r\n colorVariant = input<CardColorVariant>('default');\r\n\r\n /** Niveau de densité du spacing (compact, normal, spacious) */\r\n density = input<CardDensity>('normal');\r\n\r\n /** Afficher le divider entre header et body */\r\n showHeaderDivider = input<boolean>(true);\r\n\r\n /** Afficher le divider entre body et footer */\r\n showFooterDivider = input<boolean>(true);\r\n\r\n /** Afficher le divider entre footer et actions */\r\n showActionsDivider = input<boolean>(true);\r\n\r\n /** Alignement des actions dans la zone card-actions */\r\n actionsAlignment = input<CardActionsAlignment>('right');\r\n\r\n /** Activer/désactiver le padding du body */\r\n bodyPadding = input<boolean>(true);\r\n\r\n /** Classes CSS additionnelles */\r\n cssClass = input<string>('');\r\n\r\n /** Styles inline personnalisés */\r\n customStyle = input<Record<string, string>>({});\r\n\r\n /** État de chargement - affiche un skeleton */\r\n loading = input<boolean>(false);\r\n\r\n /** État désactivé - réduit l'opacité */\r\n disabled = input<boolean>(false);\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte (si interactive) */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n /** Classes CSS calculées selon les propriétés */\r\n computedClasses = computed(() => {\r\n const classes = ['card'];\r\n classes.push(`variant-${this.variant()}`);\r\n classes.push(`color-${this.colorVariant()}`);\r\n classes.push(`density-${this.density()}`);\r\n\r\n if (this.hoverable()) classes.push('hoverable');\r\n if (this.interactive()) classes.push('interactive');\r\n if (this.loading()) classes.push('loading');\r\n if (this.disabled()) classes.push('disabled');\r\n if (this.cssClass()) classes.push(this.cssClass());\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Styles calculés */\r\n computedStyles = computed(() => {\r\n return { ...this.customStyle() };\r\n });\r\n\r\n /** Indique si le header doit être affiché */\r\n hasHeader = computed(() => {\r\n return !!(this.title() || this.description());\r\n });\r\n\r\n /** Classe d'alignement pour la zone d'actions */\r\n actionsAlignmentClass = computed(() => {\r\n return `actions-align-${this.actionsAlignment()}`;\r\n });\r\n\r\n actionsClasses = computed(() => {\r\n const classes = [this.actionsAlignmentClass()];\r\n if (this.isMobile()) {\r\n classes.push('mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.checkMobileViewport();\r\n\r\n if (this.document.defaultView) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.checkMobileViewport();\r\n });\r\n this.resizeObserver.observe(this.document.documentElement);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n }\r\n\r\n private checkMobileViewport(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.isMobile.set(view.innerWidth <= 640);\r\n }\r\n }\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n * Émet l'événement clicked seulement si la carte est interactive\r\n * et non désactivée\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier (Enter et Space)\r\n * Permet d'activer la carte au clavier pour l'accessibilité\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}\r\n","<div\r\n [class]=\"computedClasses()\"\r\n [style]=\"computedStyles()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n role=\"article\"\r\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\r\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n>\r\n <!-- Header avec titre et description intégrés -->\r\n @if (hasHeader()) {\r\n <div class=\"card-header\" [class.has-divider]=\"showHeaderDivider()\">\r\n <!-- Slot pour icône/avatar avant le titre -->\r\n <ng-content select=\"[card-header-icon]\"></ng-content>\r\n\r\n <!-- Zone de titre et description -->\r\n @if (title() || description()) {\r\n <div class=\"card-header-content\">\r\n @if (title()) {\r\n <h3 class=\"card-title\">{{ title() }}</h3>\r\n }\r\n @if (description()) {\r\n <p class=\"card-description\">{{ description() }}</p>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Slot pour contenu personnalisé du header -->\r\n <ng-content select=\"[card-header-content]\"></ng-content>\r\n\r\n <!-- Slot pour badge/tag ou actions secondaires -->\r\n <ng-content select=\"[card-header-extra]\"></ng-content>\r\n </div>\r\n }\r\n\r\n <!-- Body avec contenu principal -->\r\n <div class=\"card-body\" [class.no-padding]=\"!bodyPadding()\">\r\n <!-- État de chargement -->\r\n @if (loading()) {\r\n <div class=\"card-loading\">\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line short\"></div>\r\n </div>\r\n } @else {\r\n <!-- Contenu principal (slot par défaut) -->\r\n <ng-content></ng-content>\r\n }\r\n </div>\r\n\r\n <!-- Footer optionnel pour métadonnées -->\r\n <div class=\"card-footer\" [class.has-divider]=\"showFooterDivider()\">\r\n <ng-content select=\"[card-footer]\"></ng-content>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"card-actions\" [class]=\"actionsClasses()\" [class.has-divider]=\"showActionsDivider()\">\r\n <ng-content select=\"[card-actions]\"></ng-content>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, InjectionToken, ElementRef, AfterContentChecked, signal } from '@angular/core';\r\nimport { TagVariant, TagSize, TagConfig } from './tag.types';\r\n\r\nexport const TAG_CONFIG = new InjectionToken<Partial<TagConfig>>('TAG_CONFIG', {\r\n factory: () => ({\r\n variant: 'primary',\r\n size: 'medium',\r\n closable: false,\r\n disabled: false,\r\n interactive: false,\r\n closeLabel: 'Supprimer le tag'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tag',\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshTagComponent implements AfterContentChecked {\r\n private readonly config = inject(TAG_CONFIG);\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly projectedText = signal('');\r\n\r\n readonly variant = input<TagVariant>(this.config.variant ?? 'primary');\r\n readonly size = input<TagSize>(this.config.size ?? 'medium');\r\n readonly closable = input(this.config.closable ?? false);\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly interactive = input(this.config.interactive ?? false);\r\n readonly icon = input<string>();\r\n readonly closeLabel = input(this.config.closeLabel ?? 'Supprimer le tag');\r\n readonly content = input('Tag');\r\n readonly ariaLabel = input<string>();\r\n\r\n readonly clicked = output<MouseEvent>();\r\n readonly closed = output<void>();\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const contentText = this.content();\r\n if (contentText && contentText !== 'Tag') return contentText;\r\n\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n\r\n return 'Tag';\r\n });\r\n\r\n ngAfterContentChecked(): void {\r\n const contentElement = this.elementRef.nativeElement.querySelector('.tag-content');\r\n if (contentElement) {\r\n const text = (contentElement.textContent || '').trim();\r\n if (text !== this.projectedText()) {\r\n this.projectedText.set(text);\r\n }\r\n }\r\n }\r\n\r\n readonly computedRole = computed(() =>\r\n this.interactive() ? 'button' : 'status'\r\n );\r\n\r\n readonly computedTabIndex = computed(() =>\r\n this.interactive() && !this.disabled() ? 0 : -1\r\n );\r\n\r\n readonly state = computed(() => this.disabled() ? 'disabled' : 'default');\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && this.interactive()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled() || !this.interactive()) return;\r\n\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event as unknown as MouseEvent);\r\n }\r\n }\r\n\r\n handleClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.closed.emit();\r\n }\r\n }\r\n}","<div\r\n class=\"tag\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.disabled]=\"disabled()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.tabindex]=\"computedTabIndex()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() || null\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n>\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"tag-content\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </span>\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"tag-close\"\r\n (click)=\"handleClose($event)\"\r\n [attr.aria-label]=\"closeLabel()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PshTagComponent } from '../tag/tag.component';\r\nimport { StatTagVariant, StatCardLayout, StatCardVariant } from './stat-card.types';\r\n\r\nconst ICON_GRADIENT_DEFAULTS: Record<StatTagVariant, string> = {\r\n success: 'linear-gradient(135deg, #34D399, #059669)',\r\n danger: 'linear-gradient(135deg, #F87171, #DC2626)',\r\n warning: 'linear-gradient(135deg, #FBBF24, #D97706)',\r\n primary: 'linear-gradient(135deg, #60A5FA, #2563EB)'\r\n};\r\n@Component({\r\n selector: 'psh-stat-card',\r\n imports: [CommonModule, PshTagComponent],\r\n templateUrl: './stat-card.component.html',\r\n styleUrls: ['./stat-card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PshStatCardComponent {\r\n\r\n // Inputs principaux\r\n /** Valeur principale de la statistique (nombre ou texte formaté) */\r\n value = input<string | number>();\r\n\r\n /** Description de la statistique */\r\n description = input<string>();\r\n\r\n /** Nom de l'icône Phosphor (sans le préfixe 'ph-') */\r\n icon = input<string>();\r\n\r\n // Inputs optionnels\r\n /** Variante du tag d'évolution (détermine la couleur) */\r\n tagVariant = input<StatTagVariant>();\r\n\r\n /** Label du tag d'évolution (ex: '+12.6%', '-8.1%') */\r\n tagLabel = input<string>();\r\n\r\n /** Couleur de fond personnalisée pour l'icône (CSS gradient ou couleur) */\r\n iconBackground = input<string>();\r\n\r\n /** Variante visuelle de la carte de base */\r\n variant = input<StatCardVariant>('elevated');\r\n\r\n /** Carte cliquable avec feedback visuel */\r\n interactive = input(false);\r\n\r\n /** Effet de survol */\r\n hoverable = input(false);\r\n\r\n /** État de chargement */\r\n loading = input(false);\r\n\r\n /** État désactivé */\r\n disabled = input(false);\r\n\r\n /** Classes CSS additionnelles */\r\n cssClass = input<string>('');\r\n\r\n /** Styles inline personnalisés */\r\n customStyle = input<Record<string, string>>({});\r\n\r\n /** Label ARIA pour l'accessibilité */\r\n ariaLabel = input<string>();\r\n\r\n /** Disposition de la carte: 'horizontal' (icône à gauche) ou 'vertical' (icône en haut) */\r\n layout = input<StatCardLayout>('horizontal');\r\n\r\n /** Active la direction row pour le card-body (icône et contenu côte à côte en flex-row) */\r\n rowDirection = input(false);\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n private computedValue = computed(() => this.value() ?? '');\r\n\r\n private computedDescription = computed(() => this.description() ?? '');\r\n\r\n private computedIcon = computed(() => this.icon() ?? '');\r\n\r\n private computedTagVariant = computed(() => this.tagVariant());\r\n\r\n private computedTagLabel = computed(() => this.tagLabel());\r\n\r\n private computedIconBackground = computed(() => {\r\n const customBg = this.iconBackground();\r\n if (customBg) return customBg;\r\n\r\n const variant = this.tagVariant();\r\n return variant ? ICON_GRADIENT_DEFAULTS[variant] : null;\r\n });\r\n\r\n /** Style de l'icône avec couleur de fond personnalisée */\r\n iconStyle = computed(() => {\r\n const background = this.computedIconBackground();\r\n return background ? { background } : null;\r\n });\r\n\r\n /** Vérifie si un tag doit être affiché */\r\n hasTag = computed(() =>\r\n !!(this.computedTagVariant() && this.computedTagLabel())\r\n );\r\n\r\n /** Vérifie si une icône doit être affichée */\r\n hasIcon = computed(() => !!this.computedIcon());\r\n\r\n useRowDirection = computed(() => this.rowDirection());\r\n\r\n /** Label ARIA calculé */\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const value = this.computedValue();\r\n const desc = this.computedDescription();\r\n const tag = this.computedTagLabel();\r\n\r\n return tag\r\n ? `${desc}: ${value}, ${tag}`\r\n : `${desc}: ${value}`;\r\n });\r\n\r\n /** Classes CSS calculées */\r\n computedClasses = computed(() => {\r\n const classes = ['stat-card'];\r\n const layout = this.layout();\r\n\r\n classes.push(`variant-${this.variant()}`);\r\n\r\n if (layout === 'vertical') {\r\n classes.push('stat-card--vertical');\r\n } else {\r\n classes.push('stat-card--horizontal');\r\n }\r\n\r\n if (this.useRowDirection()) {\r\n classes.push('stat-card--row');\r\n }\r\n\r\n if (this.hoverable()) classes.push('hoverable');\r\n if (this.interactive()) classes.push('interactive');\r\n if (this.loading()) classes.push('loading');\r\n if (this.disabled()) classes.push('disabled');\r\n if (this.cssClass()) classes.push(this.cssClass());\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Styles calculés */\r\n computedStyles = computed(() => {\r\n return { ...this.customStyle() };\r\n });\r\n\r\n // Exposer les valeurs calculées pour le template\r\n protected get displayValue() { return this.computedValue(); }\r\n protected get displayDescription() { return this.computedDescription(); }\r\n protected get displayIcon() { return this.computedIcon(); }\r\n protected get displayTagVariant() { return this.computedTagVariant(); }\r\n protected get displayTagLabel() { return this.computedTagLabel(); }\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}","<div\r\n [class]=\"computedClasses()\"\r\n [ngStyle]=\"computedStyles()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [attr.role]=\"interactive() ? 'button' : 'article'\"\r\n>\r\n @if (loading()) {\r\n <div class=\"stat-loading\">\r\n <div class=\"skeleton-circle\"></div>\r\n <div class=\"skeleton-content\">\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line short\"></div>\r\n </div>\r\n </div>\r\n } @else {\r\n @if (useRowDirection()) {\r\n <div class=\"stat-card-body\">\r\n @if (hasIcon()) {\r\n <div class=\"stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"stat-content\">\r\n <h3 class=\"stat-value\">{{ displayValue }}</h3>\r\n <p class=\"stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [variant]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n @if (hasIcon()) {\r\n <div class=\"stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"stat-content\">\r\n <h3 class=\"stat-value\">{{ displayValue }}</h3>\r\n <p class=\"stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [variant]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n }\r\n }\r\n</div>\r\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n ViewEncapsulation\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HorizontalCardVariant } from './horizontal-card.types';\n\n/**\n * Composant carte horizontale autonome\n *\n * Composant complètement indépendant pour créer une mise en page\n * horizontale avec contenu latéral.\n *\n * Ce composant est particulièrement adapté pour :\n * - Cartes produits avec image latérale\n * - Profils utilisateurs avec avatar\n * - Articles avec illustration\n *\n * Le layout bascule automatiquement en vertical sur mobile.\n *\n * @example\n * <psh-horizontal-card variant=\"elevated\" sideWidth=\"var(--size-48)\">\n * <div horizontal-side>\n * <img src=\"image.jpg\" alt=\"Product\">\n * </div>\n * <h3 horizontal-header>Titre du produit</h3>\n * <p>Description du produit</p>\n * <div horizontal-actions>\n * <psh-button>Voir</psh-button>\n * </div>\n * </psh-horizontal-card>\n */\n@Component({\n selector: 'psh-horizontal-card',\n imports: [CommonModule],\n templateUrl: './horizontal-card.component.html',\n styleUrls: ['./horizontal-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class PshHorizontalCardComponent {\n\n /** Variante de la carte de base */\n variant = input<HorizontalCardVariant>('elevated');\n\n /** Carte cliquable */\n interactive = input(false);\n\n /** Effet de survol */\n hoverable = input(false);\n\n /** État de chargement */\n loading = input(false);\n\n /** État désactivé */\n disabled = input(false);\n\n /** Classes CSS additionnelles */\n cssClass = input<string>('');\n\n /** Styles inline personnalisés */\n customStyle = input<Record<string, string>>({});\n\n /** Largeur du contenu latéral (utiliser les tokens de sizing comme var(--size-48)) */\n sideWidth = input<string>('var(--size-48)');\n\n /** Gap entre le contenu latéral et principal */\n gap = input<string>('var(--spacing-md)');\n\n /** Padding du contenu latéral */\n sidePadding = input<string>('0');\n\n /** Padding du contenu principal */\n contentPadding = input<string>('var(--spacing-md)');\n\n /** Hauteur du contenu latéral sur mobile (utiliser les tokens de sizing) */\n mobileHeight = input<string>('var(--size-48)');\n\n /** Émis lors du clic sur la carte */\n clicked = output<MouseEvent | KeyboardEvent>();\n\n /** Classes CSS calculées selon les propriétés */\n computedClasses = computed(() => {\n const classes = ['horizontal-card'];\n classes.push(`variant-${this.variant()}`);\n\n if (this.hoverable()) classes.push('hoverable');\n if (this.interactive()) classes.push('interactive');\n if (this.loading()) classes.push('loading');\n if (this.disabled()) classes.push('disabled');\n if (this.cssClass()) classes.push(this.cssClass());\n\n return classes.join(' ');\n });\n\n /** Styles calculés */\n computedStyles = computed(() => {\n return {\n '--horizontal-side-width': this.sideWidth(),\n '--horizontal-gap': this.gap(),\n '--horizontal-side-padding': this.sidePadding(),\n '--horizontal-content-padding': this.contentPadding(),\n '--horizontal-mobile-height': this.mobileHeight(),\n ...this.customStyle()\n };\n });\n\n /**\n * Gère le clic sur la carte\n */\n handleClick(event: MouseEvent): void {\n if (this.interactive() && !this.disabled() && !this.loading()) {\n this.clicked.emit(event);\n }\n }\n\n /**\n * Gère la navigation au clavier\n */\n handleKeydown(event: KeyboardEvent): void {\n if (this.interactive() && !this.disabled() && !this.loading()) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.clicked.emit(event);\n }\n }\n }\n}","<div\n [class]=\"computedClasses()\"\n [ngStyle]=\"computedStyles()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n role=\"article\"\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n>\n <!-- Contenu latéral -->\n <div class=\"horizontal-side\">\n @if (loading()) {\n <div class=\"horizontal-skeleton\"></div>\n } @else {\n <ng-content select=\"[horizontal-side]\"></ng-content>\n }\n </div>\n\n <!-- Contenu principal -->\n <div class=\"horizontal-content\">\n @if (loading()) {\n <div class=\"horizontal-loading\">\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line short\"></div>\n </div>\n } @else {\n <!-- Header optionnel -->\n <ng-content select=\"[horizontal-header]\"></ng-content>\n\n <!-- Contenu principal -->\n <ng-content></ng-content>\n\n <!-- Actions optionnelles -->\n <ng-content select=\"[horizontal-actions]\"></ng-content>\n }\n </div>\n</div>","import { Component, ChangeDetectionStrategy, computed, input, signal, PLATFORM_ID, inject, output, ViewEncapsulation, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { InfoCardData, InfoCardOptions, InfoCardVariant } from './info-card.types';\r\n\r\n/**\r\n * Info Card Component - Autonomous\r\n *\r\n * A fully independent card component that displays structured data as label/value pairs.\r\n * Provides a consistent way to present information with proper accessibility and responsive design.\r\n *\r\n * @example\r\n * ```typescript\r\n * const userData: InfoCardData[] = [\r\n * { label: 'Name', value: 'John Doe' },\r\n * { label: 'Email', value: 'john@example.com' }\r\n * ];\r\n * ```\r\n *\r\n * ```html\r\n * <psh-info-card\r\n * title=\"User Information\"\r\n * [data]=\"userData\"\r\n * icon=\"user\"\r\n * variant=\"elevated\"\r\n * ></psh-info-card>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-info-card',\r\n imports: [CommonModule],\r\n templateUrl: './info-card.component.html',\r\n styleUrl: './info-card.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n style: 'display: block; height: 100%;'\r\n }\r\n})\r\nexport class PshInfoCardComponent implements AfterContentInit, OnDestroy {\r\n\r\n hasHeaderActions = signal<boolean>(false);\r\n\r\n /** Title displayed in the card header */\r\n title = input<string>('');\r\n\r\n /** Array of label-value pairs to display */\r\n data = input<InfoCardData[]>([]);\r\n\r\n /** Display options for the card */\r\n options = input<InfoCardOptions>({\r\n showEmptyState: true,\r\n emptyStateMessage: 'Aucune information disponible',\r\n labelWidth: undefined,\r\n valueWidth: undefined\r\n });\r\n\r\n /** Base card variant style */\r\n variant = input<InfoCardVariant>('outlined');\r\n\r\n /** Icon to display in the header (Phosphor icon name without 'ph-' prefix) */\r\n icon = input<string>('circle-dashed');\r\n\r\n /** Custom ARIA label for accessibility */\r\n ariaLabel = input<string>();\r\n\r\n /** Custom CSS classes */\r\n cssClass = input<string>('');\r\n\r\n /** Custom inline styles */\r\n customStyle = input<Record<string, string>>({});\r\n\r\n /** Whether the card should be interactive/clickable */\r\n interactive = input<boolean>(false);\r\n\r\n /** Whether to show hover effects */\r\n hoverable = input<boolean>(false);\r\n\r\n /** Indicates if data is loading */\r\n loading = input<boolean>(false);\r\n\r\n /** Whether the card is disabled */\r\n disabled = input<boolean>(false);\r\n\r\n /** Emitted when card is clicked */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /** Whether to show copy buttons on rows (opt-in) */\r\n copyable = input<boolean>(false);\r\n\r\n /** Label prefix for the copy button aria-label */\r\n copyButtonLabel = input<string>('Copier');\r\n\r\n /** Text shown as feedback after successful copy */\r\n copyFeedbackText = input<string>('Copié');\r\n\r\n /** Emitted when a row value is successfully copied */\r\n copied = output<InfoCardData>();\r\n\r\n /** Emitted when a copy attempt fails */\r\n copyFailed = output<InfoCardData>();\r\n\r\n /** Tracks the row index currently showing success feedback */\r\n copiedRowIndex = signal<number | null>(null);\r\n\r\n /** Whether to auto-enable full width buttons on mobile (default: true) */\r\n autoFullWidthOnMobile = input<boolean>(true);\r\n\r\n /** Signal to track if viewport is mobile */\r\n isMobile = signal<boolean>(false);\r\n\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private resizeObserver?: ResizeObserver;\r\n private feedbackTimeout?: ReturnType<typeof setTimeout>;\r\n\r\n /** Determines if the empty state should be shown */\r\n shouldShowEmptyState = computed(() => {\r\n const opts = this.options();\r\n const dataArray = this.data();\r\n return opts.showEmptyState && (!dataArray || dataArray.length === 0);\r\n });\r\n\r\n /** Returns the empty state message to display */\r\n getEmptyStateMessage = computed(() => {\r\n return this.options().emptyStateMessage || 'Aucune information disponible';\r\n });\r\n\r\n /** Full icon class name for Phosphor icons */\r\n titleIcon = computed(() => {\r\n const iconName = this.icon();\r\n return iconName ? `ph-${iconName}` : '';\r\n });\r\n\r\n /** Computed ARIA label for the component */\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n const titleText = this.title();\r\n return customLabel || (titleText ? `Information card: ${titleText}` : 'Information card');\r\n });\r\n\r\n /** Computed CSS classes */\r\n computedClasses = computed(() => {\r\n const classes = ['info-card'];\r\n classes.push(`variant-${this.variant()}`);\r\n\r\n if (this.hoverable()) classes.push('hoverable');\r\n if (this.interactive()) classes.push('interactive');\r\n if (this.loading()) classes.push('loading');\r\n if (this.disabled()) classes.push('disabled');\r\n if (this.cssClass()) classes.push(this.cssClass());\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Computed styles */\r\n computedStyles = computed(() => {\r\n return { ...this.customStyle() };\r\n });\r\n\r\n /** Gets CSS classes for card-actions based on mobile state */\r\n getActionsClasses = computed(() => {\r\n const classes: string[] = [];\r\n if (this.autoFullWidthOnMobile() && this.isMobile()) {\r\n classes.push('mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.checkMobileViewport();\r\n\r\n if (this.document.defaultView) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.checkMobileViewport();\r\n });\r\n this.resizeObserver.observe(this.document.documentElement);\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.checkHeaderActionsContent();\r\n }\r\n\r\n private checkHeaderActionsContent(): void {\r\n if (isPlatformBrowser(this.platformId)) {\r\n const headerActionsEl = this.elementRef.nativeElement.querySelector('[card-header-actions]');\r\n this.hasHeaderActions.set(!!headerActionsEl);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n }\r\n\r\n private checkMobileViewport(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.isMobile.set(view.innerWidth <= 640);\r\n }\r\n }\r\n\r\n /**\r\n * Handles click events on the card\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Handles keyboard navigation\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n\r\n isRowCopyable(item: InfoCardData): boolean {\r\n return item.copyable ?? this.copyable();\r\n }\r\n\r\n hasNonEmptyValue(item: InfoCardData): boolean {\r\n const val = item.value;\r\n if (val == null) return false;\r\n return val.toString().trim().length > 0;\r\n }\r\n\r\n copyRowValue(item: InfoCardData, index: number): void {\r\n if (!isPlatformBrowser(this.platformId)) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const view = this.document.defaultView;\r\n if (!view?.isSecureContext || !view.navigator.clipboard) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const text = item.copyValue ?? item.value?.toString() ?? '';\r\n\r\n view.navigator.clipboard.writeText(text).then(\r\n () => {\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n this.copiedRowIndex.set(index);\r\n this.copied.emit(item);\r\n this.feedbackTimeout = setTimeout(() => {\r\n this.copiedRowIndex.set(null);\r\n }, 1800);\r\n },\r\n () => {\r\n this.copyFailed.emit(item);\r\n }\r\n );\r\n }\r\n}","<div\r\n [class]=\"computedClasses()\"\r\n [ngStyle]=\"computedStyles()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n role=\"region\"\r\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n>\r\n @if (title() || hasHeaderActions()) {\r\n <div class=\"info-card-header\">\r\n @if (title()) {\r\n <h3 class=\"info-card-title\">\r\n @if (icon()) {\r\n <i\r\n class=\"ph {{ titleIcon() }}\"\r\n aria-hidden=\"true\"\r\n [attr.data-icon]=\"icon()\"\r\n ></i>\r\n }\r\n {{ title() }}\r\n </h3>\r\n }\r\n <div class=\"info-card-header-actions\">\r\n <ng-content select=\"[card-header-actions]\"></ng-content>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"info-card-body\">\r\n @if (loading()) {\r\n <div class=\"info-card-loading\">\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line short\"></div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"info-card-content\"\r\n role=\"list\"\r\n >\r\n @if (shouldShowEmptyState()) {\r\n <div\r\n class=\"info-card-empty-state\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n [attr.data-testid]=\"'info-card-empty-state'\"\r\n >\r\n {{ getEmptyStateMessage() }}\r\n </div>\r\n } @else {\r\n @for (item of data(); track $index) {\r\n <div\r\n class=\"info-card-row\"\r\n role=\"listitem\"\r\n [attr.data-index]=\"$index\"\r\n [class]=\"item.customClass || ''\"\r\n >\r\n <div\r\n class=\"info-card-label\"\r\n [style.width]=\"item.labelWidth || options().labelWidth\"\r\n [attr.data-label]=\"item.label\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n <div\r\n class=\"info-card-value-group\"\r\n [style.width]=\"item.valueWidth || options().valueWidth\"\r\n >\r\n <span\r\n class=\"info-card-value\"\r\n [attr.data-value]=\"item.value\"\r\n [title]=\"item.value?.toString() || ''\"\r\n >{{ item.value ?? 'Non renseigné' }}</span>\r\n @if (isRowCopyable(item) && hasNonEmptyValue(item)) {\r\n <button\r\n type=\"button\"\r\n class=\"info-card-copy-btn\"\r\n [class.copied]=\"copiedRowIndex() === $index\"\r\n [attr.aria-label]=\"copyButtonLabel() + ' ' + item.label\"\r\n (click)=\"copyRowValue(item, $index); $event.stopPropagation()\"\r\n >\r\n @if (copiedRowIndex() === $index) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n <span class=\"info-card-copy-feedback\" aria-hidden=\"true\">{{ copyFeedbackText() }}</span>\r\n } @else {\r\n <i class=\"ph ph-copy\" aria-hidden=\"true\"></i>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <span\r\n class=\"info-card-sr-only\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n @if (copiedRowIndex() !== null) {\r\n {{ copyFeedbackText() }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"info-card-actions\" [class]=\"getActionsClasses()\">\r\n <ng-content select=\"[card-actions]\"></ng-content>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n InjectionToken,\r\n input,\r\n model,\r\n viewChild\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { CheckboxSize, CheckboxConfig, CheckboxLabelPosition } from './checkbox.types';\r\n\r\nexport const CHECKBOX_CONFIG = new InjectionToken<Partial<CheckboxConfig>>('CHECKBOX_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n indeterminate: false,\r\n size: 'medium',\r\n labelPosition: 'right',\r\n label: ''\r\n })\r\n});\r\n\r\nlet checkboxIdCounter = 0;\r\n\r\n@Component({\r\n selector: 'psh-checkbox',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshCheckboxComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.checkbox-disabled]': 'disabled()',\r\n '[class.checkbox-error]': '!!error()',\r\n '[class.checkbox-success]': '!!success()',\r\n '[class.checkbox-small]': 'size() === \"small\"',\r\n '[class.checkbox-large]': 'size() === \"large\"',\r\n '[class.checkbox-checked]': 'checked() && !indeterminate()',\r\n '[class.checkbox-indeterminate]': 'indeterminate()',\r\n '[attr.data-state]': 'state()',\r\n '[attr.aria-checked]': 'ariaChecked()'\r\n }\r\n})\r\nexport class PshCheckboxComponent implements ControlValueAccessor, FormCheckboxControl {\r\n private readonly config = inject(CHECKBOX_CONFIG);\r\n private readonly checkboxInput = viewChild<ElementRef<HTMLInputElement>>('checkboxInput');\r\n\r\n protected readonly uniqueId = `psh-cb-${++checkboxIdCounter}`;\r\n\r\n private onChange = (_: boolean) => {};\r\n private onTouched = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n readonly indeterminate = model(this.config.indeterminate ?? false);\r\n readonly touched = model(false);\r\n\r\n required = input(this.config.required ?? false);\r\n label = input(this.config.label ?? '');\r\n error = input<string | null | undefined>(this.config.error);\r\n success = input<string | null | undefined>(this.config.success);\r\n ariaLabel = input<string | undefined>(this.config.ariaLabel);\r\n size = input<CheckboxSize>(this.config.size ?? 'medium');\r\n labelPosition = input<CheckboxLabelPosition>(this.config.labelPosition ?? 'right');\r\n\r\n ariaChecked = computed(() => this.indeterminate() ? 'mixed' : (this.checked() ? 'true' : 'false'));\r\n computedAriaLabel = computed(() => this.ariaLabel() || undefined);\r\n\r\n // Error and success are mutually exclusive in the template (@if/@else if),\r\n // so aria-describedby references whichever message is actually rendered.\r\n ariaDescribedBy = computed(() => {\r\n if (this.error()) return `${this.uniqueId}-error`;\r\n if (this.success()) return `${this.uniqueId}-success`;\r\n return undefined;\r\n });\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.indeterminate()) return 'indeterminate';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.label() && !this.ariaLabel()) {\r\n console.warn('[psh-checkbox] Label manquant pour l\\'accessibilité.');\r\n }\r\n });\r\n }\r\n\r\n protected toggle(): void {\r\n if (!this.disabled()) {\r\n const newValue = !this.checked();\r\n this.checked.set(newValue);\r\n this.indeterminate.set(false);\r\n this.onChange(newValue);\r\n this.onTouched();\r\n this.touched.set(true);\r\n }\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n if (event.key === ' ' || event.key === 'Spacebar' || event.key === 'Enter') {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n writeValue(value: unknown): void { this.checked.set(!!value); }\r\n registerOnChange(fn: (v: boolean) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n focus(): void { this.checkboxInput()?.nativeElement.focus(); }\r\n blur(): void { this.checkboxInput()?.nativeElement.blur(); }\r\n}","<div class=\"checkbox-container\">\r\n <label class=\"checkbox-label\" [class.label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n #checkboxInput\r\n type=\"checkbox\"\r\n class=\"checkbox-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-checked]=\"ariaChecked()\"\r\n [attr.aria-required]=\"required() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n (change)=\"toggle()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n \r\n <span class=\"checkbox-control\">\r\n @if (checked() && !indeterminate()) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n }\r\n @if (indeterminate()) {\r\n <i class=\"ph ph-minus\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n\r\n <span class=\"checkbox-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"uniqueId + '-error'\" class=\"checkbox-message error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"uniqueId + '-success'\" class=\"checkbox-message success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\r\nimport { CollapseVariant, CollapseSize } from './collapse.types';\r\n\r\n@Component({\r\n selector: 'psh-collapse',\r\n templateUrl: './collapse.component.html',\r\n styleUrls: ['./collapse.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshCollapseComponent {\r\n private static idCounter = 0;\r\n\r\n expanded = model(false);\r\n\r\n disabled = input(false);\r\n variant = input('default' as CollapseVariant, {\r\n transform: (value: CollapseVariant) => {\r\n if (!['default', 'outline'].includes(value)) {\r\n console.warn(`[psh-collapse] Invalid variant \"${value}\", falling back to \"default\"`);\r\n return 'default';\r\n }\r\n return value;\r\n }\r\n });\r\n size = input('medium' as CollapseSize, {\r\n transform: (value: CollapseSize) => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n console.warn(`[psh-collapse] Invalid size \"${value}\", falling back to \"medium\"`);\r\n return 'medium';\r\n }\r\n return value;\r\n }\r\n });\r\n icon = input('caret-down');\r\n id = input<string>();\r\n maxHeight = input<string>('1000px');\r\n disableAnimation = input(false);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n toggled = output<boolean>();\r\n\r\n private readonly uniqueId = `collapse-${++PshCollapseComponent.idCounter}`;\r\n\r\n protected readonly headerId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-header` : `${this.uniqueId}-header`;\r\n });\r\n\r\n protected readonly contentId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-content` : `${this.uniqueId}-content`;\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n return this.expanded() ? 'expanded' : 'collapsed';\r\n });\r\n\r\n readonly animationClass = computed(() => {\r\n return this.disableAnimation() ? 'no-animation' : '';\r\n });\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.expanded.update(value => {\r\n const newValue = !value;\r\n this.toggled.emit(newValue);\r\n return newValue;\r\n });\r\n }\r\n }\r\n\r\n open(): void {\r\n if (!this.disabled() && !this.expanded()) {\r\n this.expanded.set(true);\r\n this.opened.emit();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.disabled() && this.expanded()) {\r\n this.expanded.set(false);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggle();\r\n break;\r\n case 'Escape':\r\n if (this.expanded()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n}","<div\r\n class=\"collapse\"\r\n [class.expanded]=\"expanded()\"\r\n [class.disabled]=\"disabled()\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.no-animation]=\"disableAnimation()\"\r\n [attr.data-state]=\"state()\"\r\n [style.--collapse-max-height]=\"maxHeight()\"\r\n>\r\n <button\r\n [id]=\"headerId()\"\r\n class=\"collapse-header\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onKeydown($event)\"\r\n [attr.aria-expanded]=\"expanded()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n [disabled]=\"disabled()\"\r\n type=\"button\"\r\n >\r\n <span class=\"header-content\">\r\n <ng-content select=\"[collapse-header]\">\r\n <span>Section pliable</span>\r\n </ng-content>\r\n </span>\r\n <i\r\n class=\"ph ph-{{ icon() }}\"\r\n [class.expanded]=\"expanded()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n\r\n <div\r\n [id]=\"contentId()\"\r\n class=\"collapse-content\"\r\n role=\"region\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [attr.aria-hidden]=\"!expanded()\"\r\n >\r\n <div class=\"content-wrapper\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import { inject, Injectable } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/** A cardinal side an overlay can be placed on, relative to its anchor. */\r\nexport type OverlaySide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\n/** Options describing the (estimated) overlay size and the gap to the anchor. */\r\nexport interface OverlayPositionOptions {\r\n /** Estimated overlay width in px (used for left/right flipping and align flipping). */\r\n overlayWidth?: number;\r\n /** Estimated overlay height in px (used for top/bottom flipping). */\r\n overlayHeight?: number;\r\n /** Minimum gap between anchor and overlay in px. */\r\n offset?: number;\r\n}\r\n\r\n/**\r\n * Shared anchored-positioning primitive with viewport collision detection.\r\n *\r\n * Computes whether an overlay (tooltip, dropdown, select panel, menu…) fits on\r\n * its preferred side of an anchor element and flips it to the opposite side\r\n * when there is not enough room and the opposite side has more. Based on\r\n * `getBoundingClientRect`, so it must be called when the anchor is laid out\r\n * (i.e. in the browser, on open / scroll / resize).\r\n *\r\n * This generalises the collision logic that previously lived only inside the\r\n * tooltip, so dropdown / select / menu popovers can stop overflowing too.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayPositionService {\r\n private readonly document = inject(DOCUMENT);\r\n\r\n /**\r\n * Resolves the best cardinal side for an overlay, flipping `preferred` to its\r\n * opposite when it would overflow the viewport and the opposite has more room.\r\n */\r\n flipSide(\r\n anchor: HTMLElement,\r\n preferred: OverlaySide,\r\n options: OverlayPositionOptions = {},\r\n ): OverlaySide {\r\n const view = this.document.defaultView;\r\n if (!view) return preferred;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n // A zero-size anchor is not laid out (or not in the browser): we cannot make\r\n // a meaningful collision decision, so keep the preferred side.\r\n if (rect.width === 0 && rect.height === 0) return preferred;\r\n\r\n const offset = options.offset ?? 8;\r\n const estH = options.overlayHeight ?? 0;\r\n const estW = options.overlayWidth ?? 0;\r\n\r\n const space = {\r\n top: rect.top,\r\n bottom: view.innerHeight - rect.bottom,\r\n left: rect.left,\r\n right: view.innerWidth - rect.right,\r\n };\r\n\r\n switch (preferred) {\r\n case 'top':\r\n return space.top < estH + offset && space.bottom > space.top ? 'bottom' : 'top';\r\n case 'bottom':\r\n return space.bottom < estH + offset && space.top > space.bottom ? 'top' : 'bottom';\r\n case 'left':\r\n return space.left < estW + offset && space.right > space.left ? 'right' : 'left';\r\n case 'right':\r\n return space.right < estW + offset && space.left > space.right ? 'left' : 'right';\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a `\"<side>\"` or `\"<side>-<align>\"` placement string (e.g. `top`,\r\n * `bottom-start`, `top-end`), flipping the side to fit the viewport while\r\n * preserving the alignment. Unknown placements are returned unchanged.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Near the bottom of the viewport with no room below:\r\n * positions.flipPlacement(trigger, 'bottom-start', { overlayHeight: 240 });\r\n * // => 'top-start'\r\n * ```\r\n */\r\n flipPlacement(\r\n anchor: HTMLElement,\r\n preferred: string,\r\n options: OverlayPositionOptions = {},\r\n ): string {\r\n const [sideStr, align] = preferred.split('-');\r\n if (!this.isSide(sideStr)) return preferred;\r\n\r\n const resolvedSide = this.flipSide(anchor, sideStr, options);\r\n return align ? `${resolvedSide}-${align}` : resolvedSide;\r\n }\r\n\r\n private isSide(value: string | undefined): value is OverlaySide {\r\n return value === 'top' || value === 'bottom' || value === 'left' || value === 'right';\r\n }\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n output,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Emits when a click occurs outside the host element.\r\n *\r\n * Shared primitive replacing the per-component document click listeners used by\r\n * select / dropdown to close on outside click. Typically consumed as a host\r\n * directive:\r\n *\r\n * @example\r\n * ```typescript\r\n * @Component({ hostDirectives: [PshClickOutsideDirective] })\r\n * export class MyPopover {\r\n * constructor() {\r\n * inject(PshClickOutsideDirective).pshClickOutside.subscribe(() => this.close());\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshClickOutside]',\r\n})\r\nexport class PshClickOutsideDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Emitted when a click lands outside the host element. */\r\n readonly pshClickOutside = output<MouseEvent>();\r\n\r\n constructor() {\r\n if (!this.isBrowser) return;\r\n this.document.addEventListener('click', this.onDocumentClick);\r\n inject(DestroyRef).onDestroy(() =>\r\n this.document.removeEventListener('click', this.onDocumentClick),\r\n );\r\n }\r\n\r\n private readonly onDocumentClick = (event: MouseEvent): void => {\r\n const target = event.target as Node | null;\r\n if (target && !this.host.nativeElement.contains(target)) {\r\n this.pshClickOutside.emit(event);\r\n }\r\n };\r\n}\r\n","import {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n PLATFORM_ID\r\n} from '@angular/core';\r\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { DropdownAppearance, DropdownItem, DropdownPlacement, DropdownSize, DropdownVariant } from './dropdown.types';\r\n\r\n@Component({\r\n selector: 'psh-dropdown',\r\n imports: [CommonModule],\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective]\r\n})\r\nexport class PshDropdownComponent<T = string> {\r\n private elementRef = inject(ElementRef);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly injector = inject(Injector);\r\n\r\n // Regular inputs\r\n appearance = input<DropdownAppearance>('filled');\r\n variant = input<DropdownVariant>('primary');\r\n size = input<DropdownSize>('medium');\r\n placement = input<DropdownPlacement>('bottom-start');\r\n items = input<DropdownItem<T>[]>([]);\r\n label = input('Dropdown Menu');\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n iconOnly = input<boolean>(false);\r\n iconOnlyText = input<string>();\r\n\r\n // Model inputs\r\n disabled = model(false);\r\n\r\n // State\r\n private isOpenSignal = signal(false);\r\n private selectedItemSignal = signal<DropdownItem<T> | null>(null);\r\n private focusedItemIndex = signal(-1);\r\n\r\n // Placement actually rendered, after viewport collision/flip. Mirrors the\r\n // `placement` input while closed; recomputed against the viewport on open.\r\n protected readonly resolvedPlacement = signal<DropdownPlacement>('bottom-start');\r\n\r\n // Outputs\r\n selected = output<DropdownItem<T>>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n\r\n // Computed values\r\n isOpen = computed(() => this.isOpenSignal());\r\n selectedItem = computed(() => this.selectedItemSignal());\r\n\r\n isIconOnly = computed(() => this.iconOnly() && !!this.icon());\r\n\r\n computedAriaLabel = computed(() => {\r\n if (this.isIconOnly()) {\r\n return this.iconOnlyText() || this.ariaLabel() || 'Toggle dropdown menu';\r\n }\r\n return this.ariaLabel() || 'Toggle dropdown menu';\r\n });\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.isOpen()) return 'open';\r\n return 'closed';\r\n }\r\n\r\n constructor() {\r\n // Close on outside click via the shared click-outside primitive.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(() => this.close());\r\n inject(DestroyRef).onDestroy(() => sub.unsubscribe());\r\n\r\n // Keep resolvedPlacement mirroring the input while closed; flip against the\r\n // viewport (after the menu has rendered) when opened.\r\n effect(() => {\r\n if (this.isOpen()) {\r\n afterNextRender(() => this.reposition(), { injector: this.injector });\r\n } else {\r\n this.resolvedPlacement.set(this.placement());\r\n }\r\n });\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.isBrowser || !this.isOpen()) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.dropdown-trigger') as HTMLElement | null;\r\n const menu = host.querySelector('.dropdown-menu') as HTMLElement | null;\r\n if (!trigger) return;\r\n\r\n this.resolvedPlacement.set(\r\n this.overlayPosition.flipPlacement(trigger, this.placement(), {\r\n overlayHeight: menu?.offsetHeight ?? 0,\r\n overlayWidth: menu?.offsetWidth ?? 0,\r\n }) as DropdownPlacement,\r\n );\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled()) {\r\n event?.stopPropagation();\r\n this.isOpenSignal.update(v => !v);\r\n if (this.isOpen()) {\r\n this.focusedItemIndex.set(0);\r\n this.opened.emit();\r\n } else {\r\n this.focusedItemIndex.set(-1);\r\n this.closed.emit();\r\n }\r\n }\r\n }\r\n\r\n selectItem(item: DropdownItem<T>): void {\r\n if (!item.disabled) {\r\n this.selectedItemSignal.set(item);\r\n this.selected.emit(item);\r\n this.close();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.isOpen()) {\r\n this.isOpenSignal.set(false);\r\n this.focusedItemIndex.set(-1);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n handleTriggerKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleDropdown();\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggleDropdown();\r\n } else {\r\n this.focusNextItem();\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggleDropdown();\r\n } else {\r\n this.focusPreviousItem();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this.isOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handleItemKeyDown(event: KeyboardEvent, item: DropdownItem<T>, _index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.selectItem(item);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem();\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem();\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n event.preventDefault();\r\n this.close();\r\n break;\r\n\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let nextIndex = currentIndex + 1;\r\n\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n\r\n if (nextIndex >= items.length) {\r\n nextIndex = 0;\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n this.focusedItemIndex.set(nextIndex);\r\n this.focusItemAtIndex(nextIndex);\r\n }\r\n }\r\n\r\n private focusPreviousItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let previousIndex = currentIndex - 1;\r\n\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n\r\n if (previousIndex < 0) {\r\n previousIndex = items.length - 1;\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n }\r\n\r\n if (previousIndex >= 0) {\r\n this.focusedItemIndex.set(previousIndex);\r\n this.focusItemAtIndex(previousIndex);\r\n }\r\n }\r\n\r\n private focusFirstItem(): void {\r\n const items = this.items();\r\n let index = 0;\r\n while (index < items.length && items[index]?.disabled) {\r\n index++;\r\n }\r\n if (index < items.length) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusLastItem(): void {\r\n const items = this.items();\r\n let index = items.length - 1;\r\n while (index >= 0 && items[index]?.disabled) {\r\n index--;\r\n }\r\n if (index >= 0) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusItemAtIndex(index: number): void {\r\n setTimeout(() => {\r\n const item = this.elementRef.nativeElement.querySelector(\r\n `[data-dropdown-item-index=\"${index}\"]`\r\n ) as HTMLElement;\r\n item?.focus();\r\n });\r\n }\r\n\r\n}","<div\r\n class=\"dropdown-container\"\r\n [class]=\"size()\"\r\n [class.open]=\"isOpen()\"\r\n [class.disabled]=\"disabled()\"\r\n [class.icon-only]=\"isIconOnly()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <button\r\n class=\"dropdown-trigger\"\r\n [class]=\"appearance()\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n (click)=\"toggleDropdown()\"\r\n (keydown)=\"handleTriggerKeyDown($event)\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-haspopup]=\"'menu'\"\r\n type=\"button\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <span class=\"trigger-content\">\r\n @if (isIconOnly()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <ng-content select=\"[dropdown-trigger]\">\r\n @if (label()) {\r\n {{ label() }}\r\n }\r\n </ng-content>\r\n <i\r\n class=\"ph ph-caret-down trigger-arrow\"\r\n [class.open]=\"isOpen()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </span>\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <!-- stopPropagation only (keeps clicks inside the menu from closing it); not a user interaction. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"dropdown-menu\"\r\n [class]=\"resolvedPlacement()\"\r\n role=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ng-content select=\"[dropdown-menu]\">\r\n @for (item of items(); track item.value; let i = $index) {\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.active]=\"selectedItem() === item\"\r\n [attr.data-dropdown-item-index]=\"i\"\r\n (click)=\"selectItem(item)\"\r\n (keydown)=\"handleItemKeyDown($event, item, i)\"\r\n role=\"menuitem\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"item-label\">{{ item.content }}</span>\r\n </button>\r\n }\r\n </ng-content>\r\n </div>\r\n }\r\n</div>","export type InputType = 'text' | 'password' | 'email' | 'tel' | 'url' | 'search' | 'date' | 'number';\r\nexport type InputVariant = 'outlined' | 'filled';\r\nexport type InputSize = 'small' | 'medium' | 'large';\r\n\r\nexport interface AutocompleteConfig {\r\n minLength: number;\r\n debounceTime: number;\r\n}\r\n\r\nexport interface InputConfig {\r\n type: InputType;\r\n variant: InputVariant;\r\n size: InputSize;\r\n disabled: boolean;\r\n required: boolean;\r\n readonly: boolean;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n label: string;\r\n placeholder: string;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n hint: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport interface SuggestionResult {\r\n suggestions: string[];\r\n error?: string;\r\n}\r\n\r\nexport const INPUT_LABELS = {\r\n showPassword: 'Afficher le mot de passe',\r\n hidePassword: 'Masquer le mot de passe'\r\n} as const;","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { InputType, InputVariant, InputSize, AutocompleteConfig, INPUT_LABELS } from './input.types';\r\n\r\n@Component({\r\n selector: 'psh-input',\r\n imports: [CommonModule],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshInputComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.error]': '!!error()',\r\n '[class.success]': '!!success()',\r\n '[class.disabled]': 'disabled()',\r\n '[class.readonly]': 'readonly()',\r\n '[class.loading]': 'loading()',\r\n '[class.focused]': 'focused()',\r\n '[class.has-start-icon]': '!!iconStart()',\r\n '[class.has-end-icon]': '!!iconEnd() || type() === \"password\"',\r\n '[class.outlined]': 'variant() === \"outlined\"',\r\n '[class.filled]': 'variant() === \"filled\"',\r\n }\r\n})\r\nexport class PshInputComponent implements ControlValueAccessor, FormValueControl<string> {\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private static nextId = 0;\r\n readonly inputId = `psh-input-${PshInputComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = model(false);\r\n readonly loading = model(false);\r\n readonly touched = model(false);\r\n\r\n variant = input<InputVariant>('outlined');\r\n size = input<InputSize>('medium');\r\n fullWidth = input(false);\r\n required = input(false);\r\n showLabel = input(true);\r\n type = input<InputType>('text');\r\n placeholder = input('');\r\n label = input('');\r\n ariaLabel = input<string | null>(null);\r\n iconStart = input<string>();\r\n iconEnd = input<string>();\r\n error = input<string | null | undefined>(null);\r\n success = input<string | null | undefined>(null);\r\n hint = input<string | null | undefined>(null);\r\n \r\n suggestions = input<string[] | ((query: string) => Promise<string[]>)>([]);\r\n autocompleteConfig = input<AutocompleteConfig>({\r\n minLength: 1,\r\n debounceTime: 300\r\n });\r\n\r\n private readonly suggestionsVisible = signal(false);\r\n private readonly focusedSignal = signal(false);\r\n private readonly filteredSuggestionsSignal = signal<string[]>([]);\r\n readonly focusedSuggestionIndex = signal(-1);\r\n private readonly passwordVisibleSignal = signal(false);\r\n \r\n private blurTimeoutId: number | null = null;\r\n private debounceTimeoutId: number | null = null;\r\n\r\n inputFocus = output<void>();\r\n inputBlur = output<void>();\r\n suggestionSelect = output<string>();\r\n\r\n showSuggestions = computed(() => this.suggestionsVisible() && this.filteredSuggestions().length > 0);\r\n filteredSuggestions = computed(() => this.filteredSuggestionsSignal());\r\n focused = computed(() => this.focusedSignal());\r\n passwordVisible = computed(() => this.passwordVisibleSignal());\r\n \r\n effectiveType = computed(() => {\r\n if (this.type() === 'password') {\r\n return this.passwordVisible() ? 'text' : 'password';\r\n }\r\n return this.type();\r\n });\r\n\r\n computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n passwordToggleLabel = computed(() => this.passwordVisible() ? INPUT_LABELS.hidePassword : INPUT_LABELS.showPassword);\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.loading()) return 'loading';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.focused()) return 'focused';\r\n return 'default';\r\n }\r\n\r\n constructor() {\r\n this.destroyRef.onDestroy(() => {\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n });\r\n }\r\n\r\n private onChange = (_: string) => {};\r\n private onTouched = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: string) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.value.set(val);\r\n this.onChange(val);\r\n\r\n if (this.suggestions()) {\r\n this.debouncedUpdateSuggestions(val);\r\n }\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.inputFocus.emit();\r\n\r\n const val = this.value();\r\n if (this.suggestions() && val.length >= this.autocompleteConfig().minLength) {\r\n this.updateSuggestions(val);\r\n }\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.inputBlur.emit();\r\n this.onTouched();\r\n this.touched.set(true);\r\n\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n this.blurTimeoutId = setTimeout(() => {\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.blurTimeoutId = null;\r\n }, 200);\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (!this.showSuggestions()) return;\r\n\r\n const suggestions = this.filteredSuggestions();\r\n const currentIndex = this.focusedSuggestionIndex();\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i < suggestions.length - 1 ? i + 1 : 0));\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i > 0 ? i - 1 : suggestions.length - 1));\r\n break;\r\n case 'Enter':\r\n if (currentIndex >= 0 && currentIndex < suggestions.length) {\r\n event.preventDefault();\r\n const selected = suggestions[currentIndex];\r\n if (selected !== undefined) {\r\n this.handleSuggestionClick(selected);\r\n }\r\n }\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n break;\r\n }\r\n }\r\n\r\n handleSuggestionClick(suggestion: string): void {\r\n this.value.set(suggestion);\r\n this.onChange(suggestion);\r\n this.suggestionSelect.emit(suggestion);\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n }\r\n\r\n togglePasswordVisibility(): void {\r\n this.passwordVisibleSignal.update(v => !v);\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[input-label]');\r\n }\r\n\r\n focus(): void {\r\n const inputEl = this.elementRef.nativeElement.querySelector('input');\r\n inputEl?.focus();\r\n }\r\n\r\n focusSelect(): void {\r\n this.focus();\r\n }\r\n\r\n private debouncedUpdateSuggestions(value: string): void {\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n this.debounceTimeoutId = setTimeout(() => {\r\n this.updateSuggestions(value);\r\n this.debounceTimeoutId = null;\r\n }, this.autocompleteConfig().debounceTime);\r\n }\r\n\r\n private async updateSuggestions(value: string): Promise<void> {\r\n const provider = this.suggestions();\r\n\r\n try {\r\n let results: string[] = [];\r\n if (typeof provider === 'function') {\r\n results = await provider(value);\r\n } else if (Array.isArray(provider)) {\r\n results = provider.filter(s => s.toLowerCase().includes(value.toLowerCase()));\r\n }\r\n \r\n this.filteredSuggestionsSignal.set(results);\r\n this.suggestionsVisible.set(results.length > 0);\r\n } catch (error) {\r\n // Fail gracefully (hide stale suggestions) but surface the error so a\r\n // failing provider is not silently swallowed during development.\r\n this.filteredSuggestionsSignal.set([]);\r\n this.suggestionsVisible.set(false);\r\n console.error('[psh-input] Suggestion provider failed:', error);\r\n }\r\n }\r\n}","<div class=\"input-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"input-label\"\r\n [for]=\"inputId\"\r\n (click)=\"focusSelect()\"\r\n [class.required]=\"required()\"\r\n >\r\n <ng-content select=\"[input-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"input-wrapper\">\r\n @if (iconStart()) {\r\n <i class=\"ph ph-{{ iconStart() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n <input\r\n [id]=\"inputId\"\r\n [type]=\"effectiveType()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"error() ? 'error-message' : success() ? 'success-message' : hint() ? 'hint-message' : null\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n (input)=\"handleInput($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n [attr.data-state]=\"state()\"\r\n />\r\n\r\n @if (iconEnd()) {\r\n <i class=\"ph ph-{{ iconEnd() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (type() === 'password') {\r\n <button\r\n type=\"button\"\r\n class=\"password-toggle\"\r\n (click)=\"togglePasswordVisibility()\"\r\n [attr.aria-label]=\"passwordToggleLabel()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n >\r\n <i \r\n [class]=\"'ph ph-' + (passwordVisible() ? 'eye-slash' : 'eye')\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n }\r\n\r\n @if (loading()) {\r\n <div class=\"input-loader\" aria-hidden=\"true\">\r\n <div class=\"loader\"></div>\r\n </div>\r\n }\r\n\r\n @if (showSuggestions()) {\r\n <div class=\"suggestions-list\" role=\"listbox\">\r\n @for (suggestion of filteredSuggestions(); track suggestion; let i = $index) {\r\n <!-- option in a listbox: keyboard is handled by the input (arrow keys + focusedSuggestionIndex). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"suggestion-item\"\r\n [class.focused]=\"i === focusedSuggestionIndex()\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"i === focusedSuggestionIndex()\"\r\n (click)=\"handleSuggestionClick(suggestion)\"\r\n (mouseenter)=\"focusedSuggestionIndex.set(i)\"\r\n >\r\n {{ suggestion }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"input-error\" role=\"alert\">\r\n <ng-content select=\"[input-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div id=\"success-message\" class=\"input-success\" role=\"status\">\r\n <ng-content select=\"[input-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div id=\"hint-message\" class=\"input-hint\">\r\n <ng-content select=\"[input-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n</div>","export type TextareaVariant = 'outlined' | 'filled';\r\nexport type TextareaSize = 'small' | 'medium' | 'large';\r\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\r\n\r\nexport interface TextareaConfig {\r\n variant: TextareaVariant;\r\n size: TextareaSize;\r\n resize: TextareaResize;\r\n disabled: boolean;\r\n required: boolean;\r\n readonly: boolean;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n showCharacterCount: boolean;\r\n autoSize: boolean;\r\n rows: number;\r\n maxLength?: number;\r\n label: string;\r\n placeholder: string;\r\n hint: string | null | undefined;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport const TEXTAREA_LABELS = {\r\n characterCountSuffix: 'caractères',\r\n characterCountSeparator: '/',\r\n} as const;\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport {\r\n TEXTAREA_LABELS,\r\n TextareaResize,\r\n TextareaSize,\r\n TextareaVariant,\r\n} from './textarea.types';\r\n\r\n@Component({\r\n selector: 'psh-textarea',\r\n imports: [CommonModule],\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshTextareaComponent,\r\n multi: true,\r\n },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.outlined]': 'variant() === \"outlined\"',\r\n '[class.filled]': 'variant() === \"filled\"',\r\n '[class.error]': 'hasError()',\r\n '[class.success]': '!!success() && !hasError()',\r\n '[class.disabled]': 'disabled()',\r\n '[class.readonly]': 'readonly()',\r\n '[class.focused]': 'focused()',\r\n '[class.auto-size]': 'autoSize()',\r\n '[class.over-limit]': 'isOverLimit()',\r\n },\r\n})\r\nexport class PshTextareaComponent\r\n implements ControlValueAccessor, FormValueControl<string>\r\n{\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n private static nextId = 0;\r\n readonly textareaId = `psh-textarea-${PshTextareaComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = model<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n\r\n variant = input<TextareaVariant>('outlined');\r\n size = input<TextareaSize>('medium');\r\n resize = input<TextareaResize>('vertical');\r\n rows = input<number>(4);\r\n maxLength = input<number | undefined>(undefined);\r\n autoSize = input<boolean>(false);\r\n showCharacterCount = input<boolean>(false);\r\n fullWidth = input<boolean>(false);\r\n required = input<boolean>(false);\r\n showLabel = input<boolean>(true);\r\n label = input<string>('');\r\n placeholder = input<string>('');\r\n hint = input<string | null | undefined>(null);\r\n error = input<string | null | undefined>(null);\r\n success = input<string | null | undefined>(null);\r\n ariaLabel = input<string | null>(null);\r\n\r\n private readonly focusedSignal = signal<boolean>(false);\r\n\r\n inputFocus = output<void>();\r\n inputBlur = output<void>();\r\n\r\n @ViewChild('textareaRef')\r\n private textareaRef?: ElementRef<HTMLTextAreaElement>;\r\n\r\n focused = computed(() => this.focusedSignal());\r\n\r\n effectiveResize = computed<TextareaResize>(() =>\r\n this.autoSize() ? 'none' : this.resize(),\r\n );\r\n\r\n characterCount = computed(() => ({\r\n current: (this.value() ?? '').length,\r\n max: this.maxLength(),\r\n }));\r\n\r\n isOverLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current > max;\r\n });\r\n\r\n isAtLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current >= max;\r\n });\r\n\r\n shouldShowCount = computed(\r\n () => this.showCharacterCount() || this.maxLength() !== undefined,\r\n );\r\n\r\n hasError = computed(\r\n () => !!this.error() || this.isOverLimit(),\r\n );\r\n\r\n computedAriaLabel = computed(\r\n () => this.ariaLabel() || this.label() || this.placeholder() || null,\r\n );\r\n\r\n describedBy = computed(() => {\r\n if (this.error()) return `${this.textareaId}-error`;\r\n if (this.success()) return `${this.textareaId}-success`;\r\n if (this.hint()) return `${this.textareaId}-hint`;\r\n return null;\r\n });\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.hasError()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.focused()) return 'focused';\r\n return 'default';\r\n });\r\n\r\n characterCountLabel = TEXTAREA_LABELS.characterCountSuffix;\r\n\r\n constructor() {\r\n effect(() => {\r\n this.value();\r\n this.autoSize();\r\n this.rows();\r\n if (this.autoSize()) {\r\n queueMicrotask(() => this.applyAutoSize());\r\n }\r\n });\r\n }\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n if (this.autoSize()) {\r\n queueMicrotask(() => this.applyAutoSize());\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement;\r\n const newValue = target.value;\r\n this.value.set(newValue);\r\n this.onChange(newValue);\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.inputFocus.emit();\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.touched.set(true);\r\n this.onTouched();\r\n this.inputBlur.emit();\r\n }\r\n\r\n focus(): void {\r\n this.textareaRef?.nativeElement.focus();\r\n }\r\n\r\n private applyAutoSize(): void {\r\n const el = this.textareaRef?.nativeElement;\r\n if (!el) return;\r\n el.style.height = 'auto';\r\n el.style.height = `${el.scrollHeight}px`;\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[textarea-label]');\r\n }\r\n}\r\n","<div class=\"textarea-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"textarea-label\"\r\n [for]=\"textareaId\"\r\n (click)=\"focus()\"\r\n [class.required]=\"required()\"\r\n >\r\n <ng-content select=\"[textarea-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"textarea-wrapper\">\r\n <textarea\r\n #textareaRef\r\n [id]=\"textareaId\"\r\n [rows]=\"rows()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.maxlength]=\"maxLength() ?? null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.data-state]=\"state()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n [style.resize]=\"effectiveResize()\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n ></textarea>\r\n </div>\r\n\r\n @if (error() || success() || hint() || shouldShowCount()) {\r\n <div class=\"textarea-footer\">\r\n <div class=\"textarea-messages\">\r\n @if (error()) {\r\n <div [id]=\"textareaId + '-error'\" class=\"textarea-error\" role=\"alert\">\r\n <ng-content select=\"[textarea-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"textareaId + '-success'\" class=\"textarea-success\" role=\"status\">\r\n <ng-content select=\"[textarea-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"textareaId + '-hint'\" class=\"textarea-hint\">\r\n <ng-content select=\"[textarea-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (shouldShowCount()) {\r\n <div\r\n class=\"textarea-count\"\r\n [class.at-limit]=\"isAtLimit() && !isOverLimit()\"\r\n [class.over-limit]=\"isOverLimit()\"\r\n aria-live=\"polite\"\r\n >\r\n {{ characterCount().current }}@if (maxLength() !== undefined) {\r\n <span>/{{ maxLength() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n output,\r\n effect,\r\n InjectionToken,\r\n ElementRef,\r\n AfterViewInit,\r\n OnDestroy\r\n} from '@angular/core';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { TooltipPosition, TooltipConfig, TooltipVariant } from './tooltip.types';\r\n\r\nexport const TOOLTIP_CONFIG = new InjectionToken<Partial<TooltipConfig>>('TOOLTIP_CONFIG', {\r\n factory: () => ({\r\n variant: 'dark',\r\n position: 'top',\r\n showDelay: 200,\r\n hideDelay: 100,\r\n maxWidth: 200,\r\n autoFlip: true,\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tooltip',\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(mouseenter)': 'show()',\r\n '(mouseleave)': 'hide()',\r\n '(focusin)': 'show()',\r\n '(focusout)': 'hide()',\r\n '(keydown.escape)': 'hideImmediate()',\r\n '[style.display]': '\"inline-block\"',\r\n '[style.position]': '\"relative\"',\r\n }\r\n})\r\nexport class PshTooltipComponent implements AfterViewInit, OnDestroy {\r\n private config = inject(TOOLTIP_CONFIG) as Required<TooltipConfig>;\r\n private elementRef = inject(ElementRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n\r\n variant = input<TooltipVariant>(this.config.variant ?? 'dark');\r\n position = input<TooltipPosition>(this.config.position ?? 'top');\r\n showDelay = input<number>(this.config.showDelay ?? 200);\r\n hideDelay = input<number>(this.config.hideDelay ?? 100);\r\n maxWidth = input<number>(this.config.maxWidth ?? 200);\r\n autoFlip = input<boolean>(this.config.autoFlip ?? true);\r\n\r\n content = input.required<string>();\r\n disabled = input<boolean>(false);\r\n id = input<string>(this.generateUniqueId());\r\n\r\n shown = output<void>();\r\n hidden = output<void>();\r\n\r\n isVisible = signal(false);\r\n computedPosition = signal<TooltipPosition>('top');\r\n\r\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private resizeObserver: ResizeObserver | null = null;\r\n\r\n tooltipId = computed(() => `${this.id()}-tooltip`);\r\n triggerId = computed(() => `${this.id()}-trigger`);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.isVisible()) {\r\n this.shown.emit();\r\n } else {\r\n this.hidden.emit();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const pos = this.position();\r\n if (!this.autoFlip()) {\r\n this.computedPosition.set(pos);\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.autoFlip()) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n if (this.isVisible()) {\r\n this.updatePosition();\r\n }\r\n });\r\n this.resizeObserver.observe(this.elementRef.nativeElement);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.showTimeout) clearTimeout(this.showTimeout);\r\n if (this.hideTimeout) clearTimeout(this.hideTimeout);\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = null;\r\n }\r\n }\r\n\r\n show(): void {\r\n if (this.disabled()) return;\r\n\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n\r\n if (!this.isVisible() && !this.showTimeout) {\r\n this.showTimeout = setTimeout(() => {\r\n if (this.autoFlip()) {\r\n this.updatePosition();\r\n } else {\r\n this.computedPosition.set(this.position());\r\n }\r\n this.isVisible.set(true);\r\n this.showTimeout = null;\r\n }, this.showDelay());\r\n }\r\n }\r\n\r\n hide(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n\r\n if (this.isVisible() && !this.hideTimeout) {\r\n this.hideTimeout = setTimeout(() => {\r\n this.isVisible.set(false);\r\n this.hideTimeout = null;\r\n }, this.hideDelay());\r\n }\r\n }\r\n\r\n hideImmediate(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n this.isVisible.set(false);\r\n }\r\n\r\n private updatePosition(): void {\r\n // Collision detection / flip is delegated to the shared overlay-position\r\n // primitive (same logic, now reused by other popovers).\r\n this.computedPosition.set(\r\n this.overlayPosition.flipSide(this.elementRef.nativeElement, this.position(), {\r\n overlayHeight: 40,\r\n overlayWidth: Math.min(this.maxWidth(), 200),\r\n offset: 12,\r\n }),\r\n );\r\n }\r\n\r\n private generateUniqueId(): string {\r\n return `psh-tooltip-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n}\r\n","<div\r\n class=\"tooltip-wrapper\"\r\n [attr.id]=\"triggerId()\"\r\n [attr.aria-describedby]=\"isVisible() ? tooltipId() : null\"\r\n>\r\n <ng-content></ng-content>\r\n\r\n @if (isVisible()) {\r\n <div\r\n [attr.id]=\"tooltipId()\"\r\n class=\"tooltip\"\r\n [class.top]=\"computedPosition() === 'top'\"\r\n [class.bottom]=\"computedPosition() === 'bottom'\"\r\n [class.left]=\"computedPosition() === 'left'\"\r\n [class.right]=\"computedPosition() === 'right'\"\r\n [class.light]=\"variant() === 'light'\"\r\n [class.dark]=\"variant() === 'dark'\"\r\n [style.max-width.px]=\"maxWidth()\"\r\n role=\"tooltip\"\r\n >\r\n {{ content() }}\r\n <div class=\"tooltip-arrow\"></div>\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input, model, output } from '@angular/core';\r\nimport { CommonModule, DOCUMENT } from '@angular/common';\r\nimport { MenuItem, MenuMode, MenuVariant } from './menu.types';\r\nimport { PshTooltipComponent } from '../tooltip/tooltip.component';\r\n\r\n@Component({\r\n selector: 'psh-menu',\r\n imports: [CommonModule, PshTooltipComponent],\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshMenuComponent<T = string> {\r\n private readonly document = inject(DOCUMENT);\r\n\r\n mode = input<MenuMode>('vertical');\r\n variant = input<MenuVariant>('default');\r\n collapsible = input(false);\r\n ariaLabels = input<Record<string, string>>({\r\n disabled: 'Disabled',\r\n submenu: 'Submenu',\r\n expand: 'Expand menu',\r\n collapse: 'Collapse menu'\r\n });\r\n\r\n items = input<MenuItem<T>[]>([]);\r\n\r\n collapsed = model(false);\r\n expandedItemIds = model<string[]>([]);\r\n\r\n itemClick = output<MenuItem<T>>();\r\n submenuToggle = output<{ item: MenuItem<T>; expanded: boolean }>();\r\n\r\n protected expandedItemsSet = computed(() => new Set(this.expandedItemIds()));\r\n\r\n state = computed(() => this.getState());\r\n\r\n showTooltip = computed(() => this.collapsed() && this.mode() === 'vertical');\r\n\r\n constructor() {}\r\n\r\n private getState(): string {\r\n if (this.collapsed()) return 'collapsed';\r\n if (this.collapsible()) return 'collapsible';\r\n return this.mode();\r\n }\r\n\r\n handleItemClick(item: MenuItem<T>, event: Event, isChild: boolean): void {\r\n if (isChild) {\r\n event.stopPropagation();\r\n }\r\n this.toggleItem(item, event);\r\n }\r\n\r\n toggleItem(item: MenuItem<T>, event?: Event): void {\r\n if (item.disabled) return;\r\n\r\n if (item.children?.length) {\r\n event?.preventDefault();\r\n this.toggleItemExpansion(item.id);\r\n const expanded = this.expandedItemsSet().has(item.id);\r\n this.submenuToggle.emit({ item, expanded });\r\n } else {\r\n this.itemClick.emit(item);\r\n }\r\n }\r\n\r\n toggleCollapse(): void {\r\n if (this.collapsible()) {\r\n this.collapsed.update((v) => !v);\r\n }\r\n }\r\n\r\n isExpanded(item: MenuItem<T>): boolean {\r\n return this.expandedItemsSet().has(item.id);\r\n }\r\n\r\n expandItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (!current.includes(itemId)) {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n collapseItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n }\r\n }\r\n\r\n toggleItemExpansion(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n } else {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const allIds = this.collectItemIdsWithChildren(this.items());\r\n this.expandedItemIds.set(allIds);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedItemIds.set([]);\r\n }\r\n\r\n private collectItemIdsWithChildren(items: MenuItem<T>[]): string[] {\r\n const ids: string[] = [];\r\n for (const item of items) {\r\n if (item.children?.length) {\r\n ids.push(item.id);\r\n ids.push(...this.collectItemIdsWithChildren(item.children));\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n getAriaLabel(item: MenuItem<T>): string {\r\n const base = item.content;\r\n if (item.disabled) {\r\n return `${base} (${this.ariaLabels()['disabled']})`;\r\n }\r\n if (item.children?.length) {\r\n return `${base} (${this.ariaLabels()['submenu']})`;\r\n }\r\n return base;\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, item: MenuItem<T>, index: number): void {\r\n if (item.disabled) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem(index);\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem(index);\r\n break;\r\n\r\n case 'ArrowRight':\r\n if (item.children?.length && !this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'ArrowLeft':\r\n if (item.children?.length && this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n if (this.collapsible() && !this.collapsed()) {\r\n event.preventDefault();\r\n this.toggleCollapse();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(currentIndex: number): void {\r\n const items = this.items();\r\n const nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\r\n this.focusItemAtIndex(nextIndex, 1);\r\n }\r\n\r\n private focusPreviousItem(currentIndex: number): void {\r\n const items = this.items();\r\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\r\n this.focusItemAtIndex(previousIndex, -1);\r\n }\r\n\r\n private focusFirstItem(): void {\r\n this.focusItemAtIndex(0, 1);\r\n }\r\n\r\n private focusLastItem(): void {\r\n this.focusItemAtIndex(this.items().length - 1, -1);\r\n }\r\n\r\n private focusItemAtIndex(index: number, direction: 1 | -1): void {\r\n const items = this.items();\r\n if (index < 0) {\r\n index = items.length - 1;\r\n } else if (index >= items.length) {\r\n index = 0;\r\n }\r\n\r\n const item = items[index];\r\n if (item && !item.divider && !item.disabled) {\r\n setTimeout(() => {\r\n const link = this.document.querySelector(`[data-menu-item-id=\"${item.id}\"]`) as HTMLElement;\r\n link?.focus();\r\n });\r\n } else {\r\n const nextIndex = index + direction;\r\n if (nextIndex !== index) {\r\n this.focusItemAtIndex(nextIndex, direction);\r\n }\r\n }\r\n }\r\n}","<nav\r\n class=\"menu\"\r\n [class.vertical]=\"mode() === 'vertical'\"\r\n [class.horizontal]=\"mode() === 'horizontal'\"\r\n [class.compact]=\"variant() === 'compact'\"\r\n [class.expanded]=\"variant() === 'expanded'\"\r\n [class.collapsed]=\"collapsed()\"\r\n role=\"navigation\"\r\n [attr.aria-label]=\"'Navigation menu'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (collapsible()) {\r\n <button\r\n class=\"menu-collapse-button\"\r\n (click)=\"toggleCollapse()\"\r\n [attr.aria-expanded]=\"!collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? ariaLabels()['expand'] : ariaLabels()['collapse']\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <ul class=\"menu-list\" role=\"menubar\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n @if (item.divider) {\r\n <li class=\"menu-divider\" role=\"separator\"></li>\r\n } @else {\r\n <li\r\n class=\"menu-item\"\r\n [class.has-children]=\"item.children?.length\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n [class.disabled]=\"item.disabled\"\r\n role=\"none\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemTpl; context: { $implicit: item, index: i, isChild: false }\"\r\n ></ng-container>\r\n\r\n @if (item.children?.length) {\r\n <ul\r\n class=\"submenu\"\r\n role=\"menu\"\r\n [attr.aria-label]=\"item.content + ' submenu'\"\r\n >\r\n @for (child of item.children; track child.id) {\r\n <li class=\"menu-item\" role=\"none\">\r\n @if (child.path) {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n </psh-tooltip>\r\n } @else {\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n }\r\n } @else {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <button\r\n type=\"button\"\r\n class=\"menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n </psh-tooltip>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n\r\n<ng-template #itemTpl let-item let-index=\"index\" let-isChild=\"isChild\">\r\n @if (showTooltip()) {\r\n <psh-tooltip\r\n class=\"menu-tooltip-wrapper\"\r\n [content]=\"item.content\"\r\n position=\"right\"\r\n [showDelay]=\"300\"\r\n [hideDelay]=\"0\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: false }\"\r\n ></ng-container>\r\n </psh-tooltip>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: true }\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #itemContentTpl let-item let-index=\"index\" let-isChild=\"isChild\" let-withLabel=\"withLabel\">\r\n @if (item.path) {\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"item.path\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (withLabel) {\r\n <span class=\"menu-label\">{{ item.content }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ item.badge }}</span>\r\n }\r\n @if (withLabel && item.children?.length) {\r\n <i\r\n class=\"ph ph-caret-down menu-arrow\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"menu-link\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n [disabled]=\"item.disabled\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (withLabel) {\r\n <span class=\"menu-label\">{{ item.content }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ item.badge }}</span>\r\n }\r\n @if (withLabel && item.children?.length) {\r\n <i\r\n class=\"ph ph-caret-down menu-arrow\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </button>\r\n }\r\n</ng-template>\r\n","import {\r\n afterNextRender,\r\n DestroyRef,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n Injector,\r\n input,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Headless focus-trap primitive.\r\n *\r\n * Apply to a container element and toggle activation with `[pshFocusTrap]`.\r\n * When active it:\r\n * - remembers the element that had focus before activation,\r\n * - moves focus to the first focusable element inside the container\r\n * (deterministically, after the next render — no `setTimeout`),\r\n * - keeps Tab / Shift+Tab focus cycling within the container, and\r\n * - restores focus to the previously focused element on deactivation/destroy.\r\n *\r\n * Handles the case where focus is currently outside the container.\r\n *\r\n * @example\r\n * ```html\r\n * <div [pshFocusTrap]=\"isOpen()\">…</div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshFocusTrap]',\r\n})\r\nexport class PshFocusTrapDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly injector = inject(Injector);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Whether the trap is active. */\r\n readonly pshFocusTrap = input<boolean>(true);\r\n\r\n /** Whether to restore focus to the previously focused element on deactivation. */\r\n readonly pshFocusTrapRestore = input<boolean>(true);\r\n\r\n /**\r\n * Whether to move focus into the container when the trap activates.\r\n * Set to false to trap + restore focus without stealing initial focus.\r\n */\r\n readonly pshFocusTrapAutoFocus = input<boolean>(true);\r\n\r\n private previouslyFocused: HTMLElement | null = null;\r\n private active = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const enabled = this.pshFocusTrap();\r\n if (!this.isBrowser) return;\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n });\r\n\r\n inject(DestroyRef).onDestroy(() => this.restoreFocus(true));\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (!this.active || event.key !== 'Tab') return;\r\n\r\n const focusables = this.getFocusableElements();\r\n const first = focusables[0];\r\n const last = focusables[focusables.length - 1];\r\n if (!first || !last) {\r\n // Nothing focusable inside — keep focus pinned to the container.\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const current = this.document.activeElement;\r\n const inside = this.host.nativeElement.contains(current);\r\n\r\n if (event.shiftKey) {\r\n if (!inside || current === first) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n if (!inside || current === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n }\r\n\r\n private activate(): void {\r\n if (this.active) return;\r\n this.active = true;\r\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\r\n\r\n if (!this.pshFocusTrapAutoFocus()) return;\r\n\r\n // Deterministic post-render focus (replaces setTimeout-based focusing).\r\n afterNextRender(\r\n () => {\r\n if (!this.active) return;\r\n if (!this.host.nativeElement.contains(this.document.activeElement)) {\r\n this.getFocusableElements()[0]?.focus();\r\n }\r\n },\r\n { injector: this.injector },\r\n );\r\n }\r\n\r\n private deactivate(): void {\r\n if (!this.active) return;\r\n this.active = false;\r\n this.restoreFocus(false);\r\n }\r\n\r\n private restoreFocus(immediate: boolean): void {\r\n const target = this.previouslyFocused;\r\n this.previouslyFocused = null;\r\n\r\n if (!this.pshFocusTrapRestore() || !target || typeof target.focus !== 'function') {\r\n return;\r\n }\r\n\r\n if (immediate) {\r\n target.focus();\r\n } else {\r\n afterNextRender(() => target.focus(), { injector: this.injector });\r\n }\r\n }\r\n\r\n private getFocusableElements(): HTMLElement[] {\r\n const selector = [\r\n 'button:not([disabled])',\r\n '[href]',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n ].join(', ');\r\n\r\n // The selector already excludes the common non-focusable cases (disabled,\r\n // tabindex=\"-1\"). We intentionally avoid an offsetParent/layout-based\r\n // visibility filter: the browser itself skips display:none elements on\r\n // focus(), and layout metrics are unavailable in non-rendering test envs.\r\n return Array.from(\r\n this.host.nativeElement.querySelectorAll<HTMLElement>(selector),\r\n ).filter(el => !el.hasAttribute('hidden'));\r\n }\r\n}\r\n","import { computed, Injectable, signal } from '@angular/core';\r\n\r\n/** A handle for a registered overlay layer. */\r\nexport interface OverlayHandle {\r\n /** Unique id of the layer, used to release it. */\r\n readonly id: number;\r\n /** z-index assigned to this layer (higher = on top). */\r\n readonly zIndex: number;\r\n}\r\n\r\n/**\r\n * Central overlay stacking authority.\r\n *\r\n * Hands out monotonically increasing z-indexes so that stacked overlays\r\n * (modals, dropdowns, tooltips, popovers…) always layer in open order, and\r\n * exposes which layer is on top. This replaces per-component, ad-hoc z-index\r\n * management. The counter resets once every layer is released, keeping z-index\r\n * values bounded.\r\n *\r\n * @example\r\n * ```typescript\r\n * private overlay = inject(PshOverlayService);\r\n * // on open:\r\n * this.handle = this.overlay.push(); // { id, zIndex }\r\n * // on close:\r\n * this.overlay.remove(this.handle.id);\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayService {\r\n /** z-index of the first (bottom) overlay layer. */\r\n private readonly baseZIndex = 1000;\r\n /** z-index increment between stacked layers. */\r\n private readonly step = 10;\r\n\r\n private sequence = 0;\r\n private readonly stack = signal<readonly number[]>([]);\r\n\r\n /** Number of currently-open overlay layers. */\r\n readonly activeCount = computed(() => this.stack().length);\r\n\r\n /**\r\n * Registers a new topmost overlay layer.\r\n * @returns a handle with a unique id and the z-index to apply.\r\n */\r\n push(): OverlayHandle {\r\n const id = ++this.sequence;\r\n this.stack.update(layers => [...layers, id]);\r\n return { id, zIndex: this.baseZIndex + (this.sequence - 1) * this.step };\r\n }\r\n\r\n /** Releases a previously registered layer. */\r\n remove(id: number): void {\r\n this.stack.update(layers => layers.filter(layer => layer !== id));\r\n if (this.stack().length === 0) {\r\n this.sequence = 0;\r\n }\r\n }\r\n\r\n /** Returns true if the given layer is currently on top of the stack. */\r\n isTopmost(id: number): boolean {\r\n const layers = this.stack();\r\n return layers.length > 0 && layers[layers.length - 1] === id;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injectable,\r\n InjectionToken,\r\n input,\r\n model,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n Renderer2,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { PshButtonComponent } from '../button/button.component';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { ModalSize, ModalConfig } from './modal.types';\r\nimport { PshOverlayService, OverlayHandle } from '../../a11y/overlay.service';\r\n\r\n/**\r\n * Injection token for global modal configuration\r\n *\r\n * @example\r\n * ```typescript\r\n * // In app.config.ts or main.ts\r\n * providers: [\r\n * {\r\n * provide: MODAL_CONFIG,\r\n * useValue: {\r\n * size: 'large',\r\n * closeOnBackdrop: false,\r\n * }\r\n * }\r\n * ]\r\n * ```\r\n */\r\nexport const MODAL_CONFIG = new InjectionToken<Partial<ModalConfig>>('MODAL_CONFIG', {\r\n factory: () => ({\r\n size: 'medium',\r\n showClose: true,\r\n closeOnBackdrop: true,\r\n closeOnEscape: true,\r\n preventScroll: true,\r\n showFooter: true,\r\n dismissLabel: 'Close',\r\n confirmLabel: 'Confirm',\r\n cancelLabel: 'Cancel'\r\n })\r\n});\r\n\r\n/**\r\n * Service for managing modal instances and global configuration\r\n *\r\n * Tracks all active modals and provides centralized configuration.\r\n * Useful for managing modal stacks and preventing multiple modals from conflicting.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ModalService {\r\n private config = inject(MODAL_CONFIG);\r\n /**\r\n * Ordered stack of open modal ids (insertion order = visual stacking order).\r\n * The last entry is the topmost (most recently opened) modal.\r\n */\r\n private modalsSignal = signal<readonly string[]>([]);\r\n\r\n /**\r\n * Computed signal exposing the number of active modals\r\n */\r\n readonly activeModalsCount = computed(() => this.modalsSignal().length);\r\n\r\n /**\r\n * Computed signal exposing the id of the topmost modal, or null if none are open\r\n */\r\n readonly topmostModalId = computed(() => {\r\n const modals = this.modalsSignal();\r\n return modals.length > 0 ? modals[modals.length - 1] : null;\r\n });\r\n\r\n /**\r\n * Returns the global modal configuration\r\n */\r\n getConfig(): Partial<ModalConfig> {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Generates a unique identifier for a modal instance\r\n */\r\n generateId(): string {\r\n return `modal-${Math.random().toString(36).substring(2, 11)}`;\r\n }\r\n\r\n /**\r\n * Registers a modal instance when it opens, pushing it onto the stack\r\n * @param id - Unique modal identifier\r\n */\r\n register(id: string): void {\r\n this.modalsSignal.update(modals =>\r\n modals.includes(id) ? modals : [...modals, id]\r\n );\r\n }\r\n\r\n /**\r\n * Unregisters a modal instance when it closes, removing it from the stack\r\n * @param id - Unique modal identifier\r\n */\r\n unregister(id: string): void {\r\n this.modalsSignal.update(modals => modals.filter(modalId => modalId !== id));\r\n }\r\n\r\n /**\r\n * Checks if a modal is currently registered\r\n * @param id - Unique modal identifier\r\n */\r\n isRegistered(id: string): boolean {\r\n return this.modalsSignal().includes(id);\r\n }\r\n\r\n /**\r\n * Checks if a modal is the topmost (most recently opened) open modal.\r\n * Used to ensure Escape / backdrop only dismiss the modal on top of the stack.\r\n * @param id - Unique modal identifier\r\n */\r\n isTopmost(id: string): boolean {\r\n return this.topmostModalId() === id;\r\n }\r\n}\r\n\r\n/**\r\n * A modal dialog component that displays content in an overlay\r\n *\r\n * @example\r\n * ```typescript\r\n * // Basic usage with two-way binding\r\n * <psh-modal [(open)]=\"isOpen\" title=\"My Modal\">\r\n * <p>Modal content</p>\r\n * </psh-modal>\r\n *\r\n * // With custom footer\r\n * <psh-modal [(open)]=\"isOpen\" title=\"Confirm Action\">\r\n * <p>Are you sure?</p>\r\n * <div modal-footer #modalFooter>\r\n * <psh-button (clicked)=\"isOpen = false\">Cancel</psh-button>\r\n * <psh-button variant=\"primary\" (clicked)=\"handleConfirm()\">Confirm</psh-button>\r\n * </div>\r\n * </psh-modal>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-modal',\r\n imports: [CommonModule, PshButtonComponent, PshFocusTrapDirective],\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshModalComponent implements AfterViewInit, OnDestroy {\r\n private readonly config = inject(MODAL_CONFIG);\r\n private readonly modalService = inject(ModalService);\r\n private readonly overlay = inject(PshOverlayService);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n private readonly modalId = this.modalService.generateId();\r\n private overlayHandle: OverlayHandle | null = null;\r\n /** z-index assigned by the overlay stack while open (keeps stacked modals layered). */\r\n protected readonly zIndex = signal<number | null>(null);\r\n private modalElement?: ElementRef<HTMLElement>;\r\n private isAttachedToBody = false;\r\n private resizeListener?: () => void;\r\n private readonly isMobileSignal = signal(false);\r\n private readonly mobileBreakpoint = 768;\r\n\r\n /**\r\n * Controls the visibility of the modal (two-way binding)\r\n */\r\n open = model(false);\r\n\r\n /**\r\n * Size of the modal dialog\r\n */\r\n size = input<ModalSize>(this.config.size ?? 'medium');\r\n\r\n /**\r\n * Whether to show the close button in the header\r\n */\r\n showClose = input(this.config.showClose ?? true);\r\n\r\n /**\r\n * Whether clicking the backdrop closes the modal\r\n */\r\n closeOnBackdrop = input(this.config.closeOnBackdrop ?? true);\r\n\r\n /**\r\n * Whether pressing Escape closes the modal\r\n */\r\n closeOnEscape = input(this.config.closeOnEscape ?? true);\r\n\r\n /**\r\n * Whether to prevent scrolling of the page when modal is open\r\n */\r\n preventScroll = input(this.config.preventScroll ?? true);\r\n\r\n /**\r\n * Whether to show the default footer with action buttons\r\n */\r\n showFooter = input(this.config.showFooter ?? true);\r\n\r\n /**\r\n * Title displayed in the modal header\r\n */\r\n title = input('Modal Title');\r\n\r\n /**\r\n * Accessible label for the close button\r\n */\r\n dismissLabel = input(this.config.dismissLabel ?? 'Close');\r\n\r\n /**\r\n * Label for the confirm button in the default footer\r\n */\r\n confirmLabel = input(this.config.confirmLabel ?? 'Confirm');\r\n\r\n /**\r\n * Label for the cancel button in the default footer\r\n */\r\n cancelLabel = input(this.config.cancelLabel ?? 'Cancel');\r\n\r\n /**\r\n * Custom CSS class(es) to apply to the modal container\r\n * Allows for custom styling without using deep selectors\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal styleClass=\"my-custom-modal\" />\r\n * ```\r\n */\r\n styleClass = input('');\r\n\r\n /**\r\n * Custom CSS class(es) to apply to the modal backdrop\r\n * Useful for stacked modals with different z-index or opacity\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal backdropClass=\"higher-z-index\" />\r\n * ```\r\n */\r\n backdropClass = input('');\r\n\r\n /**\r\n * Emitted when the modal is closed\r\n */\r\n closed = output<void>();\r\n\r\n /**\r\n * Emitted when the confirm button is clicked\r\n */\r\n confirmed = output<void>();\r\n\r\n /**\r\n * Content child for detecting custom footer projection\r\n */\r\n private readonly customFooter = contentChild<ElementRef>('modalFooter');\r\n\r\n /**\r\n * View child reference to the modal backdrop element\r\n */\r\n private readonly modalBackdrop = viewChild<ElementRef>('modalBackdrop');\r\n\r\n /**\r\n * Keyboard event handler for Escape key\r\n */\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key !== 'Escape') return;\r\n if (this.closeOnEscape() && this.open() && this.modalService.isTopmost(this.modalId)) {\r\n this.handleClose();\r\n }\r\n };\r\n\r\n /**\r\n * Computed signal indicating if a custom footer is projected\r\n */\r\n hasCustomFooter = computed(() => !!this.customFooter());\r\n\r\n /**\r\n * Computed signal for the modal state\r\n */\r\n state = computed(() => this.open() ? 'open' : 'closed');\r\n\r\n /**\r\n * Computed signal for the modal dialog ID for accessibility\r\n */\r\n modalDialogId = computed(() => `${this.modalId}-dialog`);\r\n\r\n /**\r\n * Computed signal for the modal description ID for accessibility\r\n */\r\n modalDescriptionId = computed(() => `${this.modalId}-description`);\r\n\r\n /**\r\n * Computed signal indicating if the screen is mobile-sized\r\n */\r\n isMobileScreen = computed(() => this.isMobileSignal());\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.open()) {\r\n this.onModalOpen();\r\n } else {\r\n this.onModalClose();\r\n }\r\n });\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.checkScreenSize();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.attachModalToBody();\r\n this.setupResizeListener();\r\n }\r\n\r\n /**\r\n * Handles all setup when modal opens\r\n */\r\n private onModalOpen(): void {\r\n this.modalService.register(this.modalId);\r\n this.overlayHandle = this.overlay.push();\r\n this.zIndex.set(this.overlayHandle.zIndex);\r\n if (!this.isBrowser) return;\r\n this.setupScrollLock();\r\n this.addEventListeners();\r\n // Initial focus + focus trapping + focus restoration are handled by\r\n // the [pshFocusTrap] directive on the modal container.\r\n }\r\n\r\n /**\r\n * Handles all cleanup when modal closes\r\n */\r\n private onModalClose(): void {\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n if (!this.isBrowser) return;\r\n this.removeScrollLock();\r\n this.removeEventListeners();\r\n }\r\n\r\n /** Releases this modal's overlay layer and clears its z-index. */\r\n private releaseOverlay(): void {\r\n if (this.overlayHandle) {\r\n this.overlay.remove(this.overlayHandle.id);\r\n this.overlayHandle = null;\r\n }\r\n this.zIndex.set(null);\r\n }\r\n\r\n /**\r\n * Checks if the current screen size is mobile\r\n */\r\n private checkScreenSize(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.isMobileSignal.set(view.innerWidth < this.mobileBreakpoint);\r\n }\r\n }\r\n\r\n /**\r\n * Sets up resize listener to detect screen size changes\r\n */\r\n private setupResizeListener(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.resizeListener = () => this.checkScreenSize();\r\n view.addEventListener('resize', this.resizeListener);\r\n }\r\n }\r\n\r\n /**\r\n * Removes resize listener\r\n */\r\n private removeResizeListener(): void {\r\n if (this.resizeListener) {\r\n this.document.defaultView?.removeEventListener('resize', this.resizeListener);\r\n }\r\n }\r\n\r\n /**\r\n * Adds keyboard event listeners\r\n */\r\n private addEventListeners(): void {\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Removes keyboard event listeners\r\n */\r\n private removeEventListeners(): void {\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Closes the modal and emits the closed event\r\n */\r\n handleClose(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * Emits the confirmed event without closing the modal\r\n * Allows parent component to handle confirmation logic and close if needed\r\n */\r\n handleConfirm(): void {\r\n this.confirmed.emit();\r\n }\r\n\r\n /**\r\n * Handles clicks on the backdrop\r\n * Closes the modal if closeOnBackdrop is true and click is on backdrop itself\r\n */\r\n handleBackdropClick(event: MouseEvent): void {\r\n if (\r\n this.closeOnBackdrop() &&\r\n this.modalService.isTopmost(this.modalId) &&\r\n event.target === event.currentTarget\r\n ) {\r\n this.handleClose();\r\n }\r\n }\r\n\r\n /**\r\n * Prevents page scrolling when modal is open\r\n * Calculates scrollbar width to prevent layout shift\r\n */\r\n private setupScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n\r\n const root = this.document.documentElement;\r\n const view = this.document.defaultView;\r\n if (view && !root.style.getPropertyValue('--scrollbar-width')) {\r\n const scrollbarWidth = view.innerWidth - root.clientWidth;\r\n root.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);\r\n }\r\n this.document.body.classList.add('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Removes scroll lock when modal closes\r\n */\r\n private removeScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n this.document.body.classList.remove('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Attaches the modal element to document.body for proper overlay rendering\r\n */\r\n private attachModalToBody(): void {\r\n const backdrop = this.modalBackdrop();\r\n if (backdrop && backdrop.nativeElement && !this.isAttachedToBody) {\r\n this.modalElement = backdrop;\r\n this.renderer.appendChild(this.document.body, backdrop.nativeElement);\r\n this.isAttachedToBody = true;\r\n }\r\n }\r\n\r\n /**\r\n * Detaches the modal element from document.body\r\n */\r\n private detachModalFromBody(): void {\r\n if (this.modalElement && this.modalElement.nativeElement && this.isAttachedToBody) {\r\n this.renderer.removeChild(this.document.body, this.modalElement.nativeElement);\r\n this.isAttachedToBody = false;\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup on component destruction\r\n */\r\n ngOnDestroy(): void {\r\n this.removeScrollLock();\r\n this.removeEventListeners();\r\n this.removeResizeListener();\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n this.detachModalFromBody();\r\n }\r\n}\r\n","<!-- Dialog backdrop: pointer dismissal only; the keyboard path is Escape (handled). -->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n<div\r\n #modalBackdrop\r\n [class]=\"'modal-backdrop ' + backdropClass()\"\r\n [class.open]=\"open()\"\r\n (click)=\"handleBackdropClick($event)\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [style.z-index]=\"zIndex()\"\r\n [attr.aria-hidden]=\"!open()\"\r\n [attr.aria-labelledby]=\"modalDialogId() + '-title'\"\r\n [attr.aria-describedby]=\"modalDescriptionId()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div\r\n [class]=\"'modal-container ' + styleClass()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.medium]=\"size() === 'medium'\"\r\n [class.large]=\"size() === 'large'\"\r\n [attr.id]=\"modalDialogId()\"\r\n role=\"document\"\r\n [pshFocusTrap]=\"open()\"\r\n >\r\n <div class=\"modal-content-wrapper\">\r\n <div class=\"modal-header\">\r\n <h2 class=\"modal-title\" [attr.id]=\"modalDialogId() + '-title'\">\r\n <ng-content select=\"[modal-title]\">{{ title() }}</ng-content>\r\n </h2>\r\n @if (showClose()) {\r\n <button\r\n type=\"button\"\r\n class=\"modal-close\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"modal-content\" [attr.id]=\"modalDescriptionId()\">\r\n <ng-content>\r\n <p>\r\n Modal content goes here. You can replace this with your own content.\r\n </p>\r\n </ng-content>\r\n </div>\r\n\r\n @if (showFooter() && !hasCustomFooter()) {\r\n <div class=\"modal-footer\">\r\n <psh-button\r\n appearance=\"outline\"\r\n variant=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleClose()\">\r\n {{ cancelLabel() }}\r\n </psh-button>\r\n <psh-button\r\n appearance=\"filled\"\r\n variant=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleConfirm()\">\r\n {{ confirmLabel() }}\r\n </psh-button>\r\n </div>\r\n } @if (showFooter() && hasCustomFooter()) {\r\n <div class=\"modal-footer\">\r\n <!--\r\n Note: When using a custom footer, buttons should also use [fullWidth]=\"isMobileScreen()\"\r\n to ensure proper responsive behavior on mobile devices.\r\n Example:\r\n <psh-button [fullWidth]=\"isMobileScreen()\" (clicked)=\"action()\">Custom Button</psh-button>\r\n -->\r\n <ng-content select=\"[modal-footer]\" #modalFooter></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PaginationSize, PaginationVariant, PaginationConfig } from './pagination.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const PAGINATION_CONFIG = new InjectionToken<Partial<PaginationConfig>>(\r\n 'PAGINATION_CONFIG',\r\n {\r\n factory: () => ({\r\n size: 'medium',\r\n variant: 'default',\r\n showFirstLast: true,\r\n showPrevNext: true,\r\n maxVisiblePages: 5,\r\n showItemsPerPage: false,\r\n itemsPerPageOptions: [5, 10, 25, 50],\r\n }),\r\n },\r\n);\r\n\r\n@Component({\r\n selector: 'psh-pagination',\r\n imports: [CommonModule],\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshPaginationComponent {\r\n private config = inject(PAGINATION_CONFIG);\r\n private static idCounter = 0;\r\n private readonly uniqueId = `pagination-${++PshPaginationComponent.idCounter}`;\r\n\r\n currentPage = model(1);\r\n totalPages = model(1);\r\n itemsPerPageInput = input(10, { alias: 'itemsPerPage' });\r\n itemsPerPage = linkedSignal(this.itemsPerPageInput);\r\n\r\n constructor() {\r\n effect(() => {\r\n const total = this.totalPages();\r\n if (total < 1 || !Number.isFinite(total)) {\r\n console.warn(`[psh-pagination] Invalid totalPages \"${total}\", setting to 1`);\r\n this.totalPages.set(1);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const current = this.currentPage();\r\n const total = this.totalPages();\r\n if (current < 1 || !Number.isFinite(current)) {\r\n console.warn(`[psh-pagination] Invalid currentPage \"${current}\", setting to 1`);\r\n this.currentPage.set(1);\r\n } else if (current > total && total >= 1) {\r\n console.warn(\r\n `[psh-pagination] currentPage \"${current}\" exceeds totalPages \"${total}\", setting to ${total}`,\r\n );\r\n this.currentPage.set(total);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const maxVisible = this.maxVisiblePages();\r\n if (maxVisible < 1 || !Number.isFinite(maxVisible)) {\r\n console.warn(`[psh-pagination] Invalid maxVisiblePages \"${maxVisible}\", must be >= 1`);\r\n }\r\n });\r\n }\r\n\r\n readonly size = input(this.config.size ?? ('medium' as PaginationSize), {\r\n transform: (value: PaginationSize): PaginationSize => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n console.warn(`[psh-pagination] Invalid size \"${value}\", falling back to \"medium\"`);\r\n return 'medium';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly variant = input(this.config.variant ?? ('default' as PaginationVariant), {\r\n transform: (value: PaginationVariant): PaginationVariant => {\r\n if (!['default', 'outline'].includes(value)) {\r\n console.warn(`[psh-pagination] Invalid variant \"${value}\", falling back to \"default\"`);\r\n return 'default';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly showFirstLast = input(this.config.showFirstLast ?? true);\r\n readonly showPrevNext = input(this.config.showPrevNext ?? true);\r\n readonly maxVisiblePages = input(this.config.maxVisiblePages ?? 5);\r\n readonly showItemsPerPage = input(this.config.showItemsPerPage ?? false);\r\n readonly itemsPerPageOptions = input<number[]>([5, 10, 25, 50]);\r\n readonly firstLabel = input('First');\r\n readonly previousLabel = input('Previous');\r\n readonly nextLabel = input('Next');\r\n readonly lastLabel = input('Last');\r\n readonly pageLabel = input('Page');\r\n readonly itemsLabel = input('items');\r\n readonly itemsPerPageLabel = input('Items per page');\r\n readonly id = input<string>();\r\n readonly ariaLabel = input<string>('Pagination navigation');\r\n\r\n pageChange = output<number>();\r\n itemsPerPageChange = output<number>();\r\n navigationError = output<{ action: string; reason: string }>();\r\n\r\n protected readonly navigationId = computed(() => {\r\n const customId = this.id();\r\n return customId || this.uniqueId;\r\n });\r\n\r\n protected readonly pages = computed(() => {\r\n const pages: number[] = [];\r\n const halfVisible = Math.floor(this.maxVisiblePages() / 2);\r\n let start = Math.max(1, this.currentPage() - halfVisible);\r\n const end = Math.min(this.totalPages(), start + this.maxVisiblePages() - 1);\r\n\r\n if (end - start + 1 < this.maxVisiblePages()) {\r\n start = Math.max(1, end - this.maxVisiblePages() + 1);\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n return pages;\r\n });\r\n\r\n protected readonly state = computed(() => this.getState());\r\n\r\n protected readonly canGoNext = computed(() => this.currentPage() < this.totalPages());\r\n protected readonly canGoPrevious = computed(() => this.currentPage() > 1);\r\n protected readonly isFirstPage = computed(() => this.currentPage() === 1);\r\n protected readonly isLastPage = computed(() => this.currentPage() === this.totalPages());\r\n\r\n protected readonly currentPageAnnouncement = computed(() => {\r\n return `Page ${this.currentPage()} sur ${this.totalPages()}`;\r\n });\r\n\r\n private getState(): string {\r\n if (this.currentPage() === 1) return 'first';\r\n if (this.currentPage() === this.totalPages()) return 'last';\r\n return 'default';\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (page !== this.currentPage() && page >= 1 && page <= this.totalPages()) {\r\n this.currentPage.set(page);\r\n this.pageChange.emit(page);\r\n } else if (page < 1 || page > this.totalPages()) {\r\n this.navigationError.emit({\r\n action: 'goToPage',\r\n reason: `Page ${page} is out of bounds (1-${this.totalPages()})`,\r\n });\r\n }\r\n }\r\n\r\n goToFirstPage(): void {\r\n this.goToPage(1);\r\n }\r\n\r\n goToLastPage(): void {\r\n this.goToPage(this.totalPages());\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.canGoNext()) {\r\n this.goToPage(this.currentPage() + 1);\r\n }\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.canGoPrevious()) {\r\n this.goToPage(this.currentPage() - 1);\r\n }\r\n }\r\n\r\n onItemsPerPageChange(event: Event): void {\r\n const value = parseInt((event.target as HTMLSelectElement).value);\r\n this.itemsPerPage.set(value);\r\n this.itemsPerPageChange.emit(value);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.goToPreviousPage();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.goToNextPage();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.goToFirstPage();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.goToLastPage();\r\n break;\r\n }\r\n }\r\n}\r\n","<nav\r\n class=\"pagination\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n role=\"navigation\"\r\n [attr.id]=\"navigationId()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (keydown)=\"onKeydown($event)\"\r\n>\r\n @if (showItemsPerPage()) {\r\n <div class=\"items-per-page\">\r\n <label [attr.for]=\"navigationId() + '-items-select'\" class=\"items-per-page-label\">\r\n {{ itemsPerPageLabel() }}\r\n </label>\r\n <select\r\n [attr.id]=\"navigationId() + '-items-select'\"\r\n (change)=\"onItemsPerPageChange($event)\"\r\n [attr.aria-label]=\"itemsPerPageLabel()\"\r\n >\r\n @for (option of itemsPerPageOptions(); track option) {\r\n <option [value]=\"option\" [selected]=\"option === itemsPerPage()\">\r\n {{ option }} {{ itemsLabel() }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"isFirstPage()\"\r\n (click)=\"goToFirstPage()\"\r\n [attr.aria-label]=\"firstLabel()\"\r\n [disabled]=\"isFirstPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"!canGoPrevious()\"\r\n (click)=\"goToPreviousPage()\"\r\n [attr.aria-label]=\"previousLabel()\"\r\n [disabled]=\"!canGoPrevious()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @for (page of pages(); track page) {\r\n <button\r\n class=\"page-button\"\r\n [class.active]=\"page === currentPage()\"\r\n (click)=\"goToPage(page)\"\r\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\r\n [attr.aria-label]=\"pageLabel() + ' ' + page\"\r\n type=\"button\"\r\n >\r\n {{ page }}\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"!canGoNext()\"\r\n (click)=\"goToNextPage()\"\r\n [attr.aria-label]=\"nextLabel()\"\r\n [disabled]=\"!canGoNext()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"isLastPage()\"\r\n (click)=\"goToLastPage()\"\r\n [attr.aria-label]=\"lastLabel()\"\r\n [disabled]=\"isLastPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ currentPageAnnouncement() }}\r\n </div>\r\n</nav>","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, output, InjectionToken } from '@angular/core';\r\nimport { ProgressbarVariant, ProgressbarSize, ProgressbarMode, ProgressbarLabelPosition, ProgressbarConfig } from './progressbar.types';\r\n\r\nexport const PROGRESSBAR_CONFIG = new InjectionToken<Partial<ProgressbarConfig>>('PROGRESSBAR_CONFIG', {\r\n factory: () => ({\r\n value: 0,\r\n max: 100,\r\n variant: 'primary',\r\n size: 'medium',\r\n showLabel: true,\r\n mode: 'default',\r\n labelPosition: 'top'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-progressbar',\r\n imports: [],\r\n templateUrl: './progressbar.component.html',\r\n styleUrls: ['./progressbar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'progressbar-container',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.label-bottom]': 'labelPosition() === \"bottom\"',\r\n '[class.label-inline]': 'labelPosition() === \"inline\"',\r\n '[attr.data-state]': 'mode()',\r\n '[attr.aria-live]': '\"polite\"'\r\n }\r\n})\r\nexport class PshProgressbarComponent {\r\n private config = inject(PROGRESSBAR_CONFIG);\r\n\r\n // Model inputs for two-way binding\r\n value = model(this.config.value ?? 0);\r\n max = model(this.config.max ?? 100);\r\n\r\n // Regular inputs\r\n variant = input<ProgressbarVariant>(this.config.variant ?? 'primary');\r\n size = input<ProgressbarSize>(this.config.size ?? 'medium');\r\n showLabel = input(this.config.showLabel ?? true);\r\n mode = input<ProgressbarMode>(this.config.mode ?? 'default');\r\n label = input<string>();\r\n labelPosition = input<ProgressbarLabelPosition>(this.config.labelPosition ?? 'top');\r\n ariaLabel = input<string>();\r\n\r\n // Outputs\r\n completed = output<void>();\r\n thresholdReached = output<number>();\r\n\r\n // Computed values\r\n percentage = computed(() => {\r\n const val = this.value();\r\n const maxVal = this.max();\r\n if (maxVal <= 0) return 0;\r\n return Math.min(100, Math.max(0, (val / maxVal) * 100));\r\n });\r\n\r\n isIndeterminate = computed(() => this.mode() === 'indeterminate');\r\n isStriped = computed(() => this.mode() === 'striped' || this.mode() === 'animated');\r\n isAnimated = computed(() => this.mode() === 'animated');\r\n\r\n computedAriaValueText = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n displayLabel = computed(() => {\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return this.label() || `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n constructor() {\r\n let previousThreshold = -1;\r\n let hasCompleted = false;\r\n\r\n effect(() => {\r\n const percentage = this.percentage();\r\n const val = this.value();\r\n const maxVal = this.max();\r\n\r\n if (val >= maxVal && maxVal > 0 && !hasCompleted) {\r\n this.completed.emit();\r\n hasCompleted = true;\r\n }\r\n\r\n if (val < maxVal) {\r\n hasCompleted = false;\r\n }\r\n\r\n const thresholds = [25, 50, 75];\r\n for (const threshold of thresholds) {\r\n if (percentage >= threshold && previousThreshold < threshold) {\r\n this.thresholdReached.emit(threshold);\r\n previousThreshold = threshold;\r\n }\r\n }\r\n\r\n if (percentage < 25) {\r\n previousThreshold = -1;\r\n }\r\n });\r\n }\r\n}","@if (showLabel()) {\r\n <span class=\"progress-label\">{{ displayLabel() }}</span>\r\n}\r\n<div\r\n class=\"progressbar\"\r\n [class.striped]=\"isStriped()\"\r\n [class.animated]=\"isAnimated()\"\r\n [class.indeterminate]=\"isIndeterminate()\"\r\n role=\"progressbar\"\r\n [attr.aria-label]=\"ariaLabel() || label() || 'Progression'\"\r\n [attr.aria-valuenow]=\"isIndeterminate() ? null : value()\"\r\n [attr.aria-valuemin]=\"0\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuetext]=\"computedAriaValueText()\"\r\n>\r\n <div\r\n class=\"progress-track\"\r\n [class]=\"variant()\"\r\n [style.width.%]=\"percentage()\"\r\n ></div>\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n input,\r\n Output,\r\n output,\r\n signal\r\n} from '@angular/core';\r\nimport { RadioSize, RadioConfig } from './radio.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const RADIO_CONFIG = new InjectionToken<Partial<RadioConfig>>('RADIO_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n })\r\n});\r\n\r\nexport const RADIO_STYLES = new InjectionToken<Record<string, string>[]>('RADIO_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n/**\r\n * Compteur global pour générer des IDs uniques\r\n */\r\nlet radioIdCounter = 0;\r\n\r\n@Component({\r\n selector: 'psh-radio',\r\n imports: [],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.radio-disabled]': 'disabled()',\r\n '[class.radio-error]': '!!error()',\r\n '[class.radio-success]': '!!success()',\r\n '[class.radio-small]': 'size() === \"small\"',\r\n '[class.radio-large]': 'size() === \"large\"',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshRadioComponent {\r\n private config = inject(RADIO_CONFIG);\r\n private styles = inject(RADIO_STYLES, { optional: true }) ?? [];\r\n private uniqueId = `radio-${++radioIdCounter}`;\r\n\r\n // Plain signals + manual @Input/@Output to prevent auto-emission\r\n // when parent sets [checked] or [disabled] via template binding.\r\n // model() would auto-emit checkedChange/disabledChange on .set().\r\n checked = signal(this.config.checked ?? false);\r\n @Input('checked') set checkedInput(v: boolean) { this.checked.set(v); }\r\n\r\n disabled = signal(this.config.disabled ?? false);\r\n @Input('disabled') set disabledInput(v: boolean) { this.disabled.set(v); }\r\n\r\n required = input(this.config.required ?? false);\r\n\r\n // Regular inputs\r\n label = input('');\r\n error = input('');\r\n success = input('');\r\n name = input('');\r\n value = input<unknown>();\r\n ariaLabel = input<string>();\r\n size = input<RadioSize>(this.config.size ?? 'medium');\r\n labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n // Content projection tracking\r\n protected hasProjectedContent = signal(false);\r\n\r\n // Outputs — checkedChange/disabledChange use EventEmitter to decouple from signal writes.\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n @Output() disabledChange = new EventEmitter<boolean>();\r\n valueChange = output<unknown>();\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n state = computed(() => this.getState());\r\n\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n return this.hasProjectedContent() ? undefined : 'Radio';\r\n });\r\n\r\n errorMessageId = computed(() =>\r\n this.error() ? `${this.uniqueId}-error` : undefined\r\n );\r\n\r\n successMessageId = computed(() =>\r\n this.success() ? `${this.uniqueId}-success` : undefined\r\n );\r\n\r\n // error and success are mutually exclusive in the template (@if/@else if),\r\n // so aria-describedby references whichever message is actually rendered.\r\n ariaDescribedBy = computed(() => this.errorMessageId() ?? this.successMessageId());\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.label() && !this.ariaLabel() && !this.hasProjectedContent()) {\r\n console.warn(\r\n '[psh-radio] No accessible label provided. Please use label input, ariaLabel input, or projected content.'\r\n );\r\n }\r\n }, { allowSignalWrites: false });\r\n }\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n }\r\n\r\n updateProjectedContent(hasContent: boolean): void {\r\n this.hasProjectedContent.set(hasContent);\r\n }\r\n\r\n handleChange(): void {\r\n if (!this.disabled()) {\r\n const wasChecked = this.checked();\r\n this.checked.set(true);\r\n if (!wasChecked) {\r\n this.checkedChange.emit(true);\r\n this.valueChange.emit(this.value());\r\n }\r\n }\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch(event.key) {\r\n case ' ':\r\n case 'Spacebar':\r\n case 'Enter':\r\n event.preventDefault();\r\n this.handleChange();\r\n break;\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.focusNextRadio();\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.focusPreviousRadio();\r\n break;\r\n }\r\n }\r\n\r\n private focusNextRadio(): void {\r\n // Navigate to next radio in group\r\n // Implementation requires radio group context\r\n }\r\n\r\n private focusPreviousRadio(): void {\r\n // Navigate to previous radio in group\r\n // Implementation requires radio group context\r\n }\r\n}","<div class=\"radio-container\">\r\n <label class=\"radio-label\" [class.label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n type=\"radio\"\r\n class=\"radio-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [name]=\"name()\"\r\n [attr.value]=\"value()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"required() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-checked]=\"checked()\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n (change)=\"handleChange()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n <span \r\n class=\"radio-control\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n >\r\n <span class=\"radio-dot\"></span>\r\n </span>\r\n <span class=\"radio-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Radio</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorMessageId()\" class=\"radio-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successMessageId()\" class=\"radio-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n DestroyRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { SelectOption, SelectOptionGroup, SelectSize, SelectVariant, SearchConfig } from './select.types';\r\n\r\ninterface FlatOption<T> {\r\n option: SelectOption<T>;\r\n effectiveDisabled: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'psh-select',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSelectComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective],\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.outlined]': 'variant() === \"outlined\"',\r\n '[class.filled]': 'variant() === \"filled\"',\r\n '[class.error]': '!!error()',\r\n '[class.success]': '!!success()',\r\n '[class.disabled]': 'disabled()',\r\n '[class.loading]': 'loading()',\r\n '[attr.aria-expanded]': 'isOpen().toString()',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSelectComponent<T = unknown> implements ControlValueAccessor, FormValueControl<T | T[] | null> {\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly injector = inject(Injector);\r\n\r\n // Side the panel actually opens on, after viewport collision/flip.\r\n protected readonly resolvedSide = signal<'top' | 'bottom'>('bottom');\r\n\r\n protected readonly selectId = `psh-sel-${Math.random().toString(36).substring(2, 11)}`;\r\n\r\n readonly value = model<T | T[] | null>(null);\r\n readonly disabled = model<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n\r\n size = input<SelectSize>('medium');\r\n variant = input<SelectVariant>('outlined');\r\n searchable = input(false);\r\n multiple = input(false);\r\n clearable = input(false);\r\n loading = input(false);\r\n fullWidth = input(false);\r\n required = input(false);\r\n\r\n options = input<(SelectOption<T> | SelectOptionGroup<T>)[]>([]);\r\n label = input('');\r\n placeholder = input<string>('Sélectionner une option');\r\n multiplePlaceholder = input<string>('Sélectionner des options');\r\n error = input<string | null | undefined>(null);\r\n success = input<string | null | undefined>(null);\r\n hint = input<string | null | undefined>(null);\r\n ariaLabel = input<string | null>(null);\r\n maxSelections = input<number | undefined>(undefined);\r\n minSelections = input<number | undefined>(undefined);\r\n compareWith = input<(a: T, b: T) => boolean>((a, b) => a === b);\r\n searchConfig = input<SearchConfig>({\r\n debounceTime: 300,\r\n placeholder: 'Rechercher...',\r\n minLength: 1\r\n });\r\n\r\n private readonly isOpenSignal = signal(false);\r\n private readonly searchTermSignal = signal('');\r\n readonly focusedIndex = signal(-1);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n searched = output<string>();\r\n scrollEnd = output<void>();\r\n\r\n isOpen = computed(() => this.isOpenSignal());\r\n searchTerm = computed(() => this.searchTermSignal());\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return 'default';\r\n });\r\n\r\n computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n\r\n describedBy = computed(() => {\r\n if (this.error()) return 'error-message';\r\n if (this.success()) return 'success-message';\r\n if (this.hint()) return 'hint-message';\r\n return null;\r\n });\r\n\r\n flatFilteredOptions = computed<FlatOption<T>[]>(() => {\r\n const opts = this.filteredOptions();\r\n const result: FlatOption<T>[] = [];\r\n for (const item of opts) {\r\n if (this.isOptionGroup(item)) {\r\n for (const opt of item.options) {\r\n result.push({ option: opt, effectiveDisabled: !!(item.disabled || opt.disabled) });\r\n }\r\n } else {\r\n result.push({ option: item, effectiveDisabled: !!item.disabled });\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n activeDescendant = computed(() => {\r\n const idx = this.focusedIndex();\r\n const flat = this.flatFilteredOptions();\r\n if (idx < 0 || idx >= flat.length) return null;\r\n const item = flat[idx];\r\n if (!item) return null;\r\n return `${this.selectId}-${item.option.value}`;\r\n });\r\n\r\n selectedLabel = computed(() => {\r\n const currentValue = this.value();\r\n const currentOptions = this.flattenOptions(this.options());\r\n\r\n if (currentValue === null || currentValue === undefined) {\r\n return this.multiple() ? this.multiplePlaceholder() : this.placeholder();\r\n }\r\n\r\n if (this.multiple() && Array.isArray(currentValue)) {\r\n const selected = currentOptions.filter(opt =>\r\n currentValue.some(v => this.compareWith()(v, opt.value))\r\n );\r\n return selected.length > 0 ? selected.map(o => o.label).join(', ') : this.multiplePlaceholder();\r\n }\r\n\r\n const selected = currentOptions.find(opt => this.compareWith()(opt.value, currentValue as T));\r\n return selected ? selected.label : this.placeholder();\r\n });\r\n\r\n filteredOptions = computed(() => {\r\n const term = this.searchTermSignal().toLowerCase();\r\n const opts = this.options();\r\n if (!term) return opts;\r\n\r\n return opts.map(opt => {\r\n if (this.isOptionGroup(opt)) {\r\n const filtered = opt.options.filter(o => {\r\n const matchesLabel = o.label.toLowerCase().includes(term);\r\n const matchesDesc = o.description ? o.description.toLowerCase().includes(term) : false;\r\n return matchesLabel || matchesDesc;\r\n });\r\n return filtered.length > 0 ? { ...opt, options: filtered } : null;\r\n }\r\n const matchesLabel = opt.label.toLowerCase().includes(term);\r\n const matchesDesc = opt.description ? opt.description.toLowerCase().includes(term) : false;\r\n return (matchesLabel || matchesDesc) ? opt : null;\r\n }).filter((opt): opt is (SelectOption<T> | SelectOptionGroup<T>) => opt !== null);\r\n });\r\n\r\n constructor() {\r\n // Close on outside click via the shared click-outside primitive.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(() => {\r\n if (this.isOpen()) this.close();\r\n });\r\n this.destroyRef.onDestroy(() => sub.unsubscribe());\r\n\r\n // Flip the options panel against the viewport on open; reset while closed.\r\n effect(() => {\r\n if (this.isOpen()) {\r\n afterNextRender(() => this.reposition(), { injector: this.injector });\r\n } else {\r\n this.resolvedSide.set('bottom');\r\n }\r\n });\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.isOpen()) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.select-trigger') as HTMLElement | null;\r\n const panel = host.querySelector('.select-dropdown') as HTMLElement | null;\r\n if (!trigger) return;\r\n this.resolvedSide.set(\r\n this.overlayPosition.flipSide(trigger, 'bottom', {\r\n overlayHeight: panel?.offsetHeight ?? 0,\r\n }) as 'top' | 'bottom',\r\n );\r\n }\r\n\r\n private onChange: (value: T | T[] | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n this.value.set(value as T | T[] | null);\r\n }\r\n\r\n registerOnChange(fn: (value: T | T[] | null) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n toggle(): void {\r\n if (this.disabled() || this.loading()) return;\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.isOpenSignal.set(true);\r\n this.opened.emit();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.isOpenSignal()) return;\r\n this.isOpenSignal.set(false);\r\n this.searchTermSignal.set('');\r\n this.focusedIndex.set(-1);\r\n this.closed.emit();\r\n }\r\n\r\n select(option: SelectOption<T>, groupDisabled = false): void {\r\n if (this.disabled() || option.disabled || groupDisabled) return;\r\n\r\n if (this.multiple()) {\r\n const current = Array.isArray(this.value()) ? [...(this.value() as T[])] : [];\r\n const index = current.findIndex(v => this.compareWith()(v, option.value));\r\n if (index === -1) {\r\n const max = this.maxSelections();\r\n if (max !== undefined && current.length >= max) return;\r\n current.push(option.value);\r\n } else {\r\n const min = this.minSelections();\r\n if (min !== undefined && current.length <= min) return;\r\n current.splice(index, 1);\r\n }\r\n this.value.set(current as T | T[] | null);\r\n this.onChange(current);\r\n } else {\r\n this.value.set(option.value as T | T[] | null);\r\n this.onChange(option.value);\r\n this.close();\r\n }\r\n this.onTouched();\r\n this.touched.set(true);\r\n }\r\n\r\n clear(event: MouseEvent): void {\r\n event.stopPropagation();\r\n const newVal = (this.multiple() ? [] : null) as T | T[] | null;\r\n this.value.set(newVal);\r\n this.onChange(this.value());\r\n }\r\n\r\n onSearch(event: Event): void {\r\n const term = (event.target as HTMLInputElement).value;\r\n this.searchTermSignal.set(term);\r\n this.searched.emit(term);\r\n }\r\n\r\n onScroll(event: Event): void {\r\n const el = event.target as HTMLElement;\r\n if (el.scrollHeight - el.scrollTop === el.clientHeight) {\r\n this.scrollEnd.emit();\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else if (this.focusedIndex() >= 0) {\r\n const flat = this.flatFilteredOptions();\r\n const item = flat[this.focusedIndex()];\r\n if (item && !item.effectiveDisabled) {\r\n this.select(item.option);\r\n }\r\n }\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else {\r\n this.moveFocus(1);\r\n }\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.moveFocus(-1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLast();\r\n break;\r\n case 'Escape':\r\n this.close();\r\n break;\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n protected isOptionGroup(item: SelectOption<T> | SelectOptionGroup<T>): item is SelectOptionGroup<T> {\r\n return 'options' in item;\r\n }\r\n\r\n protected getOptionKey(item: SelectOption<T> | SelectOptionGroup<T>): string {\r\n return this.isOptionGroup(item) ? `g-${item.label}` : `o-${item.label}`;\r\n }\r\n\r\n protected isSelected(option: SelectOption<T>): boolean {\r\n const val = this.value();\r\n if (this.multiple() && Array.isArray(val)) {\r\n return val.some(v => this.compareWith()(v, option.value));\r\n }\r\n return val !== null && this.compareWith()(val as T, option.value);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n const val = this.value();\r\n if (this.multiple()) return Array.isArray(val) && val.length > 0;\r\n return val !== null && val !== undefined;\r\n }\r\n\r\n protected getFlatIndex(option: SelectOption<T>): number {\r\n return this.flatFilteredOptions().findIndex(item => item.option === option);\r\n }\r\n\r\n protected focusSelect(): void {\r\n this.elementRef.nativeElement.querySelector('.select-trigger')?.focus();\r\n }\r\n\r\n private flattenOptions(options: (SelectOption<T> | SelectOptionGroup<T>)[]): SelectOption<T>[] {\r\n return options.reduce((acc, opt) => this.isOptionGroup(opt) ? [...acc, ...opt.options] : [...acc, opt], [] as SelectOption<T>[]);\r\n }\r\n\r\n private moveFocus(direction: 1 | -1): void {\r\n const flat = this.flatFilteredOptions();\r\n if (flat.length === 0) return;\r\n const current = this.focusedIndex();\r\n let next = current;\r\n for (let i = 0; i < flat.length; i++) {\r\n next = ((next + direction) % flat.length + flat.length) % flat.length;\r\n if (!flat[next]!.effectiveDisabled) {\r\n this.focusedIndex.set(next);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusFirst(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = 0; i < flat.length; i++) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusLast(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = flat.length - 1; i >= 0; i--) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"select-container\">\r\n @if (label()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label class=\"select-label\" [attr.for]=\"selectId\" (click)=\"focusSelect()\" [class.required]=\"required()\">\r\n {{ label() }}\r\n @if (required()) { <span class=\"required-mark\">*</span> }\r\n </label>\r\n }\r\n\r\n <div class=\"select-trigger-wrapper\">\r\n <div class=\"select-trigger\"\r\n role=\"combobox\"\r\n [id]=\"selectId\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-controls]=\"selectId + '-listbox'\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.tabindex]=\"disabled() || loading() ? -1 : 0\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (click)=\"toggle()\">\r\n <div class=\"select-value\">\r\n <span [class.placeholder]=\"!hasValue()\">\r\n {{ selectedLabel() }}\r\n </span>\r\n </div>\r\n <div class=\"select-actions\">\r\n @if (clearable() && hasValue() && !disabled()) {\r\n <button class=\"select-clear\" (click)=\"clear($event)\">\r\n <i class=\"ph ph-x\"></i>\r\n </button>\r\n }\r\n @if (loading()) {\r\n <div class=\"select-loader-trigger\"></div>\r\n } @else {\r\n <i class=\"ph ph-caret-down select-arrow\"></i>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (isOpen()) {\r\n <div class=\"select-dropdown\" [class.open-top]=\"resolvedSide() === 'top'\">\r\n @if (searchable()) {\r\n <div class=\"select-search\">\r\n <i class=\"ph ph-magnifying-glass select-search-icon\"></i>\r\n <input type=\"text\"\r\n [placeholder]=\"searchConfig().placeholder\"\r\n [value]=\"searchTerm()\"\r\n (input)=\"onSearch($event)\"\r\n (click)=\"$event.stopPropagation()\">\r\n </div>\r\n }\r\n <div class=\"select-options\"\r\n role=\"listbox\"\r\n [id]=\"selectId + '-listbox'\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n (scroll)=\"onScroll($event)\">\r\n @for (item of filteredOptions(); track getOptionKey(item)) {\r\n @if (isOptionGroup(item)) {\r\n <div class=\"select-group\" role=\"group\" [attr.aria-label]=\"item.label\">\r\n <div class=\"select-group-label\">{{ item.label }}</div>\r\n @for (opt of item.options; track opt.label) {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + opt.value\"\r\n [attr.aria-selected]=\"isSelected(opt)\"\r\n [attr.aria-disabled]=\"(item.disabled || opt.disabled) ? true : null\"\r\n [attr.tabindex]=\"(item.disabled || opt.disabled) ? -1 : null\"\r\n [class.selected]=\"isSelected(opt)\"\r\n [class.disabled]=\"item.disabled || opt.disabled\"\r\n [class.focused]=\"getFlatIndex(opt) === focusedIndex()\"\r\n (click)=\"select(opt, !!item.disabled)\">\r\n @if (opt.icon) { <i [class]=\"'ph ph-' + opt.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"select-option-content\">\r\n <span class=\"select-option-label\">{{ opt.label }}</span>\r\n @if (opt.description) { <span class=\"select-option-description\">{{ opt.description }}</span> }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + item.value\"\r\n [attr.aria-selected]=\"isSelected(item)\"\r\n [attr.aria-disabled]=\"item.disabled ? true : null\"\r\n [attr.tabindex]=\"item.disabled ? -1 : null\"\r\n [class.selected]=\"isSelected(item)\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.focused]=\"getFlatIndex(item) === focusedIndex()\"\r\n (click)=\"select(item)\">\r\n @if (item.icon) { <i [class]=\"'ph ph-' + item.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"select-option-content\">\r\n <span class=\"select-option-label\">{{ item.label }}</span>\r\n @if (item.description) { <span class=\"select-option-description\">{{ item.description }}</span> }\r\n </div>\r\n </div>\r\n }\r\n } @empty {\r\n <div class=\"select-no-results\">Aucun résultat</div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"select-error-message\" role=\"alert\">{{ error() }}</div>\r\n } @else if (success()) {\r\n <div id=\"success-message\" class=\"select-success-message\" role=\"status\">{{ success() }}</div>\r\n } @else if (hint()) {\r\n <div id=\"hint-message\" class=\"select-hint\">{{ hint() }}</div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n effect,\r\n OnDestroy,\r\n InjectionToken,\r\n PLATFORM_ID\r\n} from '@angular/core';\r\nimport { isPlatformBrowser, CommonModule, DOCUMENT } from '@angular/common';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { SidebarMode, SidebarPosition, SidebarConfig } from './sidebar.types';\r\n\r\nexport const SIDEBAR_CONFIG = new InjectionToken<Partial<SidebarConfig>>('SIDEBAR_CONFIG', {\r\n factory: () => ({\r\n mode: 'fixed',\r\n position: 'left',\r\n width: '250px',\r\n breakpoint: '768px',\r\n autoFocus: true,\r\n ariaLabel: 'Sidebar navigation',\r\n closeOnBackdrop: true,\r\n closeOnEscape: true\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-sidebar',\r\n imports: [CommonModule, PshFocusTrapDirective],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'role': 'complementary',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-hidden]': '!open()',\r\n '[attr.aria-expanded]': 'open()',\r\n '[attr.aria-modal]': 'effectiveMode() === \"overlay\" && open()',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSidebarComponent implements OnDestroy {\r\n private readonly config = inject(SIDEBAR_CONFIG);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private mediaQueryList: MediaQueryList | null = null;\r\n private mediaQueryHandler: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n open = model(false);\r\n mode = input<SidebarMode>(this.config.mode ?? 'fixed');\r\n position = input<SidebarPosition>(this.config.position ?? 'left');\r\n width = input<string>(this.config.width ?? '250px');\r\n breakpoint = input<string>(this.config.breakpoint ?? '768px');\r\n autoFocus = input<boolean>(this.config.autoFocus ?? true);\r\n ariaLabel = input<string>(this.config.ariaLabel ?? 'Sidebar navigation');\r\n closeOnBackdrop = input<boolean>(this.config.closeOnBackdrop ?? true);\r\n closeOnEscape = input<boolean>(this.config.closeOnEscape ?? true);\r\n\r\n // `toggle` is part of the public sidebar API and cannot be renamed (semver);\r\n // the native-event-name clash is intentional and acknowledged here.\r\n // eslint-disable-next-line @angular-eslint/no-output-native\r\n toggle = output<boolean>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n transitionStart = output<boolean>();\r\n\r\n private readonly mobileSignal = signal(false);\r\n private previousOpenState: boolean | null = null;\r\n\r\n isMobile = computed(() => this.mobileSignal());\r\n effectiveMode = computed(() => this.isMobile() ? 'overlay' : this.mode());\r\n state = computed(() => this.getState());\r\n\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && this.closeOnEscape() && this.effectiveMode() === 'overlay') {\r\n this.closeSidebar();\r\n }\r\n };\r\n\r\n private getState(): string {\r\n if (this.isMobile()) return 'mobile';\r\n if (this.open()) return 'open';\r\n return this.mode();\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const bp = this.breakpoint();\r\n this.setupMediaQuery(bp);\r\n });\r\n\r\n effect(() => {\r\n const isOpen = this.open();\r\n const wasOpen = this.previousOpenState;\r\n this.previousOpenState = isOpen;\r\n\r\n if (wasOpen === null) return;\r\n\r\n if (isOpen && !wasOpen) {\r\n this.onSidebarOpen();\r\n } else if (!isOpen && wasOpen) {\r\n this.onSidebarClose();\r\n }\r\n });\r\n }\r\n\r\n private setupMediaQuery(breakpoint: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n this.cleanupMediaQuery();\r\n\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n this.mediaQueryList = view.matchMedia(`(max-width: ${breakpoint})`);\r\n this.mobileSignal.set(this.mediaQueryList.matches);\r\n\r\n this.mediaQueryHandler = (e: MediaQueryListEvent) => {\r\n this.mobileSignal.set(e.matches);\r\n };\r\n\r\n this.mediaQueryList.addEventListener('change', this.mediaQueryHandler);\r\n }\r\n\r\n private cleanupMediaQuery(): void {\r\n if (this.mediaQueryList && this.mediaQueryHandler) {\r\n this.mediaQueryList.removeEventListener('change', this.mediaQueryHandler);\r\n this.mediaQueryList = null;\r\n this.mediaQueryHandler = null;\r\n }\r\n }\r\n\r\n private onSidebarOpen(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n // Focus trap + initial focus + focus restoration are handled by\r\n // PshFocusTrapDirective on the .sidebar element (see the template).\r\n this.addEventListeners();\r\n\r\n requestAnimationFrame(() => {\r\n this.opened.emit();\r\n });\r\n }\r\n\r\n private onSidebarClose(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.removeEventListeners();\r\n\r\n requestAnimationFrame(() => {\r\n this.closed.emit();\r\n });\r\n }\r\n\r\n private addEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n private removeEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n toggleSidebar(): void {\r\n const newState = !this.open();\r\n this.transitionStart.emit(newState);\r\n this.open.set(newState);\r\n this.toggle.emit(newState);\r\n }\r\n\r\n closeSidebar(): void {\r\n if (this.open()) {\r\n this.transitionStart.emit(false);\r\n this.open.set(false);\r\n this.toggle.emit(false);\r\n }\r\n }\r\n\r\n handleBackdropClick(): void {\r\n if (this.closeOnBackdrop()) {\r\n this.closeSidebar();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupMediaQuery();\r\n this.removeEventListeners();\r\n }\r\n}\r\n","<div\r\n class=\"sidebar\"\r\n [class.open]=\"open()\"\r\n [class.fixed]=\"effectiveMode() === 'fixed'\"\r\n [class.overlay]=\"effectiveMode() === 'overlay'\"\r\n [class.left]=\"position() === 'left'\"\r\n [class.right]=\"position() === 'right'\"\r\n [style.width]=\"width()\"\r\n [style.--sidebar-width]=\"width()\"\r\n [pshFocusTrap]=\"open()\"\r\n [pshFocusTrapAutoFocus]=\"autoFocus()\"\r\n>\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (effectiveMode() === 'overlay' && open()) {\r\n <div\r\n class=\"sidebar-backdrop\"\r\n role=\"presentation\"\r\n (click)=\"handleBackdropClick()\"\r\n ></div>\r\n}","import { ChangeDetectionStrategy, Component, effect, inject, input, signal, InjectionToken } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { SpinLoaderVariant, SpinLoaderSize, SpinLoaderColor, SpinLoaderConfig } from './spinloader.types';\r\n\r\nexport const SPINLOADER_CONFIG = new InjectionToken<Partial<SpinLoaderConfig>>('SPINLOADER_CONFIG', {\r\n factory: () => ({\r\n variant: 'circle',\r\n size: 'medium',\r\n color: 'primary'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-spinloader',\r\n imports: [],\r\n templateUrl: './spinloader.component.html',\r\n styleUrls: ['./spinloader.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'role': 'status',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-live]': 'ariaLive()',\r\n '[attr.aria-busy]': 'true',\r\n '[attr.data-state]': 'variant()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.reduce-motion]': 'reduceMotion()',\r\n }\r\n})\r\nexport class PshSpinLoaderComponent {\r\n private config = inject(SPINLOADER_CONFIG);\r\n private readonly document = inject(DOCUMENT);\r\n\r\n variant = input<SpinLoaderVariant>(this.config.variant ?? 'circle');\r\n size = input<SpinLoaderSize>(this.config.size ?? 'medium');\r\n color = input<SpinLoaderColor>(this.config.color ?? 'primary');\r\n label = input<string>();\r\n ariaLabel = input<string>('Chargement en cours');\r\n ariaLive = input<'polite' | 'assertive'>('polite');\r\n\r\n reduceMotion = signal(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const view = this.document.defaultView;\r\n if (view && typeof view.matchMedia === 'function') {\r\n const mediaQuery = view.matchMedia('(prefers-reduced-motion: reduce)');\r\n this.reduceMotion.set(mediaQuery.matches);\r\n\r\n const handler = (e: MediaQueryListEvent) => this.reduceMotion.set(e.matches);\r\n mediaQuery.addEventListener('change', handler);\r\n }\r\n });\r\n }\r\n}\r\n","@switch (variant()) {\r\n @case ('circle') {\r\n <div class=\"spinner-circle\" [class]=\"color()\"></div>\r\n }\r\n @case ('dots') {\r\n <div class=\"spinner-dots\" [class]=\"color()\">\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n </div>\r\n }\r\n @case ('pulse') {\r\n <div class=\"spinner-pulse\" [class]=\"color()\">\r\n <div class=\"pulse\"></div>\r\n <div class=\"pulse\"></div>\r\n <div class=\"pulse\"></div>\r\n </div>\r\n }\r\n}\r\n\r\n@if (label()) {\r\n <span class=\"spinner-label\">{{ label() }}</span>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n signal\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'psh-step',\r\n template: `<ng-content />`,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.step-content]': 'true',\r\n '[class.active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': '\"step-\" + index()',\r\n '[attr.id]': '\"panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1',\r\n '[style.display]': 'isActive() ? \"block\" : \"none\"'\r\n }\r\n})\r\nexport class PshStepComponent {\r\n title = input.required<string>();\r\n subtitle = input<string>();\r\n icon = input<string>();\r\n disabled = input(false);\r\n completed = input(false);\r\n loading = input(false);\r\n error = input<string>();\r\n warning = input<string>();\r\n success = input<string>();\r\n\r\n private _index = signal(0);\r\n private _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { StepperVariant, StepConfig, StepperConfig, StepperAriaLabels } from './stepper.types';\r\nimport { PshStepComponent } from './step.component';\r\n\r\nconst DEFAULT_ARIA_LABELS: StepperAriaLabels = {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée'\r\n};\r\n\r\nexport const STEPPER_CONFIG = new InjectionToken<Partial<StepperConfig>>('STEPPER_CONFIG', {\r\n factory: () => ({\r\n variant: 'default',\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-stepper',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.stepper-container]': 'true',\r\n '[class.numbered]': 'variant() === \"numbered\"',\r\n '[class.progress]': 'variant() === \"progress\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': '\"Navigation par étapes\"'\r\n }\r\n})\r\nexport class PshStepperComponent {\r\n private config = inject(STEPPER_CONFIG);\r\n\r\n activeStep = model(0);\r\n variant = input<StepperVariant>(this.config.variant ?? 'default');\r\n linear = input(this.config.linear ?? true);\r\n\r\n ariaLabels = input<StepperAriaLabels>();\r\n beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<string>();\r\n\r\n stepComponents = contentChildren(PshStepComponent);\r\n\r\n steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n subtitle: step.subtitle(),\r\n icon: step.icon(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning(),\r\n success: step.success()\r\n })));\r\n\r\n effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n isFirstStep = computed(() => this.activeStep() === 0);\r\n isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n const errorMsg = `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`;\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit(`Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`);\r\n return;\r\n }\r\n } catch (error) {\r\n const errorMsg = error instanceof Error ? error.message : 'Unknown error in beforeStepChange';\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit(`Cannot activate step ${index}. Please complete previous steps first`);\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(step => step.completed && !step.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: StepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n const status = step.completed ? labels.completed :\r\n index === this.activeStep() ? labels.active :\r\n step.disabled ? labels.disabled :\r\n labels.incomplete;\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n getStepDescribedBy(step: StepConfig, index: number): string | null {\r\n if (step.error) return `error-${index}`;\r\n if (step.warning) return `warning-${index}`;\r\n if (step.success) return `success-${index}`;\r\n return null;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"stepper-header\" role=\"tablist\">\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"step-header\"\r\n [class.active]=\"i === activeStep()\"\r\n [class.completed]=\"step.completed\"\r\n [class.disabled]=\"step.disabled\"\r\n [class.error]=\"!!step.error\"\r\n [class.warning]=\"!!step.warning\"\r\n [class.success]=\"!!step.success\"\r\n >\r\n <div\r\n class=\"step-indicator\"\r\n role=\"tab\"\r\n tabindex=\"0\"\r\n [attr.id]=\"'step-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-describedby]=\"getStepDescribedBy(step, i)\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n @if (step.loading && variant() === 'progress') {\r\n <i class=\"ph ph-circle-notch spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n } @else if (variant() === 'numbered') {\r\n {{ i + 1 }}\r\n } @else if (step.icon) {\r\n <i class=\"ph ph-{{ step.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"step-dot\"></span>\r\n }\r\n </div>\r\n\r\n <div class=\"step-label\">\r\n <span class=\"step-title\">{{ step.title }}</span>\r\n @if (step.subtitle) {\r\n <span class=\"step-subtitle\">{{ step.subtitle }}</span>\r\n }\r\n @if (step.error) {\r\n <span class=\"step-error\" [id]=\"'error-' + i\" role=\"alert\" aria-live=\"polite\">{{ step.error }}</span>\r\n }\r\n @if (step.warning) {\r\n <span class=\"step-warning\" [id]=\"'warning-' + i\" role=\"status\" aria-live=\"polite\">{{ step.warning }}</span>\r\n }\r\n @if (step.success) {\r\n <span class=\"step-success\" [id]=\"'success-' + i\" role=\"status\" aria-live=\"polite\">{{ step.success }}</span>\r\n }\r\n </div>\r\n\r\n @if (i < steps().length - 1) {\r\n <div class=\"step-connector\" aria-hidden=\"true\">\r\n <span class=\"connector-line\"></span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"stepper-content\">\r\n <ng-content />\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n signal\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'psh-flow-step',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.display]': '\"none\"'\r\n }\r\n})\r\nexport class PshFlowStepComponent {\r\n title = input.required<string>();\r\n disabled = input(false);\r\n completed = input(false);\r\n loading = input(false);\r\n error = input<string>();\r\n warning = input<string>();\r\n\r\n private _index = signal(0);\r\n private _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { StateFlowIndicatorSize, FlowStepConfig, StateFlowIndicatorConfig, StateFlowIndicatorAriaLabels } from './state-flow-indicator.types';\r\nimport { PshFlowStepComponent } from './flow-step.component';\r\n\r\nconst DEFAULT_ARIA_LABELS: StateFlowIndicatorAriaLabels = {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée',\r\n warning: 'Étape avec avertissement',\r\n error: 'Étape en erreur'\r\n};\r\n\r\nexport const STATE_FLOW_INDICATOR_CONFIG = new InjectionToken<Partial<StateFlowIndicatorConfig>>('STATE_FLOW_INDICATOR_CONFIG', {\r\n factory: () => ({\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-state-flow-indicator',\r\n templateUrl: './state-flow-indicator.component.html',\r\n styleUrls: ['./state-flow-indicator.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.state-flow-indicator]': 'true',\r\n '[class.size-small]': 'size() === \"small\"',\r\n '[class.size-medium]': 'size() === \"medium\"',\r\n '[class.size-large]': 'size() === \"large\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': '\"Indicateur de progression\"'\r\n }\r\n})\r\nexport class PshStateFlowIndicatorComponent {\r\n private config = inject(STATE_FLOW_INDICATOR_CONFIG);\r\n\r\n activeStep = model(0);\r\n linear = input(this.config.linear ?? true);\r\n size = input<StateFlowIndicatorSize>('medium');\r\n\r\n ariaLabels = input<StateFlowIndicatorAriaLabels>();\r\n beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<string>();\r\n\r\n stepComponents = contentChildren(PshFlowStepComponent);\r\n\r\n steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning()\r\n })));\r\n\r\n effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n isFirstStep = computed(() => this.activeStep() === 0);\r\n isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n const errorMsg = `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`;\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit(`Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`);\r\n return;\r\n }\r\n } catch (error) {\r\n const errorMsg = error instanceof Error ? error.message : 'Unknown error in beforeStepChange';\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit(`Cannot activate step ${index}. Please complete previous steps first`);\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(s => s.completed && !s.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: FlowStepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n let status: string;\r\n if (step.error) {\r\n status = labels.error;\r\n } else if (step.warning) {\r\n status = labels.warning;\r\n } else if (step.completed) {\r\n status = labels.completed;\r\n } else if (index === this.activeStep()) {\r\n status = labels.active;\r\n } else if (step.disabled) {\r\n status = labels.disabled;\r\n } else {\r\n status = labels.incomplete;\r\n }\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"flow-track\" role=\"tablist\">\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"flow-segment\"\r\n [class.active]=\"i === activeStep()\"\r\n [class.completed]=\"step.completed\"\r\n [class.disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [class.error]=\"!!step.error\"\r\n [class.warning]=\"!!step.warning\"\r\n [class.loading]=\"step.loading\"\r\n [class.first]=\"i === 0\"\r\n [class.last]=\"i === steps().length - 1\"\r\n role=\"tab\"\r\n [attr.tabindex]=\"step.disabled ? -1 : 0\"\r\n [attr.id]=\"'flow-step-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n <span class=\"flow-segment-content\">\r\n @if (step.loading) {\r\n <i class=\"ph ph-circle-notch spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.error) {\r\n <i class=\"ph ph-x-circle\" aria-hidden=\"true\"></i>\r\n } @else if (step.warning) {\r\n <i class=\"ph ph-warning\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check-circle\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"flow-segment-title\">{{ step.title }}</span>\r\n </span>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n viewChild,\r\n InjectionToken\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { SwitchSize, SwitchConfig } from './switch.types';\r\n\r\nexport const SWITCH_CONFIG = new InjectionToken<Partial<SwitchConfig>>('SWITCH_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-switch',\r\n templateUrl: './switch.component.html',\r\n styleUrls: ['./switch.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSwitchComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.switch-wrapper]': 'true',\r\n '[class.switch-disabled]': 'disabled()',\r\n '[class.switch-error]': '!!error()',\r\n '[class.switch-success]': '!!success()'\r\n }\r\n})\r\nexport class PshSwitchComponent implements ControlValueAccessor, FormCheckboxControl {\r\n private config = inject(SWITCH_CONFIG);\r\n private uniqueId = `switch-${crypto.randomUUID()}`;\r\n\r\n private switchInput = viewChild<ElementRef<HTMLInputElement>>('switchInput');\r\n\r\n private onChange = (_value: boolean) => {};\r\n private onTouched = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n touched = model(false);\r\n\r\n required = input(this.config.required ?? false);\r\n size = input<SwitchSize>(this.config.size ?? 'medium');\r\n labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n label = input('');\r\n error = input('');\r\n success = input('');\r\n ariaLabel = input<string>();\r\n name = input<string>('');\r\n id = input<string>(this.uniqueId);\r\n\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n return 'Switch';\r\n });\r\n errorId = computed(() => this.error() ? `${this.id()}-error` : null);\r\n successId = computed(() => this.success() ? `${this.id()}-success` : null);\r\n // error and success are mutually exclusive in the template (@if/@else if),\r\n // so aria-describedby references whichever message is actually rendered.\r\n describedBy = computed(() => this.errorId() ?? this.successId());\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.checked.update(v => !v);\r\n this.onChange(this.checked());\r\n this.onTouched();\r\n this.touched.set(true);\r\n }\r\n }\r\n\r\n writeValue(value: boolean): void {\r\n this.checked.set(value ?? false);\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n focus(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.focus();\r\n }\r\n }\r\n\r\n blur(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.blur();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"switch-container\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n>\r\n <label class=\"switch-label\" [class]=\"labelPosition() === 'left' ? 'label-left' : 'label-right'\">\r\n <input\r\n #switchInput\r\n type=\"checkbox\"\r\n class=\"switch-input\"\r\n [id]=\"id()\"\r\n [name]=\"name() || id()\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-checked]=\"checked()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"toggle()\"\r\n />\r\n <span class=\"switch-control\">\r\n <span class=\"switch-thumb\"></span>\r\n </span>\r\n <span class=\"switch-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Switch</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorId()!\" class=\"switch-error\" role=\"alert\" aria-live=\"polite\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successId()!\" class=\"switch-success\" role=\"status\" aria-live=\"polite\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken\r\n} from '@angular/core';\r\nimport { TabBarItem, TabBarConfig, TabBarChangeEvent } from './tab-bar.types';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale de la barre d'onglets\r\n */\r\nexport const TAB_BAR_CONFIG = new InjectionToken<Partial<TabBarConfig>>('TAB_BAR_CONFIG', {\r\n factory: () => ({\r\n disabled: false,\r\n position: 'bottom',\r\n animated: true\r\n })\r\n});\r\n\r\n\r\n@Component({\r\n selector: 'psh-tab-bar',\r\n templateUrl: './tab-bar.component.html',\r\n styleUrls: ['./tab-bar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.top]': 'position() === \"top\"',\r\n '[class.animated]': 'animated()',\r\n 'role': 'tablist',\r\n '[attr.aria-label]': '\"Navigation par onglets\"'\r\n }\r\n})\r\nexport class PshTabBarComponent {\r\n private config = inject(TAB_BAR_CONFIG);\r\n\r\n // Model inputs with defaults from config\r\n disabled = model(this.config.disabled ?? false);\r\n position = model<'bottom' | 'top'>(this.config.position ?? 'bottom');\r\n animated = model(this.config.animated ?? true);\r\n activeIndex = model(0);\r\n\r\n // Regular inputs\r\n items = input.required<TabBarItem[]>();\r\n\r\n // Outputs\r\n tabChange = output<TabBarChangeEvent>();\r\n\r\n selectTab(index: number): void {\r\n const items = this.items();\r\n const previousIndex = this.activeIndex();\r\n const selectedItem = items[index];\r\n\r\n if (this.disabled() ||\r\n previousIndex === index ||\r\n index < 0 ||\r\n index >= items.length ||\r\n !selectedItem ||\r\n selectedItem.disabled) {\r\n return;\r\n }\r\n\r\n this.activeIndex.set(index);\r\n this.tabChange.emit({\r\n index,\r\n item: selectedItem,\r\n previousIndex\r\n });\r\n }\r\n}","<div class=\"tab-bar\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n <button\r\n class=\"tab-item\"\r\n [class.active]=\"activeIndex() === i\"\r\n [class.disabled]=\"disabled() || item.disabled\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"activeIndex() === i\"\r\n [attr.aria-disabled]=\"disabled() || item.disabled\"\r\n [attr.aria-label]=\"item.label\"\r\n (click)=\"selectTab(i)\"\r\n >\r\n <i \r\n [class]=\"activeIndex() === i ? 'ph-fill ph-' + item.icon : 'ph ph-' + item.icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n <span class=\"tab-label\">{{ item.label }}</span>\r\n @if (item.badge) {\r\n <span class=\"tab-badge\">{{ item.badge }}</span>\r\n }\r\n </button>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, InjectionToken, TemplateRef } from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { PshInputComponent } from '../input/input.component';\r\nimport { TableColumn, TableRow, TableSort, TableConfig, TableRowClickEvent, TableRowExpandEvent, TableExpandedRowContext } from './table.types';\r\n\r\nexport const TABLE_CONFIG = new InjectionToken<Partial<TableConfig>>('TABLE_CONFIG', {\r\n factory: () => ({\r\n variant: 'default',\r\n size: 'medium',\r\n striped: false,\r\n hoverable: false,\r\n bordered: false,\r\n loading: false,\r\n emptyMessage: 'No data available',\r\n noResultsMessage: 'No results found',\r\n globalSearch: false,\r\n globalSearchPlaceholder: 'Search in all columns...',\r\n tableLayout: 'auto',\r\n truncateText: false,\r\n fullWidth: false,\r\n expandable: false,\r\n singleExpand: false\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-table',\r\n imports: [NgTemplateOutlet, PshInputComponent],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'class': 'psh-table',\r\n '[class.full-width]': 'fullWidth()'\r\n }\r\n})\r\nexport class PshTableComponent {\r\n private config = inject(TABLE_CONFIG);\r\n\r\n variant = input<'default' | 'outline'>(this.config.variant ?? 'default');\r\n size = input<'small' | 'medium' | 'large'>(this.config.size ?? 'medium');\r\n striped = input(this.config.striped ?? false);\r\n hoverable = input(this.config.hoverable ?? false);\r\n bordered = input(this.config.bordered ?? false);\r\n loading = input(this.config.loading ?? false);\r\n globalSearch = input(this.config.globalSearch ?? false);\r\n fullWidth = input(this.config.fullWidth ?? false);\r\n columns = input<TableColumn[]>([]);\r\n data = input<TableRow[]>([]);\r\n emptyMessage = input<string>(this.config.emptyMessage ?? 'No data available');\r\n noResultsMessage = input<string>(this.config.noResultsMessage ?? 'No results found');\r\n globalSearchPlaceholder = input(this.config.globalSearchPlaceholder ?? 'Search in all columns...');\r\n tableLayout = input<'auto' | 'fixed'>(this.config.tableLayout ?? 'auto');\r\n truncateText = input(this.config.truncateText ?? false);\r\n expandable = input(this.config.expandable ?? false);\r\n singleExpand = input(this.config.singleExpand ?? false);\r\n expandedRowTemplate = input<TemplateRef<TableExpandedRowContext>>();\r\n\r\n sortChange = output<TableSort>();\r\n globalSearchChange = output<string>();\r\n rowClick = output<TableRowClickEvent>();\r\n rowExpand = output<TableRowExpandEvent>();\r\n rowCollapse = output<TableRowExpandEvent>();\r\n\r\n private currentSortSignal = signal<TableSort | undefined>(undefined);\r\n readonly searchTermSignal = signal('');\r\n private expandedRowIds = signal<Set<string | number>>(new Set());\r\n\r\n currentSort = computed(() => this.currentSortSignal());\r\n searchTerm = computed(() => this.searchTermSignal());\r\n\r\n computedEmptyMessage = computed(() => {\r\n return this.searchTerm()\r\n ? `${this.noResultsMessage()} \"${this.searchTerm()}\"`\r\n : this.emptyMessage();\r\n });\r\n\r\n state = computed(() => {\r\n if (this.loading()) return 'loading';\r\n if (this.filteredData().length === 0) return 'empty';\r\n return 'default';\r\n });\r\n\r\n filteredData = computed(() => {\r\n let result = [...this.data()];\r\n\r\n if (this.searchTerm()) {\r\n result = this.filterData(result, this.searchTerm());\r\n }\r\n\r\n const sort = this.currentSort();\r\n if (sort) {\r\n result = this.sortData(result, sort);\r\n }\r\n\r\n return result;\r\n });\r\n\r\n /**\r\n * Trie les données\r\n */\r\n private sortData(data: TableRow[], sort: TableSort): TableRow[] {\r\n return [...data].sort((a, b) => {\r\n const column = this.columns().find(col => col.key === sort.key);\r\n \r\n // Utiliser la fonction de tri personnalisée si elle existe\r\n if (column?.sortFn) {\r\n return sort.direction === 'asc' \r\n ? column.sortFn(a, b)\r\n : column.sortFn(b, a);\r\n }\r\n \r\n // Sinon, utiliser le tri par défaut avec le chemin\r\n const aValue = this.getNestedValue(a, column?.path || sort.key);\r\n const bValue = this.getNestedValue(b, column?.path || sort.key);\r\n\r\n return sort.direction === 'asc'\r\n ? this.compareValues(aValue, bValue)\r\n : this.compareValues(bValue, aValue);\r\n });\r\n }\r\n\r\n /**\r\n * Compare deux valeurs inconnues (numérique si possible, sinon lexicographique).\r\n */\r\n private compareValues(a: unknown, b: unknown): number {\r\n if (typeof a === 'number' && typeof b === 'number') {\r\n return a > b ? 1 : -1;\r\n }\r\n return String(a ?? '') > String(b ?? '') ? 1 : -1;\r\n }\r\n\r\n /**\r\n * Filtre les données\r\n */\r\n private filterData(data: TableRow[], searchTerm: string): TableRow[] {\r\n if (!searchTerm) return data;\r\n \r\n const term = searchTerm.toLowerCase();\r\n return data.filter(row => {\r\n return this.columns().some(column => {\r\n const value = this.getNestedValue(row, column.path || column.key);\r\n return value != null && String(value).toLowerCase().includes(term);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Récupère la valeur d'un objet imbriqué en utilisant un chemin\r\n */\r\n private getNestedValue(obj: unknown, path: string): unknown {\r\n return path.split('.').reduce<unknown>(\r\n (acc, part) =>\r\n acc != null && typeof acc === 'object'\r\n ? (acc as Record<string, unknown>)[part]\r\n : undefined,\r\n obj\r\n );\r\n }\r\n\r\n handleSort(column: TableColumn): void {\r\n if (!column.sortable) return;\r\n\r\n const direction = !this.currentSort() || this.currentSort()?.key !== column.key\r\n ? 'asc'\r\n : this.currentSort()?.direction === 'asc'\r\n ? 'desc'\r\n : 'asc';\r\n\r\n const sort: TableSort = { key: column.key, direction };\r\n this.currentSortSignal.set(sort);\r\n this.sortChange.emit(sort);\r\n }\r\n\r\n onSearchValueChange(value: string): void {\r\n this.globalSearchChange.emit(value);\r\n }\r\n\r\n handleRowClick(row: TableRow): void {\r\n this.rowClick.emit({ id: row.id, row });\r\n }\r\n\r\n protected getCellValue(row: TableRow, column: TableColumn): unknown {\r\n return this.getNestedValue(row, column.path || column.key);\r\n }\r\n\r\n totalColumns = computed(() => this.columns().length + (this.expandable() ? 1 : 0));\r\n\r\n isRowExpandable(row: TableRow): boolean {\r\n return !!(row.children?.length || this.expandedRowTemplate());\r\n }\r\n\r\n isRowExpanded(row: TableRow): boolean {\r\n return this.expandedRowIds().has(row.id);\r\n }\r\n\r\n toggleRow(row: TableRow): void {\r\n if (!this.isRowExpandable(row)) return;\r\n\r\n const ids = new Set(this.expandedRowIds());\r\n const wasExpanded = ids.has(row.id);\r\n\r\n if (this.singleExpand()) {\r\n ids.clear();\r\n }\r\n\r\n if (wasExpanded) {\r\n ids.delete(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowCollapse.emit({ id: row.id, row, expanded: false });\r\n } else {\r\n ids.add(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowExpand.emit({ id: row.id, row, expanded: true });\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const ids = new Set<string | number>();\r\n for (const row of this.filteredData()) {\r\n if (this.isRowExpandable(row)) {\r\n ids.add(row.id);\r\n }\r\n }\r\n this.expandedRowIds.set(ids);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedRowIds.set(new Set());\r\n }\r\n}","<div\r\n class=\"table-wrapper\"\r\n [class.striped]=\"striped()\"\r\n [class.hoverable]=\"hoverable()\"\r\n [class.bordered]=\"bordered()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n [class.table-fixed]=\"tableLayout() === 'fixed'\"\r\n [class.truncate]=\"truncateText()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (globalSearch()) {\r\n <div class=\"global-search\" role=\"search\">\r\n <psh-input\r\n [placeholder]=\"globalSearchPlaceholder()\"\r\n [ariaLabel]=\"globalSearchPlaceholder()\"\r\n [size]=\"size()\"\r\n [fullWidth]=\"true\"\r\n [showLabel]=\"false\"\r\n iconStart=\"magnifying-glass\"\r\n type=\"search\"\r\n [(value)]=\"searchTermSignal\"\r\n (valueChange)=\"onSearchValueChange($event)\"\r\n />\r\n </div>\r\n }\r\n\r\n <table role=\"table\">\r\n <thead>\r\n <tr>\r\n @if (expandable()) {\r\n <th class=\"expand-header\" aria-label=\"Expand\"></th>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <th\r\n [style.width]=\"column.width\"\r\n [attr.aria-sort]=\"column.sortable ? (currentSort()?.key === column.key ? (currentSort()?.direction === 'asc' ? 'ascending' : 'descending') : 'none') : null\"\r\n [class.sortable]=\"column.sortable\"\r\n (click)=\"handleSort(column)\"\r\n >\r\n <div class=\"th-content\">\r\n {{ column.label }}\r\n @if (column.sortable) {\r\n @if (currentSort()?.key === column.key) {\r\n <i\r\n [class]=\"'ph ' + (currentSort()?.direction === 'desc' ? 'ph-sort-descending' : 'ph-sort-ascending')\"\r\n [attr.aria-label]=\"'Sort ' + currentSort()?.direction\"\r\n aria-hidden=\"true\">\r\n </i>\r\n } @else {\r\n <i\r\n class=\"ph ph-arrows-down-up sort-icon-neutral\"\r\n aria-label=\"Sortable\"\r\n aria-hidden=\"true\">\r\n </i>\r\n }\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @if (loading()) {\r\n <tr class=\"loading-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <div class=\"loading-indicator\">\r\n <div class=\"spinner\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n } @else if (filteredData().length === 0) {\r\n <tr class=\"empty-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n {{ computedEmptyMessage() }}\r\n </td>\r\n </tr>\r\n } @else {\r\n @for (row of filteredData(); track row.id) {\r\n <tr (click)=\"handleRowClick(row)\" [class.expanded]=\"expandable() && isRowExpanded(row)\">\r\n @if (expandable()) {\r\n <td class=\"expand-cell\">\r\n @if (isRowExpandable(row)) {\r\n <button\r\n type=\"button\"\r\n class=\"expand-toggle\"\r\n [attr.aria-expanded]=\"isRowExpanded(row)\"\r\n [attr.aria-label]=\"isRowExpanded(row) ? 'Collapse row' : 'Expand row'\"\r\n (click)=\"toggleRow(row); $event.stopPropagation()\"\r\n >\r\n <i class=\"ph ph-caret-right\"></i>\r\n </button>\r\n }\r\n </td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(row, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n\r\n @if (expandable() && isRowExpanded(row)) {\r\n @if (expandedRowTemplate()) {\r\n <tr class=\"expanded-content-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"expandedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\r\n ></ng-container>\r\n </td>\r\n </tr>\r\n } @else if (row.children?.length) {\r\n @for (child of row.children; track child.id) {\r\n <tr class=\"child-row\">\r\n @if (expandable()) {\r\n <td class=\"expand-cell\"></td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: child, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(child, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { Tab } from './tabs.types';\r\n\r\n@Component({\r\n selector: 'psh-tab',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.tab-panel]': 'true',\r\n '[class.active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': '\"tab-\" + index()',\r\n '[attr.id]': '\"panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1'\r\n }\r\n})\r\nexport class PshTabComponent {\r\n header = input.required<string>();\r\n icon = input<string>();\r\n disabled = input(false);\r\n ariaLabel = input<string>();\r\n\r\n private _index = signal(0);\r\n private _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(active: boolean): void {\r\n this._isActive.set(active);\r\n }\r\n\r\n toTabData(): Tab {\r\n return {\r\n header: this.header(),\r\n icon: this.icon(),\r\n content: '',\r\n disabled: this.disabled(),\r\n ariaLabel: this.ariaLabel()\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n InjectionToken,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { TabsVariant, TabsSize, Tab, TabsConfig, TabChangeEvent } from './tabs.types';\r\nimport { PshTabComponent } from './tab.component';\r\n\r\nexport const TABS_CONFIG = new InjectionToken<Partial<TabsConfig>>('TABS_CONFIG', {\r\n factory: () => ({\r\n variant: 'default',\r\n size: 'medium',\r\n activeIndex: 0,\r\n animated: true,\r\n }),\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n role: 'region',\r\n '[attr.aria-label]': 'ariaLabel() || \"Navigation par onglets\"',\r\n },\r\n})\r\nexport class PshTabsComponent {\r\n private config = inject(TABS_CONFIG);\r\n\r\n variant = input<TabsVariant>(this.config.variant ?? 'default');\r\n size = input<TabsSize>(this.config.size ?? 'medium');\r\n animated = input(this.config.animated ?? true);\r\n tabs = input<Tab[]>([]);\r\n ariaLabel = input<string>();\r\n ariaOrientation = input<'horizontal' | 'vertical'>('horizontal');\r\n\r\n activeIndexInput = input(this.config.activeIndex ?? 0, { alias: 'activeIndex' });\r\n activeIndex = linkedSignal(this.activeIndexInput);\r\n\r\n tabComponents = contentChildren(PshTabComponent);\r\n\r\n tabsToDisplay = computed(() => {\r\n const components = this.tabComponents();\r\n if (components.length > 0) {\r\n return components.map(c => c.toTabData());\r\n }\r\n return this.tabs();\r\n });\r\n\r\n hasContentProjection = computed(() => this.tabComponents().length > 0);\r\n\r\n activeIndexChange = output<number>();\r\n tabChange = output<TabChangeEvent>();\r\n\r\n hostClasses = computed(() => {\r\n const classes = ['tabs-wrapper'];\r\n const size = this.size();\r\n const variant = this.variant();\r\n\r\n if (size !== 'medium') classes.push(`tabs-${size}`);\r\n classes.push(`tabs-${variant}`);\r\n if (this.animated()) classes.push('tabs-animated');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const tabs = this.tabComponents();\r\n const currentIndex = this.activeIndex();\r\n tabs.forEach((tab, index) => {\r\n tab.setIndex(index);\r\n tab.setActive(index === currentIndex);\r\n });\r\n });\r\n\r\n effect(() => {\r\n const currentIndex = this.activeIndex();\r\n const tabs = this.tabsToDisplay();\r\n if (tabs.length > 0 && currentIndex >= tabs.length) {\r\n const clampedIndex = Math.max(0, tabs.length - 1);\r\n this.activeIndex.set(clampedIndex);\r\n this.activeIndexChange.emit(clampedIndex);\r\n }\r\n });\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, _index: number): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.selectPrevious();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.selectNext();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.selectFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.selectLast();\r\n break;\r\n }\r\n }\r\n\r\n selectTab(index: number): void {\r\n const tabs = this.tabsToDisplay();\r\n const tab = tabs[index];\r\n\r\n if (!tab || tab.disabled) return;\r\n\r\n const previousIndex = this.activeIndex();\r\n if (previousIndex !== index) {\r\n this.activeIndex.set(index);\r\n this.activeIndexChange.emit(index);\r\n this.tabChange.emit({ previousIndex, currentIndex: index, tab });\r\n }\r\n }\r\n\r\n selectNext(): void {\r\n const tabs = this.tabsToDisplay();\r\n let nextIndex = (this.activeIndex() + 1) % tabs.length;\r\n\r\n while (tabs[nextIndex]?.disabled && nextIndex !== this.activeIndex()) {\r\n nextIndex = (nextIndex + 1) % tabs.length;\r\n }\r\n\r\n if (nextIndex !== this.activeIndex()) {\r\n this.selectTab(nextIndex);\r\n }\r\n }\r\n\r\n selectPrevious(): void {\r\n const tabs = this.tabsToDisplay();\r\n let prevIndex = (this.activeIndex() - 1 + tabs.length) % tabs.length;\r\n\r\n while (tabs[prevIndex]?.disabled && prevIndex !== this.activeIndex()) {\r\n prevIndex = (prevIndex - 1 + tabs.length) % tabs.length;\r\n }\r\n\r\n if (prevIndex !== this.activeIndex()) {\r\n this.selectTab(prevIndex);\r\n }\r\n }\r\n\r\n selectFirst(): void {\r\n const tabs = this.tabsToDisplay();\r\n let firstIndex = 0;\r\n\r\n while (tabs[firstIndex]?.disabled && firstIndex < tabs.length - 1) {\r\n firstIndex++;\r\n }\r\n\r\n if (!tabs[firstIndex]?.disabled && firstIndex !== this.activeIndex()) {\r\n this.selectTab(firstIndex);\r\n }\r\n }\r\n\r\n selectLast(): void {\r\n const tabs = this.tabsToDisplay();\r\n let lastIndex = tabs.length - 1;\r\n\r\n while (tabs[lastIndex]?.disabled && lastIndex > 0) {\r\n lastIndex--;\r\n }\r\n\r\n if (!tabs[lastIndex]?.disabled && lastIndex !== this.activeIndex()) {\r\n this.selectTab(lastIndex);\r\n }\r\n }\r\n\r\n getActiveTab(): Tab | undefined {\r\n return this.tabsToDisplay()[this.activeIndex()];\r\n }\r\n\r\n getTabComponent(index: number): PshTabComponent | undefined {\r\n return this.tabComponents()[index];\r\n }\r\n}\r\n","<div\r\n class=\"tabs-container\"\r\n [class.animated]=\"animated()\"\r\n>\r\n <div\r\n class=\"tabs-header\"\r\n [class]=\"variant()\"\r\n role=\"tablist\"\r\n [attr.aria-orientation]=\"ariaOrientation()\"\r\n >\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <button\r\n class=\"tab-button\"\r\n role=\"tab\"\r\n [class.active]=\"i === activeIndex()\"\r\n [attr.aria-selected]=\"i === activeIndex()\"\r\n [attr.aria-disabled]=\"tab.disabled || null\"\r\n [attr.aria-controls]=\"'panel-' + i\"\r\n [attr.aria-label]=\"tab.ariaLabel || tab.header\"\r\n [attr.id]=\"'tab-' + i\"\r\n [tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [disabled]=\"tab.disabled\"\r\n (click)=\"$event.preventDefault(); selectTab(i)\"\r\n (keydown)=\"handleKeyDown($event, i)\"\r\n >\r\n @if (tab.icon) {\r\n <i class=\"ph ph-{{ tab.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n {{ tab.header }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"tabs-content\">\r\n @if (hasContentProjection()) {\r\n <ng-content />\r\n } @else {\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <div\r\n class=\"tab-panel\"\r\n role=\"tabpanel\"\r\n [class.active]=\"i === activeIndex()\"\r\n [attr.aria-labelledby]=\"'tab-' + i\"\r\n [attr.id]=\"'panel-' + i\"\r\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [attr.hidden]=\"i !== activeIndex() || null\"\r\n >\r\n {{ tab.content }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { InjectionToken } from '@angular/core';\r\nimport { ToastConfig } from './toast.types';\r\n\r\nexport const TOAST_CONFIG = new InjectionToken<Partial<ToastConfig>>('TOAST_CONFIG', {\r\n factory: () => ({\r\n position: 'top-right',\r\n duration: 5000,\r\n maxToasts: 5,\r\n pauseOnHover: true,\r\n showIcon: true,\r\n showCloseButton: true\r\n })\r\n});\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\nimport { Toast, ToastPosition } from './toast.types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PshToastService {\r\n private _toasts = signal<Toast[]>([]);\r\n private _position = signal<ToastPosition>('top-right');\r\n private config = inject(TOAST_CONFIG);\r\n\r\n readonly toasts = this._toasts.asReadonly();\r\n readonly position = this._position.asReadonly();\r\n\r\n show(toast: Omit<Toast, 'id'>) {\r\n const id = crypto.randomUUID();\r\n const newToast: Toast = {\r\n ...toast,\r\n id,\r\n type: toast.type || 'info',\r\n duration: toast.duration ?? this.config.duration ?? 5000\r\n };\r\n\r\n const maxToasts = this.config.maxToasts ?? 5;\r\n this._toasts.update(toasts => {\r\n const currentToasts = [...toasts];\r\n while (currentToasts.length >= maxToasts) {\r\n currentToasts.shift();\r\n }\r\n return [...currentToasts, newToast];\r\n });\r\n\r\n return id;\r\n }\r\n\r\n remove(id: string) {\r\n this._toasts.update(toasts => toasts.filter(t => t.id !== id));\r\n }\r\n\r\n info(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'info', ...options });\r\n }\r\n\r\n success(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'success', ...options });\r\n }\r\n\r\n warning(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'warning', ...options });\r\n }\r\n\r\n error(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'danger', ...options });\r\n }\r\n\r\n danger(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'danger', ...options });\r\n }\r\n\r\n setPosition(position: ToastPosition) {\r\n this._position.set(position);\r\n }\r\n}\r\n\r\n/** @deprecated Use PshToastService instead */\r\nexport const ToastService = PshToastService;\r\n","import { PshToastComponent } from './toast.component';\r\n\r\n/** @deprecated Use PshToastComponent instead */\r\nexport const ToastComponent = PshToastComponent;\r\n","import { ChangeDetectionStrategy, Component, effect, inject, OnDestroy } from '@angular/core';\r\nimport { Toast, ToastType } from './toast.types';\r\nimport { PshToastService } from './toast.service';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\n\r\n@Component({\r\n selector: 'psh-toast',\r\n templateUrl: './toast.component.html',\r\n styleUrls: ['./toast.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:keydown.escape)': 'handleEscapeKey()'\r\n }\r\n})\r\nexport class PshToastComponent implements OnDestroy {\r\n private toastService = inject(PshToastService);\r\n public config = inject(TOAST_CONFIG);\r\n\r\n private timeoutMap = new Map<string, number>();\r\n private scheduledToastIds = new Set<string>();\r\n\r\n readonly toasts = this.toastService.toasts;\r\n readonly position = this.toastService.position;\r\n\r\n constructor() {\r\n effect(() => {\r\n const currentToasts = this.toasts();\r\n\r\n currentToasts.forEach(toast => {\r\n if (toast.id && !this.scheduledToastIds.has(toast.id)) {\r\n this.scheduledToastIds.add(toast.id);\r\n\r\n if (toast.duration && toast.duration > 0) {\r\n this.scheduleRemoval(toast.id, toast.duration);\r\n }\r\n }\r\n });\r\n\r\n const currentToastIds = new Set(currentToasts.map(t => t.id).filter(Boolean) as string[]);\r\n this.scheduledToastIds.forEach(id => {\r\n if (!currentToastIds.has(id)) {\r\n this.scheduledToastIds.delete(id);\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleEscapeKey(): void {\r\n const toasts = this.toasts();\r\n const lastToast = toasts[toasts.length - 1];\r\n if (lastToast?.id) {\r\n this.handleDismiss(lastToast.id);\r\n }\r\n }\r\n\r\n handleDismiss(id: string | undefined): void {\r\n if (id) {\r\n this.clearTimeout(id);\r\n this.toastService.remove(id);\r\n }\r\n }\r\n\r\n handleMouseEnter(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n this.clearTimeout(id);\r\n }\r\n }\r\n\r\n handleMouseLeave(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n const toast = this.toasts().find(t => t.id === id);\r\n if (toast?.duration && toast.duration > 0) {\r\n this.scheduleRemoval(id, toast.duration);\r\n }\r\n }\r\n }\r\n\r\n getDefaultIcon(type: ToastType): string {\r\n const icons: Record<ToastType, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n };\r\n return icons[type] || 'info';\r\n }\r\n\r\n shouldShowCloseButton(toast: Toast): boolean {\r\n if (toast.showCloseButton !== undefined) {\r\n return toast.showCloseButton;\r\n }\r\n return this.config.showCloseButton !== false;\r\n }\r\n\r\n getCloseButtonAriaLabel(toast: Toast): string {\r\n return toast.closeButtonAriaLabel ?? this.config.closeButtonAriaLabel ?? 'Close notification';\r\n }\r\n\r\n private scheduleRemoval(id: string, duration: number): void {\r\n this.clearTimeout(id);\r\n const timeoutId = setTimeout(() => {\r\n this.toastService.remove(id);\r\n this.timeoutMap.delete(id);\r\n }, duration);\r\n this.timeoutMap.set(id, timeoutId);\r\n }\r\n\r\n private clearTimeout(id: string): void {\r\n const timeoutId = this.timeoutMap.get(id);\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n this.timeoutMap.delete(id);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.timeoutMap.forEach(timeoutId => {\r\n clearTimeout(timeoutId);\r\n });\r\n this.timeoutMap.clear();\r\n this.scheduledToastIds.clear();\r\n }\r\n}\r\n\r\nexport { ToastComponent } from './toast.compat';\r\n","<div\r\n class=\"toast-container\"\r\n [class]=\"position()\"\r\n role=\"region\"\r\n aria-label=\"Notifications\"\r\n>\r\n @for (toast of toasts(); track toast.id) {\r\n <div\r\n class=\"toast-item\"\r\n [class]=\"toast.type\"\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n [style.--progress-duration]=\"toast.duration + 'ms'\"\r\n (mouseenter)=\"handleMouseEnter(toast.id!)\"\r\n (mouseleave)=\"handleMouseLeave(toast.id!)\"\r\n >\r\n @if (config.showIcon !== false) {\r\n <i\r\n class=\"ph ph-{{ toast.icon || getDefaultIcon(toast.type) }} toast-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n <div class=\"toast-content\">\r\n {{ toast.message }}\r\n </div>\r\n @if (shouldShowCloseButton(toast)) {\r\n <button\r\n type=\"button\"\r\n class=\"toast-close\"\r\n (click)=\"handleDismiss(toast.id)\"\r\n [attr.aria-label]=\"getCloseButtonAriaLabel(toast)\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","export interface Rgb {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\nexport interface Oklch {\r\n l: number;\r\n c: number;\r\n h: number;\r\n}\r\n\r\nexport function hexToRgb(hex: string): Rgb | null {\r\n let value = hex.replace(/^#/, '').trim();\r\n if (value.length === 3) {\r\n value = value.split('').map((char) => char + char).join('');\r\n }\r\n if (value.length !== 6 || !/^[0-9a-fA-F]{6}$/.test(value)) {\r\n return null;\r\n }\r\n return {\r\n r: parseInt(value.substring(0, 2), 16),\r\n g: parseInt(value.substring(2, 4), 16),\r\n b: parseInt(value.substring(4, 6), 16),\r\n };\r\n}\r\n\r\nexport function rgbToHex({ r, g, b }: Rgb): string {\r\n const toHex = (channel: number) => {\r\n const clamped = Math.max(0, Math.min(255, Math.round(channel)));\r\n return clamped.toString(16).padStart(2, '0');\r\n };\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\nfunction srgbToLinear(channel: number): number {\r\n const normalized = channel / 255;\r\n return normalized <= 0.04045\r\n ? normalized / 12.92\r\n : Math.pow((normalized + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction linearToSrgb(value: number): number {\r\n const clamped = Math.max(0, Math.min(1, value));\r\n const scaled = clamped <= 0.0031308\r\n ? 12.92 * clamped\r\n : 1.055 * Math.pow(clamped, 1 / 2.4) - 0.055;\r\n return scaled * 255;\r\n}\r\n\r\nexport function relativeLuminance(rgb: Rgb): number {\r\n const r = srgbToLinear(rgb.r);\r\n const g = srgbToLinear(rgb.g);\r\n const b = srgbToLinear(rgb.b);\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n}\r\n\r\nexport function contrastRatio(a: Rgb, b: Rgb): number {\r\n const la = relativeLuminance(a);\r\n const lb = relativeLuminance(b);\r\n const lighter = Math.max(la, lb);\r\n const darker = Math.min(la, lb);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n}\r\n\r\nexport function bestTextColor(background: Rgb): string {\r\n const white = { r: 255, g: 255, b: 255 };\r\n const black = { r: 0, g: 0, b: 0 };\r\n return contrastRatio(background, white) >= contrastRatio(background, black)\r\n ? '#FFFFFF'\r\n : '#000000';\r\n}\r\n\r\nfunction rgbToLinear(rgb: Rgb): [number, number, number] {\r\n return [srgbToLinear(rgb.r), srgbToLinear(rgb.g), srgbToLinear(rgb.b)];\r\n}\r\n\r\nfunction linearToRgb(lin: [number, number, number]): Rgb {\r\n return {\r\n r: linearToSrgb(lin[0]),\r\n g: linearToSrgb(lin[1]),\r\n b: linearToSrgb(lin[2]),\r\n };\r\n}\r\n\r\nexport function rgbToOklch(rgb: Rgb): Oklch {\r\n const [r, g, b] = rgbToLinear(rgb);\r\n\r\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n\r\n const l_ = Math.cbrt(l);\r\n const m_ = Math.cbrt(m);\r\n const s_ = Math.cbrt(s);\r\n\r\n const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;\r\n const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;\r\n const bLab = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;\r\n\r\n const C = Math.sqrt(a * a + bLab * bLab);\r\n let H = (Math.atan2(bLab, a) * 180) / Math.PI;\r\n if (H < 0) H += 360;\r\n\r\n return { l: L, c: C, h: H };\r\n}\r\n\r\nexport function oklchToRgb({ l, c, h }: Oklch): Rgb {\r\n const hRad = (h * Math.PI) / 180;\r\n const a = c * Math.cos(hRad);\r\n const bLab = c * Math.sin(hRad);\r\n\r\n const l_ = l + 0.3963377774 * a + 0.2158037573 * bLab;\r\n const m_ = l - 0.1055613458 * a - 0.0638541728 * bLab;\r\n const s_ = l - 0.0894841775 * a - 1.2914855480 * bLab;\r\n\r\n const lCube = l_ ** 3;\r\n const mCube = m_ ** 3;\r\n const sCube = s_ ** 3;\r\n\r\n const r = 4.0767416621 * lCube - 3.3077115913 * mCube + 0.2309699292 * sCube;\r\n const g = -1.2684380046 * lCube + 2.6097574011 * mCube - 0.3413193965 * sCube;\r\n const b = -0.0041960863 * lCube - 0.7034186147 * mCube + 1.7076147010 * sCube;\r\n\r\n return linearToRgb([r, g, b]);\r\n}\r\n\r\nexport function withLightness(color: Rgb, lightness: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({ l: Math.max(0, Math.min(1, lightness)), c: oklch.c, h: oklch.h });\r\n}\r\n\r\nexport function shiftLightness(color: Rgb, delta: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({\r\n l: Math.max(0, Math.min(1, oklch.l + delta)),\r\n c: oklch.c,\r\n h: oklch.h,\r\n });\r\n}\r\n","import {\r\n Rgb,\r\n contrastRatio,\r\n relativeLuminance,\r\n rgbToOklch,\r\n oklchToRgb,\r\n} from './color.utils';\r\n\r\nexport const WCAG_AA_NORMAL = 4.5;\r\nexport const WCAG_AA_LARGE = 3;\r\nexport const WCAG_AAA_NORMAL = 7;\r\nexport const WCAG_AAA_LARGE = 4.5;\r\n\r\nexport type ContrastTarget = 'AA' | 'AAA';\r\n\r\nexport function targetRatio(target: ContrastTarget): number {\r\n return target === 'AAA' ? WCAG_AAA_NORMAL : WCAG_AA_NORMAL;\r\n}\r\n\r\n/**\r\n * Adjusts a color in OKLCH lightness until the contrast ratio against the\r\n * background meets or exceeds the target. Direction is chosen based on the\r\n * background (darken on light backgrounds, lighten on dark backgrounds).\r\n * Hue and chroma are preserved as much as possible.\r\n */\r\nexport function ensureContrast(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n if (contrastRatio(color, background) >= ratio) {\r\n return color;\r\n }\r\n\r\n const backgroundLuminance = relativeLuminance(background);\r\n const { c, h } = rgbToOklch(color);\r\n const goLighter = backgroundLuminance < 0.5;\r\n\r\n let low = 0;\r\n let high = 1;\r\n let best: Rgb = color;\r\n let bestRatio = contrastRatio(color, background);\r\n\r\n for (let i = 0; i < 24; i++) {\r\n const mid = (low + high) / 2;\r\n const candidate = oklchToRgb({ l: mid, c, h });\r\n const candidateRatio = contrastRatio(candidate, background);\r\n\r\n if (candidateRatio >= ratio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n if (goLighter) {\r\n high = mid;\r\n } else {\r\n low = mid;\r\n }\r\n } else {\r\n if (candidateRatio > bestRatio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n }\r\n if (goLighter) {\r\n low = mid;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n }\r\n\r\n if (bestRatio < ratio) {\r\n const chromaReduced = oklchToRgb({\r\n l: goLighter ? 0.98 : 0.08,\r\n c: Math.min(c, 0.05),\r\n h,\r\n });\r\n if (contrastRatio(chromaReduced, background) > bestRatio) {\r\n return chromaReduced;\r\n }\r\n }\r\n\r\n return best;\r\n}\r\n","import {\r\n Injectable,\r\n InjectionToken,\r\n PLATFORM_ID,\r\n afterNextRender,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Theme } from './types/theme.types';\r\nimport {\r\n Rgb,\r\n bestTextColor,\r\n hexToRgb,\r\n rgbToHex,\r\n rgbToOklch,\r\n oklchToRgb,\r\n contrastRatio,\r\n} from './utils/color.utils';\r\nimport {\r\n ContrastTarget,\r\n ensureContrast,\r\n targetRatio,\r\n WCAG_AA_NORMAL,\r\n} from './utils/wcag.utils';\r\n\r\nconst THEME_STORAGE_KEY = 'helix-theme-preference';\r\n\r\n/**\r\n * Contract for applications that want to override brand colors.\r\n * Kept generic (customer) so it can fit any vertical.\r\n */\r\nexport interface CustomerContextService {\r\n primaryColor(): string;\r\n secondaryColor(): string;\r\n}\r\n\r\nexport const CUSTOMER_CONTEXT_SERVICE = new InjectionToken<CustomerContextService>(\r\n 'CUSTOMER_CONTEXT_SERVICE',\r\n);\r\n\r\nexport interface PshThemeOptions {\r\n targetContrast?: ContrastTarget;\r\n}\r\n\r\nexport const PSH_THEME_OPTIONS = new InjectionToken<PshThemeOptions>('PSH_THEME_OPTIONS');\r\n\r\ninterface DerivedPalette {\r\n base: string;\r\n light: string;\r\n lighter: string;\r\n dark: string;\r\n darker: string;\r\n text: string;\r\n rgb: string;\r\n source: string;\r\n}\r\n\r\nconst LIGHT_BACKGROUND: Rgb = { r: 255, g: 255, b: 255 };\r\nconst DARK_BACKGROUND: Rgb = { r: 20, g: 20, b: 25 };\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n private customerContext = inject(CUSTOMER_CONTEXT_SERVICE, { optional: true });\r\n private options = inject(PSH_THEME_OPTIONS, { optional: true });\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private isDarkThemeSignal = signal<boolean>(false);\r\n private themeNameSignal = signal<Theme>('light');\r\n private lastChangeSignal = signal<Date>(new Date());\r\n\r\n isDarkTheme = computed(() => this.isDarkThemeSignal());\r\n themeName = computed(() => this.themeNameSignal());\r\n\r\n themeInfo = computed(() => ({\r\n isDark: this.isDarkTheme(),\r\n name: this.themeName(),\r\n lastChange: this.lastChangeSignal(),\r\n }));\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n afterNextRender(() => this.applyCustomerTheme());\r\n }\r\n\r\n setDarkTheme(isDark: boolean): void {\r\n if (this.isBrowser) {\r\n this.document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');\r\n }\r\n this.isDarkThemeSignal.set(isDark);\r\n this.themeNameSignal.set(isDark ? 'dark' : 'light');\r\n this.lastChangeSignal.set(new Date());\r\n this.applyCustomerTheme();\r\n }\r\n\r\n toggleTheme(): void {\r\n this.setDarkTheme(!this.isDarkThemeSignal());\r\n }\r\n\r\n updateTheme(name: Theme): void {\r\n this.themeNameSignal.set(name);\r\n this.isDarkThemeSignal.set(name === 'dark');\r\n this.lastChangeSignal.set(new Date());\r\n this.saveThemePreference(name);\r\n this.applyCustomerTheme();\r\n }\r\n\r\n /**\r\n * Applies the customer brand colors to CSS variables, automatically\r\n * deriving variants in OKLCH and enforcing WCAG contrast against the\r\n * current theme background. If the provided color is not accessible\r\n * as a UI color, it is silently adjusted so UI components stay readable.\r\n * The original brand color is preserved in --customer-*-color-source\r\n * for purely decorative use (logos, marketing surfaces).\r\n */\r\n applyCustomerTheme(): void {\r\n if (!this.isBrowser || !this.customerContext) {\r\n return;\r\n }\r\n\r\n const primary = this.customerContext.primaryColor();\r\n const secondary = this.customerContext.secondaryColor();\r\n\r\n this.applyPalette('primary', primary);\r\n this.applyPalette('secondary', secondary);\r\n }\r\n\r\n private applyPalette(kind: 'primary' | 'secondary', color: string | undefined): void {\r\n if (!color) return;\r\n const source = hexToRgb(color);\r\n if (!source) return;\r\n\r\n const palette = this.derivePalette(source);\r\n const root = this.document.documentElement.style;\r\n const prefix = `--customer-${kind}-color`;\r\n\r\n root.setProperty(prefix, palette.base);\r\n root.setProperty(`${prefix}-source`, palette.source);\r\n root.setProperty(`${prefix}-light`, palette.light);\r\n root.setProperty(`${prefix}-lighter`, palette.lighter);\r\n root.setProperty(`${prefix}-dark`, palette.dark);\r\n root.setProperty(`${prefix}-darker`, palette.darker);\r\n root.setProperty(`${prefix}-text`, palette.text);\r\n root.setProperty(`${prefix}-rgb`, palette.rgb);\r\n }\r\n\r\n private derivePalette(source: Rgb): DerivedPalette {\r\n const isDark = this.isDarkThemeSignal();\r\n const background = isDark ? DARK_BACKGROUND : LIGHT_BACKGROUND;\r\n const ratio = targetRatio(this.options?.targetContrast ?? 'AA');\r\n\r\n const accessible = ensureContrast(source, background, ratio);\r\n\r\n const { l, c, h } = rgbToOklch(accessible);\r\n const variants = isDark\r\n ? {\r\n light: clampL(l + 0.06),\r\n lighter: clampL(l + 0.14),\r\n dark: clampL(l - 0.06),\r\n darker: clampL(l - 0.14),\r\n }\r\n : {\r\n light: clampL(l + 0.08),\r\n lighter: clampL(l + 0.18),\r\n dark: clampL(l - 0.08),\r\n darker: clampL(l - 0.16),\r\n };\r\n\r\n const lightColor = oklchToRgb({ l: variants.light, c, h });\r\n const lighterColor = oklchToRgb({ l: variants.lighter, c, h });\r\n const darkColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.dark, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n const darkerColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.darker, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n\r\n const text = bestTextColor(accessible);\r\n const rgb = `${Math.round(accessible.r)}, ${Math.round(accessible.g)}, ${Math.round(accessible.b)}`;\r\n\r\n return {\r\n base: rgbToHex(accessible),\r\n source: rgbToHex(source),\r\n light: rgbToHex(lightColor),\r\n lighter: rgbToHex(lighterColor),\r\n dark: rgbToHex(darkColor),\r\n darker: rgbToHex(darkerColor),\r\n text,\r\n rgb,\r\n };\r\n }\r\n\r\n private ensureIfInteractive(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n return contrastRatio(color, background) >= ratio\r\n ? color\r\n : ensureContrast(color, background, ratio);\r\n }\r\n\r\n private initializeTheme(): void {\r\n let savedTheme: Theme | null = null;\r\n if (this.isBrowser) {\r\n try {\r\n savedTheme = this.document.defaultView?.localStorage.getItem(THEME_STORAGE_KEY) as Theme;\r\n } catch {\r\n savedTheme = null;\r\n }\r\n }\r\n const isValid = savedTheme === 'light' || savedTheme === 'dark';\r\n // No stored preference → honour the OS \"prefers-color-scheme\" setting.\r\n const initial: Theme = isValid ? (savedTheme as Theme) : this.prefersDarkScheme() ? 'dark' : 'light';\r\n this.setDarkTheme(initial === 'dark');\r\n }\r\n\r\n /** True when the OS/browser requests a dark colour scheme. */\r\n private prefersDarkScheme(): boolean {\r\n const view = this.document.defaultView;\r\n return this.isBrowser && !!view?.matchMedia?.('(prefers-color-scheme: dark)').matches;\r\n }\r\n\r\n private saveThemePreference(theme: Theme): void {\r\n if (!this.isBrowser) return;\r\n try {\r\n this.document.defaultView?.localStorage.setItem(THEME_STORAGE_KEY, theme);\r\n } catch {\r\n /* storage unavailable, preference not persisted */\r\n }\r\n }\r\n}\r\n\r\nfunction clampL(value: number): number {\r\n return Math.max(0, Math.min(1, value));\r\n}\r\n","import { Injectable, inject, InjectionToken, Type } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport interface TranslationProvider {\r\n translate(key: string, params?: Record<string, unknown>): string;\r\n translateAsync(key: string, params?: Record<string, unknown>): Observable<string>;\r\n setLanguage(lang: string): void;\r\n getCurrentLanguage(): string;\r\n onLangChange(): Observable<string>;\r\n}\r\n\r\n@Injectable()\r\nexport class NgxTranslateProvider implements TranslationProvider {\r\n private translateService = inject(TranslateService);\r\n\r\n translate(key: string, params?: Record<string, unknown>): string {\r\n if (!key) return '';\r\n return this.translateService.instant(key, params);\r\n }\r\n\r\n translateAsync(key: string, params?: Record<string, unknown>): Observable<string> {\r\n if (!key) return new Observable(subscriber => subscriber.next(''));\r\n return this.translateService.stream(key, params);\r\n }\r\n\r\n setLanguage(lang: string): void {\r\n this.translateService.use(lang);\r\n }\r\n\r\n getCurrentLanguage(): string {\r\n return this.translateService.currentLang;\r\n }\r\n\r\n onLangChange(): Observable<string> {\r\n return this.translateService.onLangChange.pipe(\r\n map(event => event.lang)\r\n );\r\n }\r\n}\r\n\r\nexport const TRANSLATION_PROVIDER = new InjectionToken<TranslationProvider>('TRANSLATION_PROVIDER', {\r\n factory: () => new NgxTranslateProvider()\r\n});\r\n\r\nexport function provideTranslation(provider: Type<TranslationProvider> = NgxTranslateProvider) {\r\n return { provide: TRANSLATION_PROVIDER, useClass: provider };\r\n}","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScrollService {\r\n private readonly router = inject(Router);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n constructor() {\r\n // Subscribe to router events\r\n this.router.events.pipe(\r\n // Filter only NavigationEnd events\r\n filter(event => event instanceof NavigationEnd)\r\n ).subscribe(() => {\r\n // Reset scroll position (browser only)\r\n if (this.isBrowser) {\r\n this.document.defaultView?.scrollTo(0, 0);\r\n }\r\n });\r\n }\r\n}\r\n","import { DestroyRef, inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\nexport type AnnouncerPoliteness = 'polite' | 'assertive';\r\n\r\nconst SR_ONLY_STYLE =\r\n 'position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;' +\r\n 'overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;';\r\n\r\n/**\r\n * Centralised ARIA live-region announcer.\r\n *\r\n * Provides a single pair of visually-hidden `aria-live` regions (polite and\r\n * assertive) shared across the whole application, instead of every component\r\n * rendering its own live region. Inject it and call {@link announce} to read a\r\n * message to assistive technology (toasts, async loading, form validation…).\r\n *\r\n * @example\r\n * ```typescript\r\n * private announcer = inject(PshLiveAnnouncerService);\r\n * this.announcer.announce('3 results found');\r\n * this.announcer.announce('Save failed', 'assertive');\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshLiveAnnouncerService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private politeRegion: HTMLElement | null = null;\r\n private assertiveRegion: HTMLElement | null = null;\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => this.dispose());\r\n }\r\n\r\n /**\r\n * Announces a message in the requested live region.\r\n * The region is cleared first so the same message announced twice is re-read.\r\n */\r\n announce(message: string, politeness: AnnouncerPoliteness = 'polite'): void {\r\n if (!this.isBrowser) return;\r\n const region = this.getRegion(politeness);\r\n region.textContent = '';\r\n // Re-assign after clearing so assistive tech registers the change.\r\n region.textContent = message;\r\n }\r\n\r\n /** Clears both live regions. */\r\n clear(): void {\r\n if (this.politeRegion) this.politeRegion.textContent = '';\r\n if (this.assertiveRegion) this.assertiveRegion.textContent = '';\r\n }\r\n\r\n private getRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n if (politeness === 'assertive') {\r\n this.assertiveRegion ??= this.createRegion('assertive');\r\n return this.assertiveRegion;\r\n }\r\n this.politeRegion ??= this.createRegion('polite');\r\n return this.politeRegion;\r\n }\r\n\r\n private createRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n const region = this.document.createElement('div');\r\n region.setAttribute('aria-live', politeness);\r\n region.setAttribute('aria-atomic', 'true');\r\n region.setAttribute('role', politeness === 'assertive' ? 'alert' : 'status');\r\n region.setAttribute('style', SR_ONLY_STYLE);\r\n region.classList.add('psh-live-announcer');\r\n this.document.body.appendChild(region);\r\n return region;\r\n }\r\n\r\n private dispose(): void {\r\n this.politeRegion?.remove();\r\n this.assertiveRegion?.remove();\r\n this.politeRegion = null;\r\n this.assertiveRegion = null;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_CONFIG","i1.PshClickOutsideDirective","DEFAULT_ARIA_LABELS"],"mappings":"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"}
1
+ {"version":3,"file":"ps-helix.mjs","sources":["../../../projects/ps-helix/src/lib/components/alert/alert.component.ts","../../../projects/ps-helix/src/lib/components/alert/alert.component.html","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.ts","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.html","../../../projects/ps-helix/src/lib/components/badge/badge.component.ts","../../../projects/ps-helix/src/lib/components/badge/badge.component.html","../../../projects/ps-helix/src/lib/components/button/button.component.ts","../../../projects/ps-helix/src/lib/components/button/button.component.html","../../../projects/ps-helix/src/lib/components/card/card.component.ts","../../../projects/ps-helix/src/lib/components/card/card.component.html","../../../projects/ps-helix/src/lib/components/tag/tag.component.ts","../../../projects/ps-helix/src/lib/components/tag/tag.component.html","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.ts","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.html","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.ts","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.html","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.ts","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.html","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.html","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.ts","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.html","../../../projects/ps-helix/src/lib/a11y/overlay-position.service.ts","../../../projects/ps-helix/src/lib/a11y/click-outside.directive.ts","../../../projects/ps-helix/src/lib/a11y/portal.service.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.html","../../../projects/ps-helix/src/lib/components/input/input.types.ts","../../../projects/ps-helix/src/lib/components/input/input.component.ts","../../../projects/ps-helix/src/lib/components/input/input.component.html","../../../projects/ps-helix/src/lib/components/textarea/textarea.types.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.html","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.html","../../../projects/ps-helix/src/lib/components/menu/menu.component.ts","../../../projects/ps-helix/src/lib/components/menu/menu.component.html","../../../projects/ps-helix/src/lib/a11y/focus-trap.directive.ts","../../../projects/ps-helix/src/lib/a11y/overlay.service.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.html","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.ts","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.html","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.ts","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.html","../../../projects/ps-helix/src/lib/components/radio/radio.component.ts","../../../projects/ps-helix/src/lib/components/radio/radio.component.html","../../../projects/ps-helix/src/lib/components/select/select.component.ts","../../../projects/ps-helix/src/lib/components/select/select.component.html","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.ts","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.html","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.ts","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.html","../../../projects/ps-helix/src/lib/components/stepper/step.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.html","../../../projects/ps-helix/src/lib/components/state-flow-indicator/flow-step.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.html","../../../projects/ps-helix/src/lib/components/switch/switch.component.ts","../../../projects/ps-helix/src/lib/components/switch/switch.component.html","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.ts","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.html","../../../projects/ps-helix/src/lib/components/table/table.component.ts","../../../projects/ps-helix/src/lib/components/table/table.component.html","../../../projects/ps-helix/src/lib/components/tabs/tab.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.html","../../../projects/ps-helix/src/lib/components/toast/toast.tokens.ts","../../../projects/ps-helix/src/lib/components/toast/toast.service.ts","../../../projects/ps-helix/src/lib/components/toast/toast.compat.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.html","../../../projects/ps-helix/src/lib/services/theme/utils/color.utils.ts","../../../projects/ps-helix/src/lib/services/theme/utils/wcag.utils.ts","../../../projects/ps-helix/src/lib/services/theme/theme.service.ts","../../../projects/ps-helix/src/lib/services/translation/translation.service.ts","../../../projects/ps-helix/src/lib/services/scroll.service.ts","../../../projects/ps-helix/src/lib/a11y/live-announcer.service.ts","../../../projects/ps-helix/src/ps-helix.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AlertType, IconPosition, AlertSize, AlertRole, AlertLabels } from './alert.types';\r\n\r\n// Default alert labels\r\nconst DEFAULT_LABELS: AlertLabels = {\r\n dismiss: 'Dismiss alert'\r\n};\r\n\r\n// Default alert icons\r\nconst DEFAULT_ICONS: Record<string, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n};\r\n\r\nconst DEFAULT_CONFIG = {\r\n type: 'info' as AlertType,\r\n iconPosition: 'left' as IconPosition,\r\n closable: false,\r\n size: 'medium' as AlertSize,\r\n showIcon: true\r\n};\r\n\r\n@Component({\r\n selector: 'psh-alert',\r\n imports: [CommonModule],\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAlertComponent {\r\n\r\n // Inputs\r\n type = input<AlertType>(DEFAULT_CONFIG.type);\r\n iconPosition = input<IconPosition>(DEFAULT_CONFIG.iconPosition);\r\n closable = input(DEFAULT_CONFIG.closable);\r\n size = input<AlertSize>(DEFAULT_CONFIG.size);\r\n showIcon = input(DEFAULT_CONFIG.showIcon);\r\n role = input<AlertRole>();\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n dismissLabel = input(DEFAULT_LABELS.dismiss);\r\n ariaLive = input<'polite' | 'assertive'>();\r\n content = input('');\r\n \r\n // Outputs\r\n closed = output<void>();\r\n\r\n // Computed values\r\n defaultIcon = computed(() => DEFAULT_ICONS[this.type()] || 'info');\r\n getIcon = computed(() => this.icon() || this.defaultIcon());\r\n\r\n computedAriaLive = computed(() => \r\n this.ariaLive() || (['warning', 'danger'].includes(this.type()) ? 'assertive' : 'polite')\r\n );\r\n\r\n computedRole = computed(() => \r\n this.role() || (['warning', 'danger'].includes(this.type()) ? 'alert' : 'status')\r\n );\r\n\r\n state = computed(() => {\r\n if (this.closable()) return 'closable';\r\n return this.type();\r\n });\r\n\r\n handleClose(): void {\r\n this.closed.emit();\r\n }\r\n}","<div\r\n class=\"alert\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class]=\"type()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-live]=\"computedAriaLive()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div class=\"alert-content\" [class.icon-right]=\"iconPosition() === 'right'\">\r\n @if (showIcon()) {\r\n <i class=\"ph ph-{{ getIcon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <div class=\"alert-message\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </div>\r\n </div>\r\n \r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"alert-dismiss\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AvatarSize, AvatarShape, AvatarStatus } from './avatar.types';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n size: 'medium' as AvatarSize,\r\n shape: 'circle' as AvatarShape,\r\n alt: 'User avatar',\r\n icon: 'user'\r\n};\r\n\r\n// Default status colors\r\nconst DEFAULT_STATUS_COLORS: Record<AvatarStatus, string> = {\r\n online: 'var(--success-color)',\r\n offline: 'var(--surface-400)',\r\n away: 'var(--warning-color)',\r\n busy: 'var(--danger-color)'\r\n};\r\n\r\n@Component({\r\n selector: 'psh-avatar',\r\n imports: [CommonModule],\r\n templateUrl: './avatar.component.html',\r\n styleUrls: ['./avatar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAvatarComponent {\r\n\r\n // Model inputs with defaults\r\n size = model<AvatarSize>(DEFAULT_CONFIG.size);\r\n shape = model<AvatarShape>(DEFAULT_CONFIG.shape);\r\n src = model<string | undefined>();\r\n alt = model<string>(DEFAULT_CONFIG.alt);\r\n\r\n // Regular inputs\r\n initials = input('');\r\n icon = input<string>(DEFAULT_CONFIG.icon);\r\n status = input<AvatarStatus | undefined>();\r\n ariaLabel = input<string>();\r\n\r\n // Computed values\r\n hasImage = computed(() => !!this.src());\r\n hasInitials = computed(() => !!this.initials() && !this.hasImage());\r\n hasIcon = computed(() => !this.hasImage() && !this.hasInitials());\r\n\r\n computedAriaLabel = computed(() => this.ariaLabel() || this.alt());\r\n\r\n statusColor = computed(() => {\r\n const currentStatus = this.status();\r\n if (!currentStatus) return undefined;\r\n return DEFAULT_STATUS_COLORS[currentStatus];\r\n });\r\n\r\n state = computed(() => this.status() || 'default');\r\n}","<div \r\n class=\"avatar\"\r\n [class.circle]=\"shape() === 'circle'\"\r\n [class.square]=\"shape() === 'square'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.xlarge]=\"size() === 'xlarge'\"\r\n role=\"img\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (hasImage()) {\r\n <img [src]=\"src()\" [attr.alt]=\"alt()\" class=\"avatar-image\" />\r\n } @else if (hasInitials()) {\r\n <span class=\"avatar-initials\">{{ initials() }}</span>\r\n } @else if (hasIcon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (status()) {\r\n <span \r\n class=\"avatar-status\"\r\n [class]=\"status()\"\r\n [style.background-color]=\"statusColor()\"\r\n [attr.aria-label]=\"status()\"\r\n ></span>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BadgeSize, BadgeVariant, BadgePosition, BadgeDisplayType } from './badge.types';\r\n\r\nconst DEFAULT_CONFIG = {\r\n variant: 'primary' as BadgeVariant,\r\n size: 'medium' as BadgeSize,\r\n displayType: 'text' as BadgeDisplayType,\r\n max: 99,\r\n showZero: false,\r\n position: 'top-right' as BadgePosition\r\n};\r\n\r\n@Component({\r\n selector: 'psh-badge',\r\n imports: [CommonModule],\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshBadgeComponent<T = number> {\r\n\r\n readonly variant = input<BadgeVariant>(DEFAULT_CONFIG.variant);\r\n readonly size = input<BadgeSize>(DEFAULT_CONFIG.size);\r\n readonly displayType = input<BadgeDisplayType>(DEFAULT_CONFIG.displayType);\r\n readonly content = input<string>('');\r\n readonly visible = input(true);\r\n readonly value = input<T>();\r\n readonly max = input(DEFAULT_CONFIG.max);\r\n readonly showZero = input(DEFAULT_CONFIG.showZero);\r\n readonly position = input<BadgePosition>(DEFAULT_CONFIG.position);\r\n readonly overlap = input(false);\r\n readonly ariaLabel = input<string>();\r\n readonly formatter = input<((value: T) => string) | undefined>();\r\n\r\n readonly badgeClick = output<void>();\r\n readonly valueChange = output<T>();\r\n\r\n readonly computedRole = computed(() =>\r\n this.displayType() === 'counter' ? 'status' : 'img'\r\n );\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const content = this.content();\r\n if (content) return content;\r\n\r\n return this.displayValue();\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (!this.visible()) return 'hidden';\r\n if (this.overlap()) return 'overlap';\r\n return this.displayType();\r\n });\r\n\r\n private readonly isDot = computed(() => this.displayType() === 'dot');\r\n private readonly isCounter = computed(() => this.displayType() === 'counter');\r\n private readonly hasValue = computed(() => this.value() !== undefined);\r\n\r\n private readonly shouldDisplay = computed(() => {\r\n const currentValue = this.value();\r\n if (typeof currentValue !== 'number') return true;\r\n return currentValue > 0 || this.showZero();\r\n });\r\n\r\n private readonly formattedCustomValue = computed(() => {\r\n const formatter = this.formatter();\r\n const currentValue = this.value();\r\n\r\n if (!formatter || currentValue === null || currentValue === undefined) {\r\n return null;\r\n }\r\n\r\n return formatter(currentValue);\r\n });\r\n\r\n private readonly formattedNumericValue = computed(() => {\r\n const currentValue = this.value();\r\n\r\n if (typeof currentValue !== 'number') {\r\n return currentValue !== undefined ? String(currentValue) : '';\r\n }\r\n\r\n if (!this.shouldDisplay()) {\r\n return this.content() || '';\r\n }\r\n\r\n const maxValue = this.max();\r\n return currentValue > maxValue ? `${maxValue}+` : `${currentValue}`;\r\n });\r\n\r\n readonly displayValue = computed(() => {\r\n if (this.isDot()) {\r\n return '';\r\n }\r\n\r\n if (!this.isCounter() || !this.hasValue()) {\r\n return this.content();\r\n }\r\n\r\n const customFormatted = this.formattedCustomValue();\r\n if (customFormatted !== null) {\r\n return customFormatted;\r\n }\r\n\r\n return this.formattedNumericValue();\r\n });\r\n\r\n onBadgeClick(): void {\r\n this.badgeClick.emit();\r\n }\r\n}\r\n","<!-- Badge click is an optional convenience; the badge is a status/img indicator, not a primary control. -->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n class=\"badge\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.info]=\"variant() === 'info'\"\r\n [class.disabled]=\"variant() === 'disabled'\"\r\n [class.dot]=\"displayType() === 'dot'\"\r\n [class.counter]=\"displayType() === 'counter'\"\r\n [class.overlap]=\"overlap()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.medium]=\"size() === 'medium'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.top-right]=\"position() === 'top-right'\"\r\n [class.top-left]=\"position() === 'top-left'\"\r\n [class.bottom-right]=\"position() === 'bottom-right'\"\r\n [class.bottom-left]=\"position() === 'bottom-left'\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"onBadgeClick()\"\r\n>\r\n @if (displayType() === 'text') {\r\n <ng-content></ng-content>\r\n } @else if (displayType() === 'counter') {\r\n {{ displayValue() }}\r\n }\r\n</div>\r\n","import {\r\n AfterContentChecked,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ButtonAppearance, ButtonVariant, ButtonSize, ButtonIconPosition } from './button.types';\r\n\r\n@Component({\r\n selector: 'psh-button',\r\n imports: [],\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '(click)': 'onHostClick($event)',\r\n },\r\n})\r\nexport class PshButtonComponent implements AfterContentChecked {\r\n private elementRef = inject(ElementRef);\r\n private projectedText = signal<string | undefined>(undefined);\r\n\r\n appearance = input<ButtonAppearance>('filled');\r\n variant = input<ButtonVariant>('primary');\r\n size = input<ButtonSize>('medium');\r\n disabled = input(false);\r\n loading = input(false);\r\n fullWidth = model(false);\r\n iconPosition = input<ButtonIconPosition>('left');\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n loadingText = input('Loading...');\r\n disabledText = input('This action is currently unavailable');\r\n iconOnlyText = input<string>();\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n\r\n clicked = output<MouseEvent>();\r\n disabledClick = output<MouseEvent>();\r\n\r\n ngAfterContentChecked(): void {\r\n const button = this.elementRef.nativeElement.querySelector('button');\r\n if (button) {\r\n const ngContentElement = button.querySelector('.button-content');\r\n if (ngContentElement) {\r\n const textContent = ngContentElement.textContent?.trim() || '';\r\n const currentProjectedText = this.projectedText();\r\n if (textContent && textContent !== currentProjectedText) {\r\n this.projectedText.set(textContent);\r\n } else if (!textContent && currentProjectedText) {\r\n this.projectedText.set(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n computedAriaLabel = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.loading()) return this.loadingText();\r\n if (this.disabled()) return this.disabledText();\r\n if (this.iconPosition() === 'only') {\r\n return this.iconOnlyText() || 'Button';\r\n }\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n return undefined;\r\n });\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.loading()) return 'loading';\r\n return 'default';\r\n });\r\n\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n onHostClick(event: MouseEvent): void {\r\n if (this.disabled() && !this.loading()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.disabledClick.emit(event);\r\n }\r\n }\r\n}","<button\r\n [attr.data-state]=\"state()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [type]=\"type()\"\r\n [class]=\"appearance()\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.disabled]=\"disabled()\"\r\n [class.loading]=\"loading()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.medium]=\"size() === 'medium'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.icon-only]=\"iconPosition() === 'only'\"\r\n [disabled]=\"disabled() || loading()\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <span class=\"button-content\">\r\n @if (loading()) {\r\n <span class=\"loader\" aria-hidden=\"true\"></span>\r\n @if (iconPosition() !== 'only') {\r\n {{ loadingText() }}\r\n }\r\n }\r\n @if (!loading() && icon() && (iconPosition() === 'left' || iconPosition() === 'only')) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (!loading() && iconPosition() !== 'only') {\r\n <ng-content></ng-content>\r\n }\r\n @if (!loading() && icon() && iconPosition() === 'right') {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n</button>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { CardVariant, CardColorVariant, CardDensity, CardActionsAlignment } from './card.types';\r\n\r\n/**\r\n * Composant carte métier - conteneur structuré pour contenu professionnel\r\n *\r\n * Ce composant fournit une structure de carte métier avec :\r\n * - Header enrichi avec titre, description et slots pour icônes/badges\r\n * - Body avec spacing généreux et bien défini\r\n * - Footer optionnel pour métadonnées\r\n * - Zone d'actions avec alignement configurable\r\n * - Support de différentes densités et variantes de couleur\r\n * - Dividers automatiques entre les sections\r\n *\r\n * Les boutons placés dans le slot card-actions deviennent automatiquement\r\n * pleine largeur sur mobile (< 640px) grâce à une directive automatique.\r\n *\r\n * @example\r\n * <psh-card\r\n * title=\"Mon titre\"\r\n * description=\"Ma description\"\r\n * variant=\"elevated\"\r\n * >\r\n * <p>Contenu principal</p>\r\n * <div card-actions>\r\n * <psh-button variant=\"primary\">Action</psh-button>\r\n * </div>\r\n * </psh-card>\r\n */\r\n@Component({\r\n selector: 'psh-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n style: 'display: block;',\r\n },\r\n})\r\nexport class PshCardComponent implements OnDestroy {\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private resizeObserver?: ResizeObserver;\r\n\r\n isMobile = signal<boolean>(false);\r\n // Model inputs - propriétés modifiables\r\n /** Variante visuelle de la carte (default, elevated, outlined) */\r\n variant = model<CardVariant>('default');\r\n\r\n /** Effet de survol activé (animation translateY) */\r\n hoverable = model(false);\r\n\r\n /** Carte cliquable (ajoute cursor pointer et gestion du focus) */\r\n interactive = model(false);\r\n\r\n // Regular inputs - propriétés en lecture seule\r\n /** Titre principal de la carte */\r\n title = input<string>('');\r\n\r\n /** Description/sous-titre optionnel */\r\n description = input<string>('');\r\n\r\n /** Variante de couleur pour cartes spéciales (info, success, warning, danger) */\r\n colorVariant = input<CardColorVariant>('default');\r\n\r\n /** Niveau de densité du spacing (compact, normal, spacious) */\r\n density = input<CardDensity>('normal');\r\n\r\n /** Afficher le divider entre header et body */\r\n showHeaderDivider = input<boolean>(true);\r\n\r\n /** Afficher le divider entre body et footer */\r\n showFooterDivider = input<boolean>(true);\r\n\r\n /** Afficher le divider entre footer et actions */\r\n showActionsDivider = input<boolean>(true);\r\n\r\n /** Alignement des actions dans la zone card-actions */\r\n actionsAlignment = input<CardActionsAlignment>('right');\r\n\r\n /** Activer/désactiver le padding du body */\r\n bodyPadding = input<boolean>(true);\r\n\r\n /** Classes CSS additionnelles */\r\n cssClass = input<string>('');\r\n\r\n /** Styles inline personnalisés */\r\n customStyle = input<Record<string, string>>({});\r\n\r\n /** État de chargement - affiche un skeleton */\r\n loading = input<boolean>(false);\r\n\r\n /** État désactivé - réduit l'opacité */\r\n disabled = input<boolean>(false);\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte (si interactive) */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n /** Classes CSS calculées selon les propriétés */\r\n computedClasses = computed(() => {\r\n const classes = ['card'];\r\n classes.push(`variant-${this.variant()}`);\r\n classes.push(`color-${this.colorVariant()}`);\r\n classes.push(`density-${this.density()}`);\r\n\r\n if (this.hoverable()) classes.push('hoverable');\r\n if (this.interactive()) classes.push('interactive');\r\n if (this.loading()) classes.push('loading');\r\n if (this.disabled()) classes.push('disabled');\r\n if (this.cssClass()) classes.push(this.cssClass());\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Styles calculés */\r\n computedStyles = computed(() => {\r\n return { ...this.customStyle() };\r\n });\r\n\r\n /** Indique si le header doit être affiché */\r\n hasHeader = computed(() => {\r\n return !!(this.title() || this.description());\r\n });\r\n\r\n /** Classe d'alignement pour la zone d'actions */\r\n actionsAlignmentClass = computed(() => {\r\n return `actions-align-${this.actionsAlignment()}`;\r\n });\r\n\r\n actionsClasses = computed(() => {\r\n const classes = [this.actionsAlignmentClass()];\r\n if (this.isMobile()) {\r\n classes.push('mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.checkMobileViewport();\r\n\r\n if (this.document.defaultView) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.checkMobileViewport();\r\n });\r\n this.resizeObserver.observe(this.document.documentElement);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n }\r\n\r\n private checkMobileViewport(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.isMobile.set(view.innerWidth <= 640);\r\n }\r\n }\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n * Émet l'événement clicked seulement si la carte est interactive\r\n * et non désactivée\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier (Enter et Space)\r\n * Permet d'activer la carte au clavier pour l'accessibilité\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}\r\n","<div\r\n [class]=\"computedClasses()\"\r\n [style]=\"computedStyles()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n role=\"article\"\r\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\r\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n>\r\n <!-- Header avec titre et description intégrés -->\r\n @if (hasHeader()) {\r\n <div class=\"card-header\" [class.has-divider]=\"showHeaderDivider()\">\r\n <!-- Slot pour icône/avatar avant le titre -->\r\n <ng-content select=\"[card-header-icon]\"></ng-content>\r\n\r\n <!-- Zone de titre et description -->\r\n @if (title() || description()) {\r\n <div class=\"card-header-content\">\r\n @if (title()) {\r\n <h3 class=\"card-title\">{{ title() }}</h3>\r\n }\r\n @if (description()) {\r\n <p class=\"card-description\">{{ description() }}</p>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Slot pour contenu personnalisé du header -->\r\n <ng-content select=\"[card-header-content]\"></ng-content>\r\n\r\n <!-- Slot pour badge/tag ou actions secondaires -->\r\n <ng-content select=\"[card-header-extra]\"></ng-content>\r\n </div>\r\n }\r\n\r\n <!-- Body avec contenu principal -->\r\n <div class=\"card-body\" [class.no-padding]=\"!bodyPadding()\">\r\n <!-- État de chargement -->\r\n @if (loading()) {\r\n <div class=\"card-loading\">\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line short\"></div>\r\n </div>\r\n } @else {\r\n <!-- Contenu principal (slot par défaut) -->\r\n <ng-content></ng-content>\r\n }\r\n </div>\r\n\r\n <!-- Footer optionnel pour métadonnées -->\r\n <div class=\"card-footer\" [class.has-divider]=\"showFooterDivider()\">\r\n <ng-content select=\"[card-footer]\"></ng-content>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"card-actions\" [class]=\"actionsClasses()\" [class.has-divider]=\"showActionsDivider()\">\r\n <ng-content select=\"[card-actions]\"></ng-content>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, InjectionToken, ElementRef, AfterContentChecked, signal } from '@angular/core';\r\nimport { TagVariant, TagSize, TagConfig } from './tag.types';\r\n\r\nexport const TAG_CONFIG = new InjectionToken<Partial<TagConfig>>('TAG_CONFIG', {\r\n factory: () => ({\r\n variant: 'primary',\r\n size: 'medium',\r\n closable: false,\r\n disabled: false,\r\n interactive: false,\r\n closeLabel: 'Supprimer le tag'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tag',\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshTagComponent implements AfterContentChecked {\r\n private readonly config = inject(TAG_CONFIG);\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly projectedText = signal('');\r\n\r\n readonly variant = input<TagVariant>(this.config.variant ?? 'primary');\r\n readonly size = input<TagSize>(this.config.size ?? 'medium');\r\n readonly closable = input(this.config.closable ?? false);\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly interactive = input(this.config.interactive ?? false);\r\n readonly icon = input<string>();\r\n readonly closeLabel = input(this.config.closeLabel ?? 'Supprimer le tag');\r\n readonly content = input('Tag');\r\n readonly ariaLabel = input<string>();\r\n\r\n readonly clicked = output<MouseEvent>();\r\n readonly closed = output<void>();\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const contentText = this.content();\r\n if (contentText && contentText !== 'Tag') return contentText;\r\n\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n\r\n return 'Tag';\r\n });\r\n\r\n ngAfterContentChecked(): void {\r\n const contentElement = this.elementRef.nativeElement.querySelector('.tag-content');\r\n if (contentElement) {\r\n const text = (contentElement.textContent || '').trim();\r\n if (text !== this.projectedText()) {\r\n this.projectedText.set(text);\r\n }\r\n }\r\n }\r\n\r\n readonly computedRole = computed(() =>\r\n this.interactive() ? 'button' : 'status'\r\n );\r\n\r\n readonly computedTabIndex = computed(() =>\r\n this.interactive() && !this.disabled() ? 0 : -1\r\n );\r\n\r\n readonly state = computed(() => this.disabled() ? 'disabled' : 'default');\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && this.interactive()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled() || !this.interactive()) return;\r\n\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event as unknown as MouseEvent);\r\n }\r\n }\r\n\r\n handleClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.closed.emit();\r\n }\r\n }\r\n}","<div\r\n class=\"tag\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.disabled]=\"disabled()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.tabindex]=\"computedTabIndex()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() || null\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n>\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"tag-content\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </span>\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"tag-close\"\r\n (click)=\"handleClose($event)\"\r\n [attr.aria-label]=\"closeLabel()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PshTagComponent } from '../tag/tag.component';\r\nimport { StatTagVariant, StatCardLayout, StatCardVariant } from './stat-card.types';\r\n\r\nconst ICON_GRADIENT_DEFAULTS: Record<StatTagVariant, string> = {\r\n success: 'linear-gradient(135deg, #34D399, #059669)',\r\n danger: 'linear-gradient(135deg, #F87171, #DC2626)',\r\n warning: 'linear-gradient(135deg, #FBBF24, #D97706)',\r\n primary: 'linear-gradient(135deg, #60A5FA, #2563EB)'\r\n};\r\n@Component({\r\n selector: 'psh-stat-card',\r\n imports: [CommonModule, PshTagComponent],\r\n templateUrl: './stat-card.component.html',\r\n styleUrls: ['./stat-card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PshStatCardComponent {\r\n\r\n // Inputs principaux\r\n /** Valeur principale de la statistique (nombre ou texte formaté) */\r\n value = input<string | number>();\r\n\r\n /** Description de la statistique */\r\n description = input<string>();\r\n\r\n /** Nom de l'icône Phosphor (sans le préfixe 'ph-') */\r\n icon = input<string>();\r\n\r\n // Inputs optionnels\r\n /** Variante du tag d'évolution (détermine la couleur) */\r\n tagVariant = input<StatTagVariant>();\r\n\r\n /** Label du tag d'évolution (ex: '+12.6%', '-8.1%') */\r\n tagLabel = input<string>();\r\n\r\n /** Couleur de fond personnalisée pour l'icône (CSS gradient ou couleur) */\r\n iconBackground = input<string>();\r\n\r\n /** Variante visuelle de la carte de base */\r\n variant = input<StatCardVariant>('elevated');\r\n\r\n /** Carte cliquable avec feedback visuel */\r\n interactive = input(false);\r\n\r\n /** Effet de survol */\r\n hoverable = input(false);\r\n\r\n /** État de chargement */\r\n loading = input(false);\r\n\r\n /** État désactivé */\r\n disabled = input(false);\r\n\r\n /** Classes CSS additionnelles */\r\n cssClass = input<string>('');\r\n\r\n /** Styles inline personnalisés */\r\n customStyle = input<Record<string, string>>({});\r\n\r\n /** Label ARIA pour l'accessibilité */\r\n ariaLabel = input<string>();\r\n\r\n /** Disposition de la carte: 'horizontal' (icône à gauche) ou 'vertical' (icône en haut) */\r\n layout = input<StatCardLayout>('horizontal');\r\n\r\n /** Active la direction row pour le card-body (icône et contenu côte à côte en flex-row) */\r\n rowDirection = input(false);\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n private computedValue = computed(() => this.value() ?? '');\r\n\r\n private computedDescription = computed(() => this.description() ?? '');\r\n\r\n private computedIcon = computed(() => this.icon() ?? '');\r\n\r\n private computedTagVariant = computed(() => this.tagVariant());\r\n\r\n private computedTagLabel = computed(() => this.tagLabel());\r\n\r\n private computedIconBackground = computed(() => {\r\n const customBg = this.iconBackground();\r\n if (customBg) return customBg;\r\n\r\n const variant = this.tagVariant();\r\n return variant ? ICON_GRADIENT_DEFAULTS[variant] : null;\r\n });\r\n\r\n /** Style de l'icône avec couleur de fond personnalisée */\r\n iconStyle = computed(() => {\r\n const background = this.computedIconBackground();\r\n return background ? { background } : null;\r\n });\r\n\r\n /** Vérifie si un tag doit être affiché */\r\n hasTag = computed(() =>\r\n !!(this.computedTagVariant() && this.computedTagLabel())\r\n );\r\n\r\n /** Vérifie si une icône doit être affichée */\r\n hasIcon = computed(() => !!this.computedIcon());\r\n\r\n useRowDirection = computed(() => this.rowDirection());\r\n\r\n /** Label ARIA calculé */\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const value = this.computedValue();\r\n const desc = this.computedDescription();\r\n const tag = this.computedTagLabel();\r\n\r\n return tag\r\n ? `${desc}: ${value}, ${tag}`\r\n : `${desc}: ${value}`;\r\n });\r\n\r\n /** Classes CSS calculées */\r\n computedClasses = computed(() => {\r\n const classes = ['stat-card'];\r\n const layout = this.layout();\r\n\r\n classes.push(`variant-${this.variant()}`);\r\n\r\n if (layout === 'vertical') {\r\n classes.push('stat-card--vertical');\r\n } else {\r\n classes.push('stat-card--horizontal');\r\n }\r\n\r\n if (this.useRowDirection()) {\r\n classes.push('stat-card--row');\r\n }\r\n\r\n if (this.hoverable()) classes.push('hoverable');\r\n if (this.interactive()) classes.push('interactive');\r\n if (this.loading()) classes.push('loading');\r\n if (this.disabled()) classes.push('disabled');\r\n if (this.cssClass()) classes.push(this.cssClass());\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Styles calculés */\r\n computedStyles = computed(() => {\r\n return { ...this.customStyle() };\r\n });\r\n\r\n // Exposer les valeurs calculées pour le template\r\n protected get displayValue() { return this.computedValue(); }\r\n protected get displayDescription() { return this.computedDescription(); }\r\n protected get displayIcon() { return this.computedIcon(); }\r\n protected get displayTagVariant() { return this.computedTagVariant(); }\r\n protected get displayTagLabel() { return this.computedTagLabel(); }\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}","<div\r\n [class]=\"computedClasses()\"\r\n [ngStyle]=\"computedStyles()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [attr.role]=\"interactive() ? 'button' : 'article'\"\r\n>\r\n @if (loading()) {\r\n <div class=\"stat-loading\">\r\n <div class=\"skeleton-circle\"></div>\r\n <div class=\"skeleton-content\">\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line short\"></div>\r\n </div>\r\n </div>\r\n } @else {\r\n @if (useRowDirection()) {\r\n <div class=\"stat-card-body\">\r\n @if (hasIcon()) {\r\n <div class=\"stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"stat-content\">\r\n <h3 class=\"stat-value\">{{ displayValue }}</h3>\r\n <p class=\"stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [variant]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n @if (hasIcon()) {\r\n <div class=\"stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"stat-content\">\r\n <h3 class=\"stat-value\">{{ displayValue }}</h3>\r\n <p class=\"stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [variant]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n }\r\n }\r\n</div>\r\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n ViewEncapsulation\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HorizontalCardVariant } from './horizontal-card.types';\n\n/**\n * Composant carte horizontale autonome\n *\n * Composant complètement indépendant pour créer une mise en page\n * horizontale avec contenu latéral.\n *\n * Ce composant est particulièrement adapté pour :\n * - Cartes produits avec image latérale\n * - Profils utilisateurs avec avatar\n * - Articles avec illustration\n *\n * Le layout bascule automatiquement en vertical sur mobile.\n *\n * @example\n * <psh-horizontal-card variant=\"elevated\" sideWidth=\"var(--size-48)\">\n * <div horizontal-side>\n * <img src=\"image.jpg\" alt=\"Product\">\n * </div>\n * <h3 horizontal-header>Titre du produit</h3>\n * <p>Description du produit</p>\n * <div horizontal-actions>\n * <psh-button>Voir</psh-button>\n * </div>\n * </psh-horizontal-card>\n */\n@Component({\n selector: 'psh-horizontal-card',\n imports: [CommonModule],\n templateUrl: './horizontal-card.component.html',\n styleUrls: ['./horizontal-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class PshHorizontalCardComponent {\n\n /** Variante de la carte de base */\n variant = input<HorizontalCardVariant>('elevated');\n\n /** Carte cliquable */\n interactive = input(false);\n\n /** Effet de survol */\n hoverable = input(false);\n\n /** État de chargement */\n loading = input(false);\n\n /** État désactivé */\n disabled = input(false);\n\n /** Classes CSS additionnelles */\n cssClass = input<string>('');\n\n /** Styles inline personnalisés */\n customStyle = input<Record<string, string>>({});\n\n /** Largeur du contenu latéral (utiliser les tokens de sizing comme var(--size-48)) */\n sideWidth = input<string>('var(--size-48)');\n\n /** Gap entre le contenu latéral et principal */\n gap = input<string>('var(--spacing-md)');\n\n /** Padding du contenu latéral */\n sidePadding = input<string>('0');\n\n /** Padding du contenu principal */\n contentPadding = input<string>('var(--spacing-md)');\n\n /** Hauteur du contenu latéral sur mobile (utiliser les tokens de sizing) */\n mobileHeight = input<string>('var(--size-48)');\n\n /** Émis lors du clic sur la carte */\n clicked = output<MouseEvent | KeyboardEvent>();\n\n /** Classes CSS calculées selon les propriétés */\n computedClasses = computed(() => {\n const classes = ['horizontal-card'];\n classes.push(`variant-${this.variant()}`);\n\n if (this.hoverable()) classes.push('hoverable');\n if (this.interactive()) classes.push('interactive');\n if (this.loading()) classes.push('loading');\n if (this.disabled()) classes.push('disabled');\n if (this.cssClass()) classes.push(this.cssClass());\n\n return classes.join(' ');\n });\n\n /** Styles calculés */\n computedStyles = computed(() => {\n return {\n '--horizontal-side-width': this.sideWidth(),\n '--horizontal-gap': this.gap(),\n '--horizontal-side-padding': this.sidePadding(),\n '--horizontal-content-padding': this.contentPadding(),\n '--horizontal-mobile-height': this.mobileHeight(),\n ...this.customStyle()\n };\n });\n\n /**\n * Gère le clic sur la carte\n */\n handleClick(event: MouseEvent): void {\n if (this.interactive() && !this.disabled() && !this.loading()) {\n this.clicked.emit(event);\n }\n }\n\n /**\n * Gère la navigation au clavier\n */\n handleKeydown(event: KeyboardEvent): void {\n if (this.interactive() && !this.disabled() && !this.loading()) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.clicked.emit(event);\n }\n }\n }\n}","<div\n [class]=\"computedClasses()\"\n [ngStyle]=\"computedStyles()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n role=\"article\"\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n>\n <!-- Contenu latéral -->\n <div class=\"horizontal-side\">\n @if (loading()) {\n <div class=\"horizontal-skeleton\"></div>\n } @else {\n <ng-content select=\"[horizontal-side]\"></ng-content>\n }\n </div>\n\n <!-- Contenu principal -->\n <div class=\"horizontal-content\">\n @if (loading()) {\n <div class=\"horizontal-loading\">\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line short\"></div>\n </div>\n } @else {\n <!-- Header optionnel -->\n <ng-content select=\"[horizontal-header]\"></ng-content>\n\n <!-- Contenu principal -->\n <ng-content></ng-content>\n\n <!-- Actions optionnelles -->\n <ng-content select=\"[horizontal-actions]\"></ng-content>\n }\n </div>\n</div>","import { Component, ChangeDetectionStrategy, computed, input, signal, PLATFORM_ID, inject, output, ViewEncapsulation, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { InfoCardData, InfoCardOptions, InfoCardVariant } from './info-card.types';\r\n\r\n/**\r\n * Info Card Component - Autonomous\r\n *\r\n * A fully independent card component that displays structured data as label/value pairs.\r\n * Provides a consistent way to present information with proper accessibility and responsive design.\r\n *\r\n * @example\r\n * ```typescript\r\n * const userData: InfoCardData[] = [\r\n * { label: 'Name', value: 'John Doe' },\r\n * { label: 'Email', value: 'john@example.com' }\r\n * ];\r\n * ```\r\n *\r\n * ```html\r\n * <psh-info-card\r\n * title=\"User Information\"\r\n * [data]=\"userData\"\r\n * icon=\"user\"\r\n * variant=\"elevated\"\r\n * ></psh-info-card>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-info-card',\r\n imports: [CommonModule],\r\n templateUrl: './info-card.component.html',\r\n styleUrl: './info-card.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n style: 'display: block; height: 100%;'\r\n }\r\n})\r\nexport class PshInfoCardComponent implements AfterContentInit, OnDestroy {\r\n\r\n hasHeaderActions = signal<boolean>(false);\r\n\r\n /** Title displayed in the card header */\r\n title = input<string>('');\r\n\r\n /** Array of label-value pairs to display */\r\n data = input<InfoCardData[]>([]);\r\n\r\n /** Display options for the card */\r\n options = input<InfoCardOptions>({\r\n showEmptyState: true,\r\n emptyStateMessage: 'Aucune information disponible',\r\n labelWidth: undefined,\r\n valueWidth: undefined\r\n });\r\n\r\n /** Base card variant style */\r\n variant = input<InfoCardVariant>('outlined');\r\n\r\n /** Icon to display in the header (Phosphor icon name without 'ph-' prefix) */\r\n icon = input<string>('circle-dashed');\r\n\r\n /** Custom ARIA label for accessibility */\r\n ariaLabel = input<string>();\r\n\r\n /** Custom CSS classes */\r\n cssClass = input<string>('');\r\n\r\n /** Custom inline styles */\r\n customStyle = input<Record<string, string>>({});\r\n\r\n /** Whether the card should be interactive/clickable */\r\n interactive = input<boolean>(false);\r\n\r\n /** Whether to show hover effects */\r\n hoverable = input<boolean>(false);\r\n\r\n /** Indicates if data is loading */\r\n loading = input<boolean>(false);\r\n\r\n /** Whether the card is disabled */\r\n disabled = input<boolean>(false);\r\n\r\n /** Emitted when card is clicked */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /** Whether to show copy buttons on rows (opt-in) */\r\n copyable = input<boolean>(false);\r\n\r\n /** Label prefix for the copy button aria-label */\r\n copyButtonLabel = input<string>('Copier');\r\n\r\n /** Text shown as feedback after successful copy */\r\n copyFeedbackText = input<string>('Copié');\r\n\r\n /** Emitted when a row value is successfully copied */\r\n copied = output<InfoCardData>();\r\n\r\n /** Emitted when a copy attempt fails */\r\n copyFailed = output<InfoCardData>();\r\n\r\n /** Tracks the row index currently showing success feedback */\r\n copiedRowIndex = signal<number | null>(null);\r\n\r\n /** Whether to auto-enable full width buttons on mobile (default: true) */\r\n autoFullWidthOnMobile = input<boolean>(true);\r\n\r\n /** Signal to track if viewport is mobile */\r\n isMobile = signal<boolean>(false);\r\n\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private resizeObserver?: ResizeObserver;\r\n private feedbackTimeout?: ReturnType<typeof setTimeout>;\r\n\r\n /** Determines if the empty state should be shown */\r\n shouldShowEmptyState = computed(() => {\r\n const opts = this.options();\r\n const dataArray = this.data();\r\n return opts.showEmptyState && (!dataArray || dataArray.length === 0);\r\n });\r\n\r\n /** Returns the empty state message to display */\r\n getEmptyStateMessage = computed(() => {\r\n return this.options().emptyStateMessage || 'Aucune information disponible';\r\n });\r\n\r\n /** Full icon class name for Phosphor icons */\r\n titleIcon = computed(() => {\r\n const iconName = this.icon();\r\n return iconName ? `ph-${iconName}` : '';\r\n });\r\n\r\n /** Computed ARIA label for the component */\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n const titleText = this.title();\r\n return customLabel || (titleText ? `Information card: ${titleText}` : 'Information card');\r\n });\r\n\r\n /** Computed CSS classes */\r\n computedClasses = computed(() => {\r\n const classes = ['info-card'];\r\n classes.push(`variant-${this.variant()}`);\r\n\r\n if (this.hoverable()) classes.push('hoverable');\r\n if (this.interactive()) classes.push('interactive');\r\n if (this.loading()) classes.push('loading');\r\n if (this.disabled()) classes.push('disabled');\r\n if (this.cssClass()) classes.push(this.cssClass());\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Computed styles */\r\n computedStyles = computed(() => {\r\n return { ...this.customStyle() };\r\n });\r\n\r\n /** Gets CSS classes for card-actions based on mobile state */\r\n getActionsClasses = computed(() => {\r\n const classes: string[] = [];\r\n if (this.autoFullWidthOnMobile() && this.isMobile()) {\r\n classes.push('mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.checkMobileViewport();\r\n\r\n if (this.document.defaultView) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.checkMobileViewport();\r\n });\r\n this.resizeObserver.observe(this.document.documentElement);\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.checkHeaderActionsContent();\r\n }\r\n\r\n private checkHeaderActionsContent(): void {\r\n if (isPlatformBrowser(this.platformId)) {\r\n const headerActionsEl = this.elementRef.nativeElement.querySelector('[card-header-actions]');\r\n this.hasHeaderActions.set(!!headerActionsEl);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n }\r\n\r\n private checkMobileViewport(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.isMobile.set(view.innerWidth <= 640);\r\n }\r\n }\r\n\r\n /**\r\n * Handles click events on the card\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Handles keyboard navigation\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n\r\n isRowCopyable(item: InfoCardData): boolean {\r\n return item.copyable ?? this.copyable();\r\n }\r\n\r\n hasNonEmptyValue(item: InfoCardData): boolean {\r\n const val = item.value;\r\n if (val == null) return false;\r\n return val.toString().trim().length > 0;\r\n }\r\n\r\n copyRowValue(item: InfoCardData, index: number): void {\r\n if (!isPlatformBrowser(this.platformId)) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const view = this.document.defaultView;\r\n if (!view?.isSecureContext || !view.navigator.clipboard) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const text = item.copyValue ?? item.value?.toString() ?? '';\r\n\r\n view.navigator.clipboard.writeText(text).then(\r\n () => {\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n this.copiedRowIndex.set(index);\r\n this.copied.emit(item);\r\n this.feedbackTimeout = setTimeout(() => {\r\n this.copiedRowIndex.set(null);\r\n }, 1800);\r\n },\r\n () => {\r\n this.copyFailed.emit(item);\r\n }\r\n );\r\n }\r\n}","<div\r\n [class]=\"computedClasses()\"\r\n [ngStyle]=\"computedStyles()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n role=\"region\"\r\n [attr.tabindex]=\"interactive() && !disabled() ? 0 : null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n>\r\n @if (title() || hasHeaderActions()) {\r\n <div class=\"info-card-header\">\r\n @if (title()) {\r\n <h3 class=\"info-card-title\">\r\n @if (icon()) {\r\n <i\r\n class=\"ph {{ titleIcon() }}\"\r\n aria-hidden=\"true\"\r\n [attr.data-icon]=\"icon()\"\r\n ></i>\r\n }\r\n {{ title() }}\r\n </h3>\r\n }\r\n <div class=\"info-card-header-actions\">\r\n <ng-content select=\"[card-header-actions]\"></ng-content>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"info-card-body\">\r\n @if (loading()) {\r\n <div class=\"info-card-loading\">\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line\"></div>\r\n <div class=\"skeleton-line short\"></div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"info-card-content\"\r\n role=\"list\"\r\n >\r\n @if (shouldShowEmptyState()) {\r\n <div\r\n class=\"info-card-empty-state\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n [attr.data-testid]=\"'info-card-empty-state'\"\r\n >\r\n {{ getEmptyStateMessage() }}\r\n </div>\r\n } @else {\r\n @for (item of data(); track $index) {\r\n <div\r\n class=\"info-card-row\"\r\n role=\"listitem\"\r\n [attr.data-index]=\"$index\"\r\n [class]=\"item.customClass || ''\"\r\n >\r\n <div\r\n class=\"info-card-label\"\r\n [style.width]=\"item.labelWidth || options().labelWidth\"\r\n [attr.data-label]=\"item.label\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n <div\r\n class=\"info-card-value-group\"\r\n [style.width]=\"item.valueWidth || options().valueWidth\"\r\n >\r\n <span\r\n class=\"info-card-value\"\r\n [attr.data-value]=\"item.value\"\r\n [title]=\"item.value?.toString() || ''\"\r\n >{{ item.value ?? 'Non renseigné' }}</span>\r\n @if (isRowCopyable(item) && hasNonEmptyValue(item)) {\r\n <button\r\n type=\"button\"\r\n class=\"info-card-copy-btn\"\r\n [class.copied]=\"copiedRowIndex() === $index\"\r\n [attr.aria-label]=\"copyButtonLabel() + ' ' + item.label\"\r\n (click)=\"copyRowValue(item, $index); $event.stopPropagation()\"\r\n >\r\n @if (copiedRowIndex() === $index) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n <span class=\"info-card-copy-feedback\" aria-hidden=\"true\">{{ copyFeedbackText() }}</span>\r\n } @else {\r\n <i class=\"ph ph-copy\" aria-hidden=\"true\"></i>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <span\r\n class=\"info-card-sr-only\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n @if (copiedRowIndex() !== null) {\r\n {{ copyFeedbackText() }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"info-card-actions\" [class]=\"getActionsClasses()\">\r\n <ng-content select=\"[card-actions]\"></ng-content>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n InjectionToken,\r\n input,\r\n model,\r\n viewChild\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { CheckboxSize, CheckboxConfig, CheckboxLabelPosition } from './checkbox.types';\r\n\r\nexport const CHECKBOX_CONFIG = new InjectionToken<Partial<CheckboxConfig>>('CHECKBOX_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n indeterminate: false,\r\n size: 'medium',\r\n labelPosition: 'right',\r\n label: ''\r\n })\r\n});\r\n\r\nlet checkboxIdCounter = 0;\r\n\r\n@Component({\r\n selector: 'psh-checkbox',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshCheckboxComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.checkbox-disabled]': 'disabled()',\r\n '[class.checkbox-error]': '!!error()',\r\n '[class.checkbox-success]': '!!success()',\r\n '[class.checkbox-small]': 'size() === \"small\"',\r\n '[class.checkbox-large]': 'size() === \"large\"',\r\n '[class.checkbox-checked]': 'checked() && !indeterminate()',\r\n '[class.checkbox-indeterminate]': 'indeterminate()',\r\n '[attr.data-state]': 'state()',\r\n '[attr.aria-checked]': 'ariaChecked()'\r\n }\r\n})\r\nexport class PshCheckboxComponent implements ControlValueAccessor, FormCheckboxControl {\r\n private readonly config = inject(CHECKBOX_CONFIG);\r\n private readonly checkboxInput = viewChild<ElementRef<HTMLInputElement>>('checkboxInput');\r\n\r\n protected readonly uniqueId = `psh-cb-${++checkboxIdCounter}`;\r\n\r\n private onChange = (_: boolean) => {};\r\n private onTouched = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n readonly indeterminate = model(this.config.indeterminate ?? false);\r\n readonly touched = model(false);\r\n\r\n required = input(this.config.required ?? false);\r\n label = input(this.config.label ?? '');\r\n error = input<string | null | undefined>(this.config.error);\r\n success = input<string | null | undefined>(this.config.success);\r\n ariaLabel = input<string | undefined>(this.config.ariaLabel);\r\n size = input<CheckboxSize>(this.config.size ?? 'medium');\r\n labelPosition = input<CheckboxLabelPosition>(this.config.labelPosition ?? 'right');\r\n\r\n ariaChecked = computed(() => this.indeterminate() ? 'mixed' : (this.checked() ? 'true' : 'false'));\r\n computedAriaLabel = computed(() => this.ariaLabel() || undefined);\r\n\r\n // Error and success are mutually exclusive in the template (@if/@else if),\r\n // so aria-describedby references whichever message is actually rendered.\r\n ariaDescribedBy = computed(() => {\r\n if (this.error()) return `${this.uniqueId}-error`;\r\n if (this.success()) return `${this.uniqueId}-success`;\r\n return undefined;\r\n });\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.indeterminate()) return 'indeterminate';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.label() && !this.ariaLabel()) {\r\n console.warn('[psh-checkbox] Label manquant pour l\\'accessibilité.');\r\n }\r\n });\r\n }\r\n\r\n protected toggle(): void {\r\n if (!this.disabled()) {\r\n const newValue = !this.checked();\r\n this.checked.set(newValue);\r\n this.indeterminate.set(false);\r\n this.onChange(newValue);\r\n this.onTouched();\r\n this.touched.set(true);\r\n }\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n if (event.key === ' ' || event.key === 'Spacebar' || event.key === 'Enter') {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n writeValue(value: unknown): void { this.checked.set(!!value); }\r\n registerOnChange(fn: (v: boolean) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n focus(): void { this.checkboxInput()?.nativeElement.focus(); }\r\n blur(): void { this.checkboxInput()?.nativeElement.blur(); }\r\n}","<div class=\"checkbox-container\">\r\n <label class=\"checkbox-label\" [class.label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n #checkboxInput\r\n type=\"checkbox\"\r\n class=\"checkbox-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-checked]=\"ariaChecked()\"\r\n [attr.aria-required]=\"required() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n (change)=\"toggle()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n \r\n <span class=\"checkbox-control\">\r\n @if (checked() && !indeterminate()) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n }\r\n @if (indeterminate()) {\r\n <i class=\"ph ph-minus\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n\r\n <span class=\"checkbox-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"uniqueId + '-error'\" class=\"checkbox-message error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"uniqueId + '-success'\" class=\"checkbox-message success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\r\nimport { CollapseVariant, CollapseSize } from './collapse.types';\r\n\r\n@Component({\r\n selector: 'psh-collapse',\r\n templateUrl: './collapse.component.html',\r\n styleUrls: ['./collapse.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshCollapseComponent {\r\n private static idCounter = 0;\r\n\r\n expanded = model(false);\r\n\r\n disabled = input(false);\r\n variant = input('default' as CollapseVariant, {\r\n transform: (value: CollapseVariant) => {\r\n if (!['default', 'outline'].includes(value)) {\r\n console.warn(`[psh-collapse] Invalid variant \"${value}\", falling back to \"default\"`);\r\n return 'default';\r\n }\r\n return value;\r\n }\r\n });\r\n size = input('medium' as CollapseSize, {\r\n transform: (value: CollapseSize) => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n console.warn(`[psh-collapse] Invalid size \"${value}\", falling back to \"medium\"`);\r\n return 'medium';\r\n }\r\n return value;\r\n }\r\n });\r\n icon = input('caret-down');\r\n id = input<string>();\r\n maxHeight = input<string>('1000px');\r\n disableAnimation = input(false);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n toggled = output<boolean>();\r\n\r\n private readonly uniqueId = `collapse-${++PshCollapseComponent.idCounter}`;\r\n\r\n protected readonly headerId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-header` : `${this.uniqueId}-header`;\r\n });\r\n\r\n protected readonly contentId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-content` : `${this.uniqueId}-content`;\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n return this.expanded() ? 'expanded' : 'collapsed';\r\n });\r\n\r\n readonly animationClass = computed(() => {\r\n return this.disableAnimation() ? 'no-animation' : '';\r\n });\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.expanded.update(value => {\r\n const newValue = !value;\r\n this.toggled.emit(newValue);\r\n return newValue;\r\n });\r\n }\r\n }\r\n\r\n open(): void {\r\n if (!this.disabled() && !this.expanded()) {\r\n this.expanded.set(true);\r\n this.opened.emit();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.disabled() && this.expanded()) {\r\n this.expanded.set(false);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggle();\r\n break;\r\n case 'Escape':\r\n if (this.expanded()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n}","<div\r\n class=\"collapse\"\r\n [class.expanded]=\"expanded()\"\r\n [class.disabled]=\"disabled()\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.no-animation]=\"disableAnimation()\"\r\n [attr.data-state]=\"state()\"\r\n [style.--collapse-max-height]=\"maxHeight()\"\r\n>\r\n <button\r\n [id]=\"headerId()\"\r\n class=\"collapse-header\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onKeydown($event)\"\r\n [attr.aria-expanded]=\"expanded()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n [disabled]=\"disabled()\"\r\n type=\"button\"\r\n >\r\n <span class=\"header-content\">\r\n <ng-content select=\"[collapse-header]\">\r\n <span>Section pliable</span>\r\n </ng-content>\r\n </span>\r\n <i\r\n class=\"ph ph-{{ icon() }}\"\r\n [class.expanded]=\"expanded()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n\r\n <div\r\n [id]=\"contentId()\"\r\n class=\"collapse-content\"\r\n role=\"region\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [attr.aria-hidden]=\"!expanded()\"\r\n >\r\n <div class=\"content-wrapper\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import { inject, Injectable } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/** A cardinal side an overlay can be placed on, relative to its anchor. */\r\nexport type OverlaySide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\n/** Options describing the (estimated) overlay size and the gap to the anchor. */\r\nexport interface OverlayPositionOptions {\r\n /** Estimated overlay width in px (used for left/right flipping and align flipping). */\r\n overlayWidth?: number;\r\n /** Estimated overlay height in px (used for top/bottom flipping). */\r\n overlayHeight?: number;\r\n /** Minimum gap between anchor and overlay in px. */\r\n offset?: number;\r\n}\r\n\r\n/**\r\n * Shared anchored-positioning primitive with viewport collision detection.\r\n *\r\n * Computes whether an overlay (tooltip, dropdown, select panel, menu…) fits on\r\n * its preferred side of an anchor element and flips it to the opposite side\r\n * when there is not enough room and the opposite side has more. Based on\r\n * `getBoundingClientRect`, so it must be called when the anchor is laid out\r\n * (i.e. in the browser, on open / scroll / resize).\r\n *\r\n * This generalises the collision logic that previously lived only inside the\r\n * tooltip, so dropdown / select / menu popovers can stop overflowing too.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayPositionService {\r\n private readonly document = inject(DOCUMENT);\r\n\r\n /**\r\n * Resolves the best cardinal side for an overlay, flipping `preferred` to its\r\n * opposite when it would overflow the viewport and the opposite has more room.\r\n */\r\n flipSide(\r\n anchor: HTMLElement,\r\n preferred: OverlaySide,\r\n options: OverlayPositionOptions = {},\r\n ): OverlaySide {\r\n const view = this.document.defaultView;\r\n if (!view) return preferred;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n // A zero-size anchor is not laid out (or not in the browser): we cannot make\r\n // a meaningful collision decision, so keep the preferred side.\r\n if (rect.width === 0 && rect.height === 0) return preferred;\r\n\r\n const offset = options.offset ?? 8;\r\n const estH = options.overlayHeight ?? 0;\r\n const estW = options.overlayWidth ?? 0;\r\n\r\n const space = {\r\n top: rect.top,\r\n bottom: view.innerHeight - rect.bottom,\r\n left: rect.left,\r\n right: view.innerWidth - rect.right,\r\n };\r\n\r\n switch (preferred) {\r\n case 'top':\r\n return space.top < estH + offset && space.bottom > space.top ? 'bottom' : 'top';\r\n case 'bottom':\r\n return space.bottom < estH + offset && space.top > space.bottom ? 'top' : 'bottom';\r\n case 'left':\r\n return space.left < estW + offset && space.right > space.left ? 'right' : 'left';\r\n case 'right':\r\n return space.right < estW + offset && space.left > space.right ? 'left' : 'right';\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a `\"<side>\"` or `\"<side>-<align>\"` placement string (e.g. `top`,\r\n * `bottom-start`, `top-end`), flipping the side to fit the viewport while\r\n * preserving the alignment. Unknown placements are returned unchanged.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Near the bottom of the viewport with no room below:\r\n * positions.flipPlacement(trigger, 'bottom-start', { overlayHeight: 240 });\r\n * // => 'top-start'\r\n * ```\r\n */\r\n flipPlacement(\r\n anchor: HTMLElement,\r\n preferred: string,\r\n options: OverlayPositionOptions = {},\r\n ): string {\r\n const [sideStr, align] = preferred.split('-');\r\n if (!this.isSide(sideStr)) return preferred;\r\n\r\n const resolvedSide = this.flipSide(anchor, sideStr, options);\r\n return align ? `${resolvedSide}-${align}` : resolvedSide;\r\n }\r\n\r\n private isSide(value: string | undefined): value is OverlaySide {\r\n return value === 'top' || value === 'bottom' || value === 'left' || value === 'right';\r\n }\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n output,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Emits when a click occurs outside the host element.\r\n *\r\n * Shared primitive replacing the per-component document click listeners used by\r\n * select / dropdown to close on outside click. Typically consumed as a host\r\n * directive:\r\n *\r\n * @example\r\n * ```typescript\r\n * @Component({ hostDirectives: [PshClickOutsideDirective] })\r\n * export class MyPopover {\r\n * constructor() {\r\n * inject(PshClickOutsideDirective).pshClickOutside.subscribe(() => this.close());\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshClickOutside]',\r\n})\r\nexport class PshClickOutsideDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Emitted when a click lands outside the host element. */\r\n readonly pshClickOutside = output<MouseEvent>();\r\n\r\n constructor() {\r\n if (!this.isBrowser) return;\r\n this.document.addEventListener('click', this.onDocumentClick);\r\n inject(DestroyRef).onDestroy(() =>\r\n this.document.removeEventListener('click', this.onDocumentClick),\r\n );\r\n }\r\n\r\n private readonly onDocumentClick = (event: MouseEvent): void => {\r\n const target = event.target as Node | null;\r\n if (target && !this.host.nativeElement.contains(target)) {\r\n this.pshClickOutside.emit(event);\r\n }\r\n };\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { EmbeddedViewRef, Injectable, TemplateRef, ViewContainerRef, inject } from '@angular/core';\r\n\r\n/** A handle to a teleported overlay panel. */\r\nexport interface PshPortalRef {\r\n /** The panel's root element — use it to position and to scope click-outside. */\r\n readonly panel: HTMLElement;\r\n /**\r\n * Positions the panel as `fixed` relative to `anchor`'s viewport rect, on the\r\n * given side with `gap` px of spacing. Bounds `max-height` to the available\r\n * viewport space so the panel never overflows the screen.\r\n */\r\n position(anchor: HTMLElement, side: 'top' | 'bottom', gap: number): void;\r\n /**\r\n * Positions the panel as `fixed` from `anchor`'s viewport rect for a\r\n * `<side>-<align>` placement (e.g. `bottom-start`, `top-end`). The panel keeps\r\n * its content width; the aligned edge (start/end) is anchored to the trigger.\r\n */\r\n positionByPlacement(anchor: HTMLElement, placement: string, gap: number): void;\r\n /** Destroys the embedded view and removes the panel from the overlay layer. */\r\n detach(): void;\r\n}\r\n\r\n/**\r\n * Teleports a `TemplateRef` into a single body-level overlay layer so popover\r\n * panels (select / dropdown / menu…) escape any ancestor `overflow`, `transform`\r\n * or stacking context and can layer above modals.\r\n *\r\n * A lightweight, CDK-free \"manual portal\": the embedded view is created from the\r\n * consumer's `ViewContainerRef` (so it stays in that component's change-detection\r\n * tree and keeps its bindings reactive), then its root nodes are moved into the\r\n * shared `.psh-overlay-layer`. The layer is `position: fixed; inset: 0;\r\n * pointer-events: none` at `z-index: var(--z-index-overlay)`; panels re-enable\r\n * pointer events. The layer is created lazily and removed once empty.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshPortalService {\r\n private readonly document = inject(DOCUMENT);\r\n private layer: HTMLElement | null = null;\r\n private count = 0;\r\n\r\n /** Teleports `tpl` into the overlay layer and returns a handle to control it. */\r\n attach(tpl: TemplateRef<unknown>, vcr: ViewContainerRef): PshPortalRef {\r\n const layer = this.ensureLayer();\r\n const viewRef = vcr.createEmbeddedView(tpl);\r\n viewRef.detectChanges();\r\n\r\n const nodes = viewRef.rootNodes as Node[];\r\n const panel = (nodes.find((n): n is HTMLElement => n instanceof HTMLElement) ??\r\n nodes[0]) as HTMLElement;\r\n nodes.forEach(node => layer.appendChild(node));\r\n\r\n this.count++;\r\n\r\n return {\r\n panel,\r\n position: (anchor, side, gap) => this.position(panel, anchor, side, gap),\r\n positionByPlacement: (anchor, placement, gap) =>\r\n this.positionByPlacement(panel, anchor, placement, gap),\r\n detach: () => this.detach(viewRef),\r\n };\r\n }\r\n\r\n private position(\r\n panel: HTMLElement,\r\n anchor: HTMLElement,\r\n side: 'top' | 'bottom',\r\n gap: number,\r\n ): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n const style = panel.style;\r\n style.position = 'fixed';\r\n style.left = `${rect.left}px`;\r\n style.width = `${rect.width}px`;\r\n\r\n if (side === 'top') {\r\n const height = panel.offsetHeight;\r\n style.top = `${Math.max(gap, rect.top - height - gap)}px`;\r\n style.maxHeight = `${Math.max(0, rect.top - gap * 2)}px`;\r\n } else {\r\n style.top = `${rect.bottom + gap}px`;\r\n style.maxHeight = `${Math.max(0, view.innerHeight - rect.bottom - gap * 2)}px`;\r\n }\r\n }\r\n\r\n private positionByPlacement(\r\n panel: HTMLElement,\r\n anchor: HTMLElement,\r\n placement: string,\r\n gap: number,\r\n ): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n const [side, align] = placement.split('-');\r\n const style = panel.style;\r\n style.position = 'fixed';\r\n\r\n if (side === 'top') {\r\n const height = panel.offsetHeight;\r\n style.top = `${Math.max(gap, rect.top - height - gap)}px`;\r\n style.maxHeight = `${Math.max(0, rect.top - gap * 2)}px`;\r\n } else {\r\n style.top = `${rect.bottom + gap}px`;\r\n style.maxHeight = `${Math.max(0, view.innerHeight - rect.bottom - gap * 2)}px`;\r\n }\r\n\r\n // Content-sized menu: anchor the start/end edge to the trigger.\r\n if (align === 'end') {\r\n style.left = `${Math.max(0, rect.right - panel.offsetWidth)}px`;\r\n } else {\r\n style.left = `${rect.left}px`;\r\n }\r\n }\r\n\r\n private detach(viewRef: EmbeddedViewRef<unknown>): void {\r\n viewRef.destroy();\r\n this.count = Math.max(0, this.count - 1);\r\n if (this.count === 0 && this.layer) {\r\n this.layer.remove();\r\n this.layer = null;\r\n }\r\n }\r\n\r\n private ensureLayer(): HTMLElement {\r\n if (this.layer) return this.layer;\r\n const layer = this.document.createElement('div');\r\n layer.className = 'psh-overlay-layer';\r\n layer.style.cssText =\r\n 'position:fixed;inset:0;z-index:var(--z-index-overlay);pointer-events:none;';\r\n this.document.body.appendChild(layer);\r\n this.layer = layer;\r\n return layer;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild\r\n} from '@angular/core';\r\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { DropdownAppearance, DropdownItem, DropdownPlacement, DropdownSize, DropdownVariant } from './dropdown.types';\r\n\r\n@Component({\r\n selector: 'psh-dropdown',\r\n imports: [CommonModule],\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective]\r\n})\r\nexport class PshDropdownComponent<T = string> {\r\n private elementRef = inject(ElementRef);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n\r\n // The menu is teleported to a body-level overlay layer on open so it escapes\r\n // any ancestor overflow / stacking context (a modal body, a scrollable card…).\r\n private readonly menuTpl = viewChild<TemplateRef<unknown>>('menuTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n // Regular inputs\r\n appearance = input<DropdownAppearance>('filled');\r\n variant = input<DropdownVariant>('primary');\r\n size = input<DropdownSize>('medium');\r\n placement = input<DropdownPlacement>('bottom-start');\r\n items = input<DropdownItem<T>[]>([]);\r\n label = input('Dropdown Menu');\r\n icon = input<string>();\r\n ariaLabel = input<string>();\r\n iconOnly = input<boolean>(false);\r\n iconOnlyText = input<string>();\r\n\r\n // Model inputs\r\n disabled = model(false);\r\n\r\n // State\r\n private isOpenSignal = signal(false);\r\n private selectedItemSignal = signal<DropdownItem<T> | null>(null);\r\n private focusedItemIndex = signal(-1);\r\n\r\n // Placement actually rendered, after viewport collision/flip. Mirrors the\r\n // `placement` input while closed; recomputed against the viewport on open.\r\n protected readonly resolvedPlacement = signal<DropdownPlacement>('bottom-start');\r\n\r\n // Outputs\r\n selected = output<DropdownItem<T>>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n\r\n // Computed values\r\n isOpen = computed(() => this.isOpenSignal());\r\n selectedItem = computed(() => this.selectedItemSignal());\r\n\r\n isIconOnly = computed(() => this.iconOnly() && !!this.icon());\r\n\r\n computedAriaLabel = computed(() => {\r\n if (this.isIconOnly()) {\r\n return this.iconOnlyText() || this.ariaLabel() || 'Toggle dropdown menu';\r\n }\r\n return this.ariaLabel() || 'Toggle dropdown menu';\r\n });\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.isOpen()) return 'open';\r\n return 'closed';\r\n }\r\n\r\n constructor() {\r\n // Close on outside click. Clicks inside the menu are stopped at the menu\r\n // (stopPropagation); as a safety net for the teleported panel we also ignore\r\n // clicks whose target is inside it here.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(event => {\r\n const target = event.target as Node | null;\r\n if (target && this.portalRef?.panel.contains(target)) return;\r\n this.close();\r\n });\r\n inject(DestroyRef).onDestroy(() => {\r\n sub.unsubscribe();\r\n this.closePanel();\r\n });\r\n }\r\n\r\n private openPanel(): void {\r\n if (!this.isBrowser || this.portalRef) return;\r\n const tpl = this.menuTpl();\r\n if (!tpl) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n }\r\n\r\n private closePanel(): void {\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n this.resolvedPlacement.set(this.placement());\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.dropdown-trigger') as HTMLElement | null;\r\n if (!trigger) return;\r\n\r\n const placement = this.overlayPosition.flipPlacement(trigger, this.placement(), {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n overlayWidth: this.portalRef.panel.offsetWidth,\r\n }) as DropdownPlacement;\r\n this.resolvedPlacement.set(placement);\r\n this.portalRef.positionByPlacement(trigger, placement, 4);\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled()) {\r\n event?.stopPropagation();\r\n this.isOpenSignal.update(v => !v);\r\n if (this.isOpen()) {\r\n this.focusedItemIndex.set(0);\r\n this.opened.emit();\r\n this.openPanel();\r\n } else {\r\n this.focusedItemIndex.set(-1);\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n }\r\n }\r\n\r\n selectItem(item: DropdownItem<T>): void {\r\n if (!item.disabled) {\r\n this.selectedItemSignal.set(item);\r\n this.selected.emit(item);\r\n this.close();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.isOpen()) {\r\n this.isOpenSignal.set(false);\r\n this.focusedItemIndex.set(-1);\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n handleTriggerKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleDropdown();\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggleDropdown();\r\n } else {\r\n this.focusNextItem();\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggleDropdown();\r\n } else {\r\n this.focusPreviousItem();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this.isOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handleItemKeyDown(event: KeyboardEvent, item: DropdownItem<T>, _index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.selectItem(item);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem();\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem();\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n event.preventDefault();\r\n this.close();\r\n break;\r\n\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let nextIndex = currentIndex + 1;\r\n\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n\r\n if (nextIndex >= items.length) {\r\n nextIndex = 0;\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n this.focusedItemIndex.set(nextIndex);\r\n this.focusItemAtIndex(nextIndex);\r\n }\r\n }\r\n\r\n private focusPreviousItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let previousIndex = currentIndex - 1;\r\n\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n\r\n if (previousIndex < 0) {\r\n previousIndex = items.length - 1;\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n }\r\n\r\n if (previousIndex >= 0) {\r\n this.focusedItemIndex.set(previousIndex);\r\n this.focusItemAtIndex(previousIndex);\r\n }\r\n }\r\n\r\n private focusFirstItem(): void {\r\n const items = this.items();\r\n let index = 0;\r\n while (index < items.length && items[index]?.disabled) {\r\n index++;\r\n }\r\n if (index < items.length) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusLastItem(): void {\r\n const items = this.items();\r\n let index = items.length - 1;\r\n while (index >= 0 && items[index]?.disabled) {\r\n index--;\r\n }\r\n if (index >= 0) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusItemAtIndex(index: number): void {\r\n setTimeout(() => {\r\n const item = this.portalRef?.panel.querySelector(\r\n `[data-dropdown-item-index=\"${index}\"]`,\r\n ) as HTMLElement | undefined;\r\n item?.focus();\r\n });\r\n }\r\n\r\n}","<div\r\n class=\"dropdown-container\"\r\n [class]=\"size()\"\r\n [class.open]=\"isOpen()\"\r\n [class.disabled]=\"disabled()\"\r\n [class.icon-only]=\"isIconOnly()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <button\r\n class=\"dropdown-trigger\"\r\n [class]=\"appearance()\"\r\n [class.primary]=\"variant() === 'primary'\"\r\n [class.secondary]=\"variant() === 'secondary'\"\r\n [class.success]=\"variant() === 'success'\"\r\n [class.warning]=\"variant() === 'warning'\"\r\n [class.danger]=\"variant() === 'danger'\"\r\n (click)=\"toggleDropdown()\"\r\n (keydown)=\"handleTriggerKeyDown($event)\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-haspopup]=\"'menu'\"\r\n type=\"button\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <span class=\"trigger-content\">\r\n @if (isIconOnly()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <ng-content select=\"[dropdown-trigger]\">\r\n @if (label()) {\r\n {{ label() }}\r\n }\r\n </ng-content>\r\n <i\r\n class=\"ph ph-caret-down trigger-arrow\"\r\n [class.open]=\"isOpen()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </span>\r\n </button>\r\n\r\n <ng-template #menuTpl>\r\n <!-- stopPropagation only (keeps clicks inside the menu from closing it); not a user interaction. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"dropdown-menu\"\r\n [class]=\"resolvedPlacement()\"\r\n role=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ng-content select=\"[dropdown-menu]\">\r\n @for (item of items(); track item.value; let i = $index) {\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.active]=\"selectedItem() === item\"\r\n [attr.data-dropdown-item-index]=\"i\"\r\n (click)=\"selectItem(item)\"\r\n (keydown)=\"handleItemKeyDown($event, item, i)\"\r\n role=\"menuitem\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"item-label\">{{ item.content }}</span>\r\n </button>\r\n }\r\n </ng-content>\r\n </div>\r\n </ng-template>\r\n</div>","export type InputType = 'text' | 'password' | 'email' | 'tel' | 'url' | 'search' | 'date' | 'number';\r\nexport type InputVariant = 'outlined' | 'filled';\r\nexport type InputSize = 'small' | 'medium' | 'large';\r\n\r\nexport interface AutocompleteConfig {\r\n minLength: number;\r\n debounceTime: number;\r\n}\r\n\r\nexport interface InputConfig {\r\n type: InputType;\r\n variant: InputVariant;\r\n size: InputSize;\r\n disabled: boolean;\r\n required: boolean;\r\n readonly: boolean;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n label: string;\r\n placeholder: string;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n hint: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport interface SuggestionResult {\r\n suggestions: string[];\r\n error?: string;\r\n}\r\n\r\nexport const INPUT_LABELS = {\r\n showPassword: 'Afficher le mot de passe',\r\n hidePassword: 'Masquer le mot de passe'\r\n} as const;","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n ChangeDetectorRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { InputType, InputVariant, InputSize, AutocompleteConfig, INPUT_LABELS } from './input.types';\r\n\r\n@Component({\r\n selector: 'psh-input',\r\n imports: [CommonModule],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshInputComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.error]': '!!error()',\r\n '[class.success]': '!!success()',\r\n '[class.disabled]': 'disabled()',\r\n '[class.readonly]': 'readonly()',\r\n '[class.loading]': 'loading()',\r\n '[class.focused]': 'focused()',\r\n '[class.has-start-icon]': '!!iconStart()',\r\n '[class.has-end-icon]': '!!iconEnd() || type() === \"password\"',\r\n '[class.outlined]': 'variant() === \"outlined\"',\r\n '[class.filled]': 'variant() === \"filled\"',\r\n }\r\n})\r\nexport class PshInputComponent implements ControlValueAccessor, FormValueControl<string> {\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n\r\n // The autocomplete suggestions are teleported to a body-level overlay layer so\r\n // they escape any ancestor overflow / stacking context (a modal body, a\r\n // scrollable card…) instead of being clipped.\r\n private readonly suggestionsTpl = viewChild<TemplateRef<unknown>>('suggestionsTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n private static nextId = 0;\r\n readonly inputId = `psh-input-${PshInputComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = model(false);\r\n readonly loading = model(false);\r\n readonly touched = model(false);\r\n\r\n variant = input<InputVariant>('outlined');\r\n size = input<InputSize>('medium');\r\n fullWidth = input(false);\r\n required = input(false);\r\n showLabel = input(true);\r\n type = input<InputType>('text');\r\n placeholder = input('');\r\n label = input('');\r\n ariaLabel = input<string | null>(null);\r\n iconStart = input<string>();\r\n iconEnd = input<string>();\r\n error = input<string | null | undefined>(null);\r\n success = input<string | null | undefined>(null);\r\n hint = input<string | null | undefined>(null);\r\n \r\n suggestions = input<string[] | ((query: string) => Promise<string[]>)>([]);\r\n autocompleteConfig = input<AutocompleteConfig>({\r\n minLength: 1,\r\n debounceTime: 300\r\n });\r\n\r\n private readonly suggestionsVisible = signal(false);\r\n private readonly focusedSignal = signal(false);\r\n private readonly filteredSuggestionsSignal = signal<string[]>([]);\r\n readonly focusedSuggestionIndex = signal(-1);\r\n private readonly passwordVisibleSignal = signal(false);\r\n \r\n private blurTimeoutId: number | null = null;\r\n private debounceTimeoutId: number | null = null;\r\n\r\n inputFocus = output<void>();\r\n inputBlur = output<void>();\r\n suggestionSelect = output<string>();\r\n\r\n showSuggestions = computed(() => this.suggestionsVisible() && this.filteredSuggestions().length > 0);\r\n filteredSuggestions = computed(() => this.filteredSuggestionsSignal());\r\n focused = computed(() => this.focusedSignal());\r\n passwordVisible = computed(() => this.passwordVisibleSignal());\r\n \r\n effectiveType = computed(() => {\r\n if (this.type() === 'password') {\r\n return this.passwordVisible() ? 'text' : 'password';\r\n }\r\n return this.type();\r\n });\r\n\r\n computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n passwordToggleLabel = computed(() => this.passwordVisible() ? INPUT_LABELS.hidePassword : INPUT_LABELS.showPassword);\r\n\r\n state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.loading()) return 'loading';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.focused()) return 'focused';\r\n return 'default';\r\n }\r\n\r\n constructor() {\r\n this.destroyRef.onDestroy(() => {\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n this.closePanel();\r\n });\r\n }\r\n\r\n /** Attaches / detaches / repositions the teleported suggestions panel to match visibility. */\r\n private syncPanel(): void {\r\n if (this.showSuggestions()) {\r\n if (this.portalRef) this.reposition();\r\n else this.openPanel();\r\n } else if (this.portalRef) {\r\n this.closePanel();\r\n }\r\n }\r\n\r\n private openPanel(): void {\r\n const tpl = this.suggestionsTpl();\r\n if (!tpl || this.portalRef) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Capture phase so inner (e.g. modal body) scrolls keep the panel aligned.\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n }\r\n\r\n private closePanel(): void {\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const anchor = (this.elementRef.nativeElement as HTMLElement).querySelector(\r\n '.input-wrapper',\r\n ) as HTMLElement | null;\r\n if (!anchor) return;\r\n const side = this.overlayPosition.flipSide(anchor, 'bottom', {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n }) as 'top' | 'bottom';\r\n this.portalRef.position(anchor, side, 4);\r\n }\r\n\r\n private onChange = (_: string) => {};\r\n private onTouched = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: string) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.value.set(val);\r\n this.onChange(val);\r\n\r\n if (this.suggestions()) {\r\n this.debouncedUpdateSuggestions(val);\r\n }\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.inputFocus.emit();\r\n\r\n const val = this.value();\r\n if (this.suggestions() && val.length >= this.autocompleteConfig().minLength) {\r\n this.updateSuggestions(val);\r\n }\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.inputBlur.emit();\r\n this.onTouched();\r\n this.touched.set(true);\r\n\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n this.blurTimeoutId = setTimeout(() => {\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n this.blurTimeoutId = null;\r\n }, 200);\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (!this.showSuggestions()) return;\r\n\r\n const suggestions = this.filteredSuggestions();\r\n const currentIndex = this.focusedSuggestionIndex();\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i < suggestions.length - 1 ? i + 1 : 0));\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i > 0 ? i - 1 : suggestions.length - 1));\r\n break;\r\n case 'Enter':\r\n if (currentIndex >= 0 && currentIndex < suggestions.length) {\r\n event.preventDefault();\r\n const selected = suggestions[currentIndex];\r\n if (selected !== undefined) {\r\n this.handleSuggestionClick(selected);\r\n }\r\n }\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n break;\r\n }\r\n }\r\n\r\n handleSuggestionClick(suggestion: string): void {\r\n this.value.set(suggestion);\r\n this.onChange(suggestion);\r\n this.suggestionSelect.emit(suggestion);\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n }\r\n\r\n togglePasswordVisibility(): void {\r\n this.passwordVisibleSignal.update(v => !v);\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[input-label]');\r\n }\r\n\r\n focus(): void {\r\n const inputEl = this.elementRef.nativeElement.querySelector('input');\r\n inputEl?.focus();\r\n }\r\n\r\n focusSelect(): void {\r\n this.focus();\r\n }\r\n\r\n private debouncedUpdateSuggestions(value: string): void {\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n this.debounceTimeoutId = setTimeout(() => {\r\n this.updateSuggestions(value);\r\n this.debounceTimeoutId = null;\r\n }, this.autocompleteConfig().debounceTime);\r\n }\r\n\r\n private async updateSuggestions(value: string): Promise<void> {\r\n const provider = this.suggestions();\r\n\r\n try {\r\n let results: string[] = [];\r\n if (typeof provider === 'function') {\r\n results = await provider(value);\r\n } else if (Array.isArray(provider)) {\r\n results = provider.filter(s => s.toLowerCase().includes(value.toLowerCase()));\r\n }\r\n \r\n this.filteredSuggestionsSignal.set(results);\r\n this.suggestionsVisible.set(results.length > 0);\r\n this.syncPanel();\r\n } catch (error) {\r\n // Fail gracefully (hide stale suggestions) but surface the error so a\r\n // failing provider is not silently swallowed during development.\r\n this.filteredSuggestionsSignal.set([]);\r\n this.suggestionsVisible.set(false);\r\n this.syncPanel();\r\n console.error('[psh-input] Suggestion provider failed:', error);\r\n }\r\n }\r\n}","<div class=\"input-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"input-label\"\r\n [for]=\"inputId\"\r\n (click)=\"focusSelect()\"\r\n [class.required]=\"required()\"\r\n >\r\n <ng-content select=\"[input-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"input-wrapper\">\r\n @if (iconStart()) {\r\n <i class=\"ph ph-{{ iconStart() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n <input\r\n [id]=\"inputId\"\r\n [type]=\"effectiveType()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"error() ? 'error-message' : success() ? 'success-message' : hint() ? 'hint-message' : null\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n (input)=\"handleInput($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n [attr.data-state]=\"state()\"\r\n />\r\n\r\n @if (iconEnd()) {\r\n <i class=\"ph ph-{{ iconEnd() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (type() === 'password') {\r\n <button\r\n type=\"button\"\r\n class=\"password-toggle\"\r\n (click)=\"togglePasswordVisibility()\"\r\n [attr.aria-label]=\"passwordToggleLabel()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n >\r\n <i \r\n [class]=\"'ph ph-' + (passwordVisible() ? 'eye-slash' : 'eye')\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n }\r\n\r\n @if (loading()) {\r\n <div class=\"input-loader\" aria-hidden=\"true\">\r\n <div class=\"loader\"></div>\r\n </div>\r\n }\r\n\r\n <ng-template #suggestionsTpl>\r\n <div class=\"suggestions-list\" role=\"listbox\">\r\n @for (suggestion of filteredSuggestions(); track suggestion; let i = $index) {\r\n <!-- option in a listbox: keyboard is handled by the input (arrow keys + focusedSuggestionIndex). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"suggestion-item\"\r\n [class.focused]=\"i === focusedSuggestionIndex()\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"i === focusedSuggestionIndex()\"\r\n (click)=\"handleSuggestionClick(suggestion)\"\r\n (mouseenter)=\"focusedSuggestionIndex.set(i)\"\r\n >\r\n {{ suggestion }}\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"input-error\" role=\"alert\">\r\n <ng-content select=\"[input-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div id=\"success-message\" class=\"input-success\" role=\"status\">\r\n <ng-content select=\"[input-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div id=\"hint-message\" class=\"input-hint\">\r\n <ng-content select=\"[input-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n</div>","export type TextareaVariant = 'outlined' | 'filled';\r\nexport type TextareaSize = 'small' | 'medium' | 'large';\r\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\r\n\r\nexport interface TextareaConfig {\r\n variant: TextareaVariant;\r\n size: TextareaSize;\r\n resize: TextareaResize;\r\n disabled: boolean;\r\n required: boolean;\r\n readonly: boolean;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n showCharacterCount: boolean;\r\n autoSize: boolean;\r\n rows: number;\r\n maxLength?: number;\r\n label: string;\r\n placeholder: string;\r\n hint: string | null | undefined;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport const TEXTAREA_LABELS = {\r\n characterCountSuffix: 'caractères',\r\n characterCountSeparator: '/',\r\n} as const;\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport {\r\n TEXTAREA_LABELS,\r\n TextareaResize,\r\n TextareaSize,\r\n TextareaVariant,\r\n} from './textarea.types';\r\n\r\n@Component({\r\n selector: 'psh-textarea',\r\n imports: [CommonModule],\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshTextareaComponent,\r\n multi: true,\r\n },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.outlined]': 'variant() === \"outlined\"',\r\n '[class.filled]': 'variant() === \"filled\"',\r\n '[class.error]': 'hasError()',\r\n '[class.success]': '!!success() && !hasError()',\r\n '[class.disabled]': 'disabled()',\r\n '[class.readonly]': 'readonly()',\r\n '[class.focused]': 'focused()',\r\n '[class.auto-size]': 'autoSize()',\r\n '[class.over-limit]': 'isOverLimit()',\r\n },\r\n})\r\nexport class PshTextareaComponent\r\n implements ControlValueAccessor, FormValueControl<string>\r\n{\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n private static nextId = 0;\r\n readonly textareaId = `psh-textarea-${PshTextareaComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = model<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n\r\n variant = input<TextareaVariant>('outlined');\r\n size = input<TextareaSize>('medium');\r\n resize = input<TextareaResize>('vertical');\r\n rows = input<number>(4);\r\n maxLength = input<number | undefined>(undefined);\r\n autoSize = input<boolean>(false);\r\n showCharacterCount = input<boolean>(false);\r\n fullWidth = input<boolean>(false);\r\n required = input<boolean>(false);\r\n showLabel = input<boolean>(true);\r\n label = input<string>('');\r\n placeholder = input<string>('');\r\n hint = input<string | null | undefined>(null);\r\n error = input<string | null | undefined>(null);\r\n success = input<string | null | undefined>(null);\r\n ariaLabel = input<string | null>(null);\r\n\r\n private readonly focusedSignal = signal<boolean>(false);\r\n\r\n inputFocus = output<void>();\r\n inputBlur = output<void>();\r\n\r\n @ViewChild('textareaRef')\r\n private textareaRef?: ElementRef<HTMLTextAreaElement>;\r\n\r\n focused = computed(() => this.focusedSignal());\r\n\r\n effectiveResize = computed<TextareaResize>(() =>\r\n this.autoSize() ? 'none' : this.resize(),\r\n );\r\n\r\n characterCount = computed(() => ({\r\n current: (this.value() ?? '').length,\r\n max: this.maxLength(),\r\n }));\r\n\r\n isOverLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current > max;\r\n });\r\n\r\n isAtLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current >= max;\r\n });\r\n\r\n shouldShowCount = computed(\r\n () => this.showCharacterCount() || this.maxLength() !== undefined,\r\n );\r\n\r\n hasError = computed(\r\n () => !!this.error() || this.isOverLimit(),\r\n );\r\n\r\n computedAriaLabel = computed(\r\n () => this.ariaLabel() || this.label() || this.placeholder() || null,\r\n );\r\n\r\n describedBy = computed(() => {\r\n if (this.error()) return `${this.textareaId}-error`;\r\n if (this.success()) return `${this.textareaId}-success`;\r\n if (this.hint()) return `${this.textareaId}-hint`;\r\n return null;\r\n });\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.hasError()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.focused()) return 'focused';\r\n return 'default';\r\n });\r\n\r\n characterCountLabel = TEXTAREA_LABELS.characterCountSuffix;\r\n\r\n constructor() {\r\n effect(() => {\r\n this.value();\r\n this.autoSize();\r\n this.rows();\r\n if (this.autoSize()) {\r\n queueMicrotask(() => this.applyAutoSize());\r\n }\r\n });\r\n }\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n if (this.autoSize()) {\r\n queueMicrotask(() => this.applyAutoSize());\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement;\r\n const newValue = target.value;\r\n this.value.set(newValue);\r\n this.onChange(newValue);\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.inputFocus.emit();\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.touched.set(true);\r\n this.onTouched();\r\n this.inputBlur.emit();\r\n }\r\n\r\n focus(): void {\r\n this.textareaRef?.nativeElement.focus();\r\n }\r\n\r\n private applyAutoSize(): void {\r\n const el = this.textareaRef?.nativeElement;\r\n if (!el) return;\r\n el.style.height = 'auto';\r\n el.style.height = `${el.scrollHeight}px`;\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[textarea-label]');\r\n }\r\n}\r\n","<div class=\"textarea-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"textarea-label\"\r\n [for]=\"textareaId\"\r\n (click)=\"focus()\"\r\n [class.required]=\"required()\"\r\n >\r\n <ng-content select=\"[textarea-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"textarea-wrapper\">\r\n <textarea\r\n #textareaRef\r\n [id]=\"textareaId\"\r\n [rows]=\"rows()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.maxlength]=\"maxLength() ?? null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.data-state]=\"state()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n [style.resize]=\"effectiveResize()\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n ></textarea>\r\n </div>\r\n\r\n @if (error() || success() || hint() || shouldShowCount()) {\r\n <div class=\"textarea-footer\">\r\n <div class=\"textarea-messages\">\r\n @if (error()) {\r\n <div [id]=\"textareaId + '-error'\" class=\"textarea-error\" role=\"alert\">\r\n <ng-content select=\"[textarea-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"textareaId + '-success'\" class=\"textarea-success\" role=\"status\">\r\n <ng-content select=\"[textarea-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"textareaId + '-hint'\" class=\"textarea-hint\">\r\n <ng-content select=\"[textarea-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (shouldShowCount()) {\r\n <div\r\n class=\"textarea-count\"\r\n [class.at-limit]=\"isAtLimit() && !isOverLimit()\"\r\n [class.over-limit]=\"isOverLimit()\"\r\n aria-live=\"polite\"\r\n >\r\n {{ characterCount().current }}@if (maxLength() !== undefined) {\r\n <span>/{{ maxLength() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n output,\r\n effect,\r\n InjectionToken,\r\n ElementRef,\r\n AfterViewInit,\r\n OnDestroy\r\n} from '@angular/core';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { TooltipPosition, TooltipConfig, TooltipVariant } from './tooltip.types';\r\n\r\nexport const TOOLTIP_CONFIG = new InjectionToken<Partial<TooltipConfig>>('TOOLTIP_CONFIG', {\r\n factory: () => ({\r\n variant: 'dark',\r\n position: 'top',\r\n showDelay: 200,\r\n hideDelay: 100,\r\n maxWidth: 200,\r\n autoFlip: true,\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tooltip',\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(mouseenter)': 'show()',\r\n '(mouseleave)': 'hide()',\r\n '(focusin)': 'show()',\r\n '(focusout)': 'hide()',\r\n '(keydown.escape)': 'hideImmediate()',\r\n '[style.display]': '\"inline-block\"',\r\n '[style.position]': '\"relative\"',\r\n }\r\n})\r\nexport class PshTooltipComponent implements AfterViewInit, OnDestroy {\r\n private config = inject(TOOLTIP_CONFIG) as Required<TooltipConfig>;\r\n private elementRef = inject(ElementRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n\r\n variant = input<TooltipVariant>(this.config.variant ?? 'dark');\r\n position = input<TooltipPosition>(this.config.position ?? 'top');\r\n showDelay = input<number>(this.config.showDelay ?? 200);\r\n hideDelay = input<number>(this.config.hideDelay ?? 100);\r\n maxWidth = input<number>(this.config.maxWidth ?? 200);\r\n autoFlip = input<boolean>(this.config.autoFlip ?? true);\r\n\r\n content = input.required<string>();\r\n disabled = input<boolean>(false);\r\n id = input<string>(this.generateUniqueId());\r\n\r\n shown = output<void>();\r\n hidden = output<void>();\r\n\r\n isVisible = signal(false);\r\n computedPosition = signal<TooltipPosition>('top');\r\n\r\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private resizeObserver: ResizeObserver | null = null;\r\n\r\n tooltipId = computed(() => `${this.id()}-tooltip`);\r\n triggerId = computed(() => `${this.id()}-trigger`);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.isVisible()) {\r\n this.shown.emit();\r\n } else {\r\n this.hidden.emit();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const pos = this.position();\r\n if (!this.autoFlip()) {\r\n this.computedPosition.set(pos);\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.autoFlip()) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n if (this.isVisible()) {\r\n this.updatePosition();\r\n }\r\n });\r\n this.resizeObserver.observe(this.elementRef.nativeElement);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.showTimeout) clearTimeout(this.showTimeout);\r\n if (this.hideTimeout) clearTimeout(this.hideTimeout);\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = null;\r\n }\r\n }\r\n\r\n show(): void {\r\n if (this.disabled()) return;\r\n\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n\r\n if (!this.isVisible() && !this.showTimeout) {\r\n this.showTimeout = setTimeout(() => {\r\n if (this.autoFlip()) {\r\n this.updatePosition();\r\n } else {\r\n this.computedPosition.set(this.position());\r\n }\r\n this.isVisible.set(true);\r\n this.showTimeout = null;\r\n }, this.showDelay());\r\n }\r\n }\r\n\r\n hide(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n\r\n if (this.isVisible() && !this.hideTimeout) {\r\n this.hideTimeout = setTimeout(() => {\r\n this.isVisible.set(false);\r\n this.hideTimeout = null;\r\n }, this.hideDelay());\r\n }\r\n }\r\n\r\n hideImmediate(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n this.isVisible.set(false);\r\n }\r\n\r\n private updatePosition(): void {\r\n // Collision detection / flip is delegated to the shared overlay-position\r\n // primitive (same logic, now reused by other popovers).\r\n this.computedPosition.set(\r\n this.overlayPosition.flipSide(this.elementRef.nativeElement, this.position(), {\r\n overlayHeight: 40,\r\n overlayWidth: Math.min(this.maxWidth(), 200),\r\n offset: 12,\r\n }),\r\n );\r\n }\r\n\r\n private generateUniqueId(): string {\r\n return `psh-tooltip-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n}\r\n","<div\r\n class=\"tooltip-wrapper\"\r\n [attr.id]=\"triggerId()\"\r\n [attr.aria-describedby]=\"isVisible() ? tooltipId() : null\"\r\n>\r\n <ng-content></ng-content>\r\n\r\n @if (isVisible()) {\r\n <div\r\n [attr.id]=\"tooltipId()\"\r\n class=\"tooltip\"\r\n [class.top]=\"computedPosition() === 'top'\"\r\n [class.bottom]=\"computedPosition() === 'bottom'\"\r\n [class.left]=\"computedPosition() === 'left'\"\r\n [class.right]=\"computedPosition() === 'right'\"\r\n [class.light]=\"variant() === 'light'\"\r\n [class.dark]=\"variant() === 'dark'\"\r\n [style.max-width.px]=\"maxWidth()\"\r\n role=\"tooltip\"\r\n >\r\n {{ content() }}\r\n <div class=\"tooltip-arrow\"></div>\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input, model, output } from '@angular/core';\r\nimport { CommonModule, DOCUMENT } from '@angular/common';\r\nimport { MenuItem, MenuMode, MenuVariant } from './menu.types';\r\nimport { PshTooltipComponent } from '../tooltip/tooltip.component';\r\n\r\n@Component({\r\n selector: 'psh-menu',\r\n imports: [CommonModule, PshTooltipComponent],\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshMenuComponent<T = string> {\r\n private readonly document = inject(DOCUMENT);\r\n\r\n mode = input<MenuMode>('vertical');\r\n variant = input<MenuVariant>('default');\r\n collapsible = input(false);\r\n ariaLabels = input<Record<string, string>>({\r\n disabled: 'Disabled',\r\n submenu: 'Submenu',\r\n expand: 'Expand menu',\r\n collapse: 'Collapse menu'\r\n });\r\n\r\n items = input<MenuItem<T>[]>([]);\r\n\r\n collapsed = model(false);\r\n expandedItemIds = model<string[]>([]);\r\n\r\n itemClick = output<MenuItem<T>>();\r\n submenuToggle = output<{ item: MenuItem<T>; expanded: boolean }>();\r\n\r\n protected expandedItemsSet = computed(() => new Set(this.expandedItemIds()));\r\n\r\n state = computed(() => this.getState());\r\n\r\n showTooltip = computed(() => this.collapsed() && this.mode() === 'vertical');\r\n\r\n constructor() {}\r\n\r\n private getState(): string {\r\n if (this.collapsed()) return 'collapsed';\r\n if (this.collapsible()) return 'collapsible';\r\n return this.mode();\r\n }\r\n\r\n handleItemClick(item: MenuItem<T>, event: Event, isChild: boolean): void {\r\n if (isChild) {\r\n event.stopPropagation();\r\n }\r\n this.toggleItem(item, event);\r\n }\r\n\r\n toggleItem(item: MenuItem<T>, event?: Event): void {\r\n if (item.disabled) return;\r\n\r\n if (item.children?.length) {\r\n event?.preventDefault();\r\n this.toggleItemExpansion(item.id);\r\n const expanded = this.expandedItemsSet().has(item.id);\r\n this.submenuToggle.emit({ item, expanded });\r\n } else {\r\n this.itemClick.emit(item);\r\n }\r\n }\r\n\r\n toggleCollapse(): void {\r\n if (this.collapsible()) {\r\n this.collapsed.update((v) => !v);\r\n }\r\n }\r\n\r\n isExpanded(item: MenuItem<T>): boolean {\r\n return this.expandedItemsSet().has(item.id);\r\n }\r\n\r\n expandItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (!current.includes(itemId)) {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n collapseItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n }\r\n }\r\n\r\n toggleItemExpansion(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n } else {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const allIds = this.collectItemIdsWithChildren(this.items());\r\n this.expandedItemIds.set(allIds);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedItemIds.set([]);\r\n }\r\n\r\n private collectItemIdsWithChildren(items: MenuItem<T>[]): string[] {\r\n const ids: string[] = [];\r\n for (const item of items) {\r\n if (item.children?.length) {\r\n ids.push(item.id);\r\n ids.push(...this.collectItemIdsWithChildren(item.children));\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n getAriaLabel(item: MenuItem<T>): string {\r\n const base = item.content;\r\n if (item.disabled) {\r\n return `${base} (${this.ariaLabels()['disabled']})`;\r\n }\r\n if (item.children?.length) {\r\n return `${base} (${this.ariaLabels()['submenu']})`;\r\n }\r\n return base;\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, item: MenuItem<T>, index: number): void {\r\n if (item.disabled) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem(index);\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem(index);\r\n break;\r\n\r\n case 'ArrowRight':\r\n if (item.children?.length && !this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'ArrowLeft':\r\n if (item.children?.length && this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n if (this.collapsible() && !this.collapsed()) {\r\n event.preventDefault();\r\n this.toggleCollapse();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(currentIndex: number): void {\r\n const items = this.items();\r\n const nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\r\n this.focusItemAtIndex(nextIndex, 1);\r\n }\r\n\r\n private focusPreviousItem(currentIndex: number): void {\r\n const items = this.items();\r\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\r\n this.focusItemAtIndex(previousIndex, -1);\r\n }\r\n\r\n private focusFirstItem(): void {\r\n this.focusItemAtIndex(0, 1);\r\n }\r\n\r\n private focusLastItem(): void {\r\n this.focusItemAtIndex(this.items().length - 1, -1);\r\n }\r\n\r\n private focusItemAtIndex(index: number, direction: 1 | -1): void {\r\n const items = this.items();\r\n if (index < 0) {\r\n index = items.length - 1;\r\n } else if (index >= items.length) {\r\n index = 0;\r\n }\r\n\r\n const item = items[index];\r\n if (item && !item.divider && !item.disabled) {\r\n setTimeout(() => {\r\n const link = this.document.querySelector(`[data-menu-item-id=\"${item.id}\"]`) as HTMLElement;\r\n link?.focus();\r\n });\r\n } else {\r\n const nextIndex = index + direction;\r\n if (nextIndex !== index) {\r\n this.focusItemAtIndex(nextIndex, direction);\r\n }\r\n }\r\n }\r\n}","<nav\r\n class=\"menu\"\r\n [class.vertical]=\"mode() === 'vertical'\"\r\n [class.horizontal]=\"mode() === 'horizontal'\"\r\n [class.compact]=\"variant() === 'compact'\"\r\n [class.expanded]=\"variant() === 'expanded'\"\r\n [class.collapsed]=\"collapsed()\"\r\n role=\"navigation\"\r\n [attr.aria-label]=\"'Navigation menu'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (collapsible()) {\r\n <button\r\n class=\"menu-collapse-button\"\r\n (click)=\"toggleCollapse()\"\r\n [attr.aria-expanded]=\"!collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? ariaLabels()['expand'] : ariaLabels()['collapse']\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <ul class=\"menu-list\" role=\"menubar\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n @if (item.divider) {\r\n <li class=\"menu-divider\" role=\"separator\"></li>\r\n } @else {\r\n <li\r\n class=\"menu-item\"\r\n [class.has-children]=\"item.children?.length\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n [class.disabled]=\"item.disabled\"\r\n role=\"none\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemTpl; context: { $implicit: item, index: i, isChild: false }\"\r\n ></ng-container>\r\n\r\n @if (item.children?.length) {\r\n <ul\r\n class=\"submenu\"\r\n role=\"menu\"\r\n [attr.aria-label]=\"item.content + ' submenu'\"\r\n >\r\n @for (child of item.children; track child.id) {\r\n <li class=\"menu-item\" role=\"none\">\r\n @if (child.path) {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n </psh-tooltip>\r\n } @else {\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n }\r\n } @else {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <button\r\n type=\"button\"\r\n class=\"menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n </psh-tooltip>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n\r\n<ng-template #itemTpl let-item let-index=\"index\" let-isChild=\"isChild\">\r\n @if (showTooltip()) {\r\n <psh-tooltip\r\n class=\"menu-tooltip-wrapper\"\r\n [content]=\"item.content\"\r\n position=\"right\"\r\n [showDelay]=\"300\"\r\n [hideDelay]=\"0\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: false }\"\r\n ></ng-container>\r\n </psh-tooltip>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: true }\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #itemContentTpl let-item let-index=\"index\" let-isChild=\"isChild\" let-withLabel=\"withLabel\">\r\n @if (item.path) {\r\n <a\r\n class=\"menu-link\"\r\n [attr.href]=\"item.path\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (withLabel) {\r\n <span class=\"menu-label\">{{ item.content }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ item.badge }}</span>\r\n }\r\n @if (withLabel && item.children?.length) {\r\n <i\r\n class=\"ph ph-caret-down menu-arrow\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"menu-link\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n role=\"menuitem\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n [disabled]=\"item.disabled\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (withLabel) {\r\n <span class=\"menu-label\">{{ item.content }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"menu-badge\" role=\"status\">{{ item.badge }}</span>\r\n }\r\n @if (withLabel && item.children?.length) {\r\n <i\r\n class=\"ph ph-caret-down menu-arrow\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </button>\r\n }\r\n</ng-template>\r\n","import {\r\n afterNextRender,\r\n DestroyRef,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n Injector,\r\n input,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Headless focus-trap primitive.\r\n *\r\n * Apply to a container element and toggle activation with `[pshFocusTrap]`.\r\n * When active it:\r\n * - remembers the element that had focus before activation,\r\n * - moves focus to the first focusable element inside the container\r\n * (deterministically, after the next render — no `setTimeout`),\r\n * - keeps Tab / Shift+Tab focus cycling within the container, and\r\n * - restores focus to the previously focused element on deactivation/destroy.\r\n *\r\n * Handles the case where focus is currently outside the container.\r\n *\r\n * @example\r\n * ```html\r\n * <div [pshFocusTrap]=\"isOpen()\">…</div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshFocusTrap]',\r\n})\r\nexport class PshFocusTrapDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly injector = inject(Injector);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Whether the trap is active. */\r\n readonly pshFocusTrap = input<boolean>(true);\r\n\r\n /** Whether to restore focus to the previously focused element on deactivation. */\r\n readonly pshFocusTrapRestore = input<boolean>(true);\r\n\r\n /**\r\n * Whether to move focus into the container when the trap activates.\r\n * Set to false to trap + restore focus without stealing initial focus.\r\n */\r\n readonly pshFocusTrapAutoFocus = input<boolean>(true);\r\n\r\n private previouslyFocused: HTMLElement | null = null;\r\n private active = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const enabled = this.pshFocusTrap();\r\n if (!this.isBrowser) return;\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n });\r\n\r\n inject(DestroyRef).onDestroy(() => this.restoreFocus(true));\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (!this.active || event.key !== 'Tab') return;\r\n\r\n const focusables = this.getFocusableElements();\r\n const first = focusables[0];\r\n const last = focusables[focusables.length - 1];\r\n if (!first || !last) {\r\n // Nothing focusable inside — keep focus pinned to the container.\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const current = this.document.activeElement;\r\n const inside = this.host.nativeElement.contains(current);\r\n\r\n if (event.shiftKey) {\r\n if (!inside || current === first) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n if (!inside || current === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n }\r\n\r\n private activate(): void {\r\n if (this.active) return;\r\n this.active = true;\r\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\r\n\r\n if (!this.pshFocusTrapAutoFocus()) return;\r\n\r\n // Deterministic post-render focus (replaces setTimeout-based focusing).\r\n afterNextRender(\r\n () => {\r\n if (!this.active) return;\r\n if (!this.host.nativeElement.contains(this.document.activeElement)) {\r\n this.getFocusableElements()[0]?.focus();\r\n }\r\n },\r\n { injector: this.injector },\r\n );\r\n }\r\n\r\n private deactivate(): void {\r\n if (!this.active) return;\r\n this.active = false;\r\n this.restoreFocus(false);\r\n }\r\n\r\n private restoreFocus(immediate: boolean): void {\r\n const target = this.previouslyFocused;\r\n this.previouslyFocused = null;\r\n\r\n if (!this.pshFocusTrapRestore() || !target || typeof target.focus !== 'function') {\r\n return;\r\n }\r\n\r\n if (immediate) {\r\n target.focus();\r\n } else {\r\n afterNextRender(() => target.focus(), { injector: this.injector });\r\n }\r\n }\r\n\r\n private getFocusableElements(): HTMLElement[] {\r\n const selector = [\r\n 'button:not([disabled])',\r\n '[href]',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n ].join(', ');\r\n\r\n // The selector already excludes the common non-focusable cases (disabled,\r\n // tabindex=\"-1\"). We intentionally avoid an offsetParent/layout-based\r\n // visibility filter: the browser itself skips display:none elements on\r\n // focus(), and layout metrics are unavailable in non-rendering test envs.\r\n return Array.from(\r\n this.host.nativeElement.querySelectorAll<HTMLElement>(selector),\r\n ).filter(el => !el.hasAttribute('hidden'));\r\n }\r\n}\r\n","import { computed, Injectable, signal } from '@angular/core';\r\n\r\n/** A handle for a registered overlay layer. */\r\nexport interface OverlayHandle {\r\n /** Unique id of the layer, used to release it. */\r\n readonly id: number;\r\n /** z-index assigned to this layer (higher = on top). */\r\n readonly zIndex: number;\r\n}\r\n\r\n/**\r\n * Central overlay stacking authority.\r\n *\r\n * Hands out monotonically increasing z-indexes so that stacked overlays\r\n * (modals, dropdowns, tooltips, popovers…) always layer in open order, and\r\n * exposes which layer is on top. This replaces per-component, ad-hoc z-index\r\n * management. The counter resets once every layer is released, keeping z-index\r\n * values bounded.\r\n *\r\n * @example\r\n * ```typescript\r\n * private overlay = inject(PshOverlayService);\r\n * // on open:\r\n * this.handle = this.overlay.push(); // { id, zIndex }\r\n * // on close:\r\n * this.overlay.remove(this.handle.id);\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayService {\r\n /** z-index of the first (bottom) overlay layer. */\r\n private readonly baseZIndex = 1000;\r\n /** z-index increment between stacked layers. */\r\n private readonly step = 10;\r\n\r\n private sequence = 0;\r\n private readonly stack = signal<readonly number[]>([]);\r\n\r\n /** Number of currently-open overlay layers. */\r\n readonly activeCount = computed(() => this.stack().length);\r\n\r\n /**\r\n * Registers a new topmost overlay layer.\r\n * @returns a handle with a unique id and the z-index to apply.\r\n */\r\n push(): OverlayHandle {\r\n const id = ++this.sequence;\r\n this.stack.update(layers => [...layers, id]);\r\n return { id, zIndex: this.baseZIndex + (this.sequence - 1) * this.step };\r\n }\r\n\r\n /** Releases a previously registered layer. */\r\n remove(id: number): void {\r\n this.stack.update(layers => layers.filter(layer => layer !== id));\r\n if (this.stack().length === 0) {\r\n this.sequence = 0;\r\n }\r\n }\r\n\r\n /** Returns true if the given layer is currently on top of the stack. */\r\n isTopmost(id: number): boolean {\r\n const layers = this.stack();\r\n return layers.length > 0 && layers[layers.length - 1] === id;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injectable,\r\n InjectionToken,\r\n input,\r\n model,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n Renderer2,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { PshButtonComponent } from '../button/button.component';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { ModalSize, ModalConfig } from './modal.types';\r\nimport { PshOverlayService, OverlayHandle } from '../../a11y/overlay.service';\r\n\r\n/**\r\n * Injection token for global modal configuration\r\n *\r\n * @example\r\n * ```typescript\r\n * // In app.config.ts or main.ts\r\n * providers: [\r\n * {\r\n * provide: MODAL_CONFIG,\r\n * useValue: {\r\n * size: 'large',\r\n * closeOnBackdrop: false,\r\n * }\r\n * }\r\n * ]\r\n * ```\r\n */\r\nexport const MODAL_CONFIG = new InjectionToken<Partial<ModalConfig>>('MODAL_CONFIG', {\r\n factory: () => ({\r\n size: 'medium',\r\n showClose: true,\r\n closeOnBackdrop: true,\r\n closeOnEscape: true,\r\n preventScroll: true,\r\n showFooter: true,\r\n dismissLabel: 'Close',\r\n confirmLabel: 'Confirm',\r\n cancelLabel: 'Cancel'\r\n })\r\n});\r\n\r\n/**\r\n * Service for managing modal instances and global configuration\r\n *\r\n * Tracks all active modals and provides centralized configuration.\r\n * Useful for managing modal stacks and preventing multiple modals from conflicting.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ModalService {\r\n private config = inject(MODAL_CONFIG);\r\n /**\r\n * Ordered stack of open modal ids (insertion order = visual stacking order).\r\n * The last entry is the topmost (most recently opened) modal.\r\n */\r\n private modalsSignal = signal<readonly string[]>([]);\r\n\r\n /**\r\n * Computed signal exposing the number of active modals\r\n */\r\n readonly activeModalsCount = computed(() => this.modalsSignal().length);\r\n\r\n /**\r\n * Computed signal exposing the id of the topmost modal, or null if none are open\r\n */\r\n readonly topmostModalId = computed(() => {\r\n const modals = this.modalsSignal();\r\n return modals.length > 0 ? modals[modals.length - 1] : null;\r\n });\r\n\r\n /**\r\n * Returns the global modal configuration\r\n */\r\n getConfig(): Partial<ModalConfig> {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Generates a unique identifier for a modal instance\r\n */\r\n generateId(): string {\r\n return `modal-${Math.random().toString(36).substring(2, 11)}`;\r\n }\r\n\r\n /**\r\n * Registers a modal instance when it opens, pushing it onto the stack\r\n * @param id - Unique modal identifier\r\n */\r\n register(id: string): void {\r\n this.modalsSignal.update(modals =>\r\n modals.includes(id) ? modals : [...modals, id]\r\n );\r\n }\r\n\r\n /**\r\n * Unregisters a modal instance when it closes, removing it from the stack\r\n * @param id - Unique modal identifier\r\n */\r\n unregister(id: string): void {\r\n this.modalsSignal.update(modals => modals.filter(modalId => modalId !== id));\r\n }\r\n\r\n /**\r\n * Checks if a modal is currently registered\r\n * @param id - Unique modal identifier\r\n */\r\n isRegistered(id: string): boolean {\r\n return this.modalsSignal().includes(id);\r\n }\r\n\r\n /**\r\n * Checks if a modal is the topmost (most recently opened) open modal.\r\n * Used to ensure Escape / backdrop only dismiss the modal on top of the stack.\r\n * @param id - Unique modal identifier\r\n */\r\n isTopmost(id: string): boolean {\r\n return this.topmostModalId() === id;\r\n }\r\n}\r\n\r\n/**\r\n * A modal dialog component that displays content in an overlay\r\n *\r\n * @example\r\n * ```typescript\r\n * // Basic usage with two-way binding\r\n * <psh-modal [(open)]=\"isOpen\" title=\"My Modal\">\r\n * <p>Modal content</p>\r\n * </psh-modal>\r\n *\r\n * // With custom footer\r\n * <psh-modal [(open)]=\"isOpen\" title=\"Confirm Action\">\r\n * <p>Are you sure?</p>\r\n * <div modal-footer #modalFooter>\r\n * <psh-button (clicked)=\"isOpen = false\">Cancel</psh-button>\r\n * <psh-button variant=\"primary\" (clicked)=\"handleConfirm()\">Confirm</psh-button>\r\n * </div>\r\n * </psh-modal>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-modal',\r\n imports: [CommonModule, PshButtonComponent, PshFocusTrapDirective],\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshModalComponent implements AfterViewInit, OnDestroy {\r\n private readonly config = inject(MODAL_CONFIG);\r\n private readonly modalService = inject(ModalService);\r\n private readonly overlay = inject(PshOverlayService);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n private readonly modalId = this.modalService.generateId();\r\n private overlayHandle: OverlayHandle | null = null;\r\n /** z-index assigned by the overlay stack while open (keeps stacked modals layered). */\r\n protected readonly zIndex = signal<number | null>(null);\r\n private modalElement?: ElementRef<HTMLElement>;\r\n private isAttachedToBody = false;\r\n private resizeListener?: () => void;\r\n private readonly isMobileSignal = signal(false);\r\n private readonly mobileBreakpoint = 768;\r\n\r\n /**\r\n * Controls the visibility of the modal (two-way binding)\r\n */\r\n open = model(false);\r\n\r\n /**\r\n * Size of the modal dialog\r\n */\r\n size = input<ModalSize>(this.config.size ?? 'medium');\r\n\r\n /**\r\n * Whether to show the close button in the header\r\n */\r\n showClose = input(this.config.showClose ?? true);\r\n\r\n /**\r\n * Whether clicking the backdrop closes the modal\r\n */\r\n closeOnBackdrop = input(this.config.closeOnBackdrop ?? true);\r\n\r\n /**\r\n * Whether pressing Escape closes the modal\r\n */\r\n closeOnEscape = input(this.config.closeOnEscape ?? true);\r\n\r\n /**\r\n * Whether to prevent scrolling of the page when modal is open\r\n */\r\n preventScroll = input(this.config.preventScroll ?? true);\r\n\r\n /**\r\n * Whether to show the default footer with action buttons\r\n */\r\n showFooter = input(this.config.showFooter ?? true);\r\n\r\n /**\r\n * Title displayed in the modal header\r\n */\r\n title = input('Modal Title');\r\n\r\n /**\r\n * Accessible label for the close button\r\n */\r\n dismissLabel = input(this.config.dismissLabel ?? 'Close');\r\n\r\n /**\r\n * Label for the confirm button in the default footer\r\n */\r\n confirmLabel = input(this.config.confirmLabel ?? 'Confirm');\r\n\r\n /**\r\n * Label for the cancel button in the default footer\r\n */\r\n cancelLabel = input(this.config.cancelLabel ?? 'Cancel');\r\n\r\n /**\r\n * Custom CSS class(es) to apply to the modal container\r\n * Allows for custom styling without using deep selectors\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal styleClass=\"my-custom-modal\" />\r\n * ```\r\n */\r\n styleClass = input('');\r\n\r\n /**\r\n * Custom CSS class(es) to apply to the modal backdrop\r\n * Useful for stacked modals with different z-index or opacity\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal backdropClass=\"higher-z-index\" />\r\n * ```\r\n */\r\n backdropClass = input('');\r\n\r\n /**\r\n * Emitted when the modal is closed\r\n */\r\n closed = output<void>();\r\n\r\n /**\r\n * Emitted when the confirm button is clicked\r\n */\r\n confirmed = output<void>();\r\n\r\n /**\r\n * Content child for detecting custom footer projection\r\n */\r\n private readonly customFooter = contentChild<ElementRef>('modalFooter');\r\n\r\n /**\r\n * View child reference to the modal backdrop element\r\n */\r\n private readonly modalBackdrop = viewChild<ElementRef>('modalBackdrop');\r\n\r\n /**\r\n * Keyboard event handler for Escape key\r\n */\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key !== 'Escape') return;\r\n if (this.closeOnEscape() && this.open() && this.modalService.isTopmost(this.modalId)) {\r\n this.handleClose();\r\n }\r\n };\r\n\r\n /**\r\n * Computed signal indicating if a custom footer is projected\r\n */\r\n hasCustomFooter = computed(() => !!this.customFooter());\r\n\r\n /**\r\n * Computed signal for the modal state\r\n */\r\n state = computed(() => this.open() ? 'open' : 'closed');\r\n\r\n /**\r\n * Computed signal for the modal dialog ID for accessibility\r\n */\r\n modalDialogId = computed(() => `${this.modalId}-dialog`);\r\n\r\n /**\r\n * Computed signal for the modal description ID for accessibility\r\n */\r\n modalDescriptionId = computed(() => `${this.modalId}-description`);\r\n\r\n /**\r\n * Computed signal indicating if the screen is mobile-sized\r\n */\r\n isMobileScreen = computed(() => this.isMobileSignal());\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.open()) {\r\n this.onModalOpen();\r\n } else {\r\n this.onModalClose();\r\n }\r\n });\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.checkScreenSize();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.attachModalToBody();\r\n this.setupResizeListener();\r\n }\r\n\r\n /**\r\n * Handles all setup when modal opens\r\n */\r\n private onModalOpen(): void {\r\n this.modalService.register(this.modalId);\r\n this.overlayHandle = this.overlay.push();\r\n this.zIndex.set(this.overlayHandle.zIndex);\r\n if (!this.isBrowser) return;\r\n this.setupScrollLock();\r\n this.addEventListeners();\r\n // Initial focus + focus trapping + focus restoration are handled by\r\n // the [pshFocusTrap] directive on the modal container.\r\n }\r\n\r\n /**\r\n * Handles all cleanup when modal closes\r\n */\r\n private onModalClose(): void {\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n if (!this.isBrowser) return;\r\n this.removeScrollLock();\r\n this.removeEventListeners();\r\n }\r\n\r\n /** Releases this modal's overlay layer and clears its z-index. */\r\n private releaseOverlay(): void {\r\n if (this.overlayHandle) {\r\n this.overlay.remove(this.overlayHandle.id);\r\n this.overlayHandle = null;\r\n }\r\n this.zIndex.set(null);\r\n }\r\n\r\n /**\r\n * Checks if the current screen size is mobile\r\n */\r\n private checkScreenSize(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.isMobileSignal.set(view.innerWidth < this.mobileBreakpoint);\r\n }\r\n }\r\n\r\n /**\r\n * Sets up resize listener to detect screen size changes\r\n */\r\n private setupResizeListener(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.resizeListener = () => this.checkScreenSize();\r\n view.addEventListener('resize', this.resizeListener);\r\n }\r\n }\r\n\r\n /**\r\n * Removes resize listener\r\n */\r\n private removeResizeListener(): void {\r\n if (this.resizeListener) {\r\n this.document.defaultView?.removeEventListener('resize', this.resizeListener);\r\n }\r\n }\r\n\r\n /**\r\n * Adds keyboard event listeners\r\n */\r\n private addEventListeners(): void {\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Removes keyboard event listeners\r\n */\r\n private removeEventListeners(): void {\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Closes the modal and emits the closed event\r\n */\r\n handleClose(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * Emits the confirmed event without closing the modal\r\n * Allows parent component to handle confirmation logic and close if needed\r\n */\r\n handleConfirm(): void {\r\n this.confirmed.emit();\r\n }\r\n\r\n /**\r\n * Handles clicks on the backdrop\r\n * Closes the modal if closeOnBackdrop is true and click is on backdrop itself\r\n */\r\n handleBackdropClick(event: MouseEvent): void {\r\n if (\r\n this.closeOnBackdrop() &&\r\n this.modalService.isTopmost(this.modalId) &&\r\n event.target === event.currentTarget\r\n ) {\r\n this.handleClose();\r\n }\r\n }\r\n\r\n /**\r\n * Prevents page scrolling when modal is open\r\n * Calculates scrollbar width to prevent layout shift\r\n */\r\n private setupScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n\r\n const root = this.document.documentElement;\r\n const view = this.document.defaultView;\r\n if (view && !root.style.getPropertyValue('--scrollbar-width')) {\r\n const scrollbarWidth = view.innerWidth - root.clientWidth;\r\n root.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);\r\n }\r\n this.document.body.classList.add('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Removes scroll lock when modal closes\r\n */\r\n private removeScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n this.document.body.classList.remove('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Attaches the modal element to document.body for proper overlay rendering\r\n */\r\n private attachModalToBody(): void {\r\n const backdrop = this.modalBackdrop();\r\n if (backdrop && backdrop.nativeElement && !this.isAttachedToBody) {\r\n this.modalElement = backdrop;\r\n this.renderer.appendChild(this.document.body, backdrop.nativeElement);\r\n this.isAttachedToBody = true;\r\n }\r\n }\r\n\r\n /**\r\n * Detaches the modal element from document.body\r\n */\r\n private detachModalFromBody(): void {\r\n if (this.modalElement && this.modalElement.nativeElement && this.isAttachedToBody) {\r\n this.renderer.removeChild(this.document.body, this.modalElement.nativeElement);\r\n this.isAttachedToBody = false;\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup on component destruction\r\n */\r\n ngOnDestroy(): void {\r\n this.removeScrollLock();\r\n this.removeEventListeners();\r\n this.removeResizeListener();\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n this.detachModalFromBody();\r\n }\r\n}\r\n","<!-- Dialog backdrop: pointer dismissal only; the keyboard path is Escape (handled). -->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n<div\r\n #modalBackdrop\r\n [class]=\"'modal-backdrop ' + backdropClass()\"\r\n [class.open]=\"open()\"\r\n (click)=\"handleBackdropClick($event)\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [style.z-index]=\"zIndex()\"\r\n [attr.aria-hidden]=\"!open()\"\r\n [attr.aria-labelledby]=\"modalDialogId() + '-title'\"\r\n [attr.aria-describedby]=\"modalDescriptionId()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div\r\n [class]=\"'modal-container ' + styleClass()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.medium]=\"size() === 'medium'\"\r\n [class.large]=\"size() === 'large'\"\r\n [attr.id]=\"modalDialogId()\"\r\n role=\"document\"\r\n [pshFocusTrap]=\"open()\"\r\n >\r\n <div class=\"modal-content-wrapper\">\r\n <div class=\"modal-header\">\r\n <h2 class=\"modal-title\" [attr.id]=\"modalDialogId() + '-title'\">\r\n <ng-content select=\"[modal-title]\">{{ title() }}</ng-content>\r\n </h2>\r\n @if (showClose()) {\r\n <button\r\n type=\"button\"\r\n class=\"modal-close\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"modal-content\" [attr.id]=\"modalDescriptionId()\">\r\n <ng-content>\r\n <p>\r\n Modal content goes here. You can replace this with your own content.\r\n </p>\r\n </ng-content>\r\n </div>\r\n\r\n @if (showFooter() && !hasCustomFooter()) {\r\n <div class=\"modal-footer\">\r\n <psh-button\r\n appearance=\"outline\"\r\n variant=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleClose()\">\r\n {{ cancelLabel() }}\r\n </psh-button>\r\n <psh-button\r\n appearance=\"filled\"\r\n variant=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleConfirm()\">\r\n {{ confirmLabel() }}\r\n </psh-button>\r\n </div>\r\n } @if (showFooter() && hasCustomFooter()) {\r\n <div class=\"modal-footer\">\r\n <!--\r\n Note: When using a custom footer, buttons should also use [fullWidth]=\"isMobileScreen()\"\r\n to ensure proper responsive behavior on mobile devices.\r\n Example:\r\n <psh-button [fullWidth]=\"isMobileScreen()\" (clicked)=\"action()\">Custom Button</psh-button>\r\n -->\r\n <ng-content select=\"[modal-footer]\" #modalFooter></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PaginationSize, PaginationVariant, PaginationConfig } from './pagination.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const PAGINATION_CONFIG = new InjectionToken<Partial<PaginationConfig>>(\r\n 'PAGINATION_CONFIG',\r\n {\r\n factory: () => ({\r\n size: 'medium',\r\n variant: 'default',\r\n showFirstLast: true,\r\n showPrevNext: true,\r\n maxVisiblePages: 5,\r\n showItemsPerPage: false,\r\n itemsPerPageOptions: [5, 10, 25, 50],\r\n }),\r\n },\r\n);\r\n\r\n@Component({\r\n selector: 'psh-pagination',\r\n imports: [CommonModule],\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshPaginationComponent {\r\n private config = inject(PAGINATION_CONFIG);\r\n private static idCounter = 0;\r\n private readonly uniqueId = `pagination-${++PshPaginationComponent.idCounter}`;\r\n\r\n currentPage = model(1);\r\n totalPages = model(1);\r\n itemsPerPageInput = input(10, { alias: 'itemsPerPage' });\r\n itemsPerPage = linkedSignal(this.itemsPerPageInput);\r\n\r\n constructor() {\r\n effect(() => {\r\n const total = this.totalPages();\r\n if (total < 1 || !Number.isFinite(total)) {\r\n console.warn(`[psh-pagination] Invalid totalPages \"${total}\", setting to 1`);\r\n this.totalPages.set(1);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const current = this.currentPage();\r\n const total = this.totalPages();\r\n if (current < 1 || !Number.isFinite(current)) {\r\n console.warn(`[psh-pagination] Invalid currentPage \"${current}\", setting to 1`);\r\n this.currentPage.set(1);\r\n } else if (current > total && total >= 1) {\r\n console.warn(\r\n `[psh-pagination] currentPage \"${current}\" exceeds totalPages \"${total}\", setting to ${total}`,\r\n );\r\n this.currentPage.set(total);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const maxVisible = this.maxVisiblePages();\r\n if (maxVisible < 1 || !Number.isFinite(maxVisible)) {\r\n console.warn(`[psh-pagination] Invalid maxVisiblePages \"${maxVisible}\", must be >= 1`);\r\n }\r\n });\r\n }\r\n\r\n readonly size = input(this.config.size ?? ('medium' as PaginationSize), {\r\n transform: (value: PaginationSize): PaginationSize => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n console.warn(`[psh-pagination] Invalid size \"${value}\", falling back to \"medium\"`);\r\n return 'medium';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly variant = input(this.config.variant ?? ('default' as PaginationVariant), {\r\n transform: (value: PaginationVariant): PaginationVariant => {\r\n if (!['default', 'outline'].includes(value)) {\r\n console.warn(`[psh-pagination] Invalid variant \"${value}\", falling back to \"default\"`);\r\n return 'default';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly showFirstLast = input(this.config.showFirstLast ?? true);\r\n readonly showPrevNext = input(this.config.showPrevNext ?? true);\r\n readonly maxVisiblePages = input(this.config.maxVisiblePages ?? 5);\r\n readonly showItemsPerPage = input(this.config.showItemsPerPage ?? false);\r\n readonly itemsPerPageOptions = input<number[]>([5, 10, 25, 50]);\r\n readonly firstLabel = input('First');\r\n readonly previousLabel = input('Previous');\r\n readonly nextLabel = input('Next');\r\n readonly lastLabel = input('Last');\r\n readonly pageLabel = input('Page');\r\n readonly itemsLabel = input('items');\r\n readonly itemsPerPageLabel = input('Items per page');\r\n readonly id = input<string>();\r\n readonly ariaLabel = input<string>('Pagination navigation');\r\n\r\n pageChange = output<number>();\r\n itemsPerPageChange = output<number>();\r\n navigationError = output<{ action: string; reason: string }>();\r\n\r\n protected readonly navigationId = computed(() => {\r\n const customId = this.id();\r\n return customId || this.uniqueId;\r\n });\r\n\r\n protected readonly pages = computed(() => {\r\n const pages: number[] = [];\r\n const halfVisible = Math.floor(this.maxVisiblePages() / 2);\r\n let start = Math.max(1, this.currentPage() - halfVisible);\r\n const end = Math.min(this.totalPages(), start + this.maxVisiblePages() - 1);\r\n\r\n if (end - start + 1 < this.maxVisiblePages()) {\r\n start = Math.max(1, end - this.maxVisiblePages() + 1);\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n return pages;\r\n });\r\n\r\n protected readonly state = computed(() => this.getState());\r\n\r\n protected readonly canGoNext = computed(() => this.currentPage() < this.totalPages());\r\n protected readonly canGoPrevious = computed(() => this.currentPage() > 1);\r\n protected readonly isFirstPage = computed(() => this.currentPage() === 1);\r\n protected readonly isLastPage = computed(() => this.currentPage() === this.totalPages());\r\n\r\n protected readonly currentPageAnnouncement = computed(() => {\r\n return `Page ${this.currentPage()} sur ${this.totalPages()}`;\r\n });\r\n\r\n private getState(): string {\r\n if (this.currentPage() === 1) return 'first';\r\n if (this.currentPage() === this.totalPages()) return 'last';\r\n return 'default';\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (page !== this.currentPage() && page >= 1 && page <= this.totalPages()) {\r\n this.currentPage.set(page);\r\n this.pageChange.emit(page);\r\n } else if (page < 1 || page > this.totalPages()) {\r\n this.navigationError.emit({\r\n action: 'goToPage',\r\n reason: `Page ${page} is out of bounds (1-${this.totalPages()})`,\r\n });\r\n }\r\n }\r\n\r\n goToFirstPage(): void {\r\n this.goToPage(1);\r\n }\r\n\r\n goToLastPage(): void {\r\n this.goToPage(this.totalPages());\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.canGoNext()) {\r\n this.goToPage(this.currentPage() + 1);\r\n }\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.canGoPrevious()) {\r\n this.goToPage(this.currentPage() - 1);\r\n }\r\n }\r\n\r\n onItemsPerPageChange(event: Event): void {\r\n const value = parseInt((event.target as HTMLSelectElement).value);\r\n this.itemsPerPage.set(value);\r\n this.itemsPerPageChange.emit(value);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.goToPreviousPage();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.goToNextPage();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.goToFirstPage();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.goToLastPage();\r\n break;\r\n }\r\n }\r\n}\r\n","<nav\r\n class=\"pagination\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n role=\"navigation\"\r\n [attr.id]=\"navigationId()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (keydown)=\"onKeydown($event)\"\r\n>\r\n @if (showItemsPerPage()) {\r\n <div class=\"items-per-page\">\r\n <label [attr.for]=\"navigationId() + '-items-select'\" class=\"items-per-page-label\">\r\n {{ itemsPerPageLabel() }}\r\n </label>\r\n <select\r\n [attr.id]=\"navigationId() + '-items-select'\"\r\n (change)=\"onItemsPerPageChange($event)\"\r\n [attr.aria-label]=\"itemsPerPageLabel()\"\r\n >\r\n @for (option of itemsPerPageOptions(); track option) {\r\n <option [value]=\"option\" [selected]=\"option === itemsPerPage()\">\r\n {{ option }} {{ itemsLabel() }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"isFirstPage()\"\r\n (click)=\"goToFirstPage()\"\r\n [attr.aria-label]=\"firstLabel()\"\r\n [disabled]=\"isFirstPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"!canGoPrevious()\"\r\n (click)=\"goToPreviousPage()\"\r\n [attr.aria-label]=\"previousLabel()\"\r\n [disabled]=\"!canGoPrevious()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @for (page of pages(); track page) {\r\n <button\r\n class=\"page-button\"\r\n [class.active]=\"page === currentPage()\"\r\n (click)=\"goToPage(page)\"\r\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\r\n [attr.aria-label]=\"pageLabel() + ' ' + page\"\r\n type=\"button\"\r\n >\r\n {{ page }}\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"!canGoNext()\"\r\n (click)=\"goToNextPage()\"\r\n [attr.aria-label]=\"nextLabel()\"\r\n [disabled]=\"!canGoNext()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"page-button\"\r\n [class.disabled]=\"isLastPage()\"\r\n (click)=\"goToLastPage()\"\r\n [attr.aria-label]=\"lastLabel()\"\r\n [disabled]=\"isLastPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <div class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ currentPageAnnouncement() }}\r\n </div>\r\n</nav>","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, output, InjectionToken } from '@angular/core';\r\nimport { ProgressbarVariant, ProgressbarSize, ProgressbarMode, ProgressbarLabelPosition, ProgressbarConfig } from './progressbar.types';\r\n\r\nexport const PROGRESSBAR_CONFIG = new InjectionToken<Partial<ProgressbarConfig>>('PROGRESSBAR_CONFIG', {\r\n factory: () => ({\r\n value: 0,\r\n max: 100,\r\n variant: 'primary',\r\n size: 'medium',\r\n showLabel: true,\r\n mode: 'default',\r\n labelPosition: 'top'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-progressbar',\r\n imports: [],\r\n templateUrl: './progressbar.component.html',\r\n styleUrls: ['./progressbar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'progressbar-container',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.label-bottom]': 'labelPosition() === \"bottom\"',\r\n '[class.label-inline]': 'labelPosition() === \"inline\"',\r\n '[attr.data-state]': 'mode()',\r\n '[attr.aria-live]': '\"polite\"'\r\n }\r\n})\r\nexport class PshProgressbarComponent {\r\n private config = inject(PROGRESSBAR_CONFIG);\r\n\r\n // Model inputs for two-way binding\r\n value = model(this.config.value ?? 0);\r\n max = model(this.config.max ?? 100);\r\n\r\n // Regular inputs\r\n variant = input<ProgressbarVariant>(this.config.variant ?? 'primary');\r\n size = input<ProgressbarSize>(this.config.size ?? 'medium');\r\n showLabel = input(this.config.showLabel ?? true);\r\n mode = input<ProgressbarMode>(this.config.mode ?? 'default');\r\n label = input<string>();\r\n labelPosition = input<ProgressbarLabelPosition>(this.config.labelPosition ?? 'top');\r\n ariaLabel = input<string>();\r\n\r\n // Outputs\r\n completed = output<void>();\r\n thresholdReached = output<number>();\r\n\r\n // Computed values\r\n percentage = computed(() => {\r\n const val = this.value();\r\n const maxVal = this.max();\r\n if (maxVal <= 0) return 0;\r\n return Math.min(100, Math.max(0, (val / maxVal) * 100));\r\n });\r\n\r\n isIndeterminate = computed(() => this.mode() === 'indeterminate');\r\n isStriped = computed(() => this.mode() === 'striped' || this.mode() === 'animated');\r\n isAnimated = computed(() => this.mode() === 'animated');\r\n\r\n computedAriaValueText = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n displayLabel = computed(() => {\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return this.label() || `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n constructor() {\r\n let previousThreshold = -1;\r\n let hasCompleted = false;\r\n\r\n effect(() => {\r\n const percentage = this.percentage();\r\n const val = this.value();\r\n const maxVal = this.max();\r\n\r\n if (val >= maxVal && maxVal > 0 && !hasCompleted) {\r\n this.completed.emit();\r\n hasCompleted = true;\r\n }\r\n\r\n if (val < maxVal) {\r\n hasCompleted = false;\r\n }\r\n\r\n const thresholds = [25, 50, 75];\r\n for (const threshold of thresholds) {\r\n if (percentage >= threshold && previousThreshold < threshold) {\r\n this.thresholdReached.emit(threshold);\r\n previousThreshold = threshold;\r\n }\r\n }\r\n\r\n if (percentage < 25) {\r\n previousThreshold = -1;\r\n }\r\n });\r\n }\r\n}","@if (showLabel()) {\r\n <span class=\"progress-label\">{{ displayLabel() }}</span>\r\n}\r\n<div\r\n class=\"progressbar\"\r\n [class.striped]=\"isStriped()\"\r\n [class.animated]=\"isAnimated()\"\r\n [class.indeterminate]=\"isIndeterminate()\"\r\n role=\"progressbar\"\r\n [attr.aria-label]=\"ariaLabel() || label() || 'Progression'\"\r\n [attr.aria-valuenow]=\"isIndeterminate() ? null : value()\"\r\n [attr.aria-valuemin]=\"0\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuetext]=\"computedAriaValueText()\"\r\n>\r\n <div\r\n class=\"progress-track\"\r\n [class]=\"variant()\"\r\n [style.width.%]=\"percentage()\"\r\n ></div>\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n input,\r\n Output,\r\n output,\r\n signal\r\n} from '@angular/core';\r\nimport { RadioSize, RadioConfig } from './radio.types';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const RADIO_CONFIG = new InjectionToken<Partial<RadioConfig>>('RADIO_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n })\r\n});\r\n\r\nexport const RADIO_STYLES = new InjectionToken<Record<string, string>[]>('RADIO_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n/**\r\n * Compteur global pour générer des IDs uniques\r\n */\r\nlet radioIdCounter = 0;\r\n\r\n@Component({\r\n selector: 'psh-radio',\r\n imports: [],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.radio-disabled]': 'disabled()',\r\n '[class.radio-error]': '!!error()',\r\n '[class.radio-success]': '!!success()',\r\n '[class.radio-small]': 'size() === \"small\"',\r\n '[class.radio-large]': 'size() === \"large\"',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshRadioComponent {\r\n private config = inject(RADIO_CONFIG);\r\n private styles = inject(RADIO_STYLES, { optional: true }) ?? [];\r\n private uniqueId = `radio-${++radioIdCounter}`;\r\n\r\n // Plain signals + manual @Input/@Output to prevent auto-emission\r\n // when parent sets [checked] or [disabled] via template binding.\r\n // model() would auto-emit checkedChange/disabledChange on .set().\r\n checked = signal(this.config.checked ?? false);\r\n @Input('checked') set checkedInput(v: boolean) { this.checked.set(v); }\r\n\r\n disabled = signal(this.config.disabled ?? false);\r\n @Input('disabled') set disabledInput(v: boolean) { this.disabled.set(v); }\r\n\r\n required = input(this.config.required ?? false);\r\n\r\n // Regular inputs\r\n label = input('');\r\n error = input('');\r\n success = input('');\r\n name = input('');\r\n value = input<unknown>();\r\n ariaLabel = input<string>();\r\n size = input<RadioSize>(this.config.size ?? 'medium');\r\n labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n // Content projection tracking\r\n protected hasProjectedContent = signal(false);\r\n\r\n // Outputs — checkedChange/disabledChange use EventEmitter to decouple from signal writes.\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n @Output() disabledChange = new EventEmitter<boolean>();\r\n valueChange = output<unknown>();\r\n\r\n // Computed values\r\n customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n state = computed(() => this.getState());\r\n\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n return this.hasProjectedContent() ? undefined : 'Radio';\r\n });\r\n\r\n errorMessageId = computed(() =>\r\n this.error() ? `${this.uniqueId}-error` : undefined\r\n );\r\n\r\n successMessageId = computed(() =>\r\n this.success() ? `${this.uniqueId}-success` : undefined\r\n );\r\n\r\n // error and success are mutually exclusive in the template (@if/@else if),\r\n // so aria-describedby references whichever message is actually rendered.\r\n ariaDescribedBy = computed(() => this.errorMessageId() ?? this.successMessageId());\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.label() && !this.ariaLabel() && !this.hasProjectedContent()) {\r\n console.warn(\r\n '[psh-radio] No accessible label provided. Please use label input, ariaLabel input, or projected content.'\r\n );\r\n }\r\n }, { allowSignalWrites: false });\r\n }\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n }\r\n\r\n updateProjectedContent(hasContent: boolean): void {\r\n this.hasProjectedContent.set(hasContent);\r\n }\r\n\r\n handleChange(): void {\r\n if (!this.disabled()) {\r\n const wasChecked = this.checked();\r\n this.checked.set(true);\r\n if (!wasChecked) {\r\n this.checkedChange.emit(true);\r\n this.valueChange.emit(this.value());\r\n }\r\n }\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch(event.key) {\r\n case ' ':\r\n case 'Spacebar':\r\n case 'Enter':\r\n event.preventDefault();\r\n this.handleChange();\r\n break;\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.focusNextRadio();\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.focusPreviousRadio();\r\n break;\r\n }\r\n }\r\n\r\n private focusNextRadio(): void {\r\n // Navigate to next radio in group\r\n // Implementation requires radio group context\r\n }\r\n\r\n private focusPreviousRadio(): void {\r\n // Navigate to previous radio in group\r\n // Implementation requires radio group context\r\n }\r\n}","<div class=\"radio-container\">\r\n <label class=\"radio-label\" [class.label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n type=\"radio\"\r\n class=\"radio-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [name]=\"name()\"\r\n [attr.value]=\"value()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"required() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-checked]=\"checked()\"\r\n [attr.aria-describedby]=\"ariaDescribedBy()\"\r\n (change)=\"handleChange()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n <span \r\n class=\"radio-control\"\r\n [class.error]=\"!!error()\"\r\n [class.success]=\"!!success()\"\r\n >\r\n <span class=\"radio-dot\"></span>\r\n </span>\r\n <span class=\"radio-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Radio</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorMessageId()\" class=\"radio-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successMessageId()\" class=\"radio-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n DestroyRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { SelectOption, SelectOptionGroup, SelectSize, SelectVariant, SearchConfig } from './select.types';\r\n\r\ninterface FlatOption<T> {\r\n option: SelectOption<T>;\r\n effectiveDisabled: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'psh-select',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSelectComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective],\r\n host: {\r\n '[class.full-width]': 'fullWidth()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.outlined]': 'variant() === \"outlined\"',\r\n '[class.filled]': 'variant() === \"filled\"',\r\n '[class.error]': '!!error()',\r\n '[class.success]': '!!success()',\r\n '[class.disabled]': 'disabled()',\r\n '[class.loading]': 'loading()',\r\n '[attr.aria-expanded]': 'isOpen().toString()',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSelectComponent<T = unknown> implements ControlValueAccessor, FormValueControl<T | T[] | null> {\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n\r\n // The options panel, teleported to a body-level overlay layer on open so it\r\n // escapes any ancestor overflow / stacking context (e.g. a modal body).\r\n private readonly panelTpl = viewChild<TemplateRef<unknown>>('panelTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n // Side the panel actually opens on, after viewport collision/flip.\r\n protected readonly resolvedSide = signal<'top' | 'bottom'>('bottom');\r\n\r\n protected readonly selectId = `psh-sel-${Math.random().toString(36).substring(2, 11)}`;\r\n\r\n readonly value = model<T | T[] | null>(null);\r\n readonly disabled = model<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n\r\n size = input<SelectSize>('medium');\r\n variant = input<SelectVariant>('outlined');\r\n searchable = input(false);\r\n multiple = input(false);\r\n clearable = input(false);\r\n loading = input(false);\r\n fullWidth = input(false);\r\n required = input(false);\r\n\r\n options = input<(SelectOption<T> | SelectOptionGroup<T>)[]>([]);\r\n label = input('');\r\n placeholder = input<string>('Sélectionner une option');\r\n multiplePlaceholder = input<string>('Sélectionner des options');\r\n error = input<string | null | undefined>(null);\r\n success = input<string | null | undefined>(null);\r\n hint = input<string | null | undefined>(null);\r\n ariaLabel = input<string | null>(null);\r\n maxSelections = input<number | undefined>(undefined);\r\n minSelections = input<number | undefined>(undefined);\r\n compareWith = input<(a: T, b: T) => boolean>((a, b) => a === b);\r\n searchConfig = input<SearchConfig>({\r\n debounceTime: 300,\r\n placeholder: 'Rechercher...',\r\n minLength: 1\r\n });\r\n\r\n private readonly isOpenSignal = signal(false);\r\n private readonly searchTermSignal = signal('');\r\n readonly focusedIndex = signal(-1);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n searched = output<string>();\r\n scrollEnd = output<void>();\r\n\r\n isOpen = computed(() => this.isOpenSignal());\r\n searchTerm = computed(() => this.searchTermSignal());\r\n\r\n state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return 'default';\r\n });\r\n\r\n computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n\r\n describedBy = computed(() => {\r\n if (this.error()) return 'error-message';\r\n if (this.success()) return 'success-message';\r\n if (this.hint()) return 'hint-message';\r\n return null;\r\n });\r\n\r\n flatFilteredOptions = computed<FlatOption<T>[]>(() => {\r\n const opts = this.filteredOptions();\r\n const result: FlatOption<T>[] = [];\r\n for (const item of opts) {\r\n if (this.isOptionGroup(item)) {\r\n for (const opt of item.options) {\r\n result.push({ option: opt, effectiveDisabled: !!(item.disabled || opt.disabled) });\r\n }\r\n } else {\r\n result.push({ option: item, effectiveDisabled: !!item.disabled });\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n activeDescendant = computed(() => {\r\n const idx = this.focusedIndex();\r\n const flat = this.flatFilteredOptions();\r\n if (idx < 0 || idx >= flat.length) return null;\r\n const item = flat[idx];\r\n if (!item) return null;\r\n return `${this.selectId}-${item.option.value}`;\r\n });\r\n\r\n selectedLabel = computed(() => {\r\n const currentValue = this.value();\r\n const currentOptions = this.flattenOptions(this.options());\r\n\r\n if (currentValue === null || currentValue === undefined) {\r\n return this.multiple() ? this.multiplePlaceholder() : this.placeholder();\r\n }\r\n\r\n if (this.multiple() && Array.isArray(currentValue)) {\r\n const selected = currentOptions.filter(opt =>\r\n currentValue.some(v => this.compareWith()(v, opt.value))\r\n );\r\n return selected.length > 0 ? selected.map(o => o.label).join(', ') : this.multiplePlaceholder();\r\n }\r\n\r\n const selected = currentOptions.find(opt => this.compareWith()(opt.value, currentValue as T));\r\n return selected ? selected.label : this.placeholder();\r\n });\r\n\r\n filteredOptions = computed(() => {\r\n const term = this.searchTermSignal().toLowerCase();\r\n const opts = this.options();\r\n if (!term) return opts;\r\n\r\n return opts.map(opt => {\r\n if (this.isOptionGroup(opt)) {\r\n const filtered = opt.options.filter(o => {\r\n const matchesLabel = o.label.toLowerCase().includes(term);\r\n const matchesDesc = o.description ? o.description.toLowerCase().includes(term) : false;\r\n return matchesLabel || matchesDesc;\r\n });\r\n return filtered.length > 0 ? { ...opt, options: filtered } : null;\r\n }\r\n const matchesLabel = opt.label.toLowerCase().includes(term);\r\n const matchesDesc = opt.description ? opt.description.toLowerCase().includes(term) : false;\r\n return (matchesLabel || matchesDesc) ? opt : null;\r\n }).filter((opt): opt is (SelectOption<T> | SelectOptionGroup<T>) => opt !== null);\r\n });\r\n\r\n constructor() {\r\n // Close on outside click via the shared click-outside primitive. The options\r\n // panel is teleported to the body (outside the host), so a click inside it\r\n // must NOT count as \"outside\" — otherwise selecting an option would close the\r\n // panel before select() runs.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(event => {\r\n if (!this.isOpen()) return;\r\n const target = event.target as Node | null;\r\n if (target && this.portalRef?.panel.contains(target)) return;\r\n this.close();\r\n });\r\n this.destroyRef.onDestroy(() => {\r\n sub.unsubscribe();\r\n this.closePanel();\r\n });\r\n }\r\n\r\n /** Teleports the options panel to the body-level overlay layer and positions it. */\r\n private openPanel(): void {\r\n if (this.portalRef) return;\r\n const tpl = this.panelTpl();\r\n if (!tpl) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Capture phase so inner (e.g. modal body) scrolls keep the panel aligned.\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n }\r\n\r\n private closePanel(): void {\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n this.resolvedSide.set('bottom');\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.select-trigger') as HTMLElement | null;\r\n if (!trigger) return;\r\n const side = this.overlayPosition.flipSide(trigger, 'bottom', {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n }) as 'top' | 'bottom';\r\n this.resolvedSide.set(side);\r\n this.portalRef.position(trigger, side, 8);\r\n }\r\n\r\n private onChange: (value: T | T[] | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n this.value.set(value as T | T[] | null);\r\n }\r\n\r\n registerOnChange(fn: (value: T | T[] | null) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n toggle(): void {\r\n if (this.disabled() || this.loading()) return;\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.isOpenSignal.set(true);\r\n this.opened.emit();\r\n this.openPanel();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.isOpenSignal()) return;\r\n this.isOpenSignal.set(false);\r\n this.searchTermSignal.set('');\r\n this.focusedIndex.set(-1);\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n\r\n select(option: SelectOption<T>, groupDisabled = false): void {\r\n if (this.disabled() || option.disabled || groupDisabled) return;\r\n\r\n if (this.multiple()) {\r\n const current = Array.isArray(this.value()) ? [...(this.value() as T[])] : [];\r\n const index = current.findIndex(v => this.compareWith()(v, option.value));\r\n if (index === -1) {\r\n const max = this.maxSelections();\r\n if (max !== undefined && current.length >= max) return;\r\n current.push(option.value);\r\n } else {\r\n const min = this.minSelections();\r\n if (min !== undefined && current.length <= min) return;\r\n current.splice(index, 1);\r\n }\r\n this.value.set(current as T | T[] | null);\r\n this.onChange(current);\r\n } else {\r\n this.value.set(option.value as T | T[] | null);\r\n this.onChange(option.value);\r\n this.close();\r\n }\r\n this.onTouched();\r\n this.touched.set(true);\r\n }\r\n\r\n clear(event: MouseEvent): void {\r\n event.stopPropagation();\r\n const newVal = (this.multiple() ? [] : null) as T | T[] | null;\r\n this.value.set(newVal);\r\n this.onChange(this.value());\r\n }\r\n\r\n onSearch(event: Event): void {\r\n const term = (event.target as HTMLInputElement).value;\r\n this.searchTermSignal.set(term);\r\n this.searched.emit(term);\r\n }\r\n\r\n onScroll(event: Event): void {\r\n const el = event.target as HTMLElement;\r\n if (el.scrollHeight - el.scrollTop === el.clientHeight) {\r\n this.scrollEnd.emit();\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else if (this.focusedIndex() >= 0) {\r\n const flat = this.flatFilteredOptions();\r\n const item = flat[this.focusedIndex()];\r\n if (item && !item.effectiveDisabled) {\r\n this.select(item.option);\r\n }\r\n }\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else {\r\n this.moveFocus(1);\r\n }\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.moveFocus(-1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLast();\r\n break;\r\n case 'Escape':\r\n this.close();\r\n break;\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n protected isOptionGroup(item: SelectOption<T> | SelectOptionGroup<T>): item is SelectOptionGroup<T> {\r\n return 'options' in item;\r\n }\r\n\r\n protected getOptionKey(item: SelectOption<T> | SelectOptionGroup<T>): string {\r\n return this.isOptionGroup(item) ? `g-${item.label}` : `o-${item.label}`;\r\n }\r\n\r\n protected isSelected(option: SelectOption<T>): boolean {\r\n const val = this.value();\r\n if (this.multiple() && Array.isArray(val)) {\r\n return val.some(v => this.compareWith()(v, option.value));\r\n }\r\n return val !== null && this.compareWith()(val as T, option.value);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n const val = this.value();\r\n if (this.multiple()) return Array.isArray(val) && val.length > 0;\r\n return val !== null && val !== undefined;\r\n }\r\n\r\n protected getFlatIndex(option: SelectOption<T>): number {\r\n return this.flatFilteredOptions().findIndex(item => item.option === option);\r\n }\r\n\r\n protected focusSelect(): void {\r\n this.elementRef.nativeElement.querySelector('.select-trigger')?.focus();\r\n }\r\n\r\n private flattenOptions(options: (SelectOption<T> | SelectOptionGroup<T>)[]): SelectOption<T>[] {\r\n return options.reduce((acc, opt) => this.isOptionGroup(opt) ? [...acc, ...opt.options] : [...acc, opt], [] as SelectOption<T>[]);\r\n }\r\n\r\n private moveFocus(direction: 1 | -1): void {\r\n const flat = this.flatFilteredOptions();\r\n if (flat.length === 0) return;\r\n const current = this.focusedIndex();\r\n let next = current;\r\n for (let i = 0; i < flat.length; i++) {\r\n next = ((next + direction) % flat.length + flat.length) % flat.length;\r\n if (!flat[next]!.effectiveDisabled) {\r\n this.focusedIndex.set(next);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusFirst(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = 0; i < flat.length; i++) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusLast(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = flat.length - 1; i >= 0; i--) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"select-container\">\r\n @if (label()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label class=\"select-label\" [attr.for]=\"selectId\" (click)=\"focusSelect()\" [class.required]=\"required()\">\r\n {{ label() }}\r\n @if (required()) { <span class=\"required-mark\">*</span> }\r\n </label>\r\n }\r\n\r\n <div class=\"select-trigger-wrapper\">\r\n <div class=\"select-trigger\"\r\n role=\"combobox\"\r\n [id]=\"selectId\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-controls]=\"selectId + '-listbox'\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.tabindex]=\"disabled() || loading() ? -1 : 0\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (click)=\"toggle()\">\r\n <div class=\"select-value\">\r\n <span [class.placeholder]=\"!hasValue()\">\r\n {{ selectedLabel() }}\r\n </span>\r\n </div>\r\n <div class=\"select-actions\">\r\n @if (clearable() && hasValue() && !disabled()) {\r\n <button class=\"select-clear\" (click)=\"clear($event)\">\r\n <i class=\"ph ph-x\"></i>\r\n </button>\r\n }\r\n @if (loading()) {\r\n <div class=\"select-loader-trigger\"></div>\r\n } @else {\r\n <i class=\"ph ph-caret-down select-arrow\"></i>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #panelTpl>\r\n <div class=\"select-dropdown\" [class.open-top]=\"resolvedSide() === 'top'\">\r\n @if (searchable()) {\r\n <div class=\"select-search\">\r\n <i class=\"ph ph-magnifying-glass select-search-icon\"></i>\r\n <input type=\"text\"\r\n [placeholder]=\"searchConfig().placeholder\"\r\n [value]=\"searchTerm()\"\r\n (input)=\"onSearch($event)\"\r\n (click)=\"$event.stopPropagation()\">\r\n </div>\r\n }\r\n <div class=\"select-options\"\r\n role=\"listbox\"\r\n [id]=\"selectId + '-listbox'\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n (scroll)=\"onScroll($event)\">\r\n @for (item of filteredOptions(); track getOptionKey(item)) {\r\n @if (isOptionGroup(item)) {\r\n <div class=\"select-group\" role=\"group\" [attr.aria-label]=\"item.label\">\r\n <div class=\"select-group-label\">{{ item.label }}</div>\r\n @for (opt of item.options; track opt.label) {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + opt.value\"\r\n [attr.aria-selected]=\"isSelected(opt)\"\r\n [attr.aria-disabled]=\"(item.disabled || opt.disabled) ? true : null\"\r\n [attr.tabindex]=\"(item.disabled || opt.disabled) ? -1 : null\"\r\n [class.selected]=\"isSelected(opt)\"\r\n [class.disabled]=\"item.disabled || opt.disabled\"\r\n [class.focused]=\"getFlatIndex(opt) === focusedIndex()\"\r\n (click)=\"select(opt, !!item.disabled)\">\r\n @if (opt.icon) { <i [class]=\"'ph ph-' + opt.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"select-option-content\">\r\n <span class=\"select-option-label\">{{ opt.label }}</span>\r\n @if (opt.description) { <span class=\"select-option-description\">{{ opt.description }}</span> }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + item.value\"\r\n [attr.aria-selected]=\"isSelected(item)\"\r\n [attr.aria-disabled]=\"item.disabled ? true : null\"\r\n [attr.tabindex]=\"item.disabled ? -1 : null\"\r\n [class.selected]=\"isSelected(item)\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.focused]=\"getFlatIndex(item) === focusedIndex()\"\r\n (click)=\"select(item)\">\r\n @if (item.icon) { <i [class]=\"'ph ph-' + item.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"select-option-content\">\r\n <span class=\"select-option-label\">{{ item.label }}</span>\r\n @if (item.description) { <span class=\"select-option-description\">{{ item.description }}</span> }\r\n </div>\r\n </div>\r\n }\r\n } @empty {\r\n <div class=\"select-no-results\">Aucun résultat</div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n @if (error()) {\r\n <div id=\"error-message\" class=\"select-error-message\" role=\"alert\">{{ error() }}</div>\r\n } @else if (success()) {\r\n <div id=\"success-message\" class=\"select-success-message\" role=\"status\">{{ success() }}</div>\r\n } @else if (hint()) {\r\n <div id=\"hint-message\" class=\"select-hint\">{{ hint() }}</div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n effect,\r\n OnDestroy,\r\n InjectionToken,\r\n PLATFORM_ID\r\n} from '@angular/core';\r\nimport { isPlatformBrowser, CommonModule, DOCUMENT } from '@angular/common';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { SidebarMode, SidebarPosition, SidebarConfig } from './sidebar.types';\r\n\r\nexport const SIDEBAR_CONFIG = new InjectionToken<Partial<SidebarConfig>>('SIDEBAR_CONFIG', {\r\n factory: () => ({\r\n mode: 'fixed',\r\n position: 'left',\r\n width: '250px',\r\n breakpoint: '768px',\r\n autoFocus: true,\r\n ariaLabel: 'Sidebar navigation',\r\n closeOnBackdrop: true,\r\n closeOnEscape: true\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-sidebar',\r\n imports: [CommonModule, PshFocusTrapDirective],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'role': 'complementary',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-hidden]': '!open()',\r\n '[attr.aria-expanded]': 'open()',\r\n '[attr.aria-modal]': 'effectiveMode() === \"overlay\" && open()',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSidebarComponent implements OnDestroy {\r\n private readonly config = inject(SIDEBAR_CONFIG);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private mediaQueryList: MediaQueryList | null = null;\r\n private mediaQueryHandler: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n open = model(false);\r\n mode = input<SidebarMode>(this.config.mode ?? 'fixed');\r\n position = input<SidebarPosition>(this.config.position ?? 'left');\r\n width = input<string>(this.config.width ?? '250px');\r\n breakpoint = input<string>(this.config.breakpoint ?? '768px');\r\n autoFocus = input<boolean>(this.config.autoFocus ?? true);\r\n ariaLabel = input<string>(this.config.ariaLabel ?? 'Sidebar navigation');\r\n closeOnBackdrop = input<boolean>(this.config.closeOnBackdrop ?? true);\r\n closeOnEscape = input<boolean>(this.config.closeOnEscape ?? true);\r\n\r\n // `toggle` is part of the public sidebar API and cannot be renamed (semver);\r\n // the native-event-name clash is intentional and acknowledged here.\r\n // eslint-disable-next-line @angular-eslint/no-output-native\r\n toggle = output<boolean>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n transitionStart = output<boolean>();\r\n\r\n private readonly mobileSignal = signal(false);\r\n private previousOpenState: boolean | null = null;\r\n\r\n isMobile = computed(() => this.mobileSignal());\r\n effectiveMode = computed(() => this.isMobile() ? 'overlay' : this.mode());\r\n state = computed(() => this.getState());\r\n\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && this.closeOnEscape() && this.effectiveMode() === 'overlay') {\r\n this.closeSidebar();\r\n }\r\n };\r\n\r\n private getState(): string {\r\n if (this.isMobile()) return 'mobile';\r\n if (this.open()) return 'open';\r\n return this.mode();\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const bp = this.breakpoint();\r\n this.setupMediaQuery(bp);\r\n });\r\n\r\n effect(() => {\r\n const isOpen = this.open();\r\n const wasOpen = this.previousOpenState;\r\n this.previousOpenState = isOpen;\r\n\r\n if (wasOpen === null) return;\r\n\r\n if (isOpen && !wasOpen) {\r\n this.onSidebarOpen();\r\n } else if (!isOpen && wasOpen) {\r\n this.onSidebarClose();\r\n }\r\n });\r\n }\r\n\r\n private setupMediaQuery(breakpoint: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n this.cleanupMediaQuery();\r\n\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n this.mediaQueryList = view.matchMedia(`(max-width: ${breakpoint})`);\r\n this.mobileSignal.set(this.mediaQueryList.matches);\r\n\r\n this.mediaQueryHandler = (e: MediaQueryListEvent) => {\r\n this.mobileSignal.set(e.matches);\r\n };\r\n\r\n this.mediaQueryList.addEventListener('change', this.mediaQueryHandler);\r\n }\r\n\r\n private cleanupMediaQuery(): void {\r\n if (this.mediaQueryList && this.mediaQueryHandler) {\r\n this.mediaQueryList.removeEventListener('change', this.mediaQueryHandler);\r\n this.mediaQueryList = null;\r\n this.mediaQueryHandler = null;\r\n }\r\n }\r\n\r\n private onSidebarOpen(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n // Focus trap + initial focus + focus restoration are handled by\r\n // PshFocusTrapDirective on the .sidebar element (see the template).\r\n this.addEventListeners();\r\n\r\n requestAnimationFrame(() => {\r\n this.opened.emit();\r\n });\r\n }\r\n\r\n private onSidebarClose(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.removeEventListeners();\r\n\r\n requestAnimationFrame(() => {\r\n this.closed.emit();\r\n });\r\n }\r\n\r\n private addEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n private removeEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n toggleSidebar(): void {\r\n const newState = !this.open();\r\n this.transitionStart.emit(newState);\r\n this.open.set(newState);\r\n this.toggle.emit(newState);\r\n }\r\n\r\n closeSidebar(): void {\r\n if (this.open()) {\r\n this.transitionStart.emit(false);\r\n this.open.set(false);\r\n this.toggle.emit(false);\r\n }\r\n }\r\n\r\n handleBackdropClick(): void {\r\n if (this.closeOnBackdrop()) {\r\n this.closeSidebar();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupMediaQuery();\r\n this.removeEventListeners();\r\n }\r\n}\r\n","<div\r\n class=\"sidebar\"\r\n [class.open]=\"open()\"\r\n [class.fixed]=\"effectiveMode() === 'fixed'\"\r\n [class.overlay]=\"effectiveMode() === 'overlay'\"\r\n [class.left]=\"position() === 'left'\"\r\n [class.right]=\"position() === 'right'\"\r\n [style.width]=\"width()\"\r\n [style.--sidebar-width]=\"width()\"\r\n [pshFocusTrap]=\"open()\"\r\n [pshFocusTrapAutoFocus]=\"autoFocus()\"\r\n>\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (effectiveMode() === 'overlay' && open()) {\r\n <div\r\n class=\"sidebar-backdrop\"\r\n role=\"presentation\"\r\n (click)=\"handleBackdropClick()\"\r\n ></div>\r\n}","import { ChangeDetectionStrategy, Component, effect, inject, input, signal, InjectionToken } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { SpinLoaderVariant, SpinLoaderSize, SpinLoaderColor, SpinLoaderConfig } from './spinloader.types';\r\n\r\nexport const SPINLOADER_CONFIG = new InjectionToken<Partial<SpinLoaderConfig>>('SPINLOADER_CONFIG', {\r\n factory: () => ({\r\n variant: 'circle',\r\n size: 'medium',\r\n color: 'primary'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-spinloader',\r\n imports: [],\r\n templateUrl: './spinloader.component.html',\r\n styleUrls: ['./spinloader.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'role': 'status',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-live]': 'ariaLive()',\r\n '[attr.aria-busy]': 'true',\r\n '[attr.data-state]': 'variant()',\r\n '[class.small]': 'size() === \"small\"',\r\n '[class.large]': 'size() === \"large\"',\r\n '[class.reduce-motion]': 'reduceMotion()',\r\n }\r\n})\r\nexport class PshSpinLoaderComponent {\r\n private config = inject(SPINLOADER_CONFIG);\r\n private readonly document = inject(DOCUMENT);\r\n\r\n variant = input<SpinLoaderVariant>(this.config.variant ?? 'circle');\r\n size = input<SpinLoaderSize>(this.config.size ?? 'medium');\r\n color = input<SpinLoaderColor>(this.config.color ?? 'primary');\r\n label = input<string>();\r\n ariaLabel = input<string>('Chargement en cours');\r\n ariaLive = input<'polite' | 'assertive'>('polite');\r\n\r\n reduceMotion = signal(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const view = this.document.defaultView;\r\n if (view && typeof view.matchMedia === 'function') {\r\n const mediaQuery = view.matchMedia('(prefers-reduced-motion: reduce)');\r\n this.reduceMotion.set(mediaQuery.matches);\r\n\r\n const handler = (e: MediaQueryListEvent) => this.reduceMotion.set(e.matches);\r\n mediaQuery.addEventListener('change', handler);\r\n }\r\n });\r\n }\r\n}\r\n","@switch (variant()) {\r\n @case ('circle') {\r\n <div class=\"spinner-circle\" [class]=\"color()\"></div>\r\n }\r\n @case ('dots') {\r\n <div class=\"spinner-dots\" [class]=\"color()\">\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n <div class=\"dot\"></div>\r\n </div>\r\n }\r\n @case ('pulse') {\r\n <div class=\"spinner-pulse\" [class]=\"color()\">\r\n <div class=\"pulse\"></div>\r\n <div class=\"pulse\"></div>\r\n <div class=\"pulse\"></div>\r\n </div>\r\n }\r\n}\r\n\r\n@if (label()) {\r\n <span class=\"spinner-label\">{{ label() }}</span>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n signal\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'psh-step',\r\n template: `<ng-content />`,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.step-content]': 'true',\r\n '[class.active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': '\"step-\" + index()',\r\n '[attr.id]': '\"panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1',\r\n '[style.display]': 'isActive() ? \"block\" : \"none\"'\r\n }\r\n})\r\nexport class PshStepComponent {\r\n title = input.required<string>();\r\n subtitle = input<string>();\r\n icon = input<string>();\r\n disabled = input(false);\r\n completed = input(false);\r\n loading = input(false);\r\n error = input<string>();\r\n warning = input<string>();\r\n success = input<string>();\r\n\r\n private _index = signal(0);\r\n private _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { StepperVariant, StepConfig, StepperConfig, StepperAriaLabels } from './stepper.types';\r\nimport { PshStepComponent } from './step.component';\r\n\r\nconst DEFAULT_ARIA_LABELS: StepperAriaLabels = {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée'\r\n};\r\n\r\nexport const STEPPER_CONFIG = new InjectionToken<Partial<StepperConfig>>('STEPPER_CONFIG', {\r\n factory: () => ({\r\n variant: 'default',\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-stepper',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.stepper-container]': 'true',\r\n '[class.numbered]': 'variant() === \"numbered\"',\r\n '[class.progress]': 'variant() === \"progress\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': '\"Navigation par étapes\"'\r\n }\r\n})\r\nexport class PshStepperComponent {\r\n private config = inject(STEPPER_CONFIG);\r\n\r\n activeStep = model(0);\r\n variant = input<StepperVariant>(this.config.variant ?? 'default');\r\n linear = input(this.config.linear ?? true);\r\n\r\n ariaLabels = input<StepperAriaLabels>();\r\n beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<string>();\r\n\r\n stepComponents = contentChildren(PshStepComponent);\r\n\r\n steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n subtitle: step.subtitle(),\r\n icon: step.icon(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning(),\r\n success: step.success()\r\n })));\r\n\r\n effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n isFirstStep = computed(() => this.activeStep() === 0);\r\n isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n const errorMsg = `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`;\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit(`Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`);\r\n return;\r\n }\r\n } catch (error) {\r\n const errorMsg = error instanceof Error ? error.message : 'Unknown error in beforeStepChange';\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit(`Cannot activate step ${index}. Please complete previous steps first`);\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(step => step.completed && !step.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: StepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n const status = step.completed ? labels.completed :\r\n index === this.activeStep() ? labels.active :\r\n step.disabled ? labels.disabled :\r\n labels.incomplete;\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n getStepDescribedBy(step: StepConfig, index: number): string | null {\r\n if (step.error) return `error-${index}`;\r\n if (step.warning) return `warning-${index}`;\r\n if (step.success) return `success-${index}`;\r\n return null;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"stepper-header\" role=\"tablist\">\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"step-header\"\r\n [class.active]=\"i === activeStep()\"\r\n [class.completed]=\"step.completed\"\r\n [class.disabled]=\"step.disabled\"\r\n [class.error]=\"!!step.error\"\r\n [class.warning]=\"!!step.warning\"\r\n [class.success]=\"!!step.success\"\r\n >\r\n <div\r\n class=\"step-indicator\"\r\n role=\"tab\"\r\n tabindex=\"0\"\r\n [attr.id]=\"'step-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-describedby]=\"getStepDescribedBy(step, i)\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n @if (step.loading && variant() === 'progress') {\r\n <i class=\"ph ph-circle-notch spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n } @else if (variant() === 'numbered') {\r\n {{ i + 1 }}\r\n } @else if (step.icon) {\r\n <i class=\"ph ph-{{ step.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"step-dot\"></span>\r\n }\r\n </div>\r\n\r\n <div class=\"step-label\">\r\n <span class=\"step-title\">{{ step.title }}</span>\r\n @if (step.subtitle) {\r\n <span class=\"step-subtitle\">{{ step.subtitle }}</span>\r\n }\r\n @if (step.error) {\r\n <span class=\"step-error\" [id]=\"'error-' + i\" role=\"alert\" aria-live=\"polite\">{{ step.error }}</span>\r\n }\r\n @if (step.warning) {\r\n <span class=\"step-warning\" [id]=\"'warning-' + i\" role=\"status\" aria-live=\"polite\">{{ step.warning }}</span>\r\n }\r\n @if (step.success) {\r\n <span class=\"step-success\" [id]=\"'success-' + i\" role=\"status\" aria-live=\"polite\">{{ step.success }}</span>\r\n }\r\n </div>\r\n\r\n @if (i < steps().length - 1) {\r\n <div class=\"step-connector\" aria-hidden=\"true\">\r\n <span class=\"connector-line\"></span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"stepper-content\">\r\n <ng-content />\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n signal\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'psh-flow-step',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.display]': '\"none\"'\r\n }\r\n})\r\nexport class PshFlowStepComponent {\r\n title = input.required<string>();\r\n disabled = input(false);\r\n completed = input(false);\r\n loading = input(false);\r\n error = input<string>();\r\n warning = input<string>();\r\n\r\n private _index = signal(0);\r\n private _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { StateFlowIndicatorSize, FlowStepConfig, StateFlowIndicatorConfig, StateFlowIndicatorAriaLabels } from './state-flow-indicator.types';\r\nimport { PshFlowStepComponent } from './flow-step.component';\r\n\r\nconst DEFAULT_ARIA_LABELS: StateFlowIndicatorAriaLabels = {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée',\r\n warning: 'Étape avec avertissement',\r\n error: 'Étape en erreur'\r\n};\r\n\r\nexport const STATE_FLOW_INDICATOR_CONFIG = new InjectionToken<Partial<StateFlowIndicatorConfig>>('STATE_FLOW_INDICATOR_CONFIG', {\r\n factory: () => ({\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-state-flow-indicator',\r\n templateUrl: './state-flow-indicator.component.html',\r\n styleUrls: ['./state-flow-indicator.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.state-flow-indicator]': 'true',\r\n '[class.size-small]': 'size() === \"small\"',\r\n '[class.size-medium]': 'size() === \"medium\"',\r\n '[class.size-large]': 'size() === \"large\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': '\"Indicateur de progression\"'\r\n }\r\n})\r\nexport class PshStateFlowIndicatorComponent {\r\n private config = inject(STATE_FLOW_INDICATOR_CONFIG);\r\n\r\n activeStep = model(0);\r\n linear = input(this.config.linear ?? true);\r\n size = input<StateFlowIndicatorSize>('medium');\r\n\r\n ariaLabels = input<StateFlowIndicatorAriaLabels>();\r\n beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<string>();\r\n\r\n stepComponents = contentChildren(PshFlowStepComponent);\r\n\r\n steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning()\r\n })));\r\n\r\n effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n isFirstStep = computed(() => this.activeStep() === 0);\r\n isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n const errorMsg = `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`;\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit(`Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`);\r\n return;\r\n }\r\n } catch (error) {\r\n const errorMsg = error instanceof Error ? error.message : 'Unknown error in beforeStepChange';\r\n this.navigationError.emit(errorMsg);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit(`Cannot activate step ${index}. Please complete previous steps first`);\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(s => s.completed && !s.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: FlowStepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n let status: string;\r\n if (step.error) {\r\n status = labels.error;\r\n } else if (step.warning) {\r\n status = labels.warning;\r\n } else if (step.completed) {\r\n status = labels.completed;\r\n } else if (index === this.activeStep()) {\r\n status = labels.active;\r\n } else if (step.disabled) {\r\n status = labels.disabled;\r\n } else {\r\n status = labels.incomplete;\r\n }\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"flow-track\" role=\"tablist\">\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"flow-segment\"\r\n [class.active]=\"i === activeStep()\"\r\n [class.completed]=\"step.completed\"\r\n [class.disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [class.error]=\"!!step.error\"\r\n [class.warning]=\"!!step.warning\"\r\n [class.loading]=\"step.loading\"\r\n [class.first]=\"i === 0\"\r\n [class.last]=\"i === steps().length - 1\"\r\n role=\"tab\"\r\n [attr.tabindex]=\"step.disabled ? -1 : 0\"\r\n [attr.id]=\"'flow-step-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n <span class=\"flow-segment-content\">\r\n @if (step.loading) {\r\n <i class=\"ph ph-circle-notch spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.error) {\r\n <i class=\"ph ph-x-circle\" aria-hidden=\"true\"></i>\r\n } @else if (step.warning) {\r\n <i class=\"ph ph-warning\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check-circle\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"flow-segment-title\">{{ step.title }}</span>\r\n </span>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n viewChild,\r\n InjectionToken\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { SwitchSize, SwitchConfig } from './switch.types';\r\n\r\nexport const SWITCH_CONFIG = new InjectionToken<Partial<SwitchConfig>>('SWITCH_CONFIG', {\r\n factory: () => ({\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-switch',\r\n templateUrl: './switch.component.html',\r\n styleUrls: ['./switch.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSwitchComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.switch-wrapper]': 'true',\r\n '[class.switch-disabled]': 'disabled()',\r\n '[class.switch-error]': '!!error()',\r\n '[class.switch-success]': '!!success()'\r\n }\r\n})\r\nexport class PshSwitchComponent implements ControlValueAccessor, FormCheckboxControl {\r\n private config = inject(SWITCH_CONFIG);\r\n private uniqueId = `switch-${crypto.randomUUID()}`;\r\n\r\n private switchInput = viewChild<ElementRef<HTMLInputElement>>('switchInput');\r\n\r\n private onChange = (_value: boolean) => {};\r\n private onTouched = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n touched = model(false);\r\n\r\n required = input(this.config.required ?? false);\r\n size = input<SwitchSize>(this.config.size ?? 'medium');\r\n labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n label = input('');\r\n error = input('');\r\n success = input('');\r\n ariaLabel = input<string>();\r\n name = input<string>('');\r\n id = input<string>(this.uniqueId);\r\n\r\n computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n return 'Switch';\r\n });\r\n errorId = computed(() => this.error() ? `${this.id()}-error` : null);\r\n successId = computed(() => this.success() ? `${this.id()}-success` : null);\r\n // error and success are mutually exclusive in the template (@if/@else if),\r\n // so aria-describedby references whichever message is actually rendered.\r\n describedBy = computed(() => this.errorId() ?? this.successId());\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.checked.update(v => !v);\r\n this.onChange(this.checked());\r\n this.onTouched();\r\n this.touched.set(true);\r\n }\r\n }\r\n\r\n writeValue(value: boolean): void {\r\n this.checked.set(value ?? false);\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n focus(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.focus();\r\n }\r\n }\r\n\r\n blur(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.blur();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"switch-container\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n>\r\n <label class=\"switch-label\" [class]=\"labelPosition() === 'left' ? 'label-left' : 'label-right'\">\r\n <input\r\n #switchInput\r\n type=\"checkbox\"\r\n class=\"switch-input\"\r\n [id]=\"id()\"\r\n [name]=\"name() || id()\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-checked]=\"checked()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"toggle()\"\r\n />\r\n <span class=\"switch-control\">\r\n <span class=\"switch-thumb\"></span>\r\n </span>\r\n <span class=\"switch-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Switch</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorId()!\" class=\"switch-error\" role=\"alert\" aria-live=\"polite\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successId()!\" class=\"switch-success\" role=\"status\" aria-live=\"polite\">\r\n {{ success() }}\r\n </div>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken\r\n} from '@angular/core';\r\nimport { TabBarItem, TabBarConfig, TabBarChangeEvent } from './tab-bar.types';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale de la barre d'onglets\r\n */\r\nexport const TAB_BAR_CONFIG = new InjectionToken<Partial<TabBarConfig>>('TAB_BAR_CONFIG', {\r\n factory: () => ({\r\n disabled: false,\r\n position: 'bottom',\r\n animated: true\r\n })\r\n});\r\n\r\n\r\n@Component({\r\n selector: 'psh-tab-bar',\r\n templateUrl: './tab-bar.component.html',\r\n styleUrls: ['./tab-bar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.top]': 'position() === \"top\"',\r\n '[class.animated]': 'animated()',\r\n 'role': 'tablist',\r\n '[attr.aria-label]': '\"Navigation par onglets\"'\r\n }\r\n})\r\nexport class PshTabBarComponent {\r\n private config = inject(TAB_BAR_CONFIG);\r\n\r\n // Model inputs with defaults from config\r\n disabled = model(this.config.disabled ?? false);\r\n position = model<'bottom' | 'top'>(this.config.position ?? 'bottom');\r\n animated = model(this.config.animated ?? true);\r\n activeIndex = model(0);\r\n\r\n // Regular inputs\r\n items = input.required<TabBarItem[]>();\r\n\r\n // Outputs\r\n tabChange = output<TabBarChangeEvent>();\r\n\r\n selectTab(index: number): void {\r\n const items = this.items();\r\n const previousIndex = this.activeIndex();\r\n const selectedItem = items[index];\r\n\r\n if (this.disabled() ||\r\n previousIndex === index ||\r\n index < 0 ||\r\n index >= items.length ||\r\n !selectedItem ||\r\n selectedItem.disabled) {\r\n return;\r\n }\r\n\r\n this.activeIndex.set(index);\r\n this.tabChange.emit({\r\n index,\r\n item: selectedItem,\r\n previousIndex\r\n });\r\n }\r\n}","<div class=\"tab-bar\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n <button\r\n class=\"tab-item\"\r\n [class.active]=\"activeIndex() === i\"\r\n [class.disabled]=\"disabled() || item.disabled\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"activeIndex() === i\"\r\n [attr.aria-disabled]=\"disabled() || item.disabled\"\r\n [attr.aria-label]=\"item.label\"\r\n (click)=\"selectTab(i)\"\r\n >\r\n <i \r\n [class]=\"activeIndex() === i ? 'ph-fill ph-' + item.icon : 'ph ph-' + item.icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n <span class=\"tab-label\">{{ item.label }}</span>\r\n @if (item.badge) {\r\n <span class=\"tab-badge\">{{ item.badge }}</span>\r\n }\r\n </button>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, InjectionToken, TemplateRef } from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { PshInputComponent } from '../input/input.component';\r\nimport { TableColumn, TableRow, TableSort, TableConfig, TableRowClickEvent, TableRowExpandEvent, TableExpandedRowContext } from './table.types';\r\n\r\nexport const TABLE_CONFIG = new InjectionToken<Partial<TableConfig>>('TABLE_CONFIG', {\r\n factory: () => ({\r\n variant: 'default',\r\n size: 'medium',\r\n striped: false,\r\n hoverable: false,\r\n bordered: false,\r\n loading: false,\r\n emptyMessage: 'No data available',\r\n noResultsMessage: 'No results found',\r\n globalSearch: false,\r\n globalSearchPlaceholder: 'Search in all columns...',\r\n tableLayout: 'auto',\r\n truncateText: false,\r\n fullWidth: false,\r\n expandable: false,\r\n singleExpand: false\r\n })\r\n});\r\n\r\n@Component({\r\n selector: 'psh-table',\r\n imports: [NgTemplateOutlet, PshInputComponent],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'class': 'psh-table',\r\n '[class.full-width]': 'fullWidth()'\r\n }\r\n})\r\nexport class PshTableComponent {\r\n private config = inject(TABLE_CONFIG);\r\n\r\n variant = input<'default' | 'outline'>(this.config.variant ?? 'default');\r\n size = input<'small' | 'medium' | 'large'>(this.config.size ?? 'medium');\r\n striped = input(this.config.striped ?? false);\r\n hoverable = input(this.config.hoverable ?? false);\r\n bordered = input(this.config.bordered ?? false);\r\n loading = input(this.config.loading ?? false);\r\n globalSearch = input(this.config.globalSearch ?? false);\r\n fullWidth = input(this.config.fullWidth ?? false);\r\n columns = input<TableColumn[]>([]);\r\n data = input<TableRow[]>([]);\r\n emptyMessage = input<string>(this.config.emptyMessage ?? 'No data available');\r\n noResultsMessage = input<string>(this.config.noResultsMessage ?? 'No results found');\r\n globalSearchPlaceholder = input(this.config.globalSearchPlaceholder ?? 'Search in all columns...');\r\n tableLayout = input<'auto' | 'fixed'>(this.config.tableLayout ?? 'auto');\r\n truncateText = input(this.config.truncateText ?? false);\r\n expandable = input(this.config.expandable ?? false);\r\n singleExpand = input(this.config.singleExpand ?? false);\r\n expandedRowTemplate = input<TemplateRef<TableExpandedRowContext>>();\r\n\r\n sortChange = output<TableSort>();\r\n globalSearchChange = output<string>();\r\n rowClick = output<TableRowClickEvent>();\r\n rowExpand = output<TableRowExpandEvent>();\r\n rowCollapse = output<TableRowExpandEvent>();\r\n\r\n private currentSortSignal = signal<TableSort | undefined>(undefined);\r\n readonly searchTermSignal = signal('');\r\n private expandedRowIds = signal<Set<string | number>>(new Set());\r\n\r\n currentSort = computed(() => this.currentSortSignal());\r\n searchTerm = computed(() => this.searchTermSignal());\r\n\r\n computedEmptyMessage = computed(() => {\r\n return this.searchTerm()\r\n ? `${this.noResultsMessage()} \"${this.searchTerm()}\"`\r\n : this.emptyMessage();\r\n });\r\n\r\n state = computed(() => {\r\n if (this.loading()) return 'loading';\r\n if (this.filteredData().length === 0) return 'empty';\r\n return 'default';\r\n });\r\n\r\n filteredData = computed(() => {\r\n let result = [...this.data()];\r\n\r\n if (this.searchTerm()) {\r\n result = this.filterData(result, this.searchTerm());\r\n }\r\n\r\n const sort = this.currentSort();\r\n if (sort) {\r\n result = this.sortData(result, sort);\r\n }\r\n\r\n return result;\r\n });\r\n\r\n /**\r\n * Trie les données\r\n */\r\n private sortData(data: TableRow[], sort: TableSort): TableRow[] {\r\n return [...data].sort((a, b) => {\r\n const column = this.columns().find(col => col.key === sort.key);\r\n \r\n // Utiliser la fonction de tri personnalisée si elle existe\r\n if (column?.sortFn) {\r\n return sort.direction === 'asc' \r\n ? column.sortFn(a, b)\r\n : column.sortFn(b, a);\r\n }\r\n \r\n // Sinon, utiliser le tri par défaut avec le chemin\r\n const aValue = this.getNestedValue(a, column?.path || sort.key);\r\n const bValue = this.getNestedValue(b, column?.path || sort.key);\r\n\r\n return sort.direction === 'asc'\r\n ? this.compareValues(aValue, bValue)\r\n : this.compareValues(bValue, aValue);\r\n });\r\n }\r\n\r\n /**\r\n * Compare deux valeurs inconnues (numérique si possible, sinon lexicographique).\r\n */\r\n private compareValues(a: unknown, b: unknown): number {\r\n if (typeof a === 'number' && typeof b === 'number') {\r\n return a > b ? 1 : -1;\r\n }\r\n return String(a ?? '') > String(b ?? '') ? 1 : -1;\r\n }\r\n\r\n /**\r\n * Filtre les données\r\n */\r\n private filterData(data: TableRow[], searchTerm: string): TableRow[] {\r\n if (!searchTerm) return data;\r\n \r\n const term = searchTerm.toLowerCase();\r\n return data.filter(row => {\r\n return this.columns().some(column => {\r\n const value = this.getNestedValue(row, column.path || column.key);\r\n return value != null && String(value).toLowerCase().includes(term);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Récupère la valeur d'un objet imbriqué en utilisant un chemin\r\n */\r\n private getNestedValue(obj: unknown, path: string): unknown {\r\n return path.split('.').reduce<unknown>(\r\n (acc, part) =>\r\n acc != null && typeof acc === 'object'\r\n ? (acc as Record<string, unknown>)[part]\r\n : undefined,\r\n obj\r\n );\r\n }\r\n\r\n handleSort(column: TableColumn): void {\r\n if (!column.sortable) return;\r\n\r\n const direction = !this.currentSort() || this.currentSort()?.key !== column.key\r\n ? 'asc'\r\n : this.currentSort()?.direction === 'asc'\r\n ? 'desc'\r\n : 'asc';\r\n\r\n const sort: TableSort = { key: column.key, direction };\r\n this.currentSortSignal.set(sort);\r\n this.sortChange.emit(sort);\r\n }\r\n\r\n onSearchValueChange(value: string): void {\r\n this.globalSearchChange.emit(value);\r\n }\r\n\r\n handleRowClick(row: TableRow): void {\r\n this.rowClick.emit({ id: row.id, row });\r\n }\r\n\r\n protected getCellValue(row: TableRow, column: TableColumn): unknown {\r\n return this.getNestedValue(row, column.path || column.key);\r\n }\r\n\r\n totalColumns = computed(() => this.columns().length + (this.expandable() ? 1 : 0));\r\n\r\n isRowExpandable(row: TableRow): boolean {\r\n return !!(row.children?.length || this.expandedRowTemplate());\r\n }\r\n\r\n isRowExpanded(row: TableRow): boolean {\r\n return this.expandedRowIds().has(row.id);\r\n }\r\n\r\n toggleRow(row: TableRow): void {\r\n if (!this.isRowExpandable(row)) return;\r\n\r\n const ids = new Set(this.expandedRowIds());\r\n const wasExpanded = ids.has(row.id);\r\n\r\n if (this.singleExpand()) {\r\n ids.clear();\r\n }\r\n\r\n if (wasExpanded) {\r\n ids.delete(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowCollapse.emit({ id: row.id, row, expanded: false });\r\n } else {\r\n ids.add(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowExpand.emit({ id: row.id, row, expanded: true });\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const ids = new Set<string | number>();\r\n for (const row of this.filteredData()) {\r\n if (this.isRowExpandable(row)) {\r\n ids.add(row.id);\r\n }\r\n }\r\n this.expandedRowIds.set(ids);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedRowIds.set(new Set());\r\n }\r\n}","<div\r\n class=\"table-wrapper\"\r\n [class.striped]=\"striped()\"\r\n [class.hoverable]=\"hoverable()\"\r\n [class.bordered]=\"bordered()\"\r\n [class.small]=\"size() === 'small'\"\r\n [class.large]=\"size() === 'large'\"\r\n [class.outline]=\"variant() === 'outline'\"\r\n [class.table-fixed]=\"tableLayout() === 'fixed'\"\r\n [class.truncate]=\"truncateText()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (globalSearch()) {\r\n <div class=\"global-search\" role=\"search\">\r\n <psh-input\r\n [placeholder]=\"globalSearchPlaceholder()\"\r\n [ariaLabel]=\"globalSearchPlaceholder()\"\r\n [size]=\"size()\"\r\n [fullWidth]=\"true\"\r\n [showLabel]=\"false\"\r\n iconStart=\"magnifying-glass\"\r\n type=\"search\"\r\n [(value)]=\"searchTermSignal\"\r\n (valueChange)=\"onSearchValueChange($event)\"\r\n />\r\n </div>\r\n }\r\n\r\n <table role=\"table\">\r\n <thead>\r\n <tr>\r\n @if (expandable()) {\r\n <th class=\"expand-header\" aria-label=\"Expand\"></th>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <th\r\n [style.width]=\"column.width\"\r\n [attr.aria-sort]=\"column.sortable ? (currentSort()?.key === column.key ? (currentSort()?.direction === 'asc' ? 'ascending' : 'descending') : 'none') : null\"\r\n [class.sortable]=\"column.sortable\"\r\n (click)=\"handleSort(column)\"\r\n >\r\n <div class=\"th-content\">\r\n {{ column.label }}\r\n @if (column.sortable) {\r\n @if (currentSort()?.key === column.key) {\r\n <i\r\n [class]=\"'ph ' + (currentSort()?.direction === 'desc' ? 'ph-sort-descending' : 'ph-sort-ascending')\"\r\n [attr.aria-label]=\"'Sort ' + currentSort()?.direction\"\r\n aria-hidden=\"true\">\r\n </i>\r\n } @else {\r\n <i\r\n class=\"ph ph-arrows-down-up sort-icon-neutral\"\r\n aria-label=\"Sortable\"\r\n aria-hidden=\"true\">\r\n </i>\r\n }\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @if (loading()) {\r\n <tr class=\"loading-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <div class=\"loading-indicator\">\r\n <div class=\"spinner\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n } @else if (filteredData().length === 0) {\r\n <tr class=\"empty-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n {{ computedEmptyMessage() }}\r\n </td>\r\n </tr>\r\n } @else {\r\n @for (row of filteredData(); track row.id) {\r\n <tr (click)=\"handleRowClick(row)\" [class.expanded]=\"expandable() && isRowExpanded(row)\">\r\n @if (expandable()) {\r\n <td class=\"expand-cell\">\r\n @if (isRowExpandable(row)) {\r\n <button\r\n type=\"button\"\r\n class=\"expand-toggle\"\r\n [attr.aria-expanded]=\"isRowExpanded(row)\"\r\n [attr.aria-label]=\"isRowExpanded(row) ? 'Collapse row' : 'Expand row'\"\r\n (click)=\"toggleRow(row); $event.stopPropagation()\"\r\n >\r\n <i class=\"ph ph-caret-right\"></i>\r\n </button>\r\n }\r\n </td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(row, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n\r\n @if (expandable() && isRowExpanded(row)) {\r\n @if (expandedRowTemplate()) {\r\n <tr class=\"expanded-content-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"expandedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\r\n ></ng-container>\r\n </td>\r\n </tr>\r\n } @else if (row.children?.length) {\r\n @for (child of row.children; track child.id) {\r\n <tr class=\"child-row\">\r\n @if (expandable()) {\r\n <td class=\"expand-cell\"></td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: child, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(child, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { Tab } from './tabs.types';\r\n\r\n@Component({\r\n selector: 'psh-tab',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.tab-panel]': 'true',\r\n '[class.active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': '\"tab-\" + index()',\r\n '[attr.id]': '\"panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1'\r\n }\r\n})\r\nexport class PshTabComponent {\r\n header = input.required<string>();\r\n icon = input<string>();\r\n disabled = input(false);\r\n ariaLabel = input<string>();\r\n\r\n private _index = signal(0);\r\n private _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(active: boolean): void {\r\n this._isActive.set(active);\r\n }\r\n\r\n toTabData(): Tab {\r\n return {\r\n header: this.header(),\r\n icon: this.icon(),\r\n content: '',\r\n disabled: this.disabled(),\r\n ariaLabel: this.ariaLabel()\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n InjectionToken,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { TabsVariant, TabsSize, Tab, TabsConfig, TabChangeEvent } from './tabs.types';\r\nimport { PshTabComponent } from './tab.component';\r\n\r\nexport const TABS_CONFIG = new InjectionToken<Partial<TabsConfig>>('TABS_CONFIG', {\r\n factory: () => ({\r\n variant: 'default',\r\n size: 'medium',\r\n activeIndex: 0,\r\n animated: true,\r\n }),\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': 'hostClasses()',\r\n role: 'region',\r\n '[attr.aria-label]': 'ariaLabel() || \"Navigation par onglets\"',\r\n },\r\n})\r\nexport class PshTabsComponent {\r\n private config = inject(TABS_CONFIG);\r\n\r\n variant = input<TabsVariant>(this.config.variant ?? 'default');\r\n size = input<TabsSize>(this.config.size ?? 'medium');\r\n animated = input(this.config.animated ?? true);\r\n tabs = input<Tab[]>([]);\r\n ariaLabel = input<string>();\r\n ariaOrientation = input<'horizontal' | 'vertical'>('horizontal');\r\n\r\n activeIndexInput = input(this.config.activeIndex ?? 0, { alias: 'activeIndex' });\r\n activeIndex = linkedSignal(this.activeIndexInput);\r\n\r\n tabComponents = contentChildren(PshTabComponent);\r\n\r\n tabsToDisplay = computed(() => {\r\n const components = this.tabComponents();\r\n if (components.length > 0) {\r\n return components.map(c => c.toTabData());\r\n }\r\n return this.tabs();\r\n });\r\n\r\n hasContentProjection = computed(() => this.tabComponents().length > 0);\r\n\r\n activeIndexChange = output<number>();\r\n tabChange = output<TabChangeEvent>();\r\n\r\n hostClasses = computed(() => {\r\n const classes = ['tabs-wrapper'];\r\n const size = this.size();\r\n const variant = this.variant();\r\n\r\n if (size !== 'medium') classes.push(`tabs-${size}`);\r\n classes.push(`tabs-${variant}`);\r\n if (this.animated()) classes.push('tabs-animated');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const tabs = this.tabComponents();\r\n const currentIndex = this.activeIndex();\r\n tabs.forEach((tab, index) => {\r\n tab.setIndex(index);\r\n tab.setActive(index === currentIndex);\r\n });\r\n });\r\n\r\n effect(() => {\r\n const currentIndex = this.activeIndex();\r\n const tabs = this.tabsToDisplay();\r\n if (tabs.length > 0 && currentIndex >= tabs.length) {\r\n const clampedIndex = Math.max(0, tabs.length - 1);\r\n this.activeIndex.set(clampedIndex);\r\n this.activeIndexChange.emit(clampedIndex);\r\n }\r\n });\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, _index: number): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.selectPrevious();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.selectNext();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.selectFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.selectLast();\r\n break;\r\n }\r\n }\r\n\r\n selectTab(index: number): void {\r\n const tabs = this.tabsToDisplay();\r\n const tab = tabs[index];\r\n\r\n if (!tab || tab.disabled) return;\r\n\r\n const previousIndex = this.activeIndex();\r\n if (previousIndex !== index) {\r\n this.activeIndex.set(index);\r\n this.activeIndexChange.emit(index);\r\n this.tabChange.emit({ previousIndex, currentIndex: index, tab });\r\n }\r\n }\r\n\r\n selectNext(): void {\r\n const tabs = this.tabsToDisplay();\r\n let nextIndex = (this.activeIndex() + 1) % tabs.length;\r\n\r\n while (tabs[nextIndex]?.disabled && nextIndex !== this.activeIndex()) {\r\n nextIndex = (nextIndex + 1) % tabs.length;\r\n }\r\n\r\n if (nextIndex !== this.activeIndex()) {\r\n this.selectTab(nextIndex);\r\n }\r\n }\r\n\r\n selectPrevious(): void {\r\n const tabs = this.tabsToDisplay();\r\n let prevIndex = (this.activeIndex() - 1 + tabs.length) % tabs.length;\r\n\r\n while (tabs[prevIndex]?.disabled && prevIndex !== this.activeIndex()) {\r\n prevIndex = (prevIndex - 1 + tabs.length) % tabs.length;\r\n }\r\n\r\n if (prevIndex !== this.activeIndex()) {\r\n this.selectTab(prevIndex);\r\n }\r\n }\r\n\r\n selectFirst(): void {\r\n const tabs = this.tabsToDisplay();\r\n let firstIndex = 0;\r\n\r\n while (tabs[firstIndex]?.disabled && firstIndex < tabs.length - 1) {\r\n firstIndex++;\r\n }\r\n\r\n if (!tabs[firstIndex]?.disabled && firstIndex !== this.activeIndex()) {\r\n this.selectTab(firstIndex);\r\n }\r\n }\r\n\r\n selectLast(): void {\r\n const tabs = this.tabsToDisplay();\r\n let lastIndex = tabs.length - 1;\r\n\r\n while (tabs[lastIndex]?.disabled && lastIndex > 0) {\r\n lastIndex--;\r\n }\r\n\r\n if (!tabs[lastIndex]?.disabled && lastIndex !== this.activeIndex()) {\r\n this.selectTab(lastIndex);\r\n }\r\n }\r\n\r\n getActiveTab(): Tab | undefined {\r\n return this.tabsToDisplay()[this.activeIndex()];\r\n }\r\n\r\n getTabComponent(index: number): PshTabComponent | undefined {\r\n return this.tabComponents()[index];\r\n }\r\n}\r\n","<div\r\n class=\"tabs-container\"\r\n [class.animated]=\"animated()\"\r\n>\r\n <div\r\n class=\"tabs-header\"\r\n [class]=\"variant()\"\r\n role=\"tablist\"\r\n [attr.aria-orientation]=\"ariaOrientation()\"\r\n >\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <button\r\n class=\"tab-button\"\r\n role=\"tab\"\r\n [class.active]=\"i === activeIndex()\"\r\n [attr.aria-selected]=\"i === activeIndex()\"\r\n [attr.aria-disabled]=\"tab.disabled || null\"\r\n [attr.aria-controls]=\"'panel-' + i\"\r\n [attr.aria-label]=\"tab.ariaLabel || tab.header\"\r\n [attr.id]=\"'tab-' + i\"\r\n [tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [disabled]=\"tab.disabled\"\r\n (click)=\"$event.preventDefault(); selectTab(i)\"\r\n (keydown)=\"handleKeyDown($event, i)\"\r\n >\r\n @if (tab.icon) {\r\n <i class=\"ph ph-{{ tab.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n {{ tab.header }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"tabs-content\">\r\n @if (hasContentProjection()) {\r\n <ng-content />\r\n } @else {\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <div\r\n class=\"tab-panel\"\r\n role=\"tabpanel\"\r\n [class.active]=\"i === activeIndex()\"\r\n [attr.aria-labelledby]=\"'tab-' + i\"\r\n [attr.id]=\"'panel-' + i\"\r\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [attr.hidden]=\"i !== activeIndex() || null\"\r\n >\r\n {{ tab.content }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { InjectionToken } from '@angular/core';\r\nimport { ToastConfig } from './toast.types';\r\n\r\nexport const TOAST_CONFIG = new InjectionToken<Partial<ToastConfig>>('TOAST_CONFIG', {\r\n factory: () => ({\r\n position: 'top-right',\r\n duration: 5000,\r\n maxToasts: 5,\r\n pauseOnHover: true,\r\n showIcon: true,\r\n showCloseButton: true\r\n })\r\n});\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\nimport { Toast, ToastPosition } from './toast.types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PshToastService {\r\n private _toasts = signal<Toast[]>([]);\r\n private _position = signal<ToastPosition>('top-right');\r\n private config = inject(TOAST_CONFIG);\r\n\r\n readonly toasts = this._toasts.asReadonly();\r\n readonly position = this._position.asReadonly();\r\n\r\n show(toast: Omit<Toast, 'id'>) {\r\n const id = crypto.randomUUID();\r\n const newToast: Toast = {\r\n ...toast,\r\n id,\r\n type: toast.type || 'info',\r\n duration: toast.duration ?? this.config.duration ?? 5000\r\n };\r\n\r\n const maxToasts = this.config.maxToasts ?? 5;\r\n this._toasts.update(toasts => {\r\n const currentToasts = [...toasts];\r\n while (currentToasts.length >= maxToasts) {\r\n currentToasts.shift();\r\n }\r\n return [...currentToasts, newToast];\r\n });\r\n\r\n return id;\r\n }\r\n\r\n remove(id: string) {\r\n this._toasts.update(toasts => toasts.filter(t => t.id !== id));\r\n }\r\n\r\n info(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'info', ...options });\r\n }\r\n\r\n success(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'success', ...options });\r\n }\r\n\r\n warning(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'warning', ...options });\r\n }\r\n\r\n error(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'danger', ...options });\r\n }\r\n\r\n danger(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, type: 'danger', ...options });\r\n }\r\n\r\n setPosition(position: ToastPosition) {\r\n this._position.set(position);\r\n }\r\n}\r\n\r\n/** @deprecated Use PshToastService instead */\r\nexport const ToastService = PshToastService;\r\n","import { PshToastComponent } from './toast.component';\r\n\r\n/** @deprecated Use PshToastComponent instead */\r\nexport const ToastComponent = PshToastComponent;\r\n","import { ChangeDetectionStrategy, Component, effect, inject, OnDestroy } from '@angular/core';\r\nimport { Toast, ToastType } from './toast.types';\r\nimport { PshToastService } from './toast.service';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\n\r\n@Component({\r\n selector: 'psh-toast',\r\n templateUrl: './toast.component.html',\r\n styleUrls: ['./toast.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:keydown.escape)': 'handleEscapeKey()'\r\n }\r\n})\r\nexport class PshToastComponent implements OnDestroy {\r\n private toastService = inject(PshToastService);\r\n public config = inject(TOAST_CONFIG);\r\n\r\n private timeoutMap = new Map<string, number>();\r\n private scheduledToastIds = new Set<string>();\r\n\r\n readonly toasts = this.toastService.toasts;\r\n readonly position = this.toastService.position;\r\n\r\n constructor() {\r\n effect(() => {\r\n const currentToasts = this.toasts();\r\n\r\n currentToasts.forEach(toast => {\r\n if (toast.id && !this.scheduledToastIds.has(toast.id)) {\r\n this.scheduledToastIds.add(toast.id);\r\n\r\n if (toast.duration && toast.duration > 0) {\r\n this.scheduleRemoval(toast.id, toast.duration);\r\n }\r\n }\r\n });\r\n\r\n const currentToastIds = new Set(currentToasts.map(t => t.id).filter(Boolean) as string[]);\r\n this.scheduledToastIds.forEach(id => {\r\n if (!currentToastIds.has(id)) {\r\n this.scheduledToastIds.delete(id);\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleEscapeKey(): void {\r\n const toasts = this.toasts();\r\n const lastToast = toasts[toasts.length - 1];\r\n if (lastToast?.id) {\r\n this.handleDismiss(lastToast.id);\r\n }\r\n }\r\n\r\n handleDismiss(id: string | undefined): void {\r\n if (id) {\r\n this.clearTimeout(id);\r\n this.toastService.remove(id);\r\n }\r\n }\r\n\r\n handleMouseEnter(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n this.clearTimeout(id);\r\n }\r\n }\r\n\r\n handleMouseLeave(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n const toast = this.toasts().find(t => t.id === id);\r\n if (toast?.duration && toast.duration > 0) {\r\n this.scheduleRemoval(id, toast.duration);\r\n }\r\n }\r\n }\r\n\r\n getDefaultIcon(type: ToastType): string {\r\n const icons: Record<ToastType, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n };\r\n return icons[type] || 'info';\r\n }\r\n\r\n shouldShowCloseButton(toast: Toast): boolean {\r\n if (toast.showCloseButton !== undefined) {\r\n return toast.showCloseButton;\r\n }\r\n return this.config.showCloseButton !== false;\r\n }\r\n\r\n getCloseButtonAriaLabel(toast: Toast): string {\r\n return toast.closeButtonAriaLabel ?? this.config.closeButtonAriaLabel ?? 'Close notification';\r\n }\r\n\r\n private scheduleRemoval(id: string, duration: number): void {\r\n this.clearTimeout(id);\r\n const timeoutId = setTimeout(() => {\r\n this.toastService.remove(id);\r\n this.timeoutMap.delete(id);\r\n }, duration);\r\n this.timeoutMap.set(id, timeoutId);\r\n }\r\n\r\n private clearTimeout(id: string): void {\r\n const timeoutId = this.timeoutMap.get(id);\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n this.timeoutMap.delete(id);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.timeoutMap.forEach(timeoutId => {\r\n clearTimeout(timeoutId);\r\n });\r\n this.timeoutMap.clear();\r\n this.scheduledToastIds.clear();\r\n }\r\n}\r\n\r\nexport { ToastComponent } from './toast.compat';\r\n","<div\r\n class=\"toast-container\"\r\n [class]=\"position()\"\r\n role=\"region\"\r\n aria-label=\"Notifications\"\r\n>\r\n @for (toast of toasts(); track toast.id) {\r\n <div\r\n class=\"toast-item\"\r\n [class]=\"toast.type\"\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n [style.--progress-duration]=\"toast.duration + 'ms'\"\r\n (mouseenter)=\"handleMouseEnter(toast.id!)\"\r\n (mouseleave)=\"handleMouseLeave(toast.id!)\"\r\n >\r\n @if (config.showIcon !== false) {\r\n <i\r\n class=\"ph ph-{{ toast.icon || getDefaultIcon(toast.type) }} toast-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n <div class=\"toast-content\">\r\n {{ toast.message }}\r\n </div>\r\n @if (shouldShowCloseButton(toast)) {\r\n <button\r\n type=\"button\"\r\n class=\"toast-close\"\r\n (click)=\"handleDismiss(toast.id)\"\r\n [attr.aria-label]=\"getCloseButtonAriaLabel(toast)\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","export interface Rgb {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\nexport interface Oklch {\r\n l: number;\r\n c: number;\r\n h: number;\r\n}\r\n\r\nexport function hexToRgb(hex: string): Rgb | null {\r\n let value = hex.replace(/^#/, '').trim();\r\n if (value.length === 3) {\r\n value = value.split('').map((char) => char + char).join('');\r\n }\r\n if (value.length !== 6 || !/^[0-9a-fA-F]{6}$/.test(value)) {\r\n return null;\r\n }\r\n return {\r\n r: parseInt(value.substring(0, 2), 16),\r\n g: parseInt(value.substring(2, 4), 16),\r\n b: parseInt(value.substring(4, 6), 16),\r\n };\r\n}\r\n\r\nexport function rgbToHex({ r, g, b }: Rgb): string {\r\n const toHex = (channel: number) => {\r\n const clamped = Math.max(0, Math.min(255, Math.round(channel)));\r\n return clamped.toString(16).padStart(2, '0');\r\n };\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\nfunction srgbToLinear(channel: number): number {\r\n const normalized = channel / 255;\r\n return normalized <= 0.04045\r\n ? normalized / 12.92\r\n : Math.pow((normalized + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction linearToSrgb(value: number): number {\r\n const clamped = Math.max(0, Math.min(1, value));\r\n const scaled = clamped <= 0.0031308\r\n ? 12.92 * clamped\r\n : 1.055 * Math.pow(clamped, 1 / 2.4) - 0.055;\r\n return scaled * 255;\r\n}\r\n\r\nexport function relativeLuminance(rgb: Rgb): number {\r\n const r = srgbToLinear(rgb.r);\r\n const g = srgbToLinear(rgb.g);\r\n const b = srgbToLinear(rgb.b);\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n}\r\n\r\nexport function contrastRatio(a: Rgb, b: Rgb): number {\r\n const la = relativeLuminance(a);\r\n const lb = relativeLuminance(b);\r\n const lighter = Math.max(la, lb);\r\n const darker = Math.min(la, lb);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n}\r\n\r\nexport function bestTextColor(background: Rgb): string {\r\n const white = { r: 255, g: 255, b: 255 };\r\n const black = { r: 0, g: 0, b: 0 };\r\n return contrastRatio(background, white) >= contrastRatio(background, black)\r\n ? '#FFFFFF'\r\n : '#000000';\r\n}\r\n\r\nfunction rgbToLinear(rgb: Rgb): [number, number, number] {\r\n return [srgbToLinear(rgb.r), srgbToLinear(rgb.g), srgbToLinear(rgb.b)];\r\n}\r\n\r\nfunction linearToRgb(lin: [number, number, number]): Rgb {\r\n return {\r\n r: linearToSrgb(lin[0]),\r\n g: linearToSrgb(lin[1]),\r\n b: linearToSrgb(lin[2]),\r\n };\r\n}\r\n\r\nexport function rgbToOklch(rgb: Rgb): Oklch {\r\n const [r, g, b] = rgbToLinear(rgb);\r\n\r\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n\r\n const l_ = Math.cbrt(l);\r\n const m_ = Math.cbrt(m);\r\n const s_ = Math.cbrt(s);\r\n\r\n const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;\r\n const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;\r\n const bLab = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;\r\n\r\n const C = Math.sqrt(a * a + bLab * bLab);\r\n let H = (Math.atan2(bLab, a) * 180) / Math.PI;\r\n if (H < 0) H += 360;\r\n\r\n return { l: L, c: C, h: H };\r\n}\r\n\r\nexport function oklchToRgb({ l, c, h }: Oklch): Rgb {\r\n const hRad = (h * Math.PI) / 180;\r\n const a = c * Math.cos(hRad);\r\n const bLab = c * Math.sin(hRad);\r\n\r\n const l_ = l + 0.3963377774 * a + 0.2158037573 * bLab;\r\n const m_ = l - 0.1055613458 * a - 0.0638541728 * bLab;\r\n const s_ = l - 0.0894841775 * a - 1.2914855480 * bLab;\r\n\r\n const lCube = l_ ** 3;\r\n const mCube = m_ ** 3;\r\n const sCube = s_ ** 3;\r\n\r\n const r = 4.0767416621 * lCube - 3.3077115913 * mCube + 0.2309699292 * sCube;\r\n const g = -1.2684380046 * lCube + 2.6097574011 * mCube - 0.3413193965 * sCube;\r\n const b = -0.0041960863 * lCube - 0.7034186147 * mCube + 1.7076147010 * sCube;\r\n\r\n return linearToRgb([r, g, b]);\r\n}\r\n\r\nexport function withLightness(color: Rgb, lightness: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({ l: Math.max(0, Math.min(1, lightness)), c: oklch.c, h: oklch.h });\r\n}\r\n\r\nexport function shiftLightness(color: Rgb, delta: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({\r\n l: Math.max(0, Math.min(1, oklch.l + delta)),\r\n c: oklch.c,\r\n h: oklch.h,\r\n });\r\n}\r\n","import {\r\n Rgb,\r\n contrastRatio,\r\n relativeLuminance,\r\n rgbToOklch,\r\n oklchToRgb,\r\n} from './color.utils';\r\n\r\nexport const WCAG_AA_NORMAL = 4.5;\r\nexport const WCAG_AA_LARGE = 3;\r\nexport const WCAG_AAA_NORMAL = 7;\r\nexport const WCAG_AAA_LARGE = 4.5;\r\n\r\nexport type ContrastTarget = 'AA' | 'AAA';\r\n\r\nexport function targetRatio(target: ContrastTarget): number {\r\n return target === 'AAA' ? WCAG_AAA_NORMAL : WCAG_AA_NORMAL;\r\n}\r\n\r\n/**\r\n * Adjusts a color in OKLCH lightness until the contrast ratio against the\r\n * background meets or exceeds the target. Direction is chosen based on the\r\n * background (darken on light backgrounds, lighten on dark backgrounds).\r\n * Hue and chroma are preserved as much as possible.\r\n */\r\nexport function ensureContrast(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n if (contrastRatio(color, background) >= ratio) {\r\n return color;\r\n }\r\n\r\n const backgroundLuminance = relativeLuminance(background);\r\n const { c, h } = rgbToOklch(color);\r\n const goLighter = backgroundLuminance < 0.5;\r\n\r\n let low = 0;\r\n let high = 1;\r\n let best: Rgb = color;\r\n let bestRatio = contrastRatio(color, background);\r\n\r\n for (let i = 0; i < 24; i++) {\r\n const mid = (low + high) / 2;\r\n const candidate = oklchToRgb({ l: mid, c, h });\r\n const candidateRatio = contrastRatio(candidate, background);\r\n\r\n if (candidateRatio >= ratio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n if (goLighter) {\r\n high = mid;\r\n } else {\r\n low = mid;\r\n }\r\n } else {\r\n if (candidateRatio > bestRatio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n }\r\n if (goLighter) {\r\n low = mid;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n }\r\n\r\n if (bestRatio < ratio) {\r\n const chromaReduced = oklchToRgb({\r\n l: goLighter ? 0.98 : 0.08,\r\n c: Math.min(c, 0.05),\r\n h,\r\n });\r\n if (contrastRatio(chromaReduced, background) > bestRatio) {\r\n return chromaReduced;\r\n }\r\n }\r\n\r\n return best;\r\n}\r\n","import {\r\n Injectable,\r\n InjectionToken,\r\n PLATFORM_ID,\r\n afterNextRender,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Theme } from './types/theme.types';\r\nimport {\r\n Rgb,\r\n bestTextColor,\r\n hexToRgb,\r\n rgbToHex,\r\n rgbToOklch,\r\n oklchToRgb,\r\n contrastRatio,\r\n} from './utils/color.utils';\r\nimport {\r\n ContrastTarget,\r\n ensureContrast,\r\n targetRatio,\r\n WCAG_AA_NORMAL,\r\n} from './utils/wcag.utils';\r\n\r\nconst THEME_STORAGE_KEY = 'helix-theme-preference';\r\n\r\n/**\r\n * Contract for applications that want to override brand colors.\r\n * Kept generic (customer) so it can fit any vertical.\r\n */\r\nexport interface CustomerContextService {\r\n primaryColor(): string;\r\n secondaryColor(): string;\r\n}\r\n\r\nexport const CUSTOMER_CONTEXT_SERVICE = new InjectionToken<CustomerContextService>(\r\n 'CUSTOMER_CONTEXT_SERVICE',\r\n);\r\n\r\nexport interface PshThemeOptions {\r\n targetContrast?: ContrastTarget;\r\n}\r\n\r\nexport const PSH_THEME_OPTIONS = new InjectionToken<PshThemeOptions>('PSH_THEME_OPTIONS');\r\n\r\ninterface DerivedPalette {\r\n base: string;\r\n light: string;\r\n lighter: string;\r\n dark: string;\r\n darker: string;\r\n text: string;\r\n rgb: string;\r\n source: string;\r\n}\r\n\r\nconst LIGHT_BACKGROUND: Rgb = { r: 255, g: 255, b: 255 };\r\nconst DARK_BACKGROUND: Rgb = { r: 20, g: 20, b: 25 };\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n private customerContext = inject(CUSTOMER_CONTEXT_SERVICE, { optional: true });\r\n private options = inject(PSH_THEME_OPTIONS, { optional: true });\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private isDarkThemeSignal = signal<boolean>(false);\r\n private themeNameSignal = signal<Theme>('light');\r\n private lastChangeSignal = signal<Date>(new Date());\r\n\r\n isDarkTheme = computed(() => this.isDarkThemeSignal());\r\n themeName = computed(() => this.themeNameSignal());\r\n\r\n themeInfo = computed(() => ({\r\n isDark: this.isDarkTheme(),\r\n name: this.themeName(),\r\n lastChange: this.lastChangeSignal(),\r\n }));\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n afterNextRender(() => this.applyCustomerTheme());\r\n }\r\n\r\n setDarkTheme(isDark: boolean): void {\r\n if (this.isBrowser) {\r\n this.document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');\r\n }\r\n this.isDarkThemeSignal.set(isDark);\r\n this.themeNameSignal.set(isDark ? 'dark' : 'light');\r\n this.lastChangeSignal.set(new Date());\r\n this.applyCustomerTheme();\r\n }\r\n\r\n toggleTheme(): void {\r\n this.setDarkTheme(!this.isDarkThemeSignal());\r\n }\r\n\r\n updateTheme(name: Theme): void {\r\n this.themeNameSignal.set(name);\r\n this.isDarkThemeSignal.set(name === 'dark');\r\n this.lastChangeSignal.set(new Date());\r\n this.saveThemePreference(name);\r\n this.applyCustomerTheme();\r\n }\r\n\r\n /**\r\n * Applies the customer brand colors to CSS variables, automatically\r\n * deriving variants in OKLCH and enforcing WCAG contrast against the\r\n * current theme background. If the provided color is not accessible\r\n * as a UI color, it is silently adjusted so UI components stay readable.\r\n * The original brand color is preserved in --customer-*-color-source\r\n * for purely decorative use (logos, marketing surfaces).\r\n */\r\n applyCustomerTheme(): void {\r\n if (!this.isBrowser || !this.customerContext) {\r\n return;\r\n }\r\n\r\n const primary = this.customerContext.primaryColor();\r\n const secondary = this.customerContext.secondaryColor();\r\n\r\n this.applyPalette('primary', primary);\r\n this.applyPalette('secondary', secondary);\r\n }\r\n\r\n private applyPalette(kind: 'primary' | 'secondary', color: string | undefined): void {\r\n if (!color) return;\r\n const source = hexToRgb(color);\r\n if (!source) return;\r\n\r\n const palette = this.derivePalette(source);\r\n const root = this.document.documentElement.style;\r\n const prefix = `--customer-${kind}-color`;\r\n\r\n root.setProperty(prefix, palette.base);\r\n root.setProperty(`${prefix}-source`, palette.source);\r\n root.setProperty(`${prefix}-light`, palette.light);\r\n root.setProperty(`${prefix}-lighter`, palette.lighter);\r\n root.setProperty(`${prefix}-dark`, palette.dark);\r\n root.setProperty(`${prefix}-darker`, palette.darker);\r\n root.setProperty(`${prefix}-text`, palette.text);\r\n root.setProperty(`${prefix}-rgb`, palette.rgb);\r\n }\r\n\r\n private derivePalette(source: Rgb): DerivedPalette {\r\n const isDark = this.isDarkThemeSignal();\r\n const background = isDark ? DARK_BACKGROUND : LIGHT_BACKGROUND;\r\n const ratio = targetRatio(this.options?.targetContrast ?? 'AA');\r\n\r\n const accessible = ensureContrast(source, background, ratio);\r\n\r\n const { l, c, h } = rgbToOklch(accessible);\r\n const variants = isDark\r\n ? {\r\n light: clampL(l + 0.06),\r\n lighter: clampL(l + 0.14),\r\n dark: clampL(l - 0.06),\r\n darker: clampL(l - 0.14),\r\n }\r\n : {\r\n light: clampL(l + 0.08),\r\n lighter: clampL(l + 0.18),\r\n dark: clampL(l - 0.08),\r\n darker: clampL(l - 0.16),\r\n };\r\n\r\n const lightColor = oklchToRgb({ l: variants.light, c, h });\r\n const lighterColor = oklchToRgb({ l: variants.lighter, c, h });\r\n const darkColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.dark, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n const darkerColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.darker, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n\r\n const text = bestTextColor(accessible);\r\n const rgb = `${Math.round(accessible.r)}, ${Math.round(accessible.g)}, ${Math.round(accessible.b)}`;\r\n\r\n return {\r\n base: rgbToHex(accessible),\r\n source: rgbToHex(source),\r\n light: rgbToHex(lightColor),\r\n lighter: rgbToHex(lighterColor),\r\n dark: rgbToHex(darkColor),\r\n darker: rgbToHex(darkerColor),\r\n text,\r\n rgb,\r\n };\r\n }\r\n\r\n private ensureIfInteractive(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n return contrastRatio(color, background) >= ratio\r\n ? color\r\n : ensureContrast(color, background, ratio);\r\n }\r\n\r\n private initializeTheme(): void {\r\n let savedTheme: Theme | null = null;\r\n if (this.isBrowser) {\r\n try {\r\n savedTheme = this.document.defaultView?.localStorage.getItem(THEME_STORAGE_KEY) as Theme;\r\n } catch {\r\n savedTheme = null;\r\n }\r\n }\r\n const isValid = savedTheme === 'light' || savedTheme === 'dark';\r\n // No stored preference → honour the OS \"prefers-color-scheme\" setting.\r\n const initial: Theme = isValid ? (savedTheme as Theme) : this.prefersDarkScheme() ? 'dark' : 'light';\r\n this.setDarkTheme(initial === 'dark');\r\n }\r\n\r\n /** True when the OS/browser requests a dark colour scheme. */\r\n private prefersDarkScheme(): boolean {\r\n const view = this.document.defaultView;\r\n return this.isBrowser && !!view?.matchMedia?.('(prefers-color-scheme: dark)').matches;\r\n }\r\n\r\n private saveThemePreference(theme: Theme): void {\r\n if (!this.isBrowser) return;\r\n try {\r\n this.document.defaultView?.localStorage.setItem(THEME_STORAGE_KEY, theme);\r\n } catch {\r\n /* storage unavailable, preference not persisted */\r\n }\r\n }\r\n}\r\n\r\nfunction clampL(value: number): number {\r\n return Math.max(0, Math.min(1, value));\r\n}\r\n","import { Injectable, inject, InjectionToken, Type } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport interface TranslationProvider {\r\n translate(key: string, params?: Record<string, unknown>): string;\r\n translateAsync(key: string, params?: Record<string, unknown>): Observable<string>;\r\n setLanguage(lang: string): void;\r\n getCurrentLanguage(): string;\r\n onLangChange(): Observable<string>;\r\n}\r\n\r\n@Injectable()\r\nexport class NgxTranslateProvider implements TranslationProvider {\r\n private translateService = inject(TranslateService);\r\n\r\n translate(key: string, params?: Record<string, unknown>): string {\r\n if (!key) return '';\r\n return this.translateService.instant(key, params);\r\n }\r\n\r\n translateAsync(key: string, params?: Record<string, unknown>): Observable<string> {\r\n if (!key) return new Observable(subscriber => subscriber.next(''));\r\n return this.translateService.stream(key, params);\r\n }\r\n\r\n setLanguage(lang: string): void {\r\n this.translateService.use(lang);\r\n }\r\n\r\n getCurrentLanguage(): string {\r\n return this.translateService.currentLang;\r\n }\r\n\r\n onLangChange(): Observable<string> {\r\n return this.translateService.onLangChange.pipe(\r\n map(event => event.lang)\r\n );\r\n }\r\n}\r\n\r\nexport const TRANSLATION_PROVIDER = new InjectionToken<TranslationProvider>('TRANSLATION_PROVIDER', {\r\n factory: () => new NgxTranslateProvider()\r\n});\r\n\r\nexport function provideTranslation(provider: Type<TranslationProvider> = NgxTranslateProvider) {\r\n return { provide: TRANSLATION_PROVIDER, useClass: provider };\r\n}","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScrollService {\r\n private readonly router = inject(Router);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n constructor() {\r\n // Subscribe to router events\r\n this.router.events.pipe(\r\n // Filter only NavigationEnd events\r\n filter(event => event instanceof NavigationEnd)\r\n ).subscribe(() => {\r\n // Reset scroll position (browser only)\r\n if (this.isBrowser) {\r\n this.document.defaultView?.scrollTo(0, 0);\r\n }\r\n });\r\n }\r\n}\r\n","import { DestroyRef, inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\nexport type AnnouncerPoliteness = 'polite' | 'assertive';\r\n\r\nconst SR_ONLY_STYLE =\r\n 'position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;' +\r\n 'overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;';\r\n\r\n/**\r\n * Centralised ARIA live-region announcer.\r\n *\r\n * Provides a single pair of visually-hidden `aria-live` regions (polite and\r\n * assertive) shared across the whole application, instead of every component\r\n * rendering its own live region. Inject it and call {@link announce} to read a\r\n * message to assistive technology (toasts, async loading, form validation…).\r\n *\r\n * @example\r\n * ```typescript\r\n * private announcer = inject(PshLiveAnnouncerService);\r\n * this.announcer.announce('3 results found');\r\n * this.announcer.announce('Save failed', 'assertive');\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshLiveAnnouncerService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private politeRegion: HTMLElement | null = null;\r\n private assertiveRegion: HTMLElement | null = null;\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => this.dispose());\r\n }\r\n\r\n /**\r\n * Announces a message in the requested live region.\r\n * The region is cleared first so the same message announced twice is re-read.\r\n */\r\n announce(message: string, politeness: AnnouncerPoliteness = 'polite'): void {\r\n if (!this.isBrowser) return;\r\n const region = this.getRegion(politeness);\r\n region.textContent = '';\r\n // Re-assign after clearing so assistive tech registers the change.\r\n region.textContent = message;\r\n }\r\n\r\n /** Clears both live regions. */\r\n clear(): void {\r\n if (this.politeRegion) this.politeRegion.textContent = '';\r\n if (this.assertiveRegion) this.assertiveRegion.textContent = '';\r\n }\r\n\r\n private getRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n if (politeness === 'assertive') {\r\n this.assertiveRegion ??= this.createRegion('assertive');\r\n return this.assertiveRegion;\r\n }\r\n this.politeRegion ??= this.createRegion('polite');\r\n return this.politeRegion;\r\n }\r\n\r\n private createRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n const region = this.document.createElement('div');\r\n region.setAttribute('aria-live', politeness);\r\n region.setAttribute('aria-atomic', 'true');\r\n region.setAttribute('role', politeness === 'assertive' ? 'alert' : 'status');\r\n region.setAttribute('style', SR_ONLY_STYLE);\r\n region.classList.add('psh-live-announcer');\r\n this.document.body.appendChild(region);\r\n return region;\r\n }\r\n\r\n private dispose(): void {\r\n this.politeRegion?.remove();\r\n this.assertiveRegion?.remove();\r\n this.politeRegion = null;\r\n this.assertiveRegion = null;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_CONFIG","i1.PshClickOutsideDirective","DEFAULT_ARIA_LABELS"],"mappings":";;;;;;;;;;AAUA;AACA,MAAM,cAAc,GAAgB;AAClC,IAAA,OAAO,EAAE;CACV;AAED;AACA,MAAM,aAAa,GAA2B;AAC5C,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE;CACT;AAED,MAAMA,gBAAc,GAAG;AACrB,IAAA,IAAI,EAAE,MAAmB;AACzB,IAAA,YAAY,EAAE,MAAsB;AACpC,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,QAAqB;AAC3B,IAAA,QAAQ,EAAE;CACX;MASY,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;;AAUE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAYA,gBAAc,CAAC,IAAI;iFAAC;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAeA,gBAAc,CAAC,YAAY;yFAAC;AAC/D,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAACA,gBAAc,CAAC,QAAQ;qFAAC;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAYA,gBAAc,CAAC,IAAI;iFAAC;AAC5C,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAACA,gBAAc,CAAC,QAAQ;qFAAC;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAa;AACzB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO;yFAAC;AAC5C,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAA0B;QAC1C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE;oFAAC;;QAGnB,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;;AAGvB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM;wFAAC;AAClE,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;oFAAC;AAE3D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAC1B,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,WAAW,GAAG,QAAQ,CAAC;6FAC1F;AAED,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MACtB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC;yFAClF;AAED,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;AACtC,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;QACpB,CAAC;kFAAC;AAKH,IAAA;IAHC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;8GArCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtC9B,i3BA6BM,EAAA,MAAA,EAAA,CAAA,y7FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDIM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,i3BAAA,EAAA,MAAA,EAAA,CAAA,y7FAAA,CAAA,EAAA;;;AEhCjD;AACA,MAAMA,gBAAc,GAAG;AACrB,IAAA,IAAI,EAAE,QAAsB;AAC5B,IAAA,KAAK,EAAE,QAAuB;AAC9B,IAAA,GAAG,EAAE,aAAa;AAClB,IAAA,IAAI,EAAE;CACP;AAED;AACA,MAAM,qBAAqB,GAAiC;AAC1D,IAAA,MAAM,EAAE,sBAAsB;AAC9B,IAAA,OAAO,EAAE,oBAAoB;AAC7B,IAAA,IAAI,EAAE,sBAAsB;AAC5B,IAAA,IAAI,EAAE;CACP;MASY,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;;AAUE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAaA,gBAAc,CAAC,IAAI;iFAAC;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAcA,gBAAc,CAAC,KAAK;kFAAC;AAChD,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK;2FAAsB;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAASA,gBAAc,CAAC,GAAG;gFAAC;;QAGvC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,EAAE;qFAAC;AACpB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAASA,gBAAc,CAAC,IAAI;iFAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK;8FAA4B;AAC1C,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;;QAG3B,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;qFAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;wFAAC;AACnE,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oFAAC;AAEjE,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;8FAAC;AAElE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,qBAAqB,CAAC,aAAa,CAAC;QAC7C,CAAC;wFAAC;QAEF,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,SAAS;kFAAC;AACnD,IAAA;8GA5BY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,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,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,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,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,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,KAAA,EAAA,aAAA,EAAA,GAAA,EAAA,WAAA,EAAA,GAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3B/B,82BA2BM,EAAA,MAAA,EAAA,CAAA,8uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,82BAAA,EAAA,MAAA,EAAA,CAAA,8uFAAA,CAAA,EAAA;;;AErBjD,MAAM,cAAc,GAAG;AACrB,IAAA,OAAO,EAAE,SAAyB;AAClC,IAAA,IAAI,EAAE,QAAqB;AAC3B,IAAA,WAAW,EAAE,MAA0B;AACvC,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE;CACX;MASY,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;AASW,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAe,cAAc,CAAC,OAAO;oFAAC;AACrD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAY,cAAc,CAAC,IAAI;iFAAC;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAmB,cAAc,CAAC,WAAW;wFAAC;QACjE,IAAA,CAAA,OAAO,GAAG,KAAK,CAAS,EAAE;oFAAC;QAC3B,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,IAAI;oFAAC;AACrB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAK;AAClB,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG;gFAAC;AAC/B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ;qFAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAgB,cAAc,CAAC,QAAQ;qFAAC;QACxD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;AAC3B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAsC;QAEvD,IAAA,CAAA,UAAU,GAAG,MAAM,EAAQ;QAC3B,IAAA,CAAA,WAAW,GAAG,MAAM,EAAK;AAEzB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAC/B,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,GAAG,QAAQ,GAAG,KAAK;yFACpD;AAEQ,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,IAAI,WAAW;AAAE,gBAAA,OAAO,WAAW;AAEnC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,OAAO;AAE3B,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE;QAC5B,CAAC;8FAAC;AAEO,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,QAAQ;YACpC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;QAC3B,CAAC;kFAAC;QAEe,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK;kFAAC;QACpD,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS;sFAAC;QAC5D,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS;qFAAC;AAErD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC7C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACjC,IAAI,OAAO,YAAY,KAAK,QAAQ;AAAE,gBAAA,OAAO,IAAI;YACjD,OAAO,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;QAC5C,CAAC;0FAAC;AAEe,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACpD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YAEjC,IAAI,CAAC,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;AACrE,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,OAAO,SAAS,CAAC,YAAY,CAAC;QAChC,CAAC;iGAAC;AAEe,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACrD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AAEjC,YAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AACpC,gBAAA,OAAO,YAAY,KAAK,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE;YAC/D;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACzB,gBAAA,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;YAC7B;AAEA,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE;AAC3B,YAAA,OAAO,YAAY,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAG,GAAG,CAAA,EAAG,YAAY,EAAE;QACrE,CAAC;kGAAC;AAEO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACzC,gBAAA,OAAO,IAAI,CAAC,OAAO,EAAE;YACvB;AAEA,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACnD,YAAA,IAAI,eAAe,KAAK,IAAI,EAAE;AAC5B,gBAAA,OAAO,eAAe;YACxB;AAEA,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;QACrC,CAAC;yFAAC;AAKH,IAAA;IAHC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;8GA7FW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,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,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,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,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpB9B,w5CAgCA,EAAA,MAAA,EAAA,CAAA,qkEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjBY,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w5CAAA,EAAA,MAAA,EAAA,CAAA,qkEAAA,CAAA,EAAA;;;MEOpC,kBAAkB,CAAA;AAX/B,IAAA,WAAA,GAAA;AAYU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAA,CAAA,aAAa,GAAG,MAAM,CAAqB,SAAS;0FAAC;QAE7D,IAAA,CAAA,UAAU,GAAG,KAAK,CAAmB,QAAQ;uFAAC;QAC9C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAgB,SAAS;oFAAC;QACzC,IAAA,CAAA,IAAI,GAAG,KAAK,CAAa,QAAQ;iFAAC;QAClC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QACvB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QACtB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;QACxB,IAAA,CAAA,YAAY,GAAG,KAAK,CAAqB,MAAM;yFAAC;AAChD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;QAC3B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,YAAY;wFAAC;QACjC,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,sCAAsC;yFAAC;AAC5D,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK;oGAAU;QAC9B,IAAA,CAAA,IAAI,GAAG,KAAK,CAAgC,QAAQ;iFAAC;QAErD,IAAA,CAAA,OAAO,GAAG,MAAM,EAAc;QAC9B,IAAA,CAAA,aAAa,GAAG,MAAM,EAAc;AAkBpC,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAChC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,SAAS,EAAE;YAC7C,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE;AAC/C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM,EAAE;AAClC,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,QAAQ;YACxC;AACA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,YAAA,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS;AAC/B,YAAA,OAAO,SAAS;QAClB,CAAC;8FAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,SAAS;QAClB,CAAC;kFAAC;AAgBH,IAAA;IAhDC,qBAAqB,GAAA;AACnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC;QACpE,IAAI,MAAM,EAAE;YACV,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;YAChE,IAAI,gBAAgB,EAAE;gBACpB,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC9D,gBAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,aAAa,EAAE;AACjD,gBAAA,IAAI,WAAW,IAAI,WAAW,KAAK,oBAAoB,EAAE;AACvD,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;gBACrC;AAAO,qBAAA,IAAI,CAAC,WAAW,IAAI,oBAAoB,EAAE;AAC/C,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;gBACnC;YACF;QACF;IACF;AAqBA,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACtC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC;IACF;8GApEW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,y7DCzB/B,84CAqCS,EAAA,MAAA,EAAA,CAAA,q4KAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDZI,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,oBAAoB,EAAE,aAAa;AACnC,wBAAA,SAAS,EAAE,qBAAqB;AACjC,qBAAA,EAAA,QAAA,EAAA,84CAAA,EAAA,MAAA,EAAA,CAAA,q4KAAA,CAAA,EAAA;;;AEPH;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MAWU,gBAAgB,CAAA;AAoG3B,IAAA,WAAA,GAAA;AAnGQ,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAG5C,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAU,KAAK;qFAAC;;;QAGjC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAc,SAAS;oFAAC;;QAGvC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;;QAGxB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK;wFAAC;;;QAI1B,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE;kFAAC;;QAGzB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE;wFAAC;;QAG/B,IAAA,CAAA,YAAY,GAAG,KAAK,CAAmB,SAAS;yFAAC;;QAGjD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAc,QAAQ;oFAAC;;QAGtC,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAU,IAAI;8FAAC;;QAGxC,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAU,IAAI;8FAAC;;QAGxC,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI;+FAAC;;QAGzC,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAuB,OAAO;6FAAC;;QAGvD,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,IAAI;wFAAC;;QAGlC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;;QAG5B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAyB,EAAE;wFAAC;;QAG/C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK;oFAAC;;QAG/B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;;;QAIhC,IAAA,CAAA,OAAO,GAAG,MAAM,EAA8B;;;AAI9C,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,YAAY,EAAE,CAAA,CAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/C,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAElD,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC;4FAAC;;AAGF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;QAClC,CAAC;2FAAC;;AAGF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC;sFAAC;;AAGF,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,OAAO,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,EAAE;QACnD,CAAC;kGAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YAC7B,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;YAC3C;AACA,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC;2FAAC;AAGA,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;oBAC5C,IAAI,CAAC,mBAAmB,EAAE;AAC5B,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5D;QACF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;QAClC;IACF;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QACtC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;QAC3C;IACF;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;8GApJW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,q5ECpD7B,8tEA6DA,EAAA,MAAA,EAAA,CAAA,+4OAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDTa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;+BACE,UAAU,EAAA,eAAA,EAGH,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACzB,qBAAA,EAAA,QAAA,EAAA,8tEAAA,EAAA,MAAA,EAAA,CAAA,+4OAAA,CAAA,EAAA;;;ME/CU,UAAU,GAAG,IAAI,cAAc,CAAqB,YAAY,EAAE;AAC7E,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,UAAU,EAAE;KACb;AACF,CAAA;MAQY,eAAe,CAAA;AAN5B,IAAA,WAAA,GAAA;AAOmB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,EAAE;0FAAC;QAElC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAa,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;oFAAC;QAC7D,IAAA,CAAA,IAAI,GAAG,KAAK,CAAU,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QACnD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAC/C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAC/C,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK;wFAAC;AACrD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;QACtB,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,kBAAkB;uFAAC;QAChE,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;QAE3B,IAAA,CAAA,OAAO,GAAG,MAAM,EAAc;QAC9B,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;AAEvB,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,IAAI,WAAW;AAAE,gBAAA,OAAO,WAAW;AAEnC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE;AAClC,YAAA,IAAI,WAAW,IAAI,WAAW,KAAK,KAAK;AAAE,gBAAA,OAAO,WAAW;AAE5D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,YAAA,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS;AAE/B,YAAA,OAAO,KAAK;QACd,CAAC;8FAAC;AAYO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAC/B,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,GAAG,QAAQ;yFACzC;QAEQ,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;6FAChD;AAEQ,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,SAAS;kFAAC;AAuB1E,IAAA;IAzCC,qBAAqB,GAAA;AACnB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC;QAClF,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,CAAC,cAAc,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE;AACtD,YAAA,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE,EAAE;AACjC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9B;QACF;IACF;AAYA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AAE5C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAA8B,CAAC;QACnD;IACF;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB;IACF;8GAvEW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,+vCCpB5B,kqCAmCM,EAAA,MAAA,EAAA,CAAA,y0EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDfO,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;+BACE,SAAS,EAAA,eAAA,EAGF,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kqCAAA,EAAA,MAAA,EAAA,CAAA,y0EAAA,CAAA,EAAA;;;AENjD,MAAM,sBAAsB,GAAmC;AAC7D,IAAA,OAAO,EAAE,2CAA2C;AACpD,IAAA,MAAM,EAAE,2CAA2C;AACnD,IAAA,OAAO,EAAE,2CAA2C;AACpD,IAAA,OAAO,EAAE;CACV;MASY,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;;;AAYE,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAmB;;AAGhC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK;mGAAU;;AAG7B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;;;AAItB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAkB;;AAGpC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAAU;;AAG1B,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAU;;QAGhC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAkB,UAAU;oFAAC;;QAG5C,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK;wFAAC;;QAG1B,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;;QAGxB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;;QAGtB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;;QAGvB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;;QAG5B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAyB,EAAE;wFAAC;;AAG/C,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;;QAG3B,IAAA,CAAA,MAAM,GAAG,KAAK,CAAiB,YAAY;mFAAC;;QAG5C,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,KAAK;yFAAC;;;QAI3B,IAAA,CAAA,OAAO,GAAG,MAAM,EAA8B;;QAGtC,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;0FAAC;QAElD,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;gGAAC;QAE9D,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;yFAAC;QAEhD,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE;+FAAC;QAEtD,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;6FAAC;AAElD,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,YAAA,IAAI,QAAQ;AAAE,gBAAA,OAAO,QAAQ;AAE7B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,OAAO,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,IAAI;QACzD,CAAC;mGAAC;;AAGF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE;YAChD,OAAO,UAAU,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI;QAC3C,CAAC;sFAAC;;AAGF,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAChB,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;mFACzD;;QAGD,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;oFAAC;QAE/C,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE;4FAAC;;AAGrD,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,IAAI,WAAW;AAAE,gBAAA,OAAO,WAAW;AAEnC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACvC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEnC,YAAA,OAAO;AACL,kBAAE,CAAA,EAAG,IAAI,KAAK,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA;AAC3B,kBAAE,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,KAAK,EAAE;QACzB,CAAC;8FAAC;;AAGF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAE5B,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;AAEzC,YAAA,IAAI,MAAM,KAAK,UAAU,EAAE;AACzB,gBAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;YACrC;iBAAO;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACvC;AAEA,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,gBAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAChC;YAEA,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/C,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAElD,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC;4FAAC;;AAGF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;QAClC,CAAC;2FAAC;AA6BH,IAAA;;IA1BC,IAAc,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5D,IAAc,kBAAkB,KAAK,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACxE,IAAc,WAAW,KAAK,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,IAAc,iBAAiB,KAAK,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtE,IAAc,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAElE;;AAEG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;8GAlKW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,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,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,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,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,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BjC,87DA2DA,EAAA,MAAA,EAAA,CAAA,y2IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvCY,YAAY,oHAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAM5B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB,CAAC,YAAY,EAAE,eAAe,CAAC,EAAA,eAAA,EAGvB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,87DAAA,EAAA,MAAA,EAAA,CAAA,y2IAAA,CAAA,EAAA;;;AEbvC;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MASU,0BAA0B,CAAA;AARvC,IAAA,WAAA,GAAA;;QAWE,IAAA,CAAA,OAAO,GAAG,KAAK,CAAwB,UAAU;oFAAC;;QAGlD,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK;wFAAC;;QAG1B,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;;QAGxB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;;QAGtB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;;QAGvB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;;QAG5B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAyB,EAAE;wFAAC;;QAG/C,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,gBAAgB;sFAAC;;QAG3C,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,mBAAmB;gFAAC;;QAGxC,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,GAAG;wFAAC;;QAGhC,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,mBAAmB;2FAAC;;QAGnD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,gBAAgB;yFAAC;;QAG9C,IAAA,CAAA,OAAO,GAAG,MAAM,EAA8B;;AAG9C,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,OAAO,GAAG,CAAC,iBAAiB,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/C,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAElD,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC;4FAAC;;AAGF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YAC7B,OAAO;AACL,gBAAA,yBAAyB,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3C,gBAAA,kBAAkB,EAAE,IAAI,CAAC,GAAG,EAAE;AAC9B,gBAAA,2BAA2B,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/C,gBAAA,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE;AACrD,gBAAA,4BAA4B,EAAE,IAAI,CAAC,YAAY,EAAE;gBACjD,GAAG,IAAI,CAAC,WAAW;aACpB;QACH,CAAC;2FAAC;AAsBH,IAAA;AApBC;;AAEG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;8GAtFW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,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,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,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5CvC,opCAsCM,EAAA,MAAA,EAAA,CAAA,ggGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMX,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;+BACE,qBAAqB,EAAA,OAAA,EACtB,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,opCAAA,EAAA,MAAA,EAAA,CAAA,ggGAAA,CAAA,EAAA;;;AEtCvC;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAYU,oBAAoB,CAAA;AAoI/B,IAAA,WAAA,GAAA;QAlIA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAU,KAAK;6FAAC;;QAGzC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE;kFAAC;;QAGzB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAiB,EAAE;iFAAC;;QAGhC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAkB;AAC/B,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,iBAAiB,EAAE,+BAA+B;AAClD,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,UAAU,EAAE;AACb,SAAA;oFAAC;;QAGF,IAAA,CAAA,OAAO,GAAG,KAAK,CAAkB,UAAU;oFAAC;;QAG5C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,eAAe;iFAAC;;AAGrC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;;QAG3B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;;QAG5B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAyB,EAAE;wFAAC;;QAG/C,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK;wFAAC;;QAGnC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK;sFAAC;;QAGjC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK;oFAAC;;QAG/B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;;QAGhC,IAAA,CAAA,OAAO,GAAG,MAAM,EAA8B;;QAG9C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;;QAGhC,IAAA,CAAA,eAAe,GAAG,KAAK,CAAS,QAAQ;4FAAC;;QAGzC,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAS,OAAO;6FAAC;;QAGzC,IAAA,CAAA,MAAM,GAAG,MAAM,EAAgB;;QAG/B,IAAA,CAAA,UAAU,GAAG,MAAM,EAAgB;;QAGnC,IAAA,CAAA,cAAc,GAAG,MAAM,CAAgB,IAAI;2FAAC;;QAG5C,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAU,IAAI;kGAAC;;QAG5C,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAU,KAAK;qFAAC;AAEzB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAK5C,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,cAAc,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;QACtE,CAAC;iGAAC;;AAGF,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;YACnC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,iBAAiB,IAAI,+BAA+B;QAC5E,CAAC;iGAAC;;AAGF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;YAC5B,OAAO,QAAQ,GAAG,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE,GAAG,EAAE;QACzC,CAAC;sFAAC;;AAGF,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE;AAC9B,YAAA,OAAO,WAAW,KAAK,SAAS,GAAG,CAAA,kBAAA,EAAqB,SAAS,EAAE,GAAG,kBAAkB,CAAC;QAC3F,CAAC;8FAAC;;AAGF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/C,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAElD,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC;4FAAC;;AAGF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;QAClC,CAAC;2FAAC;;AAGF,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAChC,MAAM,OAAO,GAAa,EAAE;YAC5B,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnD,gBAAA,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;YAC3C;AACA,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC;8FAAC;AAEM,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAGrC,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;oBAC5C,IAAI,CAAC,mBAAmB,EAAE;AAC5B,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5D;QACF;IACF;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,yBAAyB,EAAE;IAClC;IAEQ,yBAAyB,GAAA;AAC/B,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,uBAAuB,CAAC;YAC5F,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9C;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;QAClC;AACA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;QACpC;IACF;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QACtC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;QAC3C;IACF;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7D,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;AAEA,IAAA,aAAa,CAAC,IAAkB,EAAA;QAC9B,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IACzC;AAEA,IAAA,gBAAgB,CAAC,IAAkB,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK;QACtB,IAAI,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,KAAK;QAC7B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;IACzC;IAEA,YAAY,CAAC,IAAkB,EAAE,KAAa,EAAA;QAC5C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AACvD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;AAE3D,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAC3C,MAAK;AACH,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;YACpC;AACA,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACrC,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B,CAAC,EAAE,IAAI,CAAC;QACV,CAAC,EACD,MAAK;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC,CACF;IACH;8GAxOW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,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,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,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,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,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCjC,0/HAiHA,EAAA,MAAA,EAAA,CAAA,iwOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpFY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FASX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,QAAA,EAAA,0/HAAA,EAAA,MAAA,EAAA,CAAA,iwOAAA,CAAA,EAAA;;;MEpBU,eAAe,GAAG,IAAI,cAAc,CAA0B,iBAAiB,EAAE;AAC5F,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,aAAa,EAAE,OAAO;AACtB,QAAA,KAAK,EAAE;KACR;AACF,CAAA;AAED,IAAI,iBAAiB,GAAG,CAAC;MA0BZ,oBAAoB,CAAA;AAyC/B,IAAA,WAAA,GAAA;AAxCiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;QAChC,IAAA,CAAA,aAAa,GAAG,SAAS,CAA+B,eAAe;0FAAC;AAEtE,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAA,OAAA,EAAU,EAAE,iBAAiB,EAAE;AAErD,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAU,KAAI,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,EAAE,CAAC;QAEnB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;oFAAC;QAC7C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAC/C,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK;0FAAC;QACzD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QAE/B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAC/C,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;kFAAC;AACtC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAA4B,IAAI,CAAC,MAAM,CAAC,KAAK;kFAAC;AAC3D,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAA4B,IAAI,CAAC,MAAM,CAAC,OAAO;oFAAC;AAC/D,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAqB,IAAI,CAAC,MAAM,CAAC,SAAS;sFAAC;QAC5D,IAAA,CAAA,IAAI,GAAG,KAAK,CAAe,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QACxD,IAAA,CAAA,aAAa,GAAG,KAAK,CAAwB,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO;0FAAC;AAElF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC;wFAAC;QAClG,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,SAAS;8FAAC;;;AAIjE,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC9B,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,QAAQ;YACjD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,UAAU;AACrD,YAAA,OAAO,SAAS;QAClB,CAAC;4FAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,gBAAA,OAAO,eAAe;YAChD,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,OAAO,OAAO;YAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,WAAW;QACjD,CAAC;kFAAC;QAGA,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACtC,gBAAA,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC;YACtE;AACF,QAAA,CAAC,CAAC;IACJ;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB;IACF;AAEU,IAAA,aAAa,CAAC,KAAoB,EAAA;QAC1C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AACrB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAC1E,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,MAAM,EAAE;QACf;IACF;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA,EAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,gBAAgB,CAAC,EAAwB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACvE,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC/D,IAAA,gBAAgB,CAAC,UAAmB,EAAA,EAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAE7E,IAAA,KAAK,GAAA,EAAW,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7D,IAAA,IAAI,GAAA,EAAW,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;8GA1EhD,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,k/DAjBpB,CAAC;AACV,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,oBAAoB;AACjC,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,0JCzCJ,88CA6CM,EAAA,MAAA,EAAA,CAAA,+xDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDSO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxBhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,EAAE,mBAGM,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC;AACV,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,oBAAsB;AACjC,4BAAA,KAAK,EAAE;AACR,yBAAA,CAAC,EAAA,IAAA,EACI;AACJ,wBAAA,2BAA2B,EAAE,YAAY;AACzC,wBAAA,wBAAwB,EAAE,WAAW;AACrC,wBAAA,0BAA0B,EAAE,aAAa;AACzC,wBAAA,wBAAwB,EAAE,oBAAoB;AAC9C,wBAAA,wBAAwB,EAAE,oBAAoB;AAC9C,wBAAA,0BAA0B,EAAE,+BAA+B;AAC3D,wBAAA,gCAAgC,EAAE,iBAAiB;AACnD,wBAAA,mBAAmB,EAAE,SAAS;AAC9B,wBAAA,qBAAqB,EAAE;AACxB,qBAAA,EAAA,QAAA,EAAA,88CAAA,EAAA,MAAA,EAAA,CAAA,+xDAAA,CAAA,EAAA;qGAIwE,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,qBAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,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,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,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,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,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,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,CAAA;;ME/C7E,oBAAoB,CAAA;AANjC,IAAA,WAAA,GAAA;QASE,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QAEvB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QACvB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,SAA4B,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EAC1C,SAAS,EAAE,CAAC,KAAsB,KAAI;AACpC,gBAAA,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3C,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAA,4BAAA,CAA8B,CAAC;AACpF,oBAAA,OAAO,SAAS;gBAClB;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,GACD;QACF,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAwB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EACnC,SAAS,EAAE,CAAC,KAAmB,KAAI;AACjC,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjD,oBAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAA,2BAAA,CAA6B,CAAC;AAChF,oBAAA,OAAO,QAAQ;gBACjB;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,GACD;QACF,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,YAAY;iFAAC;AAC1B,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK;0FAAU;QACpB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,QAAQ;sFAAC;QACnC,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,KAAK;6FAAC;QAE/B,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,OAAO,GAAG,MAAM,EAAW;AAEV,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAA,SAAA,EAAY,EAAE,oBAAoB,CAAC,SAAS,EAAE;AAEvD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE;AAC1B,YAAA,OAAO,QAAQ,GAAG,GAAG,QAAQ,CAAA,OAAA,CAAS,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,SAAS;QACpE,CAAC;qFAAC;AAEiB,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE;AAC1B,YAAA,OAAO,QAAQ,GAAG,GAAG,QAAQ,CAAA,QAAA,CAAU,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,UAAU;QACtE,CAAC;sFAAC;AAEO,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;AACtC,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,WAAW;QACnD,CAAC;kFAAC;AAEO,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,cAAc,GAAG,EAAE;QACtD,CAAC;2FAAC;AA2CH,IAAA;aA9FgB,IAAA,CAAA,SAAS,GAAG,CAAH,CAAK;IAqD7B,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAG;AAC3B,gBAAA,MAAM,QAAQ,GAAG,CAAC,KAAK;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3B,gBAAA,OAAO,QAAQ;AACjB,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB;IACF;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB;IACF;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,MAAM,EAAE;gBACb;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;oBACnB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,KAAK,EAAE;gBACd;gBACA;;IAEN;8GA9FW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,2qCCTjC,qwCA4CM,EAAA,MAAA,EAAA,CAAA,woFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDnCO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qwCAAA,EAAA,MAAA,EAAA,CAAA,woFAAA,CAAA,EAAA;;;AESjD;;;;;;;;;;;AAWG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAqE7C,IAAA;AAnEC;;;AAGG;AACH,IAAA,QAAQ,CACN,MAAmB,EACnB,SAAsB,EACtB,UAAkC,EAAE,EAAA;AAEpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;AAE3B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;;;QAG3C,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;AAE3D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;AAClC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC;AACvC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;AAEtC,QAAA,MAAM,KAAK,GAAG;YACZ,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM;YACtC,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;SACpC;QAED,QAAQ,SAAS;AACf,YAAA,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ,GAAG,KAAK;AACjF,YAAA,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,QAAQ;AACpF,YAAA,KAAK,MAAM;gBACT,OAAO,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,MAAM;AAClF,YAAA,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO;;IAEvF;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,aAAa,CACX,MAAmB,EACnB,SAAiB,EACjB,UAAkC,EAAE,EAAA;AAEpC,QAAA,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,SAAS;AAE3C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;AAC5D,QAAA,OAAO,KAAK,GAAG,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,GAAG,YAAY;IAC1D;AAEQ,IAAA,MAAM,CAAC,KAAyB,EAAA;AACtC,QAAA,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO;IACvF;8GArEW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AClBlC;;;;;;;;;;;;;;;;AAgBG;MAIU,wBAAwB,CAAA;AAQnC,IAAA,WAAA,GAAA;AAPiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;QAG1D,IAAA,CAAA,eAAe,GAAG,MAAM,EAAc;AAU9B,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAiB,KAAU;AAC7D,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,YAAA,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACvD,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC;AACF,QAAA,CAAC;QAZC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAC3B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CACjE;IACH;8GAdW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;;ACND;;;;;;;;;;;AAWG;MAEU,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACpC,IAAA,CAAA,KAAK,GAAuB,IAAI;QAChC,IAAA,CAAA,KAAK,GAAG,CAAC;AAmGlB,IAAA;;IAhGC,MAAM,CAAC,GAAyB,EAAE,GAAqB,EAAA;AACrD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAC3C,OAAO,CAAC,aAAa,EAAE;AAEvB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAmB;AACzC,QAAA,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAuB,CAAC,YAAY,WAAW,CAAC;AAC1E,YAAA,KAAK,CAAC,CAAC,CAAC,CAAgB;AAC1B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,EAAE;QAEZ,OAAO;YACL,KAAK;YACL,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC;YACxE,mBAAmB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,KAC1C,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC;YACzD,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;SACnC;IACH;AAEQ,IAAA,QAAQ,CACd,KAAkB,EAClB,MAAmB,EACnB,IAAsB,EACtB,GAAW,EAAA;AAEX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AACzB,QAAA,KAAK,CAAC,QAAQ,GAAG,OAAO;QACxB,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,IAAI;QAC7B,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,IAAI;AAE/B,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY;AACjC,YAAA,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI;AACzD,YAAA,KAAK,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI;QAC1D;aAAO;YACL,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA,EAAA,CAAI;YACpC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI;QAChF;IACF;AAEQ,IAAA,mBAAmB,CACzB,KAAkB,EAClB,MAAmB,EACnB,SAAiB,EACjB,GAAW,EAAA;AAEX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,QAAA,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AACzB,QAAA,KAAK,CAAC,QAAQ,GAAG,OAAO;AAExB,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY;AACjC,YAAA,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI;AACzD,YAAA,KAAK,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI;QAC1D;aAAO;YACL,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA,EAAA,CAAI;YACpC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI;QAChF;;AAGA,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,YAAA,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI;QACjE;aAAO;YACL,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,IAAI;QAC/B;IACF;AAEQ,IAAA,MAAM,CAAC,OAAiC,EAAA;QAC9C,OAAO,CAAC,OAAO,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;IACF;IAEQ,WAAW,GAAA;QACjB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAChD,QAAA,KAAK,CAAC,SAAS,GAAG,mBAAmB;QACrC,KAAK,CAAC,KAAK,CAAC,OAAO;AACjB,YAAA,4EAA4E;QAC9E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,OAAO,KAAK;IACd;8GArGW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLrB,oBAAoB,CAAA;IAyDvB,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,MAAM;AAChC,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,WAAA,GAAA;AA9DQ,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACtB,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACnD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;;;QAIxC,IAAA,CAAA,OAAO,GAAG,SAAS,CAAuB,SAAS;oFAAC;QAC7D,IAAA,CAAA,SAAS,GAAwB,IAAI;QAC5B,IAAA,CAAA,iBAAiB,GAAG,MAAY,IAAI,CAAC,UAAU,EAAE;;QAGlE,IAAA,CAAA,UAAU,GAAG,KAAK,CAAqB,QAAQ;uFAAC;QAChD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAkB,SAAS;oFAAC;QAC3C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAe,QAAQ;iFAAC;QACpC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAoB,cAAc;sFAAC;QACpD,IAAA,CAAA,KAAK,GAAG,KAAK,CAAoB,EAAE;kFAAC;QACpC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,eAAe;kFAAC;AAC9B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;QAC3B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK;oGAAU;;QAG9B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;;QAGf,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK;yFAAC;QAC5B,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAyB,IAAI;+FAAC;AACzD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC;6FAAC;;;QAIlB,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAoB,cAAc;8FAAC;;QAGhF,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAmB;QACpC,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;;QAGvB,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE;mFAAC;QAC5C,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE;yFAAC;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;uFAAC;AAE7D,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrB,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,sBAAsB;YAC1E;AACA,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,sBAAsB;QACnD,CAAC;8FAAC;QAEF,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;kFAAC;;;;AAYrC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,wBAAwB,CAAC;QACrD,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,IAAG;AACzD,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;YAC1C,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE;YACtD,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;YAChC,GAAG,CAAC,WAAW,EAAE;YACjB,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAAE;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,IAAI,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CAAC,WAAW;QACrF,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAC9D,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC1D;IAEQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CAAC,WAAW;QACrF,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACjE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAC9C;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAuB;AAC7E,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;AAC9E,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY;AAChD,YAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW;AAC/C,SAAA,CAAsB;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3D;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,KAAK,EAAE,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAClB,IAAI,CAAC,SAAS,EAAE;YAClB;iBAAO;gBACL,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACpB;QACF;IACF;AAEA,IAAA,UAAU,CAAC,IAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB;IACF;AAEA,IAAA,oBAAoB,CAAC,KAAoB,EAAA;QACvC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AAEF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,cAAc,EAAE;gBACvB;qBAAO;oBACL,IAAI,CAAC,aAAa,EAAE;gBACtB;gBACA;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,cAAc,EAAE;gBACvB;qBAAO;oBACL,IAAI,CAAC,iBAAiB,EAAE;gBAC1B;gBACA;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,KAAK,EAAE;gBACd;gBACA;;IAEN;AAEA,IAAA,iBAAiB,CAAC,KAAoB,EAAE,IAAqB,EAAE,MAAc,EAAA;AAC3E,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrB;AAEF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;gBACpB;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,iBAAiB,EAAE;gBACxB;AAEF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AAEF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;gBACpB;AAEF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,KAAK,EAAE;gBACZ;AAEF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ;;IAEN;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AAExB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC5C,QAAA,IAAI,SAAS,GAAG,YAAY,GAAG,CAAC;AAEhC,QAAA,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE;AAC7D,YAAA,SAAS,EAAE;QACb;AAEA,QAAA,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;YAC7B,SAAS,GAAG,CAAC;AACb,YAAA,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE;AAC7D,gBAAA,SAAS,EAAE;YACb;QACF;AAEA,QAAA,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;AACpC,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAClC;IACF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AAExB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC5C,QAAA,IAAI,aAAa,GAAG,YAAY,GAAG,CAAC;QAEpC,OAAO,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE;AAC3D,YAAA,aAAa,EAAE;QACjB;AAEA,QAAA,IAAI,aAAa,GAAG,CAAC,EAAE;AACrB,YAAA,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;YAChC,OAAO,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE;AAC3D,gBAAA,aAAa,EAAE;YACjB;QACF;AAEA,QAAA,IAAI,aAAa,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACtC;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE;AACrD,YAAA,KAAK,EAAE;QACT;AACA,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC9B;IACF;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;QAC5B,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE;AAC3C,YAAA,KAAK,EAAE;QACT;AACA,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC9B;IACF;AAEQ,IAAA,gBAAgB,CAAC,KAAa,EAAA;QACpC,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAC9C,CAAA,2BAAA,EAA8B,KAAK,CAAA,EAAA,CAAI,CACb;YAC5B,IAAI,EAAE,KAAK,EAAE;AACf,QAAA,CAAC,CAAC;IACJ;8GA7SW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,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,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,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,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BjC,22FA+EM,EAAA,MAAA,EAAA,CAAA,g0LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvDM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,OAAA,EACf,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,cAAA,EAC/B,CAAC,wBAAwB,CAAC,EAAA,QAAA,EAAA,22FAAA,EAAA,MAAA,EAAA,CAAA,g0LAAA,CAAA,EAAA;+FAWiB,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,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,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,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,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,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,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,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,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,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AER/D,MAAM,YAAY,GAAG;AAC1B,IAAA,YAAY,EAAE,0BAA0B;AACxC,IAAA,YAAY,EAAE;;;MCmBH,iBAAiB,CAAA;aAeb,IAAA,CAAA,MAAM,GAAG,CAAH,CAAK;IA4DlB,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;QACpC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,OAAO;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;QACpC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;AACpC,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,WAAA,GAAA;AApFiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,yBAAyB,CAAC;;;;QAKnD,IAAA,CAAA,cAAc,GAAG,SAAS,CAAuB,gBAAgB;2FAAC;QAC3E,IAAA,CAAA,SAAS,GAAwB,IAAI;QAC5B,IAAA,CAAA,iBAAiB,GAAG,MAAY,IAAI,CAAC,UAAU,EAAE;AAGzD,QAAA,IAAA,CAAA,OAAO,GAAG,CAAA,UAAA,EAAa,iBAAiB,CAAC,MAAM,EAAE,EAAE;QAEnD,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE;kFAAC;QACzB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QACvB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QACtB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QAE/B,IAAA,CAAA,OAAO,GAAG,KAAK,CAAe,UAAU;oFAAC;QACzC,IAAA,CAAA,IAAI,GAAG,KAAK,CAAY,QAAQ;iFAAC;QACjC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;QACxB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI;sFAAC;QACvB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAY,MAAM;iFAAC;QAC/B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,EAAE;wFAAC;QACvB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE;kFAAC;QACjB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI;sFAAC;AACtC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;AAC3B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;QACzB,IAAA,CAAA,KAAK,GAAG,KAAK,CAA4B,IAAI;kFAAC;QAC9C,IAAA,CAAA,OAAO,GAAG,KAAK,CAA4B,IAAI;oFAAC;QAChD,IAAA,CAAA,IAAI,GAAG,KAAK,CAA4B,IAAI;iFAAC;QAE7C,IAAA,CAAA,WAAW,GAAG,KAAK,CAAoD,EAAE;wFAAC;QAC1E,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAqB;AAC7C,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,YAAY,EAAE;AACf,SAAA;+FAAC;QAEe,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK;+FAAC;QAClC,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK;0FAAC;QAC7B,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAW,EAAE;sGAAC;AACxD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC;mGAAC;QAC3B,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,KAAK;kGAAC;QAE9C,IAAA,CAAA,aAAa,GAAkB,IAAI;QACnC,IAAA,CAAA,iBAAiB,GAAkB,IAAI;QAE/C,IAAA,CAAA,UAAU,GAAG,MAAM,EAAQ;QAC3B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;QAC1B,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAU;AAEnC,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC;4FAAC;QACpG,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,yBAAyB,EAAE;gGAAC;QACtE,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE;oFAAC;QAC9C,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE;4FAAC;AAE9D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,EAAE;AAC9B,gBAAA,OAAO,IAAI,CAAC,eAAe,EAAE,GAAG,MAAM,GAAG,UAAU;YACrD;AACA,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;QACpB,CAAC;0FAAC;AAEF,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;8FAAC;QAC1F,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY;gGAAC;QAEpH,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;kFAAC;AA6D/B,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAS,KAAI,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,EAAE,CAAC;AAjD1B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,IAAI,CAAC,aAAa;AAAE,gBAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;YACxD,IAAI,IAAI,CAAC,iBAAiB;AAAE,gBAAA,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAChE,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;;IAGQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,UAAU,EAAE;;gBAChC,IAAI,CAAC,SAAS,EAAE;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YACzB,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;AACjC,QAAA,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS;YAAE;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,IAAI,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CAAC,WAAW;;QAErF,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAC9D,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC1D;IAEQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CAAC,WAAW;QACrF,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACjE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACvB;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,MAAM,MAAM,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CACzE,gBAAgB,CACK;AACvB,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE;AAC3D,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY;AACjD,SAAA,CAAqB;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C;AAKA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,EAAE;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,gBAAgB,CAAC,EAAuB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACtE,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAE/D,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAElB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;QACtC;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAEtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE;AAC3E,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAC7B;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAEtB,IAAI,IAAI,CAAC,aAAa;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAAE;AAE7B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAElD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjF;AACF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACjF;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE;oBAC1D,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC;AAC1C,oBAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,wBAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;oBACtC;gBACF;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,SAAS,EAAE;gBAChB;;IAEN;AAEA,IAAA,qBAAqB,CAAC,UAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C;IAEU,eAAe,GAAA;AACvB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC;IACvE;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;QACpE,OAAO,EAAE,KAAK,EAAE;IAClB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE;IACd;AAEQ,IAAA,0BAA0B,CAAC,KAAa,EAAA;QAC9C,IAAI,IAAI,CAAC,iBAAiB;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAChE,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,MAAK;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC/B,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC;IAC5C;IAEQ,MAAM,iBAAiB,CAAC,KAAa,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAEnC,QAAA,IAAI;YACF,IAAI,OAAO,GAAa,EAAE;AAC1B,YAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,gBAAA,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;YACjC;AAAO,iBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAClC,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/E;AAEA,YAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC;YAC3C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE;QAClB;QAAE,OAAO,KAAK,EAAE;;;AAGd,YAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;QACjE;IACF;8GAlRW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,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,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,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,wCAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,SAAA,EAxBjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCH,6sHAyGM,2iHDhFM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA2BX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7B7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EACZ,CAAC,YAAY,CAAC,EAAA,SAAA,EAGZ;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,iBAAmB;AAC9B,4BAAA,KAAK,EAAE;AACR;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,oBAAoB,EAAE,aAAa;AACnC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,eAAe,EAAE,WAAW;AAC5B,wBAAA,iBAAiB,EAAE,aAAa;AAChC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,wBAAwB,EAAE,eAAe;AACzC,wBAAA,sBAAsB,EAAE,sCAAsC;AAC9D,wBAAA,kBAAkB,EAAE,0BAA0B;AAC9C,wBAAA,gBAAgB,EAAE,wBAAwB;AAC3C,qBAAA,EAAA,QAAA,EAAA,6sHAAA,EAAA,MAAA,EAAA,CAAA,o/GAAA,CAAA,EAAA;sGAaiE,gBAAgB,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,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,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,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,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,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,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,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,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,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,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,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,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,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,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtC7E,MAAM,eAAe,GAAG;AAC7B,IAAA,oBAAoB,EAAE,YAAY;AAClC,IAAA,uBAAuB,EAAE,GAAG;;;MCyBjB,oBAAoB,CAAA;aAMhB,IAAA,CAAA,MAAM,GAAG,CAAH,CAAK;AAsF1B,IAAA,WAAA,GAAA;AAzFiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC5C,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAGvC,QAAA,IAAA,CAAA,UAAU,GAAG,CAAA,aAAA,EAAgB,oBAAoB,CAAC,MAAM,EAAE,EAAE;QAE5D,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE;kFAAC;QACzB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK;oFAAC;QAExC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAkB,UAAU;oFAAC;QAC5C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAe,QAAQ;iFAAC;QACpC,IAAA,CAAA,MAAM,GAAG,KAAK,CAAiB,UAAU;mFAAC;QAC1C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,CAAC;iFAAC;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAqB,SAAS;sFAAC;QAChD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAU,KAAK;+FAAC;QAC1C,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK;sFAAC;QACjC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,IAAI;sFAAC;QAChC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE;kFAAC;QACzB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE;wFAAC;QAC/B,IAAA,CAAA,IAAI,GAAG,KAAK,CAA4B,IAAI;iFAAC;QAC7C,IAAA,CAAA,KAAK,GAAG,KAAK,CAA4B,IAAI;kFAAC;QAC9C,IAAA,CAAA,OAAO,GAAG,KAAK,CAA4B,IAAI;oFAAC;QAChD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI;sFAAC;QAErB,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,KAAK;0FAAC;QAEvD,IAAA,CAAA,UAAU,GAAG,MAAM,EAAQ;QAC3B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;QAK1B,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE;oFAAC;QAE9C,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAiB,MACzC,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;4FACzC;AAED,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,OAAO;YAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM;AACpC,YAAA,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE;SACtB,CAAC;2FAAC;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;YAC5B,IAAI,GAAG,KAAK,SAAS;AAAE,gBAAA,OAAO,KAAK;YACnC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,GAAG,GAAG;QAC5C,CAAC;wFAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;YAC5B,IAAI,GAAG,KAAK,SAAS;AAAE,gBAAA,OAAO,KAAK;YACnC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,IAAI,GAAG;QAC7C,CAAC;sFAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CACxB,MAAM,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS;4FAClE;AAED,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CACjB,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;qFAC3C;QAED,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAC1B,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI;8FACrE;AAED,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YAC1B,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,QAAQ;YACnD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,UAAU;YACvD,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,OAAO;AACjD,YAAA,OAAO,IAAI;QACb,CAAC;wFAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,OAAO;YACnC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;YACpC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,SAAS;QAClB,CAAC;kFAAC;AAEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,eAAe,CAAC,oBAAoB;AAalD,QAAA,IAAA,CAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;QAXtC,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACnB,cAAc,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5C;AACF,QAAA,CAAC,CAAC;IACJ;AAKA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,EAAE;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,cAAc,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C;IACF;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA6B;AAClD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE;IACzC;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;AAC1C,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;QACxB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAA,EAAA,CAAI;IAC1C;IAEU,eAAe,GAAA;AACvB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,kBAAkB,CAAC;IAC1E;8GAhKW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,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,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,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,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,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,aAAA,EAAA,YAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAvBpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,oBAAoB;AACjC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCH,6vFA+EA,i4FDrDY,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA0BX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA5BhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,OAAA,EACf,CAAC,YAAY,CAAC,EAAA,SAAA,EAGZ;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,oBAAsB;AACjC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,oBAAoB,EAAE,aAAa;AACnC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,kBAAkB,EAAE,0BAA0B;AAC9C,wBAAA,gBAAgB,EAAE,wBAAwB;AAC1C,wBAAA,eAAe,EAAE,YAAY;AAC7B,wBAAA,iBAAiB,EAAE,4BAA4B;AAC/C,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,mBAAmB,EAAE,YAAY;AACjC,wBAAA,oBAAoB,EAAE,eAAe;AACtC,qBAAA,EAAA,QAAA,EAAA,6vFAAA,EAAA,MAAA,EAAA,CAAA,00FAAA,CAAA,EAAA;;sBAsCA,SAAS;uBAAC,aAAa;;;MEvEb,cAAc,GAAG,IAAI,cAAc,CAAyB,gBAAgB,EAAE;AACzF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,SAAS,EAAE,GAAG;AACd,QAAA,SAAS,EAAE,GAAG;AACd,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,QAAQ,EAAE,IAAI;KACf;AACF,CAAA;MAkBY,mBAAmB,CAAA;AA6B9B,IAAA,WAAA,GAAA;AA5BQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAA4B;AAC1D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACtB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,yBAAyB,CAAC;QAEpE,IAAA,CAAA,OAAO,GAAG,KAAK,CAAiB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM;oFAAC;QAC9D,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAChE,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG;sFAAC;QACvD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG;sFAAC;QACvD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG;qFAAC;QACrD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI;qFAAC;QAEvD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ;oFAAU;QAClC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;AAChC,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,IAAI,CAAC,gBAAgB,EAAE;+EAAC;QAE3C,IAAA,CAAA,KAAK,GAAG,MAAM,EAAQ;QACtB,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QAEvB,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;QACzB,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAkB,KAAK;6FAAC;QAEzC,IAAA,CAAA,WAAW,GAAyC,IAAI;QACxD,IAAA,CAAA,WAAW,GAAyC,IAAI;QACxD,IAAA,CAAA,cAAc,GAA0B,IAAI;QAEpD,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,EAAE,EAAE,CAAA,QAAA,CAAU;sFAAC;QAClD,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,EAAE,EAAE,CAAA,QAAA,CAAU;sFAAC;QAGhD,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACnB;iBAAO;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACpB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;AAC5C,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBACpB,IAAI,CAAC,cAAc,EAAE;gBACvB;AACF,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC5D;IACF;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;QAEA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;oBACnB,IAAI,CAAC,cAAc,EAAE;gBACvB;qBAAO;oBACL,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC5C;AACA,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,YAAA,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACtB;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;QAEA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAK;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,YAAA,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACtB;IACF;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;IAEQ,cAAc,GAAA;;;QAGpB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC5E,YAAA,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC;AAC5C,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC,CACH;IACH;IAEQ,gBAAgB,GAAA;AACtB,QAAA,OAAO,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IACjE;8GA/HW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,w+CC5ChC,8wBAyBA,EAAA,MAAA,EAAA,CAAA,kvFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDmBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,cAAc,EAAE,QAAQ;AACxB,wBAAA,cAAc,EAAE,QAAQ;AACxB,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,YAAY,EAAE,QAAQ;AACtB,wBAAA,kBAAkB,EAAE,iBAAiB;AACrC,wBAAA,iBAAiB,EAAE,gBAAgB;AACnC,wBAAA,kBAAkB,EAAE,YAAY;AACjC,qBAAA,EAAA,QAAA,EAAA,8wBAAA,EAAA,MAAA,EAAA,CAAA,kvFAAA,CAAA,EAAA;;;ME9BU,gBAAgB,CAAA;AA2B3B,IAAA,WAAA,GAAA;AA1BiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE5C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAW,UAAU;iFAAC;QAClC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAc,SAAS;oFAAC;QACvC,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK;wFAAC;QAC1B,IAAA,CAAA,UAAU,GAAG,KAAK,CAAyB;AACzC,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,QAAQ,EAAE;AACX,SAAA;uFAAC;QAEF,IAAA,CAAA,KAAK,GAAG,KAAK,CAAgB,EAAE;kFAAC;QAEhC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;QACxB,IAAA,CAAA,eAAe,GAAG,KAAK,CAAW,EAAE;4FAAC;QAErC,IAAA,CAAA,SAAS,GAAG,MAAM,EAAe;QACjC,IAAA,CAAA,aAAa,GAAG,MAAM,EAA4C;AAExD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;6FAAC;QAE5E,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;kFAAC;AAEvC,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU;wFAAC;IAE7D;IAEP,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,WAAW;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE;AAAE,YAAA,OAAO,aAAa;AAC5C,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,eAAe,CAAC,IAAiB,EAAE,KAAY,EAAE,OAAgB,EAAA;QAC/D,IAAI,OAAO,EAAE;YACX,KAAK,CAAC,eAAe,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B;IAEA,UAAU,CAAC,IAAiB,EAAE,KAAa,EAAA;QACzC,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;YACzB,KAAK,EAAE,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;AACjC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC7C;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC;IACF;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C;AAEA,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;QACtC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD;IACF;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;QAC/D;IACF;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;QAC/D;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD;IACF;IAEA,SAAS,GAAA;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;IAClC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B;AAEQ,IAAA,0BAA0B,CAAC,KAAoB,EAAA;QACrD,MAAM,GAAG,GAAa,EAAE;AACxB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACzB,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACjB,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7D;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,YAAY,CAAC,IAAiB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;QACrD;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;YACzB,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAA,CAAA,CAAG;QACpD;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAE,IAAiB,EAAE,KAAa,EAAA;QAClE,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC5B;AAEF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBACzB;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAC7B;AAEF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBACnD,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC9B;gBACA;AAEF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBAClD,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC9B;gBACA;AAEF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AAEF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;gBACpB;AAEF,YAAA,KAAK,QAAQ;gBACX,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;oBAC3C,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,cAAc,EAAE;gBACvB;gBACA;;IAEN;AAEQ,IAAA,aAAa,CAAC,YAAoB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;AACxE,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;IACrC;AAEQ,IAAA,iBAAiB,CAAC,YAAoB,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;QAC5E,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC1C;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7B;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD;IAEQ,gBAAgB,CAAC,KAAa,EAAE,SAAiB,EAAA;AACvD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;QAC1B;AAAO,aAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YAChC,KAAK,GAAG,CAAC;QACX;AAEA,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC3C,UAAU,CAAC,MAAK;AACd,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAC,EAAE,CAAA,EAAA,CAAI,CAAgB;gBAC3F,IAAI,EAAE,KAAK,EAAE;AACf,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS;AACnC,YAAA,IAAI,SAAS,KAAK,KAAK,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;YAC7C;QACF;IACF;8GApNW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,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,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,OAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ7B,gsVAuPA,EAAA,MAAA,EAAA,CAAA,s4MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhPY,YAAY,sMAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKhC,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;+BACE,UAAU,EAAA,OAAA,EACX,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gsVAAA,EAAA,MAAA,EAAA,CAAA,s4MAAA,CAAA,EAAA;;;AEIjD;;;;;;;;;;;;;;;;;AAiBG;MAIU,qBAAqB,CAAA;AAqBhC,IAAA,WAAA,GAAA;AApBiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;QAG1D,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,IAAI;yFAAC;;QAGnC,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAU,IAAI;gGAAC;AAEnD;;;AAGG;QACM,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAU,IAAI;kGAAC;QAE7C,IAAA,CAAA,iBAAiB,GAAuB,IAAI;QAC5C,IAAA,CAAA,MAAM,GAAG,KAAK;QAGpB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE;YACrB,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,QAAQ,EAAE;YACjB;iBAAO;gBACL,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7D;AAGU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;YAAE;AAEzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC9C,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;;YAEnB,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;AAExD,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK,EAAE;gBAChC,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,KAAK,EAAE;YACd;QACF;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,IAAI,EAAE;gBAC/B,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,KAAK,EAAE;YACf;QACF;IACF;IAEQ,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,MAAM;YAAE;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAmC;AAE1E,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAAE;;QAGnC,eAAe,CACb,MAAK;YACH,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAClE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;YACzC;QACF,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;IACH;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAC1B;AAEQ,IAAA,YAAY,CAAC,SAAkB,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB;AACrC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAE7B,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;YAChF;QACF;QAEA,IAAI,SAAS,EAAE;YACb,MAAM,CAAC,KAAK,EAAE;QAChB;aAAO;AACL,YAAA,eAAe,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpE;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG;YACf,wBAAwB;YACxB,QAAQ;YACR,uBAAuB;YACvB,wBAAwB;YACxB,0BAA0B;YAC1B,iCAAiC;AAClC,SAAA,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;AAMZ,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,QAAQ,CAAC,CAChE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C;8GAzHW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;;sBAoCE,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AC5DrC;;;;;;;;;;;;;;;;;AAiBG;MAEU,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;;QAGmB,IAAA,CAAA,UAAU,GAAG,IAAI;;QAEjB,IAAA,CAAA,IAAI,GAAG,EAAE;QAElB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACH,IAAA,CAAA,KAAK,GAAG,MAAM,CAAoB,EAAE;kFAAC;;QAG7C,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;wFAAC;AAyB3D,IAAA;AAvBC;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;IAC1E;;AAGA,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;QACnB;IACF;;AAGA,IAAA,SAAS,CAAC,EAAU,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;AAC3B,QAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;IAC9D;8GAlCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACFlC;;;;;;;;;;;;;;;;AAgBG;MACU,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,OAAO;AACrB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,WAAW,EAAE;KACd;AACF,CAAA;AAED;;;;;AAKG;MAIU,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AACrC;;;AAGG;QACK,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoB,EAAE;yFAAC;AAEpD;;AAEG;QACM,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM;8FAAC;AAEvE;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;YAClC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;QAC7D,CAAC;2FAAC;AAkDH,IAAA;AAhDC;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,OAAO,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;IAC/D;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,EAAU,EAAA;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAC7B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,CAC/C;IACH;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,EAAU,EAAA;QACnB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC;IAC9E;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,EAAU,EAAA;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzC;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,EAAU,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE;IACrC;8GApEW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,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,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAwED;;;;;;;;;;;;;;;;;;;AAmBG;MAQU,iBAAiB,CAAA;AAsJ5B,IAAA,WAAA,GAAA;AArJiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;QACjD,IAAA,CAAA,aAAa,GAAyB,IAAI;;QAE/B,IAAA,CAAA,MAAM,GAAG,MAAM,CAAgB,IAAI;mFAAC;QAE/C,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAEf,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,KAAK;2FAAC;QAC9B,IAAA,CAAA,gBAAgB,GAAG,GAAG;AAEvC;;AAEG;QACH,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,KAAK;iFAAC;AAEnB;;AAEG;QACH,IAAA,CAAA,IAAI,GAAG,KAAK,CAAY,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;AAErD;;AAEG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;sFAAC;AAEhD;;AAEG;QACH,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI;4FAAC;AAE5D;;AAEG;QACH,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI;0FAAC;AAExD;;AAEG;QACH,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI;0FAAC;AAExD;;AAEG;QACH,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI;uFAAC;AAElD;;AAEG;QACH,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,aAAa;kFAAC;AAE5B;;AAEG;QACH,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAO;yFAAC;AAEzD;;AAEG;QACH,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,SAAS;yFAAC;AAE3D;;AAEG;QACH,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,QAAQ;wFAAC;AAExD;;;;;;;;AAQG;QACH,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,EAAE;uFAAC;AAEtB;;;;;;;;AAQG;QACH,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,EAAE;0FAAC;AAEzB;;AAEG;QACH,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;AAEvB;;AAEG;QACH,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;AAE1B;;AAEG;QACc,IAAA,CAAA,YAAY,GAAG,YAAY,CAAa,aAAa;yFAAC;AAEvE;;AAEG;QACc,IAAA,CAAA,aAAa,GAAG,SAAS,CAAa,eAAe;0FAAC;AAEvE;;AAEG;AACc,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,KAAoB,KAAI;AACxD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE;YAC5B,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACpF,IAAI,CAAC,WAAW,EAAE;YACpB;AACF,QAAA,CAAC;AAED;;AAEG;QACH,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;4FAAC;AAEvD;;AAEG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,QAAQ;kFAAC;AAEvD;;AAEG;QACH,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,OAAA,CAAS;0FAAC;AAExD;;AAEG;QACH,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,YAAA,CAAc;+FAAC;AAElE;;AAEG;QACH,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE;2FAAC;QAGpD,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;gBACf,IAAI,CAAC,WAAW,EAAE;YACpB;iBAAO;gBACL,IAAI,CAAC,YAAY,EAAE;YACrB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA;;AAEG;IACK,WAAW,GAAA;QACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,iBAAiB,EAAE;;;IAG1B;AAEA;;AAEG;IACK,YAAY,GAAA;QAClB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;;IAGQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QACtC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAClE;IACF;AAEA;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QACtC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE;YAClD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;QACtD;IACF;AAEA;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;QAC/E;IACF;AAEA;;AAEG;IACK,iBAAiB,GAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;IAC/D;AAEA;;AAEG;IACK,oBAAoB,GAAA;QAC1B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;IAClE;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;AAEA;;;AAGG;AACH,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACnC,IACE,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACzC,YAAA,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EACpC;YACA,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA;;;AAGG;IACK,eAAe,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AAE9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EAAE;YAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;YACzD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAA,EAAG,cAAc,CAAA,EAAA,CAAI,CAAC;QACpE;QACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpD;AAEA;;AAEG;IACK,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACvD;AAEA;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;QACrC,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAChE,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC;AACrE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;IACF;AAEA;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACjF,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAC9E,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;IACF;AAEA;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,mBAAmB,EAAE;IAC5B;8GA7UW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,mnECpK9B,k5FAkFA,EAAA,MAAA,EAAA,CAAA,yyHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED6EY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,4RAAE,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKtD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACE,WAAW,EAAA,OAAA,EACZ,CAAC,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,EAAA,eAAA,EAGjD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,k5FAAA,EAAA,MAAA,EAAA,CAAA,yyHAAA,CAAA,EAAA;AA8GU,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,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,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,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,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,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,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,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,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,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,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,aAAa,uEAKf,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEtQ3D,iBAAiB,GAAG,IAAI,cAAc,CACjD,mBAAmB,EACnB;AACE,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,gBAAgB,EAAE,KAAK;QACvB,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KACrC,CAAC;AACH,CAAA;MAUU,sBAAsB,CAAA;aAElB,IAAA,CAAA,SAAS,GAAG,CAAH,CAAK;AAQ7B,IAAA,WAAA,GAAA;AATQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEzB,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAA,WAAA,EAAc,EAAE,sBAAsB,CAAC,SAAS,EAAE;QAE9E,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,CAAC;wFAAC;QACtB,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,CAAC;uFAAC;QACrB,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,EAAE,yFAAI,KAAK,EAAE,cAAc,EAAA,CAAG;AACxD,QAAA,IAAA,CAAA,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB;yFAAC;AAiC1C,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAK,QAA2B,4EACpE,SAAS,EAAE,CAAC,KAAqB,KAAoB;AACnD,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjD,oBAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,KAAK,CAAA,2BAAA,CAA6B,CAAC;AAClF,oBAAA,OAAO,QAAQ;gBACjB;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,GACD;AACO,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAK,SAA+B,+EAC9E,SAAS,EAAE,CAAC,KAAwB,KAAuB;AACzD,gBAAA,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3C,oBAAA,OAAO,CAAC,IAAI,CAAC,qCAAqC,KAAK,CAAA,4BAAA,CAA8B,CAAC;AACtF,oBAAA,OAAO,SAAS;gBAClB;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,GACD;QACO,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI;0FAAC;QACxD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI;yFAAC;QACtD,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC;4FAAC;QACzD,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK;6FAAC;QAC/D,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gGAAC;QACtD,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,OAAO;uFAAC;QAC3B,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,UAAU;0FAAC;QACjC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,MAAM;sFAAC;QACzB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,MAAM;sFAAC;QACzB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,MAAM;sFAAC;QACzB,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,OAAO;uFAAC;QAC3B,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,gBAAgB;8FAAC;AAC3C,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK;0FAAU;QACpB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,uBAAuB;sFAAC;QAE3D,IAAA,CAAA,UAAU,GAAG,MAAM,EAAU;QAC7B,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAU;QACrC,IAAA,CAAA,eAAe,GAAG,MAAM,EAAsC;AAE3C,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE;AAC1B,YAAA,OAAO,QAAQ,IAAI,IAAI,CAAC,QAAQ;QAClC,CAAC;yFAAC;AAEiB,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,KAAK,GAAa,EAAE;AAC1B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;AAC1D,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YAE3E,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE;AAC5C,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACvD;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACf;AAEA,YAAA,OAAO,KAAK;QACd,CAAC;kFAAC;QAEiB,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;kFAAC;AAEvC,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;sFAAC;QAClE,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;0FAAC;QACtD,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;wFAAC;AACtD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE;uFAAC;AAErE,QAAA,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;YACzD,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAC,WAAW,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,UAAU,EAAE,CAAA,CAAE;QAC9D,CAAC;oGAAC;QAlGA,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,OAAO,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAA,eAAA,CAAiB,CAAC;AAC5E,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,YAAA,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC5C,gBAAA,OAAO,CAAC,IAAI,CAAC,yCAAyC,OAAO,CAAA,eAAA,CAAiB,CAAC;AAC/E,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB;iBAAO,IAAI,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,CAAC,EAAE;gBACxC,OAAO,CAAC,IAAI,CACV,CAAA,8BAAA,EAAiC,OAAO,CAAA,sBAAA,EAAyB,KAAK,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAE,CAC/F;AACD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;AACzC,YAAA,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAClD,gBAAA,OAAO,CAAC,IAAI,CAAC,6CAA6C,UAAU,CAAA,eAAA,CAAiB,CAAC;YACxF;AACF,QAAA,CAAC,CAAC;IACJ;IAwEQ,QAAQ,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;QAC5C,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,MAAM;AAC3D,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACzE,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B;aAAO,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,QAAQ,IAAI,CAAA,qBAAA,EAAwB,IAAI,CAAC,UAAU,EAAE,CAAA,CAAA,CAAG;AACjE,aAAA,CAAC;QACJ;IACF;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClB;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAClC;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACvC;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACvC;IACF;AAEA,IAAA,oBAAoB,CAAC,KAAY,EAAA;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAE,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC;AACjE,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,YAAY,EAAE;gBACnB;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;gBACpB;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,YAAY,EAAE;gBACnB;;IAEN;8GA9KW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,mBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCnC,+8FAkGM,EAAA,MAAA,EAAA,CAAA,wjIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlEM,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+8FAAA,EAAA,MAAA,EAAA,CAAA,wjIAAA,CAAA,EAAA;;;MEhCpC,kBAAkB,GAAG,IAAI,cAAc,CAA6B,oBAAoB,EAAE;AACrG,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,aAAa,EAAE;KAChB;AACF,CAAA;MAkBY,uBAAuB,CAAA;AA+ClC,IAAA,WAAA,GAAA;AA9CQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC;;QAG3C,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;kFAAC;QACrC,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG;gFAAC;;QAGnC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAqB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;oFAAC;QACrE,IAAA,CAAA,IAAI,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QAC3D,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;sFAAC;QAChD,IAAA,CAAA,IAAI,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS;iFAAC;AAC5D,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;QACvB,IAAA,CAAA,aAAa,GAAG,KAAK,CAA2B,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK;0FAAC;AACnF,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;;QAG3B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;QAC1B,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAU;;AAGnC,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;YACzB,IAAI,MAAM,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC;YACzB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC;QACzD,CAAC;uFAAC;QAEF,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,eAAe;4FAAC;AACjE,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU;sFAAC;QACnF,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU;uFAAC;AAEvD,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;YACpC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AAC7C,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,YAAY;YACrC;YACA,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA,CAAA,CAAG;QAC5C,CAAC;kGAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,YAAY;YACrC;AACA,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG;QAC5D,CAAC;yFAAC;AAGA,QAAA,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,YAAY,GAAG,KAAK;QAExB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;YAEzB,IAAI,GAAG,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;AAChD,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrB,YAAY,GAAG,IAAI;YACrB;AAEA,YAAA,IAAI,GAAG,GAAG,MAAM,EAAE;gBAChB,YAAY,GAAG,KAAK;YACtB;YAEA,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC/B,YAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;gBAClC,IAAI,UAAU,IAAI,SAAS,IAAI,iBAAiB,GAAG,SAAS,EAAE;AAC5D,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrC,iBAAiB,GAAG,SAAS;gBAC/B;YACF;AAEA,YAAA,IAAI,UAAU,GAAG,EAAE,EAAE;gBACnB,iBAAiB,GAAG,CAAC,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;IACJ;8GA7EW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,0mDC/BpC,8pBAoBM,EAAA,MAAA,EAAA,CAAA,unEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDWO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAhBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,WAClB,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,uBAAuB;AAC9B,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,sBAAsB,EAAE,8BAA8B;AACtD,wBAAA,sBAAsB,EAAE,8BAA8B;AACtD,wBAAA,mBAAmB,EAAE,QAAQ;AAC7B,wBAAA,kBAAkB,EAAE;AACrB,qBAAA,EAAA,QAAA,EAAA,8pBAAA,EAAA,MAAA,EAAA,CAAA,unEAAA,CAAA,EAAA;;;MEbU,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,aAAa,EAAE;KAChB;AACF,CAAA;MAEY,YAAY,GAAG,IAAI,cAAc,CAA2B,cAAc,EAAE;AACvF,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;AAED;;AAEG;AACH,IAAI,cAAc,GAAG,CAAC;MAiBT,iBAAiB,CAAA;AAS5B,IAAA,IAAsB,YAAY,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAGtE,IAAA,IAAuB,aAAa,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAiDzE,IAAA,WAAA,GAAA;AA5DQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAC7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACvD,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAA,MAAA,EAAS,EAAE,cAAc,EAAE;;;;QAK9C,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;oFAAC;QAG9C,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAGhD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;;QAG/C,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE;kFAAC;QACjB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE;kFAAC;QACjB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE;oFAAC;QACnB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,EAAE;iFAAC;AAChB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAW;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;QAC3B,IAAA,CAAA,IAAI,GAAG,KAAK,CAAY,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QACrD,IAAA,CAAA,aAAa,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO;0FAAC;;QAGnE,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK;gGAAC;;AAGnC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;QACtD,IAAA,CAAA,WAAW,GAAG,MAAM,EAAW;;AAG/B,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;yFAAC;QAEhE,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;kFAAC;AAEvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,IAAI,WAAW;AAAE,gBAAA,OAAO,WAAW;AAEnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE;AAC9B,YAAA,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS;AAE/B,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,SAAS,GAAG,OAAO;QACzD,CAAC;8FAAC;QAEF,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MACxB,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA,MAAA,CAAQ,GAAG,SAAS;2FACpD;QAED,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAC1B,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA,QAAA,CAAU,GAAG,SAAS;6FACxD;;;AAID,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;4FAAC;QAGhF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AACrE,gBAAA,OAAO,CAAC,IAAI,CACV,0GAA0G,CAC3G;YACH;AACF,QAAA,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAClC;IAEQ,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,UAAU;QACtC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,OAAO,OAAO;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,SAAS;AACpC,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,WAAW;IACjD;AAEA,IAAA,sBAAsB,CAAC,UAAmB,EAAA;AACxC,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1C;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC;QACF;IACF;AAEU,IAAA,aAAa,CAAC,KAAoB,EAAA;QAC1C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,QAAO,KAAK,CAAC,GAAG;AACd,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,YAAY,EAAE;gBACnB;AACF,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,kBAAkB,EAAE;gBACzB;;IAEN;IAEQ,cAAc,GAAA;;;IAGtB;IAEQ,kBAAkB,GAAA;;;IAG1B;8GA5HW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,szDClD9B,y2CA2CM,EAAA,MAAA,EAAA,CAAA,+4EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDOO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,wBAAwB,EAAE,YAAY;AACtC,wBAAA,qBAAqB,EAAE,WAAW;AAClC,wBAAA,uBAAuB,EAAE,aAAa;AACtC,wBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,wBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,wBAAA,mBAAmB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,y2CAAA,EAAA,MAAA,EAAA,CAAA,+4EAAA,CAAA,EAAA;;sBAWA,KAAK;uBAAC,SAAS;;sBAGf,KAAK;uBAAC,UAAU;;sBAkBhB;;sBACA;;;MEzBU,kBAAkB,CAAA;AA2I7B,IAAA,WAAA,GAAA;AA1IiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACnD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;;;QAIxC,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAuB,UAAU;qFAAC;QAC/D,IAAA,CAAA,SAAS,GAAwB,IAAI;QAC5B,IAAA,CAAA,iBAAiB,GAAG,MAAY,IAAI,CAAC,UAAU,EAAE;;QAG/C,IAAA,CAAA,YAAY,GAAG,MAAM,CAAmB,QAAQ;yFAAC;AAEjD,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;QAE7E,IAAA,CAAA,KAAK,GAAG,KAAK,CAAiB,IAAI;kFAAC;QACnC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;QAChC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK;oFAAC;QAExC,IAAA,CAAA,IAAI,GAAG,KAAK,CAAa,QAAQ;iFAAC;QAClC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAgB,UAAU;oFAAC;QAC1C,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,KAAK;uFAAC;QACzB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;QACxB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QACtB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;QACxB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QAEvB,IAAA,CAAA,OAAO,GAAG,KAAK,CAA6C,EAAE;oFAAC;QAC/D,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE;kFAAC;QACjB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,yBAAyB;wFAAC;QACtD,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAS,0BAA0B;gGAAC;QAC/D,IAAA,CAAA,KAAK,GAAG,KAAK,CAA4B,IAAI;kFAAC;QAC9C,IAAA,CAAA,OAAO,GAAG,KAAK,CAA4B,IAAI;oFAAC;QAChD,IAAA,CAAA,IAAI,GAAG,KAAK,CAA4B,IAAI;iFAAC;QAC7C,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI;sFAAC;QACtC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAqB,SAAS;0FAAC;QACpD,IAAA,CAAA,aAAa,GAAG,KAAK,CAAqB,SAAS;0FAAC;AACpD,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;wFAAC;QAC/D,IAAA,CAAA,YAAY,GAAG,KAAK,CAAe;AACjC,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,WAAW,EAAE,eAAe;AAC5B,YAAA,SAAS,EAAE;AACZ,SAAA;yFAAC;QAEe,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK;yFAAC;QAC5B,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE;6FAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;yFAAC;QAElC,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAU;QAC3B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;QAE1B,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE;mFAAC;QAC5C,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE;uFAAC;AAEpD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,UAAU;YACtC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,OAAO,OAAO;YAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,OAAO,SAAS;QAClB,CAAC;kFAAC;AAEF,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;8FAAC;AAE1F,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YAC1B,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,gBAAA,OAAO,eAAe;YACxC,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,iBAAiB;YAC5C,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,gBAAA,OAAO,cAAc;AACtC,YAAA,OAAO,IAAI;QACb,CAAC;wFAAC;AAEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAkB,MAAK;AACnD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;YACnC,MAAM,MAAM,GAAoB,EAAE;AAClC,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC5B,oBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;wBAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpF;gBACF;qBAAO;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnE;YACF;AACA,YAAA,OAAO,MAAM;QACf,CAAC;gGAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACvC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;AAC9C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AACtB,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YACtB,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,CAAE;QAChD,CAAC;6FAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACjC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAE1D,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YAC1E;AAEA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAClD,gBAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,IACxC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CACzD;AACD,gBAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACjG;YAEA,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,YAAiB,CAAC,CAAC;AAC7F,YAAA,OAAO,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QACvD,CAAC;0FAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE;AAClD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;AAEtB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAG;AACpB,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;oBAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAG;AACtC,wBAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACzD,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK;wBACtF,OAAO,YAAY,IAAI,WAAW;AACpC,oBAAA,CAAC,CAAC;oBACF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI;gBACnE;AACA,gBAAA,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC3D,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK;AAC1F,gBAAA,OAAO,CAAC,YAAY,IAAI,WAAW,IAAI,GAAG,GAAG,IAAI;AACnD,YAAA,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAsD,GAAG,KAAK,IAAI,CAAC;QACnF,CAAC;4FAAC;AAsDM,QAAA,IAAA,CAAA,QAAQ,GAAoC,MAAK,EAAE,CAAC;AACpD,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;;;;;AAhDtC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,wBAAwB,CAAC;QACrD,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,IAAG;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE;AACpB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;YAC1C,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE;YACtD,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,GAAG,CAAC,WAAW,EAAE;YACjB,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;;IAGQ,SAAS,GAAA;QACf,IAAI,IAAI,CAAC,SAAS;YAAE;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;QAC5D,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,IAAI,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CAAC,WAAW;;QAErF,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAC9D,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC1D;IAEQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAAI,IAAI,CAAC,UAAU,CAAC,aAA6B,CAAC,aAAa,CAAC,WAAW;QACrF,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACjE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAuB;AAC3E,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE;AAC5D,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY;AACjD,SAAA,CAAqB;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C;AAKA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAuB,CAAC;IACzC;IAEA,gBAAgB,CAAC,EAAmC,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAClF,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC/D,IAAA,gBAAgB,CAAC,UAAmB,EAAA,EAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7E,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE;AACvC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,KAAK,EAAE;QACd;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,MAAM,CAAC,MAAuB,EAAE,aAAa,GAAG,KAAK,EAAA;QACnD,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,aAAa;YAAE;AAEzD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAI,IAAI,CAAC,KAAK,EAAU,CAAC,GAAG,EAAE;YAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACzE,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;gBAChC,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG;oBAAE;AAChD,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAC5B;iBAAO;AACL,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;gBAChC,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG;oBAAE;AAChD,gBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1B;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAyB,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxB;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAuB,CAAC;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE;QACd;QACA,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;AAEA,IAAA,KAAK,CAAC,KAAiB,EAAA;QACrB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAmB;AAC9D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAqB;AACtC,QAAA,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,YAAY,EAAE;AACtD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACvB;IACF;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,MAAM,EAAE;gBACf;AAAO,qBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE;AACnC,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;oBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACtC,oBAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACnC,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC1B;gBACF;gBACA;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,MAAM,EAAE;gBACf;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnB;gBACA;AACF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClB;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,UAAU,EAAE;gBACjB;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,KAAK,EAAE;gBACZ;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ;;IAEN;AAEU,IAAA,aAAa,CAAC,IAA4C,EAAA;QAClE,OAAO,SAAS,IAAI,IAAI;IAC1B;AAEU,IAAA,YAAY,CAAC,IAA4C,EAAA;QACjE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAA,CAAE,GAAG,KAAK,IAAI,CAAC,KAAK,CAAA,CAAE;IACzE;AAEU,IAAA,UAAU,CAAC,MAAuB,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACzC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3D;AACA,QAAA,OAAO,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,GAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;IACnE;IAEU,QAAQ,GAAA;AAChB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;AAChE,QAAA,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;IAC1C;AAEU,IAAA,YAAY,CAAC,MAAuB,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;IAC7E;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE;IACzE;AAEQ,IAAA,cAAc,CAAC,OAAmD,EAAA;AACxE,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,EAAuB,CAAC;IAClI;AAEQ,IAAA,SAAS,CAAC,SAAiB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACvC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;QACnC,IAAI,IAAI,GAAG,OAAO;AAClB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,iBAAiB,EAAE;AAClC,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC3B;YACF;QACF;IACF;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,iBAAiB,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxB;YACF;QACF;IACF;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,iBAAiB,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxB;YACF;QACF;IACF;8GA1XW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,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,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,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,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,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,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,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,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,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,SAAA,EAvBlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvCH,ygMA4HA,EAAA,MAAA,EAAA,CAAA,2iIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9FY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA0BxB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA5B9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,SAAA,EAGzB;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,kBAAoB;AAC/B,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,kBAC/B,CAAC,wBAAwB,CAAC,EAAA,IAAA,EACpC;AACJ,wBAAA,oBAAoB,EAAE,aAAa;AACnC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,kBAAkB,EAAE,0BAA0B;AAC9C,wBAAA,gBAAgB,EAAE,wBAAwB;AAC1C,wBAAA,eAAe,EAAE,WAAW;AAC5B,wBAAA,iBAAiB,EAAE,aAAa;AAChC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,sBAAsB,EAAE,qBAAqB;AAC7C,wBAAA,mBAAmB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,ygMAAA,EAAA,MAAA,EAAA,CAAA,2iIAAA,CAAA,EAAA;gGAW2D,UAAU,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,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,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,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,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,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,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,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,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,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,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,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,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,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,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,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME/C3D,cAAc,GAAG,IAAI,cAAc,CAAyB,gBAAgB,EAAE;AACzF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,SAAS,EAAE,oBAAoB;AAC/B,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,aAAa,EAAE;KAChB;AACF,CAAA;MAiBY,mBAAmB,CAAA;IAsCtB,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,QAAQ;QACpC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,MAAM;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,WAAA,GAAA;AA3CiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACpC,IAAA,CAAA,cAAc,GAA0B,IAAI;QAC5C,IAAA,CAAA,iBAAiB,GAA8C,IAAI;QAE3E,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,KAAK;iFAAC;QACnB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAc,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO;iFAAC;QACtD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM;qFAAC;QACjE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO;kFAAC;QACnD,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO;uFAAC;QAC7D,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;sFAAC;QACzD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,oBAAoB;sFAAC;QACxE,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI;4FAAC;QACrE,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI;0FAAC;;;;QAKjE,IAAA,CAAA,MAAM,GAAG,MAAM,EAAW;QAC1B,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,eAAe,GAAG,MAAM,EAAW;QAElB,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK;yFAAC;QACrC,IAAA,CAAA,iBAAiB,GAAmB,IAAI;QAEhD,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE;qFAAC;QAC9C,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;0FAAC;QACzE,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;kFAAC;AAEtB,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,KAAoB,KAAI;AACxD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,SAAS,EAAE;gBACxF,IAAI,CAAC,YAAY,EAAE;YACrB;AACF,QAAA,CAAC;QASC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;AAC1B,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB;AACtC,YAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;YAE/B,IAAI,OAAO,KAAK,IAAI;gBAAE;AAEtB,YAAA,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;YACtB;AAAO,iBAAA,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE;gBAC7B,IAAI,CAAC,cAAc,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,eAAe,CAAC,UAAkB,EAAA;AACxC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QAEzC,IAAI,CAAC,iBAAiB,EAAE;AAExB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA,YAAA,EAAe,UAAU,CAAA,CAAA,CAAG,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAElD,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAsB,KAAI;YAClD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAClC,QAAA,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACxE;IAEQ,iBAAiB,GAAA;QACvB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACjD,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACzE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC/B;IACF;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;;;QAGzC,IAAI,CAAC,iBAAiB,EAAE;QAExB,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QACzC,IAAI,CAAC,oBAAoB,EAAE;QAE3B,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QACzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;IAC/D;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE;QACzC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;IAClE;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB;IACF;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAC1B,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;8GAjJW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,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,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,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,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,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,2CAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9ChC,8qBAuBC,EAAA,MAAA,EAAA,CAAA,miDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUW,YAAY,+BAAE,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAalC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;+BACE,aAAa,EAAA,OAAA,EACd,CAAC,YAAY,EAAE,qBAAqB,CAAC,EAAA,eAAA,EAG7B,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,MAAM,EAAE,eAAe;AACvB,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,oBAAoB,EAAE,SAAS;AAC/B,wBAAA,sBAAsB,EAAE,QAAQ;AAChC,wBAAA,mBAAmB,EAAE,yCAAyC;AAC9D,wBAAA,mBAAmB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,8qBAAA,EAAA,MAAA,EAAA,CAAA,miDAAA,CAAA,EAAA;;;MExCU,iBAAiB,GAAG,IAAI,cAAc,CAA4B,mBAAmB,EAAE;AAClG,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,KAAK,EAAE;KACR;AACF,CAAA;MAmBY,sBAAsB,CAAA;AAajC,IAAA,WAAA,GAAA;AAZQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE5C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ;oFAAC;QACnE,IAAA,CAAA,IAAI,GAAG,KAAK,CAAiB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QAC1D,IAAA,CAAA,KAAK,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS;kFAAC;AAC9D,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,qBAAqB;sFAAC;QAChD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAyB,QAAQ;qFAAC;QAElD,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK;yFAAC;QAG1B,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;YACtC,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;gBACjD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,kCAAkC,CAAC;gBACtE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;AAEzC,gBAAA,MAAM,OAAO,GAAG,CAAC,CAAsB,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5E,gBAAA,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;IACJ;8GAxBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,6mCC7BnC,mnBAuBA,EAAA,MAAA,EAAA,CAAA,wgHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDMa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAjBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,kBAAkB,EAAE,MAAM;AAC1B,wBAAA,mBAAmB,EAAE,WAAW;AAChC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,eAAe,EAAE,oBAAoB;AACrC,wBAAA,uBAAuB,EAAE,gBAAgB;AAC1C,qBAAA,EAAA,QAAA,EAAA,mnBAAA,EAAA,MAAA,EAAA,CAAA,wgHAAA,CAAA,EAAA;;;MENU,gBAAgB,CAAA;AAd7B,IAAA,WAAA,GAAA;QAeE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAU;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAAU;AAC1B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;QACtB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;QACxB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;AACtB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;AACzB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;QAEjB,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,CAAC;mFAAC;QAClB,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;AAExB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AAShD,IAAA;AAPC,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,SAAS,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;8GAvBW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,u9CAZjB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAYf,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAd5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,MAAM;AAC9B,wBAAA,gBAAgB,EAAE,YAAY;AAC9B,wBAAA,aAAa,EAAE,YAAY;AAC3B,wBAAA,wBAAwB,EAAE,mBAAmB;AAC7C,wBAAA,WAAW,EAAE,oBAAoB;AACjC,wBAAA,iBAAiB,EAAE,qBAAqB;AACxC,wBAAA,iBAAiB,EAAE;AACpB;AACF,iBAAA;;;ACJD,MAAMC,qBAAmB,GAAsB;AAC7C,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,QAAQ,EAAE;CACX;MAEY,cAAc,GAAG,IAAI,cAAc,CAAyB,gBAAgB,EAAE;AACzF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAEA;KACb;AACF,CAAA;MAeY,mBAAmB,CAAA;AA2C9B,IAAA,WAAA,GAAA;AA1CQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;QAEvC,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,CAAC;uFAAC;QACrB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAiB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;oFAAC;QACjE,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI;mFAAC;AAE1C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAqB;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK;wGAA4D;QAEpF,IAAA,CAAA,UAAU,GAAG,MAAM,EAAU;QAC7B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;QAC1B,IAAA,CAAA,eAAe,GAAG,MAAM,EAAU;QAElC,IAAA,CAAA,cAAc,GAAG,eAAe,CAAC,gBAAgB;2FAAC;AAElD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;AACxD,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC,CAAC;kFAAC;AAEJ,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAC7B,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAIA,qBAAmB;gGACnE;QAED,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;wFAAC;AACrD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;uFAAC;AAC1E,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAClB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG;AACpB,cAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI;AACpD,cAAE,CAAC;qFACN;QACD,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MACxB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;2FACnD;QAGC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE;AAE7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;QAChC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC;AAClC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5C;IACF;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5C;IACF;IAEA,MAAM,QAAQ,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAC7C,YAAA,MAAM,QAAQ,GAAG,CAAA,oBAAA,EAAuB,KAAK,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1F,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnC;QACF;AAEA,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;YAC/B;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC5C,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI;AACF,gBAAA,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC/E,IAAI,CAAC,SAAS,EAAE;AACd,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA,qBAAA,EAAwB,IAAI,CAAC,UAAU,EAAE,CAAA,SAAA,EAAY,KAAK,CAAA,0BAAA,CAA4B,CAAC;oBACjH;gBACF;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,mCAAmC;AAC7F,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC;YACF;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAA,sCAAA,CAAwC,CAAC;YAChG;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,WAAW,EAAE,SAAS,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACvB;IACF;IAEA,SAAS,GAAA;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AACvC,QAAA,OAAO,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;IAC3E;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;IAC9B;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAC7C,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,IAAI;QAC/B,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QAChC,IAAI,IAAI,EAAE,QAAQ;AAAE,YAAA,OAAO,KAAK;QAEhC,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,KAAK,CAAC,CAAC,EAAE,KAAK;AACd,aAAA,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACjD;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAChC,QAAA,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;IACvD;IAEA,gBAAgB,CAAC,IAAgB,EAAE,KAAa,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,YAAA,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM;gBAC3C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;oBAC/B,MAAM,CAAC,UAAU;AAC/B,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAA,GAAA,EAAM,MAAM,EAAE;IACjE;IAEA,kBAAkB,CAAC,IAAgB,EAAE,KAAa,EAAA;QAChD,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAA,MAAA,EAAS,KAAK,CAAA,CAAE;QACvC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE;QAC3C,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE;AAC3C,QAAA,OAAO,IAAI;IACb;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB;IACF;IAEA,aAAa,CAAC,KAAoB,EAAE,KAAa,EAAA;AAC/C,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAC3B;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBACpB,IAAI,CAAC,IAAI,EAAE;gBACb;gBACA;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBACxB,IAAI,CAAC,QAAQ,EAAE;gBACjB;gBACA;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClB;gBACA;YACF,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;AACzC,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC1B;gBACA;YACF;;IAEJ;8GAhNW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,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,OAAA,EAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAcG,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3DnD,ihFAkEA,EAAA,MAAA,EAAA,CAAA,ylJAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDrBa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,2BAA2B,EAAE,MAAM;AACnC,wBAAA,kBAAkB,EAAE,0BAA0B;AAC9C,wBAAA,kBAAkB,EAAE,0BAA0B;AAC9C,wBAAA,aAAa,EAAE,UAAU;AACzB,wBAAA,mBAAmB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,ihFAAA,EAAA,MAAA,EAAA,CAAA,ylJAAA,CAAA,EAAA;s1BAgBgC,gBAAgB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME5CtC,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;QASE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAU;QAChC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK;sFAAC;QACxB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;AACtB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAU;QAEjB,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,CAAC;mFAAC;QAClB,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;AAExB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AAShD,IAAA;AAPC,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,SAAS,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;8GApBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,43BANrB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,iBAAiB,EAAE;AACpB;AACF,iBAAA;;;ACED,MAAM,mBAAmB,GAAiC;AACxD,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,QAAQ,EAAE,kBAAkB;AAC5B,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,KAAK,EAAE;CACR;MAEY,2BAA2B,GAAG,IAAI,cAAc,CAAoC,6BAA6B,EAAE;AAC9H,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;KACb;AACF,CAAA;MAgBY,8BAA8B,CAAA;AAwCzC,IAAA,WAAA,GAAA;AAvCQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAEpD,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,CAAC;uFAAC;QACrB,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI;mFAAC;QAC1C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAyB,QAAQ;iFAAC;AAE9C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAgC;AAClD,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK;wGAA4D;QAEpF,IAAA,CAAA,UAAU,GAAG,MAAM,EAAU;QAC7B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;QAC1B,IAAA,CAAA,eAAe,GAAG,MAAM,EAAU;QAElC,IAAA,CAAA,cAAc,GAAG,eAAe,CAAC,oBAAoB;2FAAC;AAEtD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;AACxD,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC,CAAC;kFAAC;AAEJ,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAC7B,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,mBAAmB;gGACnE;QAED,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;wFAAC;AACrD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;uFAAC;AAC1E,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAClB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG;AACpB,cAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI;AACpD,cAAE,CAAC;qFACN;QACD,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MACxB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;2FACnD;QAGC,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE;AAE7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;QAChC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC;AAClC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5C;IACF;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5C;IACF;IAEA,MAAM,QAAQ,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAC7C,YAAA,MAAM,QAAQ,GAAG,CAAA,oBAAA,EAAuB,KAAK,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1F,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnC;QACF;AAEA,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;YAC/B;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC5C,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI;AACF,gBAAA,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC/E,IAAI,CAAC,SAAS,EAAE;AACd,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA,qBAAA,EAAwB,IAAI,CAAC,UAAU,EAAE,CAAA,SAAA,EAAY,KAAK,CAAA,0BAAA,CAA4B,CAAC;oBACjH;gBACF;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,mCAAmC;AAC7F,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC;YACF;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAA,sCAAA,CAAwC,CAAC;YAChG;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,WAAW,EAAE,SAAS,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACvB;IACF;IAEA,SAAS,GAAA;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AACvC,QAAA,OAAO,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;IAC3E;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;IAC9B;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAC7C,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,IAAI;QAC/B,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;QAChC,IAAI,IAAI,EAAE,QAAQ;AAAE,YAAA,OAAO,KAAK;QAEhC,OAAO,IAAI,CAAC,KAAK;AACd,aAAA,KAAK,CAAC,CAAC,EAAE,KAAK;AACd,aAAA,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACxC;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAChC,QAAA,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;IACvD;IAEA,gBAAgB,CAAC,IAAoB,EAAE,KAAa,EAAA;AAClD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACzC,QAAA,IAAI,MAAc;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,MAAM,GAAG,MAAM,CAAC,KAAK;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,MAAM,GAAG,MAAM,CAAC,OAAO;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS;QAC3B;AAAO,aAAA,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE;AACtC,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM;QACxB;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAA,MAAM,GAAG,MAAM,CAAC,QAAQ;QAC1B;aAAO;AACL,YAAA,MAAM,GAAG,MAAM,CAAC,UAAU;QAC5B;AACA,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAA,GAAA,EAAM,MAAM,EAAE;IACjE;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB;IACF;IAEA,aAAa,CAAC,KAAoB,EAAE,KAAa,EAAA;AAC/C,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAC3B;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;oBACpB,IAAI,CAAC,IAAI,EAAE;gBACb;gBACA;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBACxB,IAAI,CAAC,QAAQ,EAAE;gBACjB;gBACA;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClB;gBACA;YACF,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;AACzC,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;AACnC,oBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC1B;gBACA;YACF;;IAEJ;8GAhNW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,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,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,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,OAAA,EAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAcR,oBAAoB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7DvD,4rDAsCA,EAAA,MAAA,EAAA,CAAA,mnHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDSa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAd1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,8BAA8B,EAAE,MAAM;AACtC,wBAAA,oBAAoB,EAAE,oBAAoB;AAC1C,wBAAA,qBAAqB,EAAE,qBAAqB;AAC5C,wBAAA,oBAAoB,EAAE,oBAAoB;AAC1C,wBAAA,aAAa,EAAE,UAAU;AACzB,wBAAA,mBAAmB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,4rDAAA,EAAA,MAAA,EAAA,CAAA,mnHAAA,CAAA,EAAA;g1BAgBgC,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME9C1C,aAAa,GAAG,IAAI,cAAc,CAAwB,eAAe,EAAE;AACtF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,aAAa,EAAE;KAChB;AACF,CAAA;MAmBY,kBAAkB,CAAA;AAjB/B,IAAA,WAAA,GAAA;AAkBU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAA,OAAA,EAAU,MAAM,CAAC,UAAU,EAAE,EAAE;QAE1C,IAAA,CAAA,WAAW,GAAG,SAAS,CAA+B,aAAa;wFAAC;AAEpE,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,MAAe,KAAI,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,EAAE,CAAC;QAEnB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;oFAAC;QAC7C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QACxD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QAEtB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAC/C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAa,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QACtD,IAAA,CAAA,aAAa,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO;0FAAC;QAE7E,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE;kFAAC;QACjB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE;kFAAC;QACjB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE;oFAAC;AACnB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;QAC3B,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,EAAE;iFAAC;AACxB,QAAA,IAAA,CAAA,EAAE,GAAG,KAAK,CAAS,IAAI,CAAC,QAAQ;+EAAC;AAEjC,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,IAAI,WAAW;AAAE,gBAAA,OAAO,WAAW;AAEnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE;AAC9B,YAAA,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS;AAE/B,YAAA,OAAO,QAAQ;QACjB,CAAC;8FAAC;QACF,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,EAAE,EAAE,CAAA,MAAA,CAAQ,GAAG,IAAI;oFAAC;QACpE,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,EAAE,EAAE,CAAA,QAAA,CAAU,GAAG,IAAI;sFAAC;;;AAG1E,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;wFAAC;AAwCjE,IAAA;IAtCC,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB;IACF;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;IAClC;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/B;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7B,QAAA,IAAI,EAAE,EAAE,aAAa,EAAE;AACrB,YAAA,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;QAC1B;IACF;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7B,QAAA,IAAI,EAAE,EAAE,aAAa,EAAE;AACrB,YAAA,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE;QACzB;IACF;8GA5EW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,syDAZlB,CAAC;AACV,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,sJClCJ,42CA2CM,EAAA,MAAA,EAAA,CAAA,0hGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDDO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAjB9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,aACpC,CAAC;AACV,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,kBAAoB;AAC/B,4BAAA,KAAK,EAAE;AACR,yBAAA,CAAC,EAAA,IAAA,EACI;AACJ,wBAAA,wBAAwB,EAAE,MAAM;AAChC,wBAAA,yBAAyB,EAAE,YAAY;AACvC,wBAAA,sBAAsB,EAAE,WAAW;AACnC,wBAAA,wBAAwB,EAAE;AAC3B,qBAAA,EAAA,QAAA,EAAA,42CAAA,EAAA,MAAA,EAAA,CAAA,0hGAAA,CAAA,EAAA;yEAM6D,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,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,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,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,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,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,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,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,EAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEnC7E;;AAEG;MACU,cAAc,GAAG,IAAI,cAAc,CAAwB,gBAAgB,EAAE;AACxF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,QAAQ,EAAE;KACX;AACF,CAAA;MAeY,kBAAkB,CAAA;AAZ/B,IAAA,WAAA,GAAA;AAaU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;;QAGvC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAC/C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ;qFAAC;QACpE,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI;qFAAC;QAC9C,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,CAAC;wFAAC;;QAGtB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAgB;;QAGtC,IAAA,CAAA,SAAS,GAAG,MAAM,EAAqB;AAuBxC,IAAA;AArBC,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE;AACxC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;QAEjC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,aAAa,KAAK,KAAK;AACvB,YAAA,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,KAAK,CAAC,MAAM;AACrB,YAAA,CAAC,YAAY;YACb,YAAY,CAAC,QAAQ,EAAE;YACzB;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,KAAK;AACL,YAAA,IAAI,EAAE,YAAY;YAClB;AACD,SAAA,CAAC;IACJ;8GAnCW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,uiCCnC/B,qyBAsBM,EAAA,MAAA,EAAA,CAAA,0nEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDaO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,aAAa,EAAE,sBAAsB;AACrC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,mBAAmB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,qyBAAA,EAAA,MAAA,EAAA,CAAA,0nEAAA,CAAA,EAAA;;;ME5BU,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,YAAY,EAAE,mBAAmB;AACjC,QAAA,gBAAgB,EAAE,kBAAkB;AACpC,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,uBAAuB,EAAE,0BAA0B;AACnD,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,YAAY,EAAE;KACf;AACF,CAAA;MAaY,iBAAiB,CAAA;AAX9B,IAAA,WAAA,GAAA;AAYU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QAErC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAwB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;oFAAC;QACxE,IAAA,CAAA,IAAI,GAAG,KAAK,CAA+B,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QACxE,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;oFAAC;QAC7C,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK;sFAAC;QACjD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;qFAAC;QAC/C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;oFAAC;QAC7C,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK;yFAAC;QACvD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK;sFAAC;QACjD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAgB,EAAE;oFAAC;QAClC,IAAA,CAAA,IAAI,GAAG,KAAK,CAAa,EAAE;iFAAC;QAC5B,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,mBAAmB;yFAAC;QAC7E,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,kBAAkB;6FAAC;QACpF,IAAA,CAAA,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,IAAI,0BAA0B;oGAAC;QAClG,IAAA,CAAA,WAAW,GAAG,KAAK,CAAmB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM;wFAAC;QACxE,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK;yFAAC;QACvD,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK;uFAAC;QACnD,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK;yFAAC;AACvD,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK;2GAAwC;QAEnE,IAAA,CAAA,UAAU,GAAG,MAAM,EAAa;QAChC,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAU;QACrC,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAsB;QACvC,IAAA,CAAA,SAAS,GAAG,MAAM,EAAuB;QACzC,IAAA,CAAA,WAAW,GAAG,MAAM,EAAuB;QAEnC,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAwB,SAAS;8FAAC;QAC3D,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE;6FAAC;AAC9B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAuB,IAAI,GAAG,EAAE;2FAAC;QAEhE,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE;wFAAC;QACtD,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE;uFAAC;AAEpD,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;YACnC,OAAO,IAAI,CAAC,UAAU;kBAClB,CAAA,EAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,EAAE,CAAA,CAAA;AAClD,kBAAE,IAAI,CAAC,YAAY,EAAE;QACzB,CAAC;iGAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,OAAO,SAAS;AACpC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,OAAO;AACpD,YAAA,OAAO,SAAS;QAClB,CAAC;kFAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YAC3B,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE7B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,gBAAA,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD;AAEA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;YAC/B,IAAI,IAAI,EAAE;gBACR,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;YACtC;AAEA,YAAA,OAAO,MAAM;QACf,CAAC;yFAAC;QA0FF,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;yFAAC;AA4CnF,IAAA;AApIC;;AAEG;IACK,QAAQ,CAAC,IAAgB,EAAE,IAAe,EAAA;AAChD,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;;AAG/D,YAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC,SAAS,KAAK;sBACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;sBAClB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACzB;;AAGA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;AAC/D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;AAE/D,YAAA,OAAO,IAAI,CAAC,SAAS,KAAK;kBACtB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;kBACjC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;AACxC,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,aAAa,CAAC,CAAU,EAAE,CAAU,EAAA;QAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAClD,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB;QACA,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD;AAEA;;AAEG;IACK,UAAU,CAAC,IAAgB,EAAE,UAAkB,EAAA;AACrD,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI;AAE5B,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE;AACrC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,IAAG;YACvB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAG;AAClC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC;AACjE,gBAAA,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACpE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,cAAc,CAAC,GAAY,EAAE,IAAY,EAAA;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAC3B,CAAC,GAAG,EAAE,IAAI,KACR,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK;AAC5B,cAAG,GAA+B,CAAC,IAAI;AACvC,cAAE,SAAS,EACf,GAAG,CACJ;IACH;AAEA,IAAA,UAAU,CAAC,MAAmB,EAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;AAEtB,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,MAAM,CAAC;AAC1E,cAAE;cACA,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,KAAK;AAClC,kBAAE;kBACA,KAAK;QAEX,MAAM,IAAI,GAAc,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE;AACtD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;AAEA,IAAA,cAAc,CAAC,GAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;IACzC;IAEU,YAAY,CAAC,GAAa,EAAE,MAAmB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC;IAC5D;AAIA,IAAA,eAAe,CAAC,GAAa,EAAA;AAC3B,QAAA,OAAO,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/D;AAEA,IAAA,aAAa,CAAC,GAAa,EAAA;QACzB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1C;AAEA,IAAA,SAAS,CAAC,GAAa,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAAE;QAEhC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,GAAG,CAAC,KAAK,EAAE;QACb;QAEA,IAAI,WAAW,EAAE;AACf,YAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC7D;aAAO;AACL,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AACf,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1D;IACF;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB;QACtC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB;QACF;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACpC;8GAjMW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,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,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,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,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,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,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,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,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC9B,gjLAoJA,EAAA,MAAA,EAAA,CAAA,s1IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzHY,gBAAgB,oJAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASlC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAX7B,SAAS;+BACE,WAAW,EAAA,OAAA,EACZ,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAG7B,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE,WAAW;AACpB,wBAAA,oBAAoB,EAAE;AACvB,qBAAA,EAAA,QAAA,EAAA,gjLAAA,EAAA,MAAA,EAAA,CAAA,s1IAAA,CAAA,EAAA;;;MEbU,eAAe,CAAA;AAb5B,IAAA,WAAA,GAAA;QAcE,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ;mFAAU;AACjC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAU;QACtB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;QAEnB,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,CAAC;mFAAC;QAClB,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;AAExB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AAmBhD,IAAA;AAjBC,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,SAAS,CAAC,MAAe,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IAC5B;IAEA,SAAS,GAAA;QACP,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B;IACH;8GA5BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,4yBAXhB,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAWf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAb3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,gBAAgB,EAAE,YAAY;AAC9B,wBAAA,aAAa,EAAE,YAAY;AAC3B,wBAAA,wBAAwB,EAAE,kBAAkB;AAC5C,wBAAA,WAAW,EAAE,oBAAoB;AACjC,wBAAA,iBAAiB,EAAE;AACpB;AACF,iBAAA;;;MCLY,WAAW,GAAG,IAAI,cAAc,CAAsB,aAAa,EAAE;AAChF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,QAAQ,EAAE,IAAI;KACf,CAAC;AACH,CAAA;MAaY,gBAAgB,CAAA;AAwC3B,IAAA,WAAA,GAAA;AAvCQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAEpC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAc,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;oFAAC;QAC9D,IAAA,CAAA,IAAI,GAAG,KAAK,CAAW,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ;iFAAC;QACpD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI;qFAAC;QAC9C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAQ,EAAE;iFAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK;iGAAU;QAC3B,IAAA,CAAA,eAAe,GAAG,KAAK,CAA4B,YAAY;4FAAC;AAEhE,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,KAAK,EAAE,aAAa,GAAG;AAChF,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB;wFAAC;QAEjD,IAAA,CAAA,aAAa,GAAG,eAAe,CAAC,eAAe;0FAAC;AAEhD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAC3C;AACA,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;QACpB,CAAC;0FAAC;AAEF,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC;iGAAC;QAEtE,IAAA,CAAA,iBAAiB,GAAG,MAAM,EAAU;QACpC,IAAA,CAAA,SAAS,GAAG,MAAM,EAAkB;AAEpC,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC;AAChC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAE9B,IAAI,IAAI,KAAK,QAAQ;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAA,CAAE,CAAC;AACnD,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAA,CAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;AAElD,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,CAAC;wFAAC;QAGA,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC1B,gBAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACnB,gBAAA,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,YAAY,CAAC;AACvC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;AACvC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;AAClD,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,CAAC,KAAoB,EAAE,MAAc,EAAA;AAChD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,cAAc,EAAE;gBACrB;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,UAAU,EAAE;gBACjB;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,WAAW,EAAE;gBAClB;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,UAAU,EAAE;gBACjB;;IAEN;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAEvB,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ;YAAE;AAE1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE;AACxC,QAAA,IAAI,aAAa,KAAK,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAClE;IACF;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;AAEtD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;YACpE,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;QAC3C;AAEA,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAC3B;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;AAEpE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AACpE,YAAA,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;QACzD;AAEA,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAC3B;IACF;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,IAAI,UAAU,GAAG,CAAC;AAElB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,YAAA,UAAU,EAAE;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AACpE,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAC5B;IACF;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE;AACjD,YAAA,SAAS,EAAE;QACb;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AAClE,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAC3B;IACF;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjD;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;IACpC;8GA1JW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,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,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAaK,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChDjD,urDAqDA,EAAA,MAAA,EAAA,CAAA,0nGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDlBa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAX5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EAGH,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,mBAAmB,EAAE,yCAAyC;AAC/D,qBAAA,EAAA,QAAA,EAAA,urDAAA,EAAA,MAAA,EAAA,CAAA,0nGAAA,CAAA,EAAA;wyBAe+B,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME7CpC,YAAY,GAAG,IAAI,cAAc,CAAuB,cAAc,EAAE;AACnF,IAAA,OAAO,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,eAAe,EAAE;KAClB;AACF,CAAA;;MCLY,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;QAIU,IAAA,CAAA,OAAO,GAAG,MAAM,CAAU,EAAE;oFAAC;QAC7B,IAAA,CAAA,SAAS,GAAG,MAAM,CAAgB,WAAW;sFAAC;AAC9C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAE5B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AAkDhD,IAAA;AAhDC,IAAA,IAAI,CAAC,KAAwB,EAAA;AAC3B,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAU;AACtB,YAAA,GAAG,KAAK;YACR,EAAE;AACF,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI;SACrD;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;AAC3B,YAAA,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC;AACjC,YAAA,OAAO,aAAa,CAAC,MAAM,IAAI,SAAS,EAAE;gBACxC,aAAa,CAAC,KAAK,EAAE;YACvB;AACA,YAAA,OAAO,CAAC,GAAG,aAAa,EAAE,QAAQ,CAAC;AACrC,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE;IAEA,IAAI,CAAC,OAAe,EAAE,OAAyD,EAAA;AAC7E,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IACzD;IAEA,OAAO,CAAC,OAAe,EAAE,OAAyD,EAAA;AAChF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5D;IAEA,OAAO,CAAC,OAAe,EAAE,OAAyD,EAAA;AAChF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5D;IAEA,KAAK,CAAC,OAAe,EAAE,OAAyD,EAAA;AAC9E,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3D;IAEA,MAAM,CAAC,OAAe,EAAE,OAAyD,EAAA;AAC/E,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3D;AAEA,IAAA,WAAW,CAAC,QAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9B;8GAvDW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;AA2DD;AACO,MAAM,YAAY,GAAG;;AChE5B;AACO,MAAM,cAAc,GAAG;;MCWjB,iBAAiB,CAAA;AAU5B,IAAA,WAAA,GAAA;AATQ,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AAE5B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAkB;AACtC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAU;AAEpC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACjC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;QAG5C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AAEnC,YAAA,aAAa,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,gBAAA,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;oBACrD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAEpC,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE;wBACxC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC;oBAChD;gBACF;AACF,YAAA,CAAC,CAAC;YAEF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;AACzF,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,IAAG;gBAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3C,QAAA,IAAI,SAAS,EAAE,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC;IACF;AAEA,IAAA,aAAa,CAAC,EAAsB,EAAA;QAClC,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACvB;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC5B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;YAClD,IAAI,KAAK,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE;gBACzC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC;YAC1C;QACF;IACF;AAEA,IAAA,cAAc,CAAC,IAAe,EAAA;AAC5B,QAAA,MAAM,KAAK,GAA8B;AACvC,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE;SACT;AACD,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM;IAC9B;AAEA,IAAA,qBAAqB,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE;YACvC,OAAO,KAAK,CAAC,eAAe;QAC9B;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK;IAC9C;AAEA,IAAA,uBAAuB,CAAC,KAAY,EAAA;QAClC,OAAO,KAAK,CAAC,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,oBAAoB;IAC/F;IAEQ,eAAe,CAAC,EAAU,EAAE,QAAgB,EAAA;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AACrB,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,CAAC,EAAE,QAAQ,CAAC;QACZ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC;IACpC;AAEQ,IAAA,YAAY,CAAC,EAAU,EAAA;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,SAAS,EAAE;YACb,YAAY,CAAC,SAAS,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAG;YAClC,YAAY,CAAC,SAAS,CAAC;AACzB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;8GA3GW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,8ICd9B,mqCAuCA,EAAA,MAAA,EAAA,CAAA,4+GAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDzBa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,2BAA2B,EAAE;AAC9B,qBAAA,EAAA,QAAA,EAAA,mqCAAA,EAAA,MAAA,EAAA,CAAA,4+GAAA,CAAA,EAAA;;;AEAG,SAAU,QAAQ,CAAC,GAAW,EAAA;AAClC,IAAA,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AACxC,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7D;AACA,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACzD,QAAA,OAAO,IAAI;IACb;IACA,OAAO;AACL,QAAA,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACtC,QAAA,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACtC,QAAA,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;KACvC;AACH;AAEM,SAAU,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAO,EAAA;AACvC,IAAA,MAAM,KAAK,GAAG,CAAC,OAAe,KAAI;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC9C,IAAA,CAAC;AACD,IAAA,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;AAC7C;AAEA,SAAS,YAAY,CAAC,OAAe,EAAA;AACnC,IAAA,MAAM,UAAU,GAAG,OAAO,GAAG,GAAG;IAChC,OAAO,UAAU,IAAI;UACjB,UAAU,GAAG;AACf,UAAE,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC;AACjD;AAEA,SAAS,YAAY,CAAC,KAAa,EAAA;AACjC,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,IAAA,MAAM,MAAM,GAAG,OAAO,IAAI;UACtB,KAAK,GAAG;AACV,UAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK;IAC9C,OAAO,MAAM,GAAG,GAAG;AACrB;AAEM,SAAU,iBAAiB,CAAC,GAAQ,EAAA;IACxC,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC;AAC7C;AAEM,SAAU,aAAa,CAAC,CAAM,EAAE,CAAM,EAAA;AAC1C,IAAA,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC/B,IAAA,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;IAC/B,OAAO,CAAC,OAAO,GAAG,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC;AAC3C;AAEM,SAAU,aAAa,CAAC,UAAe,EAAA;AAC3C,IAAA,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACxC,IAAA,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAClC,IAAA,OAAO,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE,KAAK;AACxE,UAAE;UACA,SAAS;AACf;AAEA,SAAS,WAAW,CAAC,GAAQ,EAAA;IAC3B,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;AAEA,SAAS,WAAW,CAAC,GAA6B,EAAA;IAChD,OAAO;AACL,QAAA,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACxB;AACH;AAEM,SAAU,UAAU,CAAC,GAAQ,EAAA;AACjC,IAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;AAElC,IAAA,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC;AAChE,IAAA,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC;AAChE,IAAA,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC;IAEhE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvB,IAAA,MAAM,CAAC,GAAG,YAAY,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE;AACnE,IAAA,MAAM,CAAC,GAAG,YAAY,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE;AACnE,IAAA,MAAM,IAAI,GAAG,YAAY,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE;AAEtE,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE;IAC7C,IAAI,CAAC,GAAG,CAAC;QAAE,CAAC,IAAI,GAAG;AAEnB,IAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC7B;AAEM,SAAU,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAS,EAAA;IAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG;IAChC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAE/B,MAAM,EAAE,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI;IACrD,MAAM,EAAE,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI;IACrD,MAAM,EAAE,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI;AAErD,IAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC;AACrB,IAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC;AACrB,IAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC;AAErB,IAAA,MAAM,CAAC,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK;AAC5E,IAAA,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK;AAC7E,IAAA,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK;IAE7E,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B;AAEM,SAAU,aAAa,CAAC,KAAU,EAAE,SAAiB,EAAA;AACzD,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AAC/B,IAAA,OAAO,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACvF;AAEM,SAAU,cAAc,CAAC,KAAU,EAAE,KAAa,EAAA;AACtD,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AAC/B,IAAA,OAAO,UAAU,CAAC;AAChB,QAAA,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5C,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,CAAC,EAAE,KAAK,CAAC,CAAC;AACX,KAAA,CAAC;AACJ;;ACnIO,MAAM,cAAc,GAAG,GAAG;AAC1B,MAAM,aAAa,GAAG,CAAC;AACvB,MAAM,eAAe,GAAG,CAAC;AACzB,MAAM,cAAc,GAAG,GAAG;AAI3B,SAAU,WAAW,CAAC,MAAsB,EAAA;IAChD,OAAO,MAAM,KAAK,KAAK,GAAG,eAAe,GAAG,cAAc;AAC5D;AAEA;;;;;AAKG;SACa,cAAc,CAAC,KAAU,EAAE,UAAe,EAAE,KAAa,EAAA;IACvE,IAAI,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,KAAK,EAAE;AAC7C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,CAAC;IACzD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;AAClC,IAAA,MAAM,SAAS,GAAG,mBAAmB,GAAG,GAAG;IAE3C,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,IAAI,GAAG,CAAC;IACZ,IAAI,IAAI,GAAQ,KAAK;IACrB,IAAI,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;AAEhD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC;AAC5B,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC;AAE3D,QAAA,IAAI,cAAc,IAAI,KAAK,EAAE;YAC3B,IAAI,GAAG,SAAS;YAChB,SAAS,GAAG,cAAc;YAC1B,IAAI,SAAS,EAAE;gBACb,IAAI,GAAG,GAAG;YACZ;iBAAO;gBACL,GAAG,GAAG,GAAG;YACX;QACF;aAAO;AACL,YAAA,IAAI,cAAc,GAAG,SAAS,EAAE;gBAC9B,IAAI,GAAG,SAAS;gBAChB,SAAS,GAAG,cAAc;YAC5B;YACA,IAAI,SAAS,EAAE;gBACb,GAAG,GAAG,GAAG;YACX;iBAAO;gBACL,IAAI,GAAG,GAAG;YACZ;QACF;IACF;AAEA,IAAA,IAAI,SAAS,GAAG,KAAK,EAAE;QACrB,MAAM,aAAa,GAAG,UAAU,CAAC;YAC/B,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;YAC1B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;YACpB,CAAC;AACF,SAAA,CAAC;QACF,IAAI,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,SAAS,EAAE;AACxD,YAAA,OAAO,aAAa;QACtB;IACF;AAEA,IAAA,OAAO,IAAI;AACb;;AClDA,MAAM,iBAAiB,GAAG,wBAAwB;MAWrC,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B;MAOf,iBAAiB,GAAG,IAAI,cAAc,CAAkB,mBAAmB;AAaxF,MAAM,gBAAgB,GAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AACxD,MAAM,eAAe,GAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;MAKvC,YAAY,CAAA;AAmBvB,IAAA,WAAA,GAAA;QAlBQ,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtE,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3D,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK;8FAAC;QAC1C,IAAA,CAAA,eAAe,GAAG,MAAM,CAAQ,OAAO;4FAAC;AACxC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAO,IAAI,IAAI,EAAE;6FAAC;QAEnD,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE;wFAAC;QACtD,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE;sFAAC;AAElD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,OAAO;AAC1B,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE;AACtB,YAAA,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE;SACpC,CAAC;sFAAC;QAGD,IAAI,CAAC,eAAe,EAAE;QACtB,eAAe,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClD;AAEA,IAAA,YAAY,CAAC,MAAe,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QACrF;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC9C;AAEA,IAAA,WAAW,CAAC,IAAW,EAAA;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA;;;;;;;AAOG;IACH,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAC5C;QACF;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;AAEvD,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC;IAC3C;IAEQ,YAAY,CAAC,IAA6B,EAAE,KAAyB,EAAA;AAC3E,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK;AAChD,QAAA,MAAM,MAAM,GAAG,CAAA,WAAA,EAAc,IAAI,QAAQ;QAEzC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,MAAM,CAAA,OAAA,CAAS,EAAE,OAAO,CAAC,MAAM,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,MAAM,CAAA,MAAA,CAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,EAAE,OAAO,CAAC,OAAO,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,EAAE,OAAO,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,MAAM,CAAA,OAAA,CAAS,EAAE,OAAO,CAAC,MAAM,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,EAAE,OAAO,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,CAAA,EAAG,MAAM,CAAA,IAAA,CAAM,EAAE,OAAO,CAAC,GAAG,CAAC;IAChD;AAEQ,IAAA,aAAa,CAAC,MAAW,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACvC,MAAM,UAAU,GAAG,MAAM,GAAG,eAAe,GAAG,gBAAgB;AAC9D,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC;QAE/D,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC;AAE5D,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC;QAC1C,MAAM,QAAQ,GAAG;AACf,cAAE;AACE,gBAAA,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACvB,gBAAA,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACzB,gBAAA,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACtB,gBAAA,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACzB;AACH,cAAE;AACE,gBAAA,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACvB,gBAAA,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACzB,gBAAA,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACtB,gBAAA,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;aACzB;AAEL,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1D,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CACxC,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtC,UAAU,EACV,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAChC;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAC1C,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACxC,UAAU,EACV,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAChC;AAED,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC;AACtC,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QAEnG,OAAO;AACL,YAAA,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;AAC1B,YAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AACxB,YAAA,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC;AAC3B,YAAA,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;AACzB,YAAA,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC;YAC7B,IAAI;YACJ,GAAG;SACJ;IACH;AAEQ,IAAA,mBAAmB,CAAC,KAAU,EAAE,UAAe,EAAE,KAAa,EAAA;AACpE,QAAA,OAAO,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI;AACzC,cAAE;cACA,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC;IAC9C;IAEQ,eAAe,GAAA;QACrB,IAAI,UAAU,GAAiB,IAAI;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI;AACF,gBAAA,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAU;YAC1F;AAAE,YAAA,MAAM;gBACN,UAAU,GAAG,IAAI;YACnB;QACF;QACA,MAAM,OAAO,GAAG,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM;;QAE/D,MAAM,OAAO,GAAU,OAAO,GAAI,UAAoB,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,MAAM,GAAG,OAAO;AACpG,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,MAAM,CAAC;IACvC;;IAGQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACtC,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,GAAG,8BAA8B,CAAC,CAAC,OAAO;IACvF;AAEQ,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AACrB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAC3E;AAAE,QAAA,MAAM;;QAER;IACF;8GAzKW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,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,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;AA6KD,SAAS,MAAM,CAAC,KAAa,EAAA;AAC3B,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACxC;;MCjOa,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAyBpD,IAAA;IAvBC,SAAS,CAAC,GAAW,EAAE,MAAgC,EAAA;AACrD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;IACnD;IAEA,cAAc,CAAC,GAAW,EAAE,MAAgC,EAAA;AAC1D,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;IAClD;AAEA,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW;IAC1C;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAC5C,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CACzB;IACH;8GAzBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;MA6BY,oBAAoB,GAAG,IAAI,cAAc,CAAsB,sBAAsB,EAAE;AAClG,IAAA,OAAO,EAAE,MAAM,IAAI,oBAAoB;AACxC,CAAA;AAEK,SAAU,kBAAkB,CAAC,QAAA,GAAsC,oBAAoB,EAAA;IAC3F,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC9D;;MCxCa,aAAa,CAAA;AAKxB,IAAA,WAAA,GAAA;AAJiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;AAIjE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;;AAErB,QAAA,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,aAAa,CAAC,CAChD,CAAC,SAAS,CAAC,MAAK;;AAEf,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;8GAhBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACFD,MAAM,aAAa,GACjB,wEAAwE;AACxE,IAAA,6EAA6E;AAE/E;;;;;;;;;;;;;;AAcG;MAEU,uBAAuB,CAAA;AAOlC,IAAA,WAAA,GAAA;AANiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3D,IAAA,CAAA,YAAY,GAAuB,IAAI;QACvC,IAAA,CAAA,eAAe,GAAuB,IAAI;AAGhD,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpD;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,OAAe,EAAE,UAAA,GAAkC,QAAQ,EAAA;QAClE,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACzC,QAAA,MAAM,CAAC,WAAW,GAAG,EAAE;;AAEvB,QAAA,MAAM,CAAC,WAAW,GAAG,OAAO;IAC9B;;IAGA,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,EAAE;QACzD,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,EAAE;IACjE;AAEQ,IAAA,SAAS,CAAC,UAA+B,EAAA;AAC/C,QAAA,IAAI,UAAU,KAAK,WAAW,EAAE;YAC9B,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;YACvD,OAAO,IAAI,CAAC,eAAe;QAC7B;QACA,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QACjD,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEQ,IAAA,YAAY,CAAC,UAA+B,EAAA;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACjD,QAAA,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC;AAC5C,QAAA,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AAC1C,QAAA,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,KAAK,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC5E,QAAA,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC;AAC3C,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACtC,QAAA,OAAO,MAAM;IACf;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;8GAtDW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACxBlC;;AAEG;;;;"}