novo-elements 13.4.0 → 13.6.0-next.1

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ElementRef, OnInit, AfterContentInit, AfterViewInit, OnDestroy, EventEmitter, QueryList, ChangeDetectorRef } from '@angular/core';
2
+ import { ElementRef, OnInit, AfterContentInit, AfterViewInit, OnDestroy, EventEmitter, QueryList, Renderer2, ChangeDetectorRef } from '@angular/core';
3
3
  import { NovoButtonElement } from 'novo-elements/elements/button';
4
4
  import * as i2 from 'novo-elements/elements/common';
5
5
  import { HasOverlayCtor, CanDisableCtor, HasTabIndexCtor, NovoOverlayTemplateComponent, NovoOptgroup, NovoOption } from 'novo-elements/elements/common';
@@ -31,11 +31,12 @@ declare class NovoDropdownElement extends NovoDropdownMixins implements OnInit,
31
31
  appendToBody: boolean;
32
32
  toggled: EventEmitter<boolean>;
33
33
  overlay: NovoOverlayTemplateComponent;
34
- _button: NovoButtonElement;
35
- _trigger: NovoDropDownTrigger;
34
+ _button: i0.Signal<NovoButtonElement>;
35
+ _trigger: i0.Signal<NovoDropDownTrigger>;
36
36
  optionGroups: QueryList<NovoOptgroup>;
37
37
  options: QueryList<NovoOption>;
38
38
  panel: ElementRef;
39
+ renderer: Renderer2;
39
40
  private clickHandler;
40
41
  private closeHandler;
41
42
  private _selectedOptionChanges;
@@ -51,7 +52,7 @@ declare class NovoDropdownElement extends NovoDropdownMixins implements OnInit,
51
52
  get scrollToActiveItemOnOpen(): boolean;
52
53
  set scrollToActiveItemOnOpen(value: boolean);
53
54
  private _scrollToActiveItemOnOpen;
54
- get button(): NovoDropDownTrigger | NovoButtonElement;
55
+ button: i0.Signal<HTMLElement>;
55
56
  constructor(element: ElementRef, ref: ChangeDetectorRef);
56
57
  ngOnInit(): void;
57
58
  ngAfterContentInit(): void;
@@ -61,6 +62,7 @@ declare class NovoDropdownElement extends NovoDropdownMixins implements OnInit,
61
62
  openPanel(): void;
62
63
  private findFirstSelectedOptionIndex;
63
64
  set items(items: QueryList<NovoItemElement>);
65
+ private _findNativeButton;
64
66
  /** Handles all keydown events on the dropdown. */
65
67
  _handleKeydown(event: KeyboardEvent): void;
66
68
  /** Handles keyboard events while the dropdown is closed. */
@@ -831,6 +831,7 @@ $bh2026-not-borderless: '';
831
831
  // ViewEncapsulation.None: use plain selectors (not :host-context which is Shadow DOM only)
832
832
  :root[data-theme='bh2026'] {
833
833
  label.novo-control-label {
834
+ &.novo-control-empty,
834
835
  &.novo-control-filled,
835
836
  &.novo-control-focused,
836
837
  &.novo-control-always-active {
@@ -840,6 +841,12 @@ $bh2026-not-borderless: '';
840
841
  text-transform: var(--typography-input-label-sm-text-transform);
841
842
  color: var(--color-text-body) !important;
842
843
  }
844
+ &.novo-control-empty {
845
+ transform: translateY(-100%) !important;
846
+ height: 1.5em !important;
847
+ top: 0 !important;
848
+ bottom: auto !important;
849
+ }
843
850
  }
844
851
  .novo-form-control-label {
845
852
  font-weight: var(--typography-input-label-md-font-weight) !important;
@@ -926,7 +933,8 @@ $bh2026-not-borderless: '';
926
933
 
927
934
  // Error: move negative border to container
928
935
  div.novo-control-input#{$bh2026-not-borderless}:has(input.ng-touched.ng-invalid:not(.ng-pristine)),
929
- div.novo-control-input#{$bh2026-not-borderless}:has(textarea.ng-touched.ng-invalid:not(.ng-pristine):not(.ng-valid)) {
936
+ div.novo-control-input#{$bh2026-not-borderless}:has(textarea.ng-touched.ng-invalid:not(.ng-pristine):not(.ng-valid)),
937
+ div.novo-control-input#{$bh2026-not-borderless}.control-invalid-touched {
930
938
  border-width: var(--field-border-width-negative);
931
939
  border-color: var(--field-color-border-negative);
932
940
  &:hover {
@@ -1044,7 +1052,6 @@ $bh2026-not-borderless: '';
1044
1052
  padding-top: 0;
1045
1053
  padding-left: 0;
1046
1054
  padding-right: 0;
1047
- margin-top: var(--spacing-margin);
1048
1055
  margin-bottom: 0;
1049
1056
 
1050
1057
  &:not(:has(> novo-fieldset-header)) {
@@ -1060,8 +1067,9 @@ $bh2026-not-borderless: '';
1060
1067
  novo-dynamic-form {
1061
1068
  max-width: 720px;
1062
1069
  width: 100%;
1063
- margin-left: auto;
1064
- margin-right: auto;
1070
+ margin-left: var(--spacing-gap-xlg);
1071
+ margin-right: 0;
1072
+ margin-top: var(--spacing-margin);
1065
1073
  }
1066
1074
 
1067
1075
  .novo-form-container form {
@@ -1072,6 +1080,10 @@ $bh2026-not-borderless: '';
1072
1080
  novo-fieldset {
1073
1081
  margin-top: 0;
1074
1082
  }
1083
+
1084
+ novo-fieldset + novo-fieldset:has(> .novo-fieldset-container.card-section) {
1085
+ margin-top: var(--spacing-gutter);
1086
+ }
1075
1087
  }
1076
1088
 
1077
1089
  .novo-form-row.hidden {
@@ -29,9 +29,6 @@
29
29
  white-space: pre-line;
30
30
  }
31
31
  }
32
- :root[data-theme='bh2026'] & {
33
- background-color: var(--background-muted);
34
- }
35
32
  }
36
33
 
37
34
  // Icon variant styling
@@ -65,3 +62,25 @@
65
62
  }
66
63
  }
67
64
  }
65
+
66
+ // bh2026: bordered card, 4px radius, body text; subtle variant gets muted background
67
+ :host-context([data-theme='bh2026']) {
68
+ > div {
69
+ border-radius: 4px;
70
+ border: 1px solid var(--color-border-default);
71
+ color: var(--color-text-body);
72
+ overflow: clip;
73
+
74
+ > div > p {
75
+ line-height: var(--typography-body-default-line-height, 20px);
76
+ }
77
+
78
+ > button {
79
+ font-size: var(--typography-button-sm-font-size, 12px);
80
+ }
81
+ }
82
+
83
+ &[data-variant='subtle'] > div {
84
+ background-color: var(--background-muted);
85
+ }
86
+ }
@@ -2,7 +2,7 @@ import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
2
2
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
3
  import { hasModifierKey } from '@angular/cdk/keycodes';
4
4
  import * as i0 from '@angular/core';
5
- import { Directive, EventEmitter, HostListener, Input, ViewChild, ContentChildren, ContentChild, Output, Component, NgModule } from '@angular/core';
5
+ import { Directive, EventEmitter, contentChild, inject, Renderer2, computed, HostListener, Input, ViewChild, ContentChildren, Output, Component, NgModule } from '@angular/core';
6
6
  import { Subscription, Subject, merge, of } from 'rxjs';
7
7
  import { takeUntil } from 'rxjs/operators';
8
8
  import { NovoButtonElement } from 'novo-elements/elements/button';
@@ -57,9 +57,6 @@ class NovoDropdownElement extends NovoDropdownMixins {
57
57
  set scrollToActiveItemOnOpen(value) {
58
58
  this._scrollToActiveItemOnOpen = coerceBooleanProperty(value);
59
59
  }
60
- get button() {
61
- return this._trigger || this._button;
62
- }
63
60
  constructor(element, ref) {
64
61
  super();
65
62
  this.element = element;
@@ -74,11 +71,17 @@ class NovoDropdownElement extends NovoDropdownMixins {
74
71
  this.width = -1; // Defaults to dynamic width (no hardcoded width value and no host width lookup)
75
72
  this.appendToBody = false; // Deprecated
76
73
  this.toggled = new EventEmitter();
74
+ this._button = contentChild(NovoButtonElement, ...(ngDevMode ? [{ debugName: "_button" }] : []));
75
+ this._trigger = contentChild(NovoDropDownTrigger, ...(ngDevMode ? [{ debugName: "_trigger" }] : []));
76
+ this.renderer = inject(Renderer2);
77
77
  this._selectedOptionChanges = Subscription.EMPTY;
78
78
  /** The Subject to complete all subscriptions when destroyed. */
79
79
  this._onDestroy = new Subject();
80
80
  this._multiple = false;
81
81
  this._scrollToActiveItemOnOpen = false;
82
+ this.button = computed(() => {
83
+ return this._trigger()?.element.nativeElement || this._button()?.element.nativeElement || this._findNativeButton();
84
+ }, ...(ngDevMode ? [{ debugName: "button" }] : []));
82
85
  this.clickHandler = this.togglePanel.bind(this);
83
86
  this.closeHandler = this.closePanel.bind(this);
84
87
  }
@@ -88,9 +91,16 @@ class NovoDropdownElement extends NovoDropdownMixins {
88
91
  }
89
92
  }
90
93
  ngAfterContentInit() {
94
+ const button = this.button();
95
+ if (!button) {
96
+ throw new Error(`A <novo-dropdown> component was configured without a content button associated. Expected one of the following:
97
+ <novo-dropdown><novo-button></novo-dropdown>
98
+ <novo-dropdown><button theme="..."></novo-dropdown>
99
+ <novo-dropdown><button></novo-dropdown>`);
100
+ }
91
101
  // Add a click handler to the button to toggle the menu
92
- this.button.element.nativeElement.addEventListener('click', this.clickHandler);
93
- this.button.element.nativeElement.tabIndex = -1;
102
+ this._onDestroy.subscribe(this.renderer.listen(button, 'click', this.clickHandler));
103
+ button.tabIndex = -1;
94
104
  this.options.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {
95
105
  this._initKeyManager();
96
106
  this._watchSelectionEvents();
@@ -105,10 +115,6 @@ class NovoDropdownElement extends NovoDropdownMixins {
105
115
  ngOnDestroy() {
106
116
  this._onDestroy.next();
107
117
  this._onDestroy.complete();
108
- // Remove listener
109
- if (this.button) {
110
- this.button.element.nativeElement.removeEventListener('click', this.clickHandler);
111
- }
112
118
  }
113
119
  focus(options) {
114
120
  if (!this.disabled) {
@@ -127,6 +133,10 @@ class NovoDropdownElement extends NovoDropdownMixins {
127
133
  });
128
134
  }
129
135
  set items(items) { }
136
+ // If the dropdown is using a basic <button> with no theme, it will not appear in the ContentChild directive.
137
+ _findNativeButton() {
138
+ return Array.prototype.find.call(this.element.nativeElement.children, element => element.tagName === 'BUTTON');
139
+ }
130
140
  /** Handles all keydown events on the dropdown. */
131
141
  _handleKeydown(event) {
132
142
  if (!this.disabled) {
@@ -246,7 +256,7 @@ class NovoDropdownElement extends NovoDropdownMixins {
246
256
  return 0;
247
257
  }
248
258
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: NovoDropdownElement, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
249
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: NovoDropdownElement, isStandalone: false, selector: "novo-dropdown", inputs: { parentScrollSelector: "parentScrollSelector", parentScrollAction: "parentScrollAction", containerClass: "containerClass", side: "side", scrollStrategy: "scrollStrategy", keepOpen: "keepOpen", height: "height", width: "width", appendToBody: "appendToBody", multiple: "multiple", scrollToActiveItemOnOpen: "scrollToActiveItemOnOpen" }, outputs: { toggled: "toggled" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, properties: { "attr.tabIndex": "disabled ? -1 : 0" } }, queries: [{ propertyName: "_button", first: true, predicate: NovoButtonElement, descendants: true }, { propertyName: "_trigger", first: true, predicate: NovoDropDownTrigger, descendants: true }, { propertyName: "optionGroups", predicate: NovoOptgroup, descendants: true }, { propertyName: "options", predicate: NovoOption, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: NovoOverlayTemplateComponent, descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
259
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.19", type: NovoDropdownElement, isStandalone: false, selector: "novo-dropdown", inputs: { parentScrollSelector: "parentScrollSelector", parentScrollAction: "parentScrollAction", containerClass: "containerClass", side: "side", scrollStrategy: "scrollStrategy", keepOpen: "keepOpen", height: "height", width: "width", appendToBody: "appendToBody", multiple: "multiple", scrollToActiveItemOnOpen: "scrollToActiveItemOnOpen" }, outputs: { toggled: "toggled" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, properties: { "attr.tabIndex": "disabled ? -1 : 0" } }, queries: [{ propertyName: "_button", first: true, predicate: NovoButtonElement, descendants: true, isSignal: true }, { propertyName: "_trigger", first: true, predicate: NovoDropDownTrigger, descendants: true, isSignal: true }, { propertyName: "optionGroups", predicate: NovoOptgroup, descendants: true }, { propertyName: "options", predicate: NovoOption, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: NovoOverlayTemplateComponent, descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
250
260
  <ng-content select="button,novo-button,[dropdownTrigger]" #trigger></ng-content>
251
261
  <novo-overlay-template [parent]="element" [width]="width" [position]="side" [scrollStrategy]="scrollStrategy">
252
262
  <div #panel class="dropdown-container {{ containerClass }}" [style.max-height.px]="height" [class.has-height]="!!height">
@@ -294,13 +304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
294
304
  }], overlay: [{
295
305
  type: ViewChild,
296
306
  args: [NovoOverlayTemplateComponent]
297
- }], _button: [{
298
- type: ContentChild,
299
- args: [NovoButtonElement]
300
- }], _trigger: [{
301
- type: ContentChild,
302
- args: [NovoDropDownTrigger]
303
- }], optionGroups: [{
307
+ }], _button: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NovoButtonElement), { isSignal: true }] }], _trigger: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NovoDropDownTrigger), { isSignal: true }] }], optionGroups: [{
304
308
  type: ContentChildren,
305
309
  args: [NovoOptgroup, { descendants: true }]
306
310
  }], options: [{
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-elements-dropdown.mjs","sources":["../../../projects/novo-elements/src/elements/dropdown/Dropdown.ts","../../../projects/novo-elements/src/elements/dropdown/Dropdown.module.ts","../../../projects/novo-elements/src/elements/dropdown/novo-elements-elements-dropdown.ts"],"sourcesContent":["// NG2\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n} from '@angular/core';\n// Vendor\nimport { merge, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n// App\nimport { NovoButtonElement } from 'novo-elements/elements/button';\nimport {\n CanDisableCtor,\n HasOverlayCtor,\n HasTabIndexCtor,\n mixinDisabled,\n mixinOverlay,\n mixinTabIndex,\n NovoOptgroup,\n NovoOption,\n NovoOptionSelectionChange,\n NovoOverlayTemplateComponent,\n _countGroupLabelsBeforeOption,\n _getOptionScrollPosition,\n} from 'novo-elements/elements/common';\nimport { BooleanInput, Key, notify } from 'novo-elements/utils';\n\n@Directive({\n selector: '[dropdownTrigger]',\n host: {\n class: 'novo-dropdown-trigger',\n },\n standalone: false,\n})\nexport class NovoDropDownTrigger {\n constructor(public element: ElementRef) {}\n}\n\n// Create Base Class from Mixins\n// Boilerplate for applying mixins\nclass NovoDropdownBase {\n constructor() {}\n}\nconst NovoDropdownMixins: HasOverlayCtor & CanDisableCtor & HasTabIndexCtor & typeof NovoDropdownBase = mixinOverlay(\n mixinTabIndex(mixinDisabled(NovoDropdownBase), 1),\n);\n\n@Component({\n selector: 'novo-dropdown',\n template: `\n <ng-content select=\"button,novo-button,[dropdownTrigger]\" #trigger></ng-content>\n <novo-overlay-template [parent]=\"element\" [width]=\"width\" [position]=\"side\" [scrollStrategy]=\"scrollStrategy\">\n <div #panel class=\"dropdown-container {{ containerClass }}\" [style.max-height.px]=\"height\" [class.has-height]=\"!!height\">\n <ng-content></ng-content>\n </div>\n </novo-overlay-template>\n `,\n styleUrls: ['./Dropdown.scss'],\n host: {\n '[attr.tabIndex]': 'disabled ? -1 : 0',\n },\n standalone: false,\n})\nexport class NovoDropdownElement extends NovoDropdownMixins implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n @Input()\n parentScrollSelector: string;\n @Input()\n parentScrollAction: string = 'close';\n @Input()\n containerClass: string;\n @Input()\n side:\n | 'default'\n | 'right'\n | 'above-below'\n | 'right-above-below'\n | 'center'\n | 'bottom'\n | 'bottom-left'\n | 'bottom-right'\n | 'top-left'\n | 'top-right' = 'default';\n @Input()\n scrollStrategy: 'reposition' | 'block' | 'close' = 'reposition';\n\n /**\n * Keep dropdown open after an item is selected\n */\n @Input()\n @BooleanInput()\n keepOpen: boolean = false;\n\n @Input()\n height: number;\n @Input()\n width: number = -1; // Defaults to dynamic width (no hardcoded width value and no host width lookup)\n @Input()\n appendToBody: boolean = false; // Deprecated\n @Output()\n toggled: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n\n @ContentChild(NovoButtonElement)\n _button: NovoButtonElement;\n @ContentChild(NovoDropDownTrigger)\n _trigger: NovoDropDownTrigger;\n\n @ContentChildren(NovoOptgroup, { descendants: true })\n optionGroups: QueryList<NovoOptgroup>;\n @ContentChildren(NovoOption, { descendants: true })\n options: QueryList<NovoOption>;\n @ViewChild('panel')\n panel: ElementRef;\n\n private clickHandler: any;\n private closeHandler: any;\n private _selectedOptionChanges = Subscription.EMPTY;\n /** The Subject to complete all subscriptions when destroyed. */\n private _onDestroy: Subject<void> = new Subject();\n /** The FocusKeyManager which handles focus. */\n private _keyManager: ActiveDescendantKeyManager<NovoOption>;\n\n /** Whether the user should be allowed to select multiple options. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n private _multiple: boolean = false;\n\n /** Whether the dropdown should scroll to the active item whenever it is opened. */\n @Input()\n get scrollToActiveItemOnOpen(): boolean {\n return this._scrollToActiveItemOnOpen;\n }\n set scrollToActiveItemOnOpen(value: boolean) {\n this._scrollToActiveItemOnOpen = coerceBooleanProperty(value);\n }\n private _scrollToActiveItemOnOpen: boolean = false;\n\n get button() {\n return this._trigger || this._button;\n }\n\n constructor(public element: ElementRef, private ref: ChangeDetectorRef) {\n super();\n this.clickHandler = this.togglePanel.bind(this);\n this.closeHandler = this.closePanel.bind(this);\n }\n\n public ngOnInit(): void {\n if (this.appendToBody) {\n notify('\\'appendToBody\\' has been deprecated. Please remove this attribute.');\n }\n }\n\n public ngAfterContentInit(): void {\n // Add a click handler to the button to toggle the menu\n this.button.element.nativeElement.addEventListener('click', this.clickHandler);\n this.button.element.nativeElement.tabIndex = -1;\n this.options.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n this._initKeyManager();\n this._watchSelectionEvents();\n });\n this._initKeyManager();\n this._watchSelectionEvents();\n this.focus();\n }\n\n public ngAfterViewInit(): void {\n this._watchPanelEvents();\n }\n\n public ngOnDestroy(): void {\n this._onDestroy.next();\n this._onDestroy.complete();\n // Remove listener\n if (this.button) {\n this.button.element.nativeElement.removeEventListener('click', this.clickHandler);\n }\n }\n\n focus(options?: FocusOptions): void {\n if (!this.disabled) {\n this.element.nativeElement.focus(options);\n }\n }\n\n openPanel(): void {\n super.openPanel()\n if (this.scrollToActiveItemOnOpen) {\n this._scrollOptionIntoView(this.findFirstSelectedOptionIndex(this.options) || 0)\n }\n }\n\n private findFirstSelectedOptionIndex(options: QueryList<NovoOption>): number | null {\n return options.toArray().findIndex((option: NovoOption) => {\n return option.selected === true;\n });\n }\n\n\n public set items(items: QueryList<NovoItemElement>) {}\n\n /** Handles all keydown events on the dropdown. */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n\n /** Handles keyboard events while the dropdown is closed. */\n private _handleClosedKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp || key === Key.ArrowLeft || key === Key.ArrowRight;\n const isOpenKey = key === Key.Enter || key === Key.Space;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native <select>\n if ((!manager.isTyping() && isOpenKey && !hasModifierKey(event)) || ((this.multiple || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.openPanel();\n }\n }\n\n /** Handles keyboard events when the dropdown is open. */\n private _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp;\n const isTyping = manager.isTyping();\n const isInputField = event.target;\n if (isArrowKey && event.altKey) {\n // Close the dropdown on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.closePanel();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (!isTyping && (key === Key.Enter || key === Key.Space) && manager.activeItem && !hasModifierKey(event)) {\n event.preventDefault();\n this._multiple ? manager.activeItem._selectViaInteraction() : manager.activeItem._clickViaInteraction();\n } else if (!isTyping && this._multiple && ['a', 'A'].includes(key) && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some((opt) => !opt.disabled && !opt.selected);\n this.options.forEach((option) => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else if (Key.Escape === key) {\n this.closePanel();\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n\n private _watchPanelEvents() {\n const panelStateChanges = merge(this.overlay.opening, this.overlay.closing);\n panelStateChanges.pipe(takeUntil(this._onDestroy)).subscribe((event: boolean) => this.toggled.emit(event));\n }\n\n private _watchSelectionEvents() {\n const selectionEvents = this.options ? merge(...this.options.map((option) => option.onSelectionChange)) : of();\n this._selectedOptionChanges.unsubscribe();\n this._selectedOptionChanges = selectionEvents.pipe(takeUntil(this._onDestroy)).subscribe((event: NovoOptionSelectionChange) => {\n if (event.isUserInput && !this.multiple) {\n this._clearPreviousSelectedOption(this._keyManager.activeItem);\n event.source.select();\n if (!this.keepOpen && this.panelOpen) {\n this.closePanel();\n this.focus();\n }\n } else {\n event.source.select();\n }\n });\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n private _clearPreviousSelectedOption(skip: NovoOption) {\n this.options.forEach((option) => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<NovoOption>(this.options).withTypeAhead(250).withHomeAndEnd();\n\n this._keyManager.tabOut.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen) {\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.closePanel();\n }\n });\n\n this._keyManager.change.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen && this.overlay) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n });\n }\n\n /** Scrolls the active option into view. */\n protected _scrollOptionIntoView(index: number): void {\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const itemHeight = this._getItemHeight();\n this.panel.nativeElement.scrollTop = _getOptionScrollPosition(\n (index + labelCount) * itemHeight,\n itemHeight,\n this.panel.nativeElement.scrollTop,\n this.panel.nativeElement.offsetHeight,\n );\n }\n\n /** Calculates the height of the select's options. */\n private _getItemHeight(): number {\n const [first] = this.options;\n if (first) {\n return first._getHostElement().offsetHeight;\n }\n return 0;\n }\n}\n\n// Deprecated below here ---------------------------\n\n@Component({\n selector: 'item',\n template: '<novo-option><ng-content></ng-content></novo-option>',\n host: {\n '[class.disabled]': 'disabled',\n '[class.active]': 'active',\n },\n standalone: false,\n})\nexport class NovoItemElement {\n @Input()\n public disabled: boolean;\n @Input()\n public keepOpen: boolean = false;\n @Output()\n public action: EventEmitter<any> = new EventEmitter();\n\n public active: boolean = false;\n\n constructor(private dropdown: NovoDropdownElement, public element: ElementRef) {\n notify('\\'item\\' element has been deprecated. Please use \\'novo-option\\' and \\'novo-optgroup\\'.');\n }\n\n @HostListener('click', ['$event'])\n public onClick(event: Event): void {\n // Poor man's disable\n if (!this.disabled) {\n // Close if keepOpen is false\n if (!this.keepOpen) {\n this.dropdown.closePanel();\n }\n // Emit the action\n this.action.emit({ originalEvent: event });\n }\n }\n}\n\n@Component({\n selector: 'list',\n template: '<ng-content></ng-content>',\n standalone: false,\n})\nexport class NovoDropdownListElement implements AfterContentInit {\n @ContentChildren(NovoItemElement)\n public items: QueryList<NovoItemElement>;\n\n constructor(private dropdown: NovoDropdownElement) {\n notify('\\'list\\' element has been deprecated. Please use novo-option and novo-optgroup.');\n }\n\n public ngAfterContentInit(): void {\n this.dropdown.items = this.items;\n this.items.changes.subscribe(() => {\n this.dropdown.items = this.items;\n });\n }\n}\n\n@Component({\n selector: 'dropdown-item-header',\n template: '<ng-content></ng-content>',\n standalone: false,\n})\nexport class NovoDropDownItemHeaderElement {\n constructor() {\n notify('\\'dropdown-item-header\\' element has been deprecated. Please use novo-option and novo-optgroup.');\n }\n}\n","// NG2\nimport { NgModule } from '@angular/core';\nimport { NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\n// APP\nimport {\n NovoDropdownElement,\n NovoDropDownItemHeaderElement,\n NovoDropdownListElement,\n NovoDropDownTrigger,\n NovoItemElement,\n} from './Dropdown';\n\n@NgModule({\n imports: [NovoOverlayModule, NovoOptionModule],\n declarations: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n exports: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n})\nexport class NovoDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novo-elements-elements-dropdown.mjs","sources":["../../../projects/novo-elements/src/elements/dropdown/Dropdown.ts","../../../projects/novo-elements/src/elements/dropdown/Dropdown.module.ts","../../../projects/novo-elements/src/elements/dropdown/novo-elements-elements-dropdown.ts"],"sourcesContent":["// NG2\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n ViewChild,\n} from '@angular/core';\n// Vendor\nimport { merge, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n// App\nimport { NovoButtonElement } from 'novo-elements/elements/button';\nimport {\n _countGroupLabelsBeforeOption,\n _getOptionScrollPosition,\n CanDisableCtor,\n HasOverlayCtor,\n HasTabIndexCtor,\n mixinDisabled,\n mixinOverlay,\n mixinTabIndex,\n NovoOptgroup,\n NovoOption,\n NovoOptionSelectionChange,\n NovoOverlayTemplateComponent,\n} from 'novo-elements/elements/common';\nimport { BooleanInput, Key, notify } from 'novo-elements/utils';\n\n@Directive({\n selector: '[dropdownTrigger]',\n host: {\n class: 'novo-dropdown-trigger',\n },\n standalone: false,\n})\nexport class NovoDropDownTrigger {\n constructor(public element: ElementRef) {}\n}\n\n// Create Base Class from Mixins\n// Boilerplate for applying mixins\nclass NovoDropdownBase {\n constructor() {}\n}\nconst NovoDropdownMixins: HasOverlayCtor & CanDisableCtor & HasTabIndexCtor & typeof NovoDropdownBase = mixinOverlay(\n mixinTabIndex(mixinDisabled(NovoDropdownBase), 1),\n);\n\n@Component({\n selector: 'novo-dropdown',\n template: `\n <ng-content select=\"button,novo-button,[dropdownTrigger]\" #trigger></ng-content>\n <novo-overlay-template [parent]=\"element\" [width]=\"width\" [position]=\"side\" [scrollStrategy]=\"scrollStrategy\">\n <div #panel class=\"dropdown-container {{ containerClass }}\" [style.max-height.px]=\"height\" [class.has-height]=\"!!height\">\n <ng-content></ng-content>\n </div>\n </novo-overlay-template>\n `,\n styleUrls: ['./Dropdown.scss'],\n host: {\n '[attr.tabIndex]': 'disabled ? -1 : 0',\n },\n standalone: false,\n})\nexport class NovoDropdownElement extends NovoDropdownMixins implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n @Input()\n parentScrollSelector: string;\n @Input()\n parentScrollAction: string = 'close';\n @Input()\n containerClass: string;\n @Input()\n side:\n | 'default'\n | 'right'\n | 'above-below'\n | 'right-above-below'\n | 'center'\n | 'bottom'\n | 'bottom-left'\n | 'bottom-right'\n | 'top-left'\n | 'top-right' = 'default';\n @Input()\n scrollStrategy: 'reposition' | 'block' | 'close' = 'reposition';\n\n /**\n * Keep dropdown open after an item is selected\n */\n @Input()\n @BooleanInput()\n keepOpen: boolean = false;\n\n @Input()\n height: number;\n @Input()\n width: number = -1; // Defaults to dynamic width (no hardcoded width value and no host width lookup)\n @Input()\n appendToBody: boolean = false; // Deprecated\n @Output()\n toggled: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n\n _button = contentChild(NovoButtonElement);\n _trigger = contentChild(NovoDropDownTrigger);\n\n @ContentChildren(NovoOptgroup, { descendants: true })\n optionGroups: QueryList<NovoOptgroup>;\n @ContentChildren(NovoOption, { descendants: true })\n options: QueryList<NovoOption>;\n @ViewChild('panel')\n panel: ElementRef;\n\n renderer = inject(Renderer2);\n\n private clickHandler: any;\n private closeHandler: any;\n private _selectedOptionChanges = Subscription.EMPTY;\n /** The Subject to complete all subscriptions when destroyed. */\n private _onDestroy: Subject<void> = new Subject();\n /** The FocusKeyManager which handles focus. */\n private _keyManager: ActiveDescendantKeyManager<NovoOption>;\n\n /** Whether the user should be allowed to select multiple options. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n private _multiple: boolean = false;\n\n /** Whether the dropdown should scroll to the active item whenever it is opened. */\n @Input()\n get scrollToActiveItemOnOpen(): boolean {\n return this._scrollToActiveItemOnOpen;\n }\n set scrollToActiveItemOnOpen(value: boolean) {\n this._scrollToActiveItemOnOpen = coerceBooleanProperty(value);\n }\n private _scrollToActiveItemOnOpen: boolean = false;\n\n button = computed<HTMLElement>(() => {\n return this._trigger()?.element.nativeElement || this._button()?.element.nativeElement || this._findNativeButton();\n });\n\n constructor(public element: ElementRef, private ref: ChangeDetectorRef) {\n super();\n this.clickHandler = this.togglePanel.bind(this);\n this.closeHandler = this.closePanel.bind(this);\n }\n\n public ngOnInit(): void {\n if (this.appendToBody) {\n notify('\\'appendToBody\\' has been deprecated. Please remove this attribute.');\n }\n }\n\n public ngAfterContentInit(): void {\n const button = this.button();\n if (!button) {\n throw new Error(`A <novo-dropdown> component was configured without a content button associated. Expected one of the following:\n <novo-dropdown><novo-button></novo-dropdown>\n <novo-dropdown><button theme=\"...\"></novo-dropdown>\n <novo-dropdown><button></novo-dropdown>`);\n }\n // Add a click handler to the button to toggle the menu\n this._onDestroy.subscribe(this.renderer.listen(button, 'click', this.clickHandler));\n button.tabIndex = -1;\n this.options.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n this._initKeyManager();\n this._watchSelectionEvents();\n });\n this._initKeyManager();\n this._watchSelectionEvents();\n this.focus();\n }\n\n public ngAfterViewInit(): void {\n this._watchPanelEvents();\n }\n\n public ngOnDestroy(): void {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n focus(options?: FocusOptions): void {\n if (!this.disabled) {\n this.element.nativeElement.focus(options);\n }\n }\n\n openPanel(): void {\n super.openPanel()\n if (this.scrollToActiveItemOnOpen) {\n this._scrollOptionIntoView(this.findFirstSelectedOptionIndex(this.options) || 0)\n }\n }\n\n private findFirstSelectedOptionIndex(options: QueryList<NovoOption>): number | null {\n return options.toArray().findIndex((option: NovoOption) => {\n return option.selected === true;\n });\n }\n\n\n public set items(items: QueryList<NovoItemElement>) {}\n\n // If the dropdown is using a basic <button> with no theme, it will not appear in the ContentChild directive.\n private _findNativeButton() {\n return Array.prototype.find.call(this.element.nativeElement.children,\n element => element.tagName === 'BUTTON');\n }\n\n /** Handles all keydown events on the dropdown. */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n\n /** Handles keyboard events while the dropdown is closed. */\n private _handleClosedKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp || key === Key.ArrowLeft || key === Key.ArrowRight;\n const isOpenKey = key === Key.Enter || key === Key.Space;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native <select>\n if ((!manager.isTyping() && isOpenKey && !hasModifierKey(event)) || ((this.multiple || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.openPanel();\n }\n }\n\n /** Handles keyboard events when the dropdown is open. */\n private _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp;\n const isTyping = manager.isTyping();\n const isInputField = event.target;\n if (isArrowKey && event.altKey) {\n // Close the dropdown on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.closePanel();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (!isTyping && (key === Key.Enter || key === Key.Space) && manager.activeItem && !hasModifierKey(event)) {\n event.preventDefault();\n this._multiple ? manager.activeItem._selectViaInteraction() : manager.activeItem._clickViaInteraction();\n } else if (!isTyping && this._multiple && ['a', 'A'].includes(key) && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some((opt) => !opt.disabled && !opt.selected);\n this.options.forEach((option) => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else if (Key.Escape === key) {\n this.closePanel();\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n\n private _watchPanelEvents() {\n const panelStateChanges = merge(this.overlay.opening, this.overlay.closing);\n panelStateChanges.pipe(takeUntil(this._onDestroy)).subscribe((event: boolean) => this.toggled.emit(event));\n }\n\n private _watchSelectionEvents() {\n const selectionEvents = this.options ? merge(...this.options.map((option) => option.onSelectionChange)) : of();\n this._selectedOptionChanges.unsubscribe();\n this._selectedOptionChanges = selectionEvents.pipe(takeUntil(this._onDestroy)).subscribe((event: NovoOptionSelectionChange) => {\n if (event.isUserInput && !this.multiple) {\n this._clearPreviousSelectedOption(this._keyManager.activeItem);\n event.source.select();\n if (!this.keepOpen && this.panelOpen) {\n this.closePanel();\n this.focus();\n }\n } else {\n event.source.select();\n }\n });\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n private _clearPreviousSelectedOption(skip: NovoOption) {\n this.options.forEach((option) => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<NovoOption>(this.options).withTypeAhead(250).withHomeAndEnd();\n\n this._keyManager.tabOut.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen) {\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.closePanel();\n }\n });\n\n this._keyManager.change.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen && this.overlay) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n });\n }\n\n /** Scrolls the active option into view. */\n protected _scrollOptionIntoView(index: number): void {\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const itemHeight = this._getItemHeight();\n this.panel.nativeElement.scrollTop = _getOptionScrollPosition(\n (index + labelCount) * itemHeight,\n itemHeight,\n this.panel.nativeElement.scrollTop,\n this.panel.nativeElement.offsetHeight,\n );\n }\n\n /** Calculates the height of the select's options. */\n private _getItemHeight(): number {\n const [first] = this.options;\n if (first) {\n return first._getHostElement().offsetHeight;\n }\n return 0;\n }\n}\n\n// Deprecated below here ---------------------------\n\n@Component({\n selector: 'item',\n template: '<novo-option><ng-content></ng-content></novo-option>',\n host: {\n '[class.disabled]': 'disabled',\n '[class.active]': 'active',\n },\n standalone: false,\n})\nexport class NovoItemElement {\n @Input()\n public disabled: boolean;\n @Input()\n public keepOpen: boolean = false;\n @Output()\n public action: EventEmitter<any> = new EventEmitter();\n\n public active: boolean = false;\n\n constructor(private dropdown: NovoDropdownElement, public element: ElementRef) {\n notify('\\'item\\' element has been deprecated. Please use \\'novo-option\\' and \\'novo-optgroup\\'.');\n }\n\n @HostListener('click', ['$event'])\n public onClick(event: Event): void {\n // Poor man's disable\n if (!this.disabled) {\n // Close if keepOpen is false\n if (!this.keepOpen) {\n this.dropdown.closePanel();\n }\n // Emit the action\n this.action.emit({ originalEvent: event });\n }\n }\n}\n\n@Component({\n selector: 'list',\n template: '<ng-content></ng-content>',\n standalone: false,\n})\nexport class NovoDropdownListElement implements AfterContentInit {\n @ContentChildren(NovoItemElement)\n public items: QueryList<NovoItemElement>;\n\n constructor(private dropdown: NovoDropdownElement) {\n notify('\\'list\\' element has been deprecated. Please use novo-option and novo-optgroup.');\n }\n\n public ngAfterContentInit(): void {\n this.dropdown.items = this.items;\n this.items.changes.subscribe(() => {\n this.dropdown.items = this.items;\n });\n }\n}\n\n@Component({\n selector: 'dropdown-item-header',\n template: '<ng-content></ng-content>',\n standalone: false,\n})\nexport class NovoDropDownItemHeaderElement {\n constructor() {\n notify('\\'dropdown-item-header\\' element has been deprecated. Please use novo-option and novo-optgroup.');\n }\n}\n","// NG2\nimport { NgModule } from '@angular/core';\nimport { NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\n// APP\nimport {\n NovoDropdownElement,\n NovoDropDownItemHeaderElement,\n NovoDropdownListElement,\n NovoDropDownTrigger,\n NovoItemElement,\n} from './Dropdown';\n\n@NgModule({\n imports: [NovoOverlayModule, NovoOptionModule],\n declarations: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n exports: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n})\nexport class NovoDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;MAqDa,mBAAmB,CAAA;AAC9B,IAAA,WAAA,CAAmB,OAAmB,EAAA;QAAnB,IAAA,CAAA,OAAO,GAAP,OAAO;IAAe;+GAD9B,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,uBAAuB;AACjC,qBAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;AAKD;AACA;AACA,MAAM,gBAAgB,CAAA;AACpB,IAAA,WAAA,GAAA,EAAe;AAChB;AACD,MAAM,kBAAkB,GAAgF,YAAY,CAClH,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAClD;AAkBK,MAAO,mBAAoB,SAAQ,kBAAkB,CAAA;;AA8DzD,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;IAC/C;;AAIA,IAAA,IACI,wBAAwB,GAAA;QAC1B,OAAO,IAAI,CAAC,yBAAyB;IACvC;IACA,IAAI,wBAAwB,CAAC,KAAc,EAAA;AACzC,QAAA,IAAI,CAAC,yBAAyB,GAAG,qBAAqB,CAAC,KAAK,CAAC;IAC/D;IAOA,WAAA,CAAmB,OAAmB,EAAU,GAAsB,EAAA;AACpE,QAAA,KAAK,EAAE;QADU,IAAA,CAAA,OAAO,GAAP,OAAO;QAAsB,IAAA,CAAA,GAAG,GAAH,GAAG;QAjFnD,IAAA,CAAA,kBAAkB,GAAW,OAAO;QAIpC,IAAA,CAAA,IAAI,GAUc,SAAS;QAE3B,IAAA,CAAA,cAAc,GAAqC,YAAY;AAE/D;;AAEG;QAGH,IAAA,CAAA,QAAQ,GAAY,KAAK;AAKzB,QAAA,IAAA,CAAA,KAAK,GAAW,CAAC,CAAC,CAAC;AAEnB,QAAA,IAAA,CAAA,YAAY,GAAY,KAAK,CAAC;AAE9B,QAAA,IAAA,CAAA,OAAO,GAA0B,IAAI,YAAY,EAAW;AAK5D,QAAA,IAAA,CAAA,OAAO,GAAG,YAAY,CAAC,iBAAiB,mDAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAC,mBAAmB,oDAAC;AAS5C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAIpB,QAAA,IAAA,CAAA,sBAAsB,GAAG,YAAY,CAAC,KAAK;;AAE3C,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAE;QAYzC,IAAA,CAAA,SAAS,GAAY,KAAK;QAU1B,IAAA,CAAA,yBAAyB,GAAY,KAAK;AAElD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAc,MAAK;YAClC,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACpH,QAAA,CAAC,kDAAC;QAIA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,CAAC,qEAAqE,CAAC;QAC/E;IACF;IAEO,kBAAkB,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,CAAA;;;AAG0B,+CAAA,CAAA,CAAC;QAC7C;;QAEA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACnF,QAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACnE,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,qBAAqB,EAAE;AAC9B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,KAAK,EAAE;IACd;IAEO,eAAe,GAAA;QACpB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC5B;AAEA,IAAA,KAAK,CAAC,OAAsB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C;IACF;IAEA,SAAS,GAAA;QACP,KAAK,CAAC,SAAS,EAAE;AACjB,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClF;IACF;AAEQ,IAAA,4BAA4B,CAAC,OAA8B,EAAA;QACjE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,MAAkB,KAAI;AACxD,YAAA,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI;AACjC,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,IAAW,KAAK,CAAC,KAAiC,EAAA,EAAG;;IAG7C,iBAAiB,GAAA;QACvB,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAClE,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC;IAC5C;;AAIA,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QACpF;IACF;;AAGQ,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,MAAM,UAAU,GAAG,GAAG,KAAA,WAAA,wBAAsB,GAAG,KAAA,SAAA,sBAAoB,GAAG,KAAA,WAAA,wBAAsB,GAAG;AAC/F,QAAA,MAAM,SAAS,GAAG,GAAG,gCAAkB,GAAG;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;;AAEhC,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE;AACnH,YAAA,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;;AAGQ,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAChC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,MAAM,UAAU,GAAG,GAAG,wCAAsB,GAAG;AAC/C,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;AACnC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM;AACjC,QAAA,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE;;YAE9B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;;;QAGnB;aAAO,IAAI,CAAC,QAAQ,KAAK,GAAG,KAAA,OAAA,oBAAkB,GAAG,KAAA,GAAA,iBAAe,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YAChH,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE;QACzG;aAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;YACnF,KAAK,CAAC,cAAc,EAAE;YACtB,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,oBAAA,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;gBAC5D;AACF,YAAA,CAAC,CAAC;QACJ;aAAO,IAAI,QAAA,sBAAe,GAAG,EAAE;YAC7B,IAAI,CAAC,UAAU,EAAE;QACnB;aAAO;AACL,YAAA,MAAM,sBAAsB,GAAG,OAAO,CAAC,eAAe;AACtD,YAAA,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;YACxB,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,eAAe,KAAK,sBAAsB,EAAE;AAC9H,gBAAA,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE;YAC5C;QACF;IACF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3E,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAc,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5G;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE,EAAE;AAC9G,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,sBAAsB,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAgC,KAAI;YAC5H,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACvC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC9D,gBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;oBACpC,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,KAAK,EAAE;gBACd;YACF;iBAAO;AACL,gBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;AACA;;AAEG;AACK,IAAA,4BAA4B,CAAC,IAAgB,EAAA;QACnD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACtC,MAAM,CAAC,QAAQ,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;;IAGQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,0BAA0B,CAAa,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE;AAE/G,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtE,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;;gBAGlB,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACtE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;gBAClC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC;YACnE;AACF,QAAA,CAAC,CAAC;IACJ;;AAGU,IAAA,qBAAqB,CAAC,KAAa,EAAA;AAC3C,QAAA,MAAM,UAAU,GAAG,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;AACxF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,GAAG,wBAAwB,CAC3D,CAAC,KAAK,GAAG,UAAU,IAAI,UAAU,EACjC,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAClC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CACtC;IACH;;IAGQ,cAAc,GAAA;AACpB,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO;QAC5B,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,KAAK,CAAC,eAAe,EAAE,CAAC,YAAY;QAC7C;AACA,QAAA,OAAO,CAAC;IACV;+GAzRW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyCP,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAChB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAE1B,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAEZ,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EARhB,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApD3B;;;;;;;AAOX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0zDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,eAAA,EAAA,aAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;AAkCD,UAAA,CAAA;AADC,IAAA,YAAY,EAAE;;AACW,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;4FA3Bf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhB/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,QAAA,EACf;;;;;;;GAOX,EAAA,IAAA,EAEO;AACF,wBAAA,iBAAiB,EAAE,mBAAmB;AACzC,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,MAAA,EAAA,CAAA,0zDAAA,CAAA,EAAA;;sBAGlB;;sBAEA;;sBAEA;;sBAEA;;sBAYA;;sBAMA;;sBAIA;;sBAEA;;sBAEA;;sBAEA;;sBAGA,SAAS;uBAAC,4BAA4B;AAGhB,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,iBAAiB,0FAChB,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA;sBAE1C,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAEnD,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAEjD,SAAS;uBAAC,OAAO;;sBAcjB;;sBAUA;;sBAmFA,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;AAiIrC;MAWa,eAAe,CAAA;IAU1B,WAAA,CAAoB,QAA6B,EAAS,OAAmB,EAAA;QAAzD,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAA8B,IAAA,CAAA,OAAO,GAAP,OAAO;QAN1D,IAAA,CAAA,QAAQ,GAAY,KAAK;AAEzB,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE;QAE9C,IAAA,CAAA,MAAM,GAAY,KAAK;QAG5B,MAAM,CAAC,yFAAyF,CAAC;IACnG;AAGO,IAAA,OAAO,CAAC,KAAY,EAAA;;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAElB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC5B;;YAEA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC5C;IACF;+GAzBW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,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,SAAA,EAAA,IAAA,EAAA,eAAe,qRAPd,sDAAsD,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAOvD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,QAAQ,EAAE,sDAAsD;AAChE,oBAAA,IAAI,EAAE;AACF,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,gBAAgB,EAAE,QAAQ;AAC7B,qBAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEE;;sBAEA;;sBAEA;;sBASA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;MAmBtB,uBAAuB,CAAA;AAIlC,IAAA,WAAA,CAAoB,QAA6B,EAAA;QAA7B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAC1B,MAAM,CAAC,iFAAiF,CAAC;IAC3F;IAEO,kBAAkB,GAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;YAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAClC,QAAA,CAAC,CAAC;IACJ;+GAbW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAvB,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EACjB,eAAe,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJpB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAG5B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;sBAEE,eAAe;uBAAC,eAAe;;MAoBrB,6BAA6B,CAAA;AACxC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,iGAAiG,CAAC;IAC3G;+GAHW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,iFAH5B,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAG5B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,KAAK;AACpB,iBAAA;;;AC9aD;MAiBa,kBAAkB,CAAA;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAHd,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAA,EAAA,OAAA,EAAA,CADtH,iBAAiB,EAAE,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAEnC,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;gHAEhH,kBAAkB,EAAA,OAAA,EAAA,CAJnB,iBAAiB,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA;;4FAIlC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;oBAC9C,YAAY,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAC;oBACjI,OAAO,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAC;AAC7H,iBAAA;;;AChBD;;AAEG;;;;"}