@ngstarter-ui/components 21.0.20 → 21.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/component-registry.json +17 -7
- package/fesm2022/ngstarter-ui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-bottom-sheet.mjs +13 -24
- package/fesm2022/ngstarter-ui-components-bottom-sheet.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-chips.mjs +9 -9
- package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-datepicker.mjs +7 -2
- package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-sidenav.mjs +1 -4
- package/fesm2022/ngstarter-ui-components-sidenav.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-sort.mjs +4 -4
- package/fesm2022/ngstarter-ui-components-sort.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-stepper.mjs +19 -10
- package/fesm2022/ngstarter-ui-components-stepper.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-timepicker.mjs +43 -27
- package/fesm2022/ngstarter-ui-components-timepicker.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-tree.mjs +5 -3
- package/fesm2022/ngstarter-ui-components-tree.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngstarter-ui-components-bottom-sheet.d.ts +1 -3
- package/types/ngstarter-ui-components-sidenav.d.ts +0 -2
- package/types/ngstarter-ui-components-sort.d.ts +5 -5
- package/types/ngstarter-ui-components-stepper.d.ts +2 -2
- package/types/ngstarter-ui-components-timepicker.d.ts +8 -6
|
@@ -1671,6 +1671,7 @@
|
|
|
1671
1671
|
"--ngs-chip-font-weight",
|
|
1672
1672
|
"--ngs-chip-height",
|
|
1673
1673
|
"--ngs-chip-input-height",
|
|
1674
|
+
"--ngs-chip-listbox-gap",
|
|
1674
1675
|
"--ngs-chip-outline-color",
|
|
1675
1676
|
"--ngs-chip-padding",
|
|
1676
1677
|
"--ngs-chip-radius",
|
|
@@ -8370,25 +8371,34 @@
|
|
|
8370
8371
|
"name": "sort",
|
|
8371
8372
|
"title": "Sort",
|
|
8372
8373
|
"overviewName": "Sort",
|
|
8373
|
-
"category":
|
|
8374
|
+
"category": "components",
|
|
8374
8375
|
"package": "@ngstarter-ui/components",
|
|
8375
8376
|
"importPath": "@ngstarter-ui/components/sort",
|
|
8376
8377
|
"publicApi": "projects/components/sort/public-api.ts",
|
|
8377
8378
|
"sourceRoot": "projects/components/sort/src",
|
|
8378
|
-
"docsPath":
|
|
8379
|
-
"docsOverviewSource":
|
|
8379
|
+
"docsPath": "/components/sort",
|
|
8380
|
+
"docsOverviewSource": "projects/docs/src/app/components/sort/overview/overview.html",
|
|
8380
8381
|
"purpose": "Provide sortable header behavior and sort state for table-like data.",
|
|
8381
8382
|
"useWhen": "Use ngsSort on a sortable table/list/data container and ngs-sort-header=\"fieldName\" on header cells that should cycle through sort states. Sort tracks active column and direction (asc, desc, or cleared), supports ngsSortActive, ngsSortDirection, ngsSortStart, ngsSortDisableClear, ngsSortDisabled, per-header disabled state, sortActionDescription, and emits ngsSortChange with { active, direction }. Use it with Table sortable column headers, custom table-like data surfaces, and when wiring sort state into a local TableDataSource or server/API query. For DataView, usually prefer its built-in sortable column config and sortChange instead of manually adding ngs-sort-header. Do not use Sort as a visual sort icon only, filter builder, search, grouping, drag reorder, tab sorting, or generic “sort these cards” button. Sort only manages header state and emits the selected sort; the app/data source still applies local sorting or sends the sort state to the backend.",
|
|
8382
|
-
"exampleTopics": [
|
|
8383
|
-
|
|
8384
|
-
|
|
8383
|
+
"exampleTopics": [
|
|
8384
|
+
"Basic Sort"
|
|
8385
|
+
],
|
|
8386
|
+
"minimalExample": "<div class=\"border border-muted rounded-xl overflow-hidden\">\n <table ngs-table [dataSource]=\"dataSource\" ngsSort (ngsSortChange)=\"announceSortChange($event)\">\n <ng-container ngsColumnDef=\"invoice\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"invoice\" sortActionDescription=\"Sort by invoice\">\n Invoice\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">{{ invoice.invoice }}</td>\n </ng-container>\n <ng-container ngsColumnDef=\"customer\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"customer\" sortActionDescription=\"Sort by customer\">\n Customer\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">{{ invoice.customer }}</td>\n </ng-container>\n <ng-container ngsColumnDef=\"total\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"total\" sortActionDescription=\"Sort by total\">\n Total\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">${{ invoice.total }}</td>\n </ng-container>\n <ng-container ngsColumnDef=\"status\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"status\" sortActionDescription=\"Sort by status\">\n Status\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">{{ invoice.status }}</td>\n </ng-container>\n <tr ngs-header-row *ngsHeaderRowDef=\"displayedColumns\"></tr>\n <tr ngs-row *ngsRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n</div>",
|
|
8387
|
+
"exampleFiles": [
|
|
8388
|
+
{
|
|
8389
|
+
"name": "basic-sort-example",
|
|
8390
|
+
"title": "Basic sort",
|
|
8391
|
+
"file": "projects/docs/src/app/components/sort/_examples/basic-sort-example/basic-sort-example.html",
|
|
8392
|
+
"source": "<div class=\"border border-muted rounded-xl overflow-hidden\">\n <table ngs-table [dataSource]=\"dataSource\" ngsSort (ngsSortChange)=\"announceSortChange($event)\">\n <ng-container ngsColumnDef=\"invoice\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"invoice\" sortActionDescription=\"Sort by invoice\">\n Invoice\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">{{ invoice.invoice }}</td>\n </ng-container>\n <ng-container ngsColumnDef=\"customer\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"customer\" sortActionDescription=\"Sort by customer\">\n Customer\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">{{ invoice.customer }}</td>\n </ng-container>\n <ng-container ngsColumnDef=\"total\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"total\" sortActionDescription=\"Sort by total\">\n Total\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">${{ invoice.total }}</td>\n </ng-container>\n <ng-container ngsColumnDef=\"status\">\n <th ngs-header-cell *ngsHeaderCellDef ngs-sort-header=\"status\" sortActionDescription=\"Sort by status\">\n Status\n </th>\n <td ngs-cell *ngsCellDef=\"let invoice\">{{ invoice.status }}</td>\n </ng-container>\n <tr ngs-header-row *ngsHeaderRowDef=\"displayedColumns\"></tr>\n <tr ngs-row *ngsRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n</div>"
|
|
8393
|
+
}
|
|
8394
|
+
],
|
|
8385
8395
|
"previewAsset": "projects/components/sort/preview.svg",
|
|
8386
8396
|
"selectors": [
|
|
8387
8397
|
"[ngs-sort-header]",
|
|
8388
8398
|
"[ngsSort]"
|
|
8389
8399
|
],
|
|
8390
8400
|
"exportedSymbols": [
|
|
8391
|
-
"
|
|
8401
|
+
"NgsSort",
|
|
8392
8402
|
"Sort",
|
|
8393
8403
|
"SORT",
|
|
8394
8404
|
"SortDirection",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-autocomplete.mjs","sources":["../../../projects/components/autocomplete/src/autocomplete/autocomplete.ts","../../../projects/components/autocomplete/src/autocomplete/autocomplete.html","../../../projects/components/autocomplete/src/autocomplete-trigger.ts","../../../projects/components/autocomplete/ngstarter-ui-components-autocomplete.ts"],"sourcesContent":["import {\n Component,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n output,\n ElementRef,\n input,\n booleanAttribute,\n EventEmitter,\n Output,\n Input,\n signal,\n forwardRef,\n contentChildren\n} from '@angular/core';\nimport { Option, OPTION_PARENT, _OptionParent } from '@ngstarter-ui/components/option';\nimport { NgClass } from '@angular/common';\n\nlet nextId = 0;\n\nexport interface AutocompleteActivatedEvent {\n source: Autocomplete;\n option: Option | null;\n}\n\nexport interface AutocompleteSelectedEvent {\n source: Autocomplete;\n option: Option;\n}\n\n@Component({\n selector: 'ngs-autocomplete',\n exportAs: 'ngsAutocomplete',\n imports: [\n NgClass\n ],\n templateUrl: './autocomplete.html',\n styleUrl: './autocomplete.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: OPTION_PARENT,\n useExisting: forwardRef(() => Autocomplete)\n }\n ]\n})\nexport class Autocomplete implements _OptionParent {\n readonly options = contentChildren(Option, { descendants: true });\n\n multiple = signal(false);\n readonly template = viewChild.required(TemplateRef);\n readonly panel = viewChild<ElementRef<HTMLElement>>('panel');\n\n id = `ngs-autocomplete-${nextId++}`;\n\n ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n autoActiveFirstOption = input(false, { transform: booleanAttribute });\n autoSelectActiveOption = input(false, { transform: booleanAttribute });\n classList = input<string | string[] | undefined>(undefined, { alias: 'class' });\n disableRipple = input(false, { transform: booleanAttribute });\n displayWith = input<(value: any) => string | null>(() => null);\n hideSingleSelectionIndicator = input(false, { transform: booleanAttribute });\n panelWidth = input<string | number | undefined>(undefined);\n requireSelection = input(false, { transform: booleanAttribute });\n\n closed = output<void>();\n opened = output<void>();\n optionActivated = output<AutocompleteActivatedEvent>();\n optionSelected = output<AutocompleteSelectedEvent>();\n\n _emitSelectEvent(option: Option): void {\n this.optionSelected.emit({ source: this, option });\n }\n}\n","<ng-template>\n <div class=\"ngs-autocomplete-panel\"\n role=\"listbox\"\n [id]=\"id\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [ngClass]=\"classList()\"\n #panel>\n <ng-content />\n </div>\n</ng-template>\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n ViewContainerRef,\n effect,\n Injector,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Autocomplete } from './autocomplete/autocomplete';\nimport { fromEvent, Subscription, merge } from 'rxjs';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Option } from '@ngstarter-ui/components/option';\nimport { FormField } from '@ngstarter-ui/components/form-field';\nimport { ChipInput } from '@ngstarter-ui/components/chips';\n\n@Directive({\n selector: '[ngsAutocomplete]',\n exportAs: 'ngsAutocompleteTrigger',\n host: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n '(input)': '_handleInput()',\n '(focusin)': '_handleFocus()',\n '(click)': '_handleClick()',\n '(keydown)': '_handleKeydown($event)',\n }\n})\nexport class AutocompleteTrigger implements OnDestroy {\n private _elementRef = inject(ElementRef<HTMLInputElement>);\n private _overlay = inject(Overlay);\n private _viewContainerRef = inject(ViewContainerRef);\n private _formField = inject(FormField, { optional: true });\n private _chipInput = inject(ChipInput, { optional: true });\n private _injector = inject(Injector);\n\n autocomplete = input.required<Autocomplete>({alias: 'ngsAutocomplete'});\n\n private _overlayRef: OverlayRef | null = null;\n private _portal: TemplatePortal | null = null;\n private _closingSubscription = Subscription.EMPTY;\n private _keyManager!: ActiveDescendantKeyManager<Option>;\n private _canOpenOnInput = true;\n private _resizeObserver: ResizeObserver | null = null;\n private _optionsSubscription = Subscription.EMPTY;\n\n constructor() {\n effect(() => {\n const chipsLength = this._chipInput?.chipGrid?.chipsLength;\n\n if (chipsLength === 0 && this.panelOpen) {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n\n ngOnDestroy() {\n this._destroyOverlay();\n this._stopResizeObserver();\n this._optionsSubscription.unsubscribe();\n }\n\n private _startResizeObserver() {\n this._resizeObserver = new ResizeObserver(() => {\n this.updatePosition();\n });\n this._resizeObserver.observe(this._getConnectedElement().nativeElement);\n }\n\n private _stopResizeObserver() {\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n }\n\n _handleInput(): void {\n if (!this.panelOpen && this._canOpenOnInput) {\n this.openPanel();\n }\n this._syncSelectedOption();\n }\n\n private _syncSelectedOption(): void {\n const value = this._elementRef.nativeElement.value;\n this.autocomplete().options().forEach(option => {\n if (value && option.viewValue.toLowerCase() === value.toLowerCase()) {\n option.select();\n } else {\n option.deselect();\n }\n });\n }\n\n _handleFocus(): void {\n if (!this.panelOpen && this._canOpenOnInput) {\n this.openPanel();\n }\n this._syncSelectedOption();\n }\n\n _handleClick(): void {\n if (!this.panelOpen && this._canOpenOnInput) {\n this.openPanel();\n }\n this._syncSelectedOption();\n }\n\n _handleKeydown(event: KeyboardEvent): void {\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.key === 'Escape' && this.panelOpen) {\n this.closePanel();\n event.stopPropagation();\n } else if (this._keyManager) {\n const activeItemBefore = this._keyManager.activeItem;\n this._keyManager.onKeydown(event);\n\n if (event.key === 'Enter' && this._keyManager.activeItem && this._keyManager.activeItem === activeItemBefore) {\n this._selectOption(this._keyManager.activeItem);\n event.preventDefault();\n }\n }\n }\n\n get panelOpen(): boolean {\n return !!this._overlayRef && this._overlayRef.hasAttached();\n }\n\n openPanel(): void {\n if (this.panelOpen || !this.autocomplete().options().length) {\n return;\n }\n\n if (!this._overlayRef) {\n this._createOverlay();\n }\n\n this._updatePanelWidth();\n\n if (!this._overlayRef!.hasAttached()) {\n this._portal = new TemplatePortal(this.autocomplete().template(), this._viewContainerRef);\n this._overlayRef!.attach(this._portal);\n this._closingSubscription = this._subscribeToClosingIndices();\n this._setupSelectionListeners();\n this._startResizeObserver();\n this.autocomplete().opened.emit();\n }\n\n this._initKeyManager();\n this._setActiveItem();\n }\n\n private _setActiveItem(): void {\n const value = this._elementRef.nativeElement.value;\n\n if (this.autocomplete().options().length > 0) {\n const activeOption = this.autocomplete().options().find(option => {\n return option.viewValue.toLowerCase() === value.toLowerCase();\n });\n\n if (activeOption) {\n this._keyManager.setActiveItem(activeOption);\n } else {\n if (value && this.autocomplete().autoActiveFirstOption()) {\n this._keyManager.setFirstItemActive();\n } else {\n this._keyManager.setActiveItem(-1);\n }\n }\n\n this._scrollToOption();\n }\n }\n\n private _scrollToOption(): void {\n const index = this._keyManager.activeItemIndex || 0;\n const option = this.autocomplete().options()[index];\n\n if (option && this.autocomplete().panel()) {\n const panel = this.autocomplete().panel()!.nativeElement;\n const optionElement = option.elementRef.nativeElement;\n const panelTop = panel.scrollTop;\n const panelBottom = panelTop + panel.clientHeight;\n const optionTop = optionElement.offsetTop;\n const optionBottom = optionTop + optionElement.clientHeight;\n\n if (optionTop < panelTop) {\n panel.scrollTop = optionTop;\n } else if (optionBottom > panelBottom) {\n panel.scrollTop = optionBottom - panel.clientHeight;\n }\n }\n }\n\n closePanel(): void {\n if (this.panelOpen) {\n this._overlayRef!.detach();\n this._closingSubscription.unsubscribe();\n this._stopResizeObserver();\n\n if (this.autocomplete().requireSelection() && !this._elementRef.nativeElement.value) {\n this._elementRef.nativeElement.value = '';\n this._elementRef.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n this.autocomplete().closed.emit();\n }\n }\n\n updatePosition(): void {\n if (this._overlayRef) {\n this._updatePanelWidth();\n this._overlayRef.updatePosition();\n }\n }\n\n private _getConnectedElement(): ElementRef {\n if (this._formField) {\n return this._formField.wrapper();\n }\n\n return this._elementRef;\n }\n\n private _getPanelWidth(): number | string {\n return this.autocomplete().panelWidth() || this._getConnectedElement().nativeElement.offsetWidth;\n }\n\n private _createOverlay(): void {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._getConnectedElement())\n .withPositions([\n {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}\n ]);\n\n this._overlayRef = this._overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\n width: this._getPanelWidth(),\n });\n }\n\n private _destroyOverlay(): void {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n private _subscribeToClosingIndices(): Subscription {\n const backdropClick = this._overlayRef!.backdropClick();\n const detachments = this._overlayRef!.detachments();\n const outsidePointerEvents = this._overlayRef!.outsidePointerEvents();\n\n return merge(backdropClick, detachments, outsidePointerEvents).subscribe((event) => {\n if (event instanceof MouseEvent) {\n if (this._elementRef.nativeElement.contains(event.target as Node)) {\n return;\n }\n\n const connectedElement = this._getConnectedElement().nativeElement;\n\n if (connectedElement.contains(event.target as Node)) {\n return;\n }\n }\n\n this.closePanel();\n });\n }\n\n private _initKeyManager(): void {\n if (this._keyManager) {\n return;\n }\n\n this._keyManager = new ActiveDescendantKeyManager<Option>(this.autocomplete().options())\n .withWrap()\n .withTypeAhead();\n\n this._optionsSubscription = toObservable(this.autocomplete().options, { injector: this._injector }).subscribe(() => {\n this._setupSelectionListeners();\n this._setActiveItem();\n this._syncSelectedOption();\n\n if (this.autocomplete().options().length === 0 && this.panelOpen) {\n this.closePanel();\n } else if (this.autocomplete().options().length > 0 && !this.panelOpen && this._elementRef.nativeElement === document.activeElement && this._canOpenOnInput) {\n this.openPanel();\n }\n });\n\n this._keyManager.change.subscribe(() => {\n this._scrollToOption();\n\n if (this.autocomplete().autoSelectActiveOption() && this._keyManager.activeItem) {\n this._selectOption(this._keyManager.activeItem);\n }\n\n this.autocomplete().optionActivated.emit({\n source: this.autocomplete(),\n option: this._keyManager.activeItem\n });\n });\n }\n\n private _setupSelectionListeners(): void {\n this.autocomplete().options().forEach(option => {\n // Prevent input from losing focus on mousedown, but do not select yet\n const mousedownSub = fromEvent<MouseEvent>(option.elementRef.nativeElement, 'mousedown').subscribe((event) => {\n event.preventDefault();\n });\n // Select option on click (after mouseup) to match native/select behavior\n const clickSub = fromEvent<MouseEvent>(option.elementRef.nativeElement, 'click').subscribe((event) => {\n if (option.disabled) {\n event.preventDefault();\n return;\n }\n this._selectOption(option);\n });\n if (this._closingSubscription && !this._closingSubscription.closed) {\n this._closingSubscription.add(mousedownSub);\n this._closingSubscription.add(clickSub);\n }\n });\n }\n\n private _updatePanelWidth(): void {\n if (this._overlayRef) {\n this._overlayRef.updateSize({\n width: this._getPanelWidth()\n });\n }\n }\n\n private _selectOption(option: Option): void {\n const value = option.viewValue;\n this.autocomplete().options().forEach(o => o.deselect());\n option.select();\n this._canOpenOnInput = false;\n this._elementRef.nativeElement.value = value;\n this._elementRef.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n this._elementRef.nativeElement.dispatchEvent(new Event('change', { bubbles: true }));\n this.autocomplete()._emitSelectEvent(option);\n this.closePanel();\n setTimeout(() => this._canOpenOnInput = true);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-autocomplete.mjs","sources":["../../../projects/components/autocomplete/src/autocomplete/autocomplete.ts","../../../projects/components/autocomplete/src/autocomplete/autocomplete.html","../../../projects/components/autocomplete/src/autocomplete-trigger.ts","../../../projects/components/autocomplete/ngstarter-ui-components-autocomplete.ts"],"sourcesContent":["import {\n Component,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n output,\n ElementRef,\n input,\n booleanAttribute,\n signal,\n forwardRef,\n contentChildren\n} from '@angular/core';\nimport { Option, OPTION_PARENT, _OptionParent } from '@ngstarter-ui/components/option';\nimport { NgClass } from '@angular/common';\n\nlet nextId = 0;\n\nexport interface AutocompleteActivatedEvent {\n source: Autocomplete;\n option: Option | null;\n}\n\nexport interface AutocompleteSelectedEvent {\n source: Autocomplete;\n option: Option;\n}\n\n@Component({\n selector: 'ngs-autocomplete',\n exportAs: 'ngsAutocomplete',\n imports: [\n NgClass\n ],\n templateUrl: './autocomplete.html',\n styleUrl: './autocomplete.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: OPTION_PARENT,\n useExisting: forwardRef(() => Autocomplete)\n }\n ],\n})\nexport class Autocomplete implements _OptionParent {\n readonly options = contentChildren(Option, { descendants: true });\n\n multiple = signal(false);\n readonly template = viewChild.required(TemplateRef);\n readonly panel = viewChild<ElementRef<HTMLElement>>('panel');\n\n id = `ngs-autocomplete-${nextId++}`;\n\n ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n autoActiveFirstOption = input(false, { transform: booleanAttribute });\n autoSelectActiveOption = input(false, { transform: booleanAttribute });\n classList = input<string | string[] | undefined>(undefined, { alias: 'class' });\n disableRipple = input(false, { transform: booleanAttribute });\n displayWith = input<(value: any) => string | null>(() => null);\n hideSingleSelectionIndicator = input(false, { transform: booleanAttribute });\n panelWidth = input<string | number | undefined>(undefined);\n requireSelection = input(false, { transform: booleanAttribute });\n\n closed = output<void>();\n opened = output<void>();\n optionActivated = output<AutocompleteActivatedEvent>();\n optionSelected = output<AutocompleteSelectedEvent>();\n\n _emitSelectEvent(option: Option): void {\n this.optionSelected.emit({ source: this, option });\n }\n}\n","<ng-template>\n <div class=\"ngs-autocomplete-panel\"\n role=\"listbox\"\n [id]=\"id\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [ngClass]=\"classList()\"\n #panel>\n <ng-content />\n </div>\n</ng-template>\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n ViewContainerRef,\n effect,\n Injector,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Autocomplete } from './autocomplete/autocomplete';\nimport { fromEvent, Subscription, merge } from 'rxjs';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { Option } from '@ngstarter-ui/components/option';\nimport { FormField } from '@ngstarter-ui/components/form-field';\nimport { ChipInput } from '@ngstarter-ui/components/chips';\n\n@Directive({\n selector: '[ngsAutocomplete]',\n exportAs: 'ngsAutocompleteTrigger',\n host: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n '(input)': '_handleInput()',\n '(focusin)': '_handleFocus()',\n '(click)': '_handleClick()',\n '(keydown)': '_handleKeydown($event)',\n }\n})\nexport class AutocompleteTrigger implements OnDestroy {\n private _elementRef = inject(ElementRef<HTMLInputElement>);\n private _overlay = inject(Overlay);\n private _viewContainerRef = inject(ViewContainerRef);\n private _formField = inject(FormField, { optional: true });\n private _chipInput = inject(ChipInput, { optional: true });\n private _injector = inject(Injector);\n\n autocomplete = input.required<Autocomplete>({alias: 'ngsAutocomplete'});\n\n private _overlayRef: OverlayRef | null = null;\n private _portal: TemplatePortal | null = null;\n private _closingSubscription = Subscription.EMPTY;\n private _keyManager!: ActiveDescendantKeyManager<Option>;\n private _canOpenOnInput = true;\n private _resizeObserver: ResizeObserver | null = null;\n private _optionsSubscription = Subscription.EMPTY;\n\n constructor() {\n effect(() => {\n const chipsLength = this._chipInput?.chipGrid?.chipsLength;\n\n if (chipsLength === 0 && this.panelOpen) {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n\n ngOnDestroy() {\n this._destroyOverlay();\n this._stopResizeObserver();\n this._optionsSubscription.unsubscribe();\n }\n\n private _startResizeObserver() {\n this._resizeObserver = new ResizeObserver(() => {\n this.updatePosition();\n });\n this._resizeObserver.observe(this._getConnectedElement().nativeElement);\n }\n\n private _stopResizeObserver() {\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n }\n\n _handleInput(): void {\n if (!this.panelOpen && this._canOpenOnInput) {\n this.openPanel();\n }\n this._syncSelectedOption();\n }\n\n private _syncSelectedOption(): void {\n const value = this._elementRef.nativeElement.value;\n this.autocomplete().options().forEach(option => {\n if (value && option.viewValue.toLowerCase() === value.toLowerCase()) {\n option.select();\n } else {\n option.deselect();\n }\n });\n }\n\n _handleFocus(): void {\n if (!this.panelOpen && this._canOpenOnInput) {\n this.openPanel();\n }\n this._syncSelectedOption();\n }\n\n _handleClick(): void {\n if (!this.panelOpen && this._canOpenOnInput) {\n this.openPanel();\n }\n this._syncSelectedOption();\n }\n\n _handleKeydown(event: KeyboardEvent): void {\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.key === 'Escape' && this.panelOpen) {\n this.closePanel();\n event.stopPropagation();\n } else if (this._keyManager) {\n const activeItemBefore = this._keyManager.activeItem;\n this._keyManager.onKeydown(event);\n\n if (event.key === 'Enter' && this._keyManager.activeItem && this._keyManager.activeItem === activeItemBefore) {\n this._selectOption(this._keyManager.activeItem);\n event.preventDefault();\n }\n }\n }\n\n get panelOpen(): boolean {\n return !!this._overlayRef && this._overlayRef.hasAttached();\n }\n\n openPanel(): void {\n if (this.panelOpen || !this.autocomplete().options().length) {\n return;\n }\n\n if (!this._overlayRef) {\n this._createOverlay();\n }\n\n this._updatePanelWidth();\n\n if (!this._overlayRef!.hasAttached()) {\n this._portal = new TemplatePortal(this.autocomplete().template(), this._viewContainerRef);\n this._overlayRef!.attach(this._portal);\n this._closingSubscription = this._subscribeToClosingIndices();\n this._setupSelectionListeners();\n this._startResizeObserver();\n this.autocomplete().opened.emit();\n }\n\n this._initKeyManager();\n this._setActiveItem();\n }\n\n private _setActiveItem(): void {\n const value = this._elementRef.nativeElement.value;\n\n if (this.autocomplete().options().length > 0) {\n const activeOption = this.autocomplete().options().find(option => {\n return option.viewValue.toLowerCase() === value.toLowerCase();\n });\n\n if (activeOption) {\n this._keyManager.setActiveItem(activeOption);\n } else {\n if (value && this.autocomplete().autoActiveFirstOption()) {\n this._keyManager.setFirstItemActive();\n } else {\n this._keyManager.setActiveItem(-1);\n }\n }\n\n this._scrollToOption();\n }\n }\n\n private _scrollToOption(): void {\n const index = this._keyManager.activeItemIndex || 0;\n const option = this.autocomplete().options()[index];\n\n if (option && this.autocomplete().panel()) {\n const panel = this.autocomplete().panel()!.nativeElement;\n const optionElement = option.elementRef.nativeElement;\n const panelTop = panel.scrollTop;\n const panelBottom = panelTop + panel.clientHeight;\n const optionTop = optionElement.offsetTop;\n const optionBottom = optionTop + optionElement.clientHeight;\n\n if (optionTop < panelTop) {\n panel.scrollTop = optionTop;\n } else if (optionBottom > panelBottom) {\n panel.scrollTop = optionBottom - panel.clientHeight;\n }\n }\n }\n\n closePanel(): void {\n if (this.panelOpen) {\n this._overlayRef!.detach();\n this._closingSubscription.unsubscribe();\n this._stopResizeObserver();\n\n if (this.autocomplete().requireSelection() && !this._elementRef.nativeElement.value) {\n this._elementRef.nativeElement.value = '';\n this._elementRef.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n this.autocomplete().closed.emit();\n }\n }\n\n updatePosition(): void {\n if (this._overlayRef) {\n this._updatePanelWidth();\n this._overlayRef.updatePosition();\n }\n }\n\n private _getConnectedElement(): ElementRef {\n if (this._formField) {\n return this._formField.wrapper();\n }\n\n return this._elementRef;\n }\n\n private _getPanelWidth(): number | string {\n return this.autocomplete().panelWidth() || this._getConnectedElement().nativeElement.offsetWidth;\n }\n\n private _createOverlay(): void {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._getConnectedElement())\n .withPositions([\n {originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top'},\n {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}\n ]);\n\n this._overlayRef = this._overlay.create({\n positionStrategy: strategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\n width: this._getPanelWidth(),\n });\n }\n\n private _destroyOverlay(): void {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n private _subscribeToClosingIndices(): Subscription {\n const backdropClick = this._overlayRef!.backdropClick();\n const detachments = this._overlayRef!.detachments();\n const outsidePointerEvents = this._overlayRef!.outsidePointerEvents();\n\n return merge(backdropClick, detachments, outsidePointerEvents).subscribe((event) => {\n if (event instanceof MouseEvent) {\n if (this._elementRef.nativeElement.contains(event.target as Node)) {\n return;\n }\n\n const connectedElement = this._getConnectedElement().nativeElement;\n\n if (connectedElement.contains(event.target as Node)) {\n return;\n }\n }\n\n this.closePanel();\n });\n }\n\n private _initKeyManager(): void {\n if (this._keyManager) {\n return;\n }\n\n this._keyManager = new ActiveDescendantKeyManager<Option>(this.autocomplete().options())\n .withWrap()\n .withTypeAhead();\n\n this._optionsSubscription = toObservable(this.autocomplete().options, { injector: this._injector }).subscribe(() => {\n this._setupSelectionListeners();\n this._setActiveItem();\n this._syncSelectedOption();\n\n if (this.autocomplete().options().length === 0 && this.panelOpen) {\n this.closePanel();\n } else if (this.autocomplete().options().length > 0 && !this.panelOpen && this._elementRef.nativeElement === document.activeElement && this._canOpenOnInput) {\n this.openPanel();\n }\n });\n\n this._keyManager.change.subscribe(() => {\n this._scrollToOption();\n\n if (this.autocomplete().autoSelectActiveOption() && this._keyManager.activeItem) {\n this._selectOption(this._keyManager.activeItem);\n }\n\n this.autocomplete().optionActivated.emit({\n source: this.autocomplete(),\n option: this._keyManager.activeItem\n });\n });\n }\n\n private _setupSelectionListeners(): void {\n this.autocomplete().options().forEach(option => {\n // Prevent input from losing focus on mousedown, but do not select yet\n const mousedownSub = fromEvent<MouseEvent>(option.elementRef.nativeElement, 'mousedown').subscribe((event) => {\n event.preventDefault();\n });\n // Select option on click (after mouseup) to match native/select behavior\n const clickSub = fromEvent<MouseEvent>(option.elementRef.nativeElement, 'click').subscribe((event) => {\n if (option.disabled) {\n event.preventDefault();\n return;\n }\n this._selectOption(option);\n });\n if (this._closingSubscription && !this._closingSubscription.closed) {\n this._closingSubscription.add(mousedownSub);\n this._closingSubscription.add(clickSub);\n }\n });\n }\n\n private _updatePanelWidth(): void {\n if (this._overlayRef) {\n this._overlayRef.updateSize({\n width: this._getPanelWidth()\n });\n }\n }\n\n private _selectOption(option: Option): void {\n const value = option.viewValue;\n this.autocomplete().options().forEach(o => o.deselect());\n option.select();\n this._canOpenOnInput = false;\n this._elementRef.nativeElement.value = value;\n this._elementRef.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n this._elementRef.nativeElement.dispatchEvent(new Event('change', { bubbles: true }));\n this.autocomplete()._emitSelectEvent(option);\n this.closePanel();\n setTimeout(() => this._canOpenOnInput = true);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAiBA,IAAI,MAAM,GAAG,CAAC;MA6BD,YAAY,CAAA;IACd,OAAO,GAAG,eAAe,CAAC,MAAM,+EAAI,WAAW,EAAE,IAAI,EAAA,CAAG;AAEjE,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACf,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1C,IAAA,KAAK,GAAG,SAAS,CAA0B,OAAO,4EAAC;AAE5D,IAAA,EAAE,GAAG,CAAA,iBAAA,EAAoB,MAAM,EAAE,EAAE;IAEnC,SAAS,GAAG,KAAK,CAAqB,SAAS,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;IACzE,cAAc,GAAG,KAAK,CAAqB,SAAS,sFAAI,KAAK,EAAE,iBAAiB,EAAA,CAAG;IACnF,qBAAqB,GAAG,KAAK,CAAC,KAAK,6FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACrE,sBAAsB,GAAG,KAAK,CAAC,KAAK,8FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACtE,SAAS,GAAG,KAAK,CAAgC,SAAS,iFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;IAC/E,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAC7D,WAAW,GAAG,KAAK,CAAgC,MAAM,IAAI,kFAAC;IAC9D,4BAA4B,GAAG,KAAK,CAAC,KAAK,oGAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC5E,IAAA,UAAU,GAAG,KAAK,CAA8B,SAAS,iFAAC;IAC1D,gBAAgB,GAAG,KAAK,CAAC,KAAK,wFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEhE,MAAM,GAAG,MAAM,EAAQ;IACvB,MAAM,GAAG,MAAM,EAAQ;IACvB,eAAe,GAAG,MAAM,EAA8B;IACtD,cAAc,GAAG,MAAM,EAA6B;AAEpD,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACpD;uGA3BW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,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,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,4BAAA,EAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,8BAAA,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,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAPZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY;AAC3C;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAGkC,MAAM,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGF,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClDpD,qSAWA,otBDsBI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAaE,YAAY,EAAA,UAAA,EAAA,CAAA;kBAjBxB,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAClB,iBAAiB,EAAA,OAAA,EAClB;wBACP;AACD,qBAAA,EAAA,aAAA,EAGc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB;AAC3C;AACF,qBAAA,EAAA,QAAA,EAAA,qSAAA,EAAA,MAAA,EAAA,CAAA,4pBAAA,CAAA,EAAA;+FAGkC,MAAM,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGzB,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACE,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,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,OAAA,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,4BAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,8BAAA,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,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,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,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MElBhD,mBAAmB,CAAA;AACtB,IAAA,WAAW,GAAG,MAAM,EAAC,UAA4B,EAAC;AAClD,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC5C,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClD,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClD,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEpC,YAAY,GAAG,KAAK,CAAC,QAAQ,mFAAgB,KAAK,EAAE,iBAAiB,EAAA,CAAE;IAE/D,WAAW,GAAsB,IAAI;IACrC,OAAO,GAA0B,IAAI;AACrC,IAAA,oBAAoB,GAAG,YAAY,CAAC,KAAK;AACzC,IAAA,WAAW;IACX,eAAe,GAAG,IAAI;IACtB,eAAe,GAA0B,IAAI;AAC7C,IAAA,oBAAoB,GAAG,YAAY,CAAC,KAAK;AAEjD,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW;YAE1D,IAAI,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACvC,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;YACxC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;IACzC;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAAC,MAAK;YAC7C,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC;IACzE;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE;AAClC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE;YAC3C,IAAI,CAAC,SAAS,EAAE;QAClB;QACA,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEQ,mBAAmB,GAAA;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;AAC7C,YAAA,IAAI,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,EAAE;gBACnE,MAAM,CAAC,MAAM,EAAE;YACjB;iBAAO;gBACL,MAAM,CAAC,QAAQ,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE;YAC3C,IAAI,CAAC,SAAS,EAAE;QAClB;QACA,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE;YAC3C,IAAI,CAAC,SAAS,EAAE;QAClB;QACA,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC1B;QACF;QAEA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YAC5C,IAAI,CAAC,UAAU,EAAE;YACjB,KAAK,CAAC,eAAe,EAAE;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAC3B,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;YAEjC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,KAAK,gBAAgB,EAAE;gBAC5G,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;gBAC/C,KAAK,CAAC,cAAc,EAAE;YACxB;QACF;IACF;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;IAC7D;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;YAC3D;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,cAAc,EAAE;QACvB;QAEA,IAAI,CAAC,iBAAiB,EAAE;QAExB,IAAI,CAAC,IAAI,CAAC,WAAY,CAAC,WAAW,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC;YACzF,IAAI,CAAC,WAAY,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,EAAE;YAC7D,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;QACnC;QAEA,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,cAAc,EAAE;IACvB;IAEQ,cAAc,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;AAElD,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAG;gBAC/D,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;AAC/D,YAAA,CAAC,CAAC;YAEF,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC;YAC9C;iBAAO;gBACL,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,qBAAqB,EAAE,EAAE;AACxD,oBAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;gBACvC;qBAAO;oBACL,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACpC;YACF;YAEA,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEQ,eAAe,GAAA;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;QAEnD,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,EAAG,CAAC,aAAa;AACxD,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa;AACrD,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS;AAChC,YAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC,YAAY;AACjD,YAAA,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS;AACzC,YAAA,MAAM,YAAY,GAAG,SAAS,GAAG,aAAa,CAAC,YAAY;AAE3D,YAAA,IAAI,SAAS,GAAG,QAAQ,EAAE;AACxB,gBAAA,KAAK,CAAC,SAAS,GAAG,SAAS;YAC7B;AAAO,iBAAA,IAAI,YAAY,GAAG,WAAW,EAAE;gBACrC,KAAK,CAAC,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC,YAAY;YACrD;QACF;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,WAAY,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE;YACvC,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;gBACnF,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACrF;YAEA,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;QACnC;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;QACnC;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAClC;QAEA,OAAO,IAAI,CAAC,WAAW;IACzB;IAEQ,cAAc,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,WAAW;IAClG;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC/C,aAAA,aAAa,CAAC;AACb,YAAA,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAC;AACzE,YAAA,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;AACzE,SAAA,CAAC;QAEJ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,YAAA,gBAAgB,EAAE,QAAQ;YAC1B,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE;AAC7B,SAAA,CAAC;IACJ;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;IAEQ,0BAA0B,GAAA;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAY,CAAC,aAAa,EAAE;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAY,CAAC,WAAW,EAAE;QACnD,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAY,CAAC,oBAAoB,EAAE;AAErE,QAAA,OAAO,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACjF,YAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AAC/B,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;oBACjE;gBACF;gBAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,aAAa;gBAElE,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;oBACnD;gBACF;YACF;YAEA,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,0BAA0B,CAAS,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE;AACpF,aAAA,QAAQ;AACR,aAAA,aAAa,EAAE;QAElB,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;YACjH,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChE,IAAI,CAAC,UAAU,EAAE;YACnB;AAAO,iBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE;gBAC3J,IAAI,CAAC,SAAS,EAAE;YAClB;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YACrC,IAAI,CAAC,eAAe,EAAE;AAEtB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;gBAC/E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YACjD;AAEA,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;AACvC,gBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3B,gBAAA,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;AAC1B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,wBAAwB,GAAA;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;;AAE7C,YAAA,MAAM,YAAY,GAAG,SAAS,CAAa,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;gBAC3G,KAAK,CAAC,cAAc,EAAE;AACxB,YAAA,CAAC,CAAC;;AAEF,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAa,MAAM,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACnG,gBAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACnB,KAAK,CAAC,cAAc,EAAE;oBACtB;gBACF;AACA,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5B,YAAA,CAAC,CAAC;YACF,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;AAClE,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC;AAC3C,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzC;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC1B,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc;AAC3B,aAAA,CAAC;QACJ;IACF;AAEQ,IAAA,aAAa,CAAC,MAAc,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS;AAC9B,QAAA,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxD,MAAM,CAAC,MAAM,EAAE;AACf,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE;QACjB,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC/C;uGAlUW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,IAAI,EAAE;AACJ,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,WAAW,EAAE,gBAAgB;AAC7B,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,WAAW,EAAE,wBAAwB;AACtC;AACF,iBAAA;;;AChCD;;AAEG;;;;"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, EventEmitter,
|
|
2
|
+
import { InjectionToken, EventEmitter, ChangeDetectionStrategy, Component, inject, Injector, Injectable } from '@angular/core';
|
|
3
3
|
import { CdkDialogContainer, Dialog } from '@angular/cdk/dialog';
|
|
4
4
|
import { Overlay } from '@angular/cdk/overlay';
|
|
5
|
-
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
|
|
6
5
|
import { CdkPortalOutlet } from '@angular/cdk/portal';
|
|
7
6
|
import { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';
|
|
8
7
|
import { Subject } from 'rxjs';
|
|
@@ -62,25 +61,12 @@ class BottomSheetConfig {
|
|
|
62
61
|
* @docs-private
|
|
63
62
|
*/
|
|
64
63
|
class BottomSheetContainer extends CdkDialogContainer {
|
|
65
|
-
_breakpointSubscription;
|
|
66
64
|
/** The state of the bottom sheet animations. */
|
|
67
65
|
_animationState = 'void';
|
|
68
66
|
/** Emits whenever the state of the animation changes. */
|
|
69
67
|
_animationStateChanged = new EventEmitter();
|
|
70
68
|
/** Whether the component has been destroyed. */
|
|
71
69
|
_destroyed = false;
|
|
72
|
-
constructor() {
|
|
73
|
-
super();
|
|
74
|
-
const breakpointObserver = inject(BreakpointObserver);
|
|
75
|
-
this._breakpointSubscription = breakpointObserver
|
|
76
|
-
.observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])
|
|
77
|
-
.subscribe(() => {
|
|
78
|
-
const classList = this._elementRef.nativeElement.classList;
|
|
79
|
-
classList.toggle('ngs-bottom-sheet-container-medium', breakpointObserver.isMatched(Breakpoints.Medium));
|
|
80
|
-
classList.toggle('ngs-bottom-sheet-container-large', breakpointObserver.isMatched(Breakpoints.Large));
|
|
81
|
-
classList.toggle('ngs-bottom-sheet-container-xlarge', breakpointObserver.isMatched(Breakpoints.XLarge));
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
70
|
/** Begin animation of bottom sheet entrance into view. */
|
|
85
71
|
enter() {
|
|
86
72
|
if (!this._destroyed) {
|
|
@@ -97,7 +83,6 @@ class BottomSheetContainer extends CdkDialogContainer {
|
|
|
97
83
|
}
|
|
98
84
|
ngOnDestroy() {
|
|
99
85
|
super.ngOnDestroy();
|
|
100
|
-
this._breakpointSubscription.unsubscribe();
|
|
101
86
|
this._destroyed = true;
|
|
102
87
|
}
|
|
103
88
|
_onTransitionEnd(event) {
|
|
@@ -110,12 +95,14 @@ class BottomSheetContainer extends CdkDialogContainer {
|
|
|
110
95
|
});
|
|
111
96
|
}
|
|
112
97
|
}
|
|
113
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: BottomSheetContainer, deps:
|
|
114
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: BottomSheetContainer, isStandalone: true, selector: "ngs-bottom-sheet-container", host: { attributes: { "tabindex": "-1" }, listeners: { "transitionend": "_onTransitionEnd($event)" }, properties: { "attr.role": "_config.role", "attr.aria-modal": "_config.ariaModal", "attr.aria-label": "_config.ariaLabel", "class.ngs-bottom-sheet-container-visible": "_animationState === \"visible\"", "class.ngs-bottom-sheet-container-hidden": "_animationState === \"hidden\"" }, classAttribute: "ngs-bottom-sheet-container" }, usesInheritance: true, ngImport: i0, template: '<ng-template cdkPortalOutlet />', isInline: true, styles: ["
|
|
98
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: BottomSheetContainer, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
99
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: BottomSheetContainer, isStandalone: true, selector: "ngs-bottom-sheet-container", host: { attributes: { "tabindex": "-1" }, listeners: { "transitionend": "_onTransitionEnd($event)" }, properties: { "attr.role": "_config.role", "attr.aria-modal": "_config.ariaModal", "attr.aria-label": "_config.ariaLabel", "class.ngs-bottom-sheet-container-visible": "_animationState === \"visible\"", "class.ngs-bottom-sheet-container-hidden": "_animationState === \"hidden\"" }, classAttribute: "ngs-bottom-sheet-container" }, exportAs: ["ngsBottomSheetContainer"], usesInheritance: true, ngImport: i0, template: '<ng-template cdkPortalOutlet />', isInline: true, styles: [":host{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f;padding:8px 16px;min-width:512px;max-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto;position:relative;background:var(--ngs-bottom-sheet-container-background-color, white);color:var(--ngs-bottom-sheet-container-text-color, black);border-top-left-radius:var(--ngs-bottom-sheet-container-shape, 28px);border-top-right-radius:var(--ngs-bottom-sheet-container-shape, 28px);visibility:hidden;transform:translateY(100%);transition:transform .3s cubic-bezier(.4,0,.2,1),visibility .3s}:host.ngs-bottom-sheet-container-visible{transform:translateY(0);visibility:visible;transition-timing-function:cubic-bezier(0,0,.2,1)}:host.ngs-bottom-sheet-container-hidden{transform:translateY(100%);visibility:hidden}@media(forced-colors:active){:host{outline:1px solid}}@media(max-width:599px){:host{width:100vw;min-width:100vw;border-top-left-radius:0;border-top-right-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
115
100
|
}
|
|
116
101
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: BottomSheetContainer, decorators: [{
|
|
117
102
|
type: Component,
|
|
118
|
-
args: [{ selector: 'ngs-bottom-sheet-container',
|
|
103
|
+
args: [{ selector: 'ngs-bottom-sheet-container', exportAs: 'ngsBottomSheetContainer', imports: [
|
|
104
|
+
CdkPortalOutlet
|
|
105
|
+
], template: '<ng-template cdkPortalOutlet />', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
119
106
|
'class': 'ngs-bottom-sheet-container',
|
|
120
107
|
'tabindex': '-1',
|
|
121
108
|
'[attr.role]': '_config.role',
|
|
@@ -124,8 +111,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
|
|
|
124
111
|
'[class.ngs-bottom-sheet-container-visible]': '_animationState === "visible"',
|
|
125
112
|
'[class.ngs-bottom-sheet-container-hidden]': '_animationState === "hidden"',
|
|
126
113
|
'(transitionend)': '_onTransitionEnd($event)',
|
|
127
|
-
}, styles: ["
|
|
128
|
-
}]
|
|
114
|
+
}, styles: [":host{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f;padding:8px 16px;min-width:512px;max-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto;position:relative;background:var(--ngs-bottom-sheet-container-background-color, white);color:var(--ngs-bottom-sheet-container-text-color, black);border-top-left-radius:var(--ngs-bottom-sheet-container-shape, 28px);border-top-right-radius:var(--ngs-bottom-sheet-container-shape, 28px);visibility:hidden;transform:translateY(100%);transition:transform .3s cubic-bezier(.4,0,.2,1),visibility .3s}:host.ngs-bottom-sheet-container-visible{transform:translateY(0);visibility:visible;transition-timing-function:cubic-bezier(0,0,.2,1)}:host.ngs-bottom-sheet-container-hidden{transform:translateY(100%);visibility:hidden}@media(forced-colors:active){:host{outline:1px solid}}@media(max-width:599px){:host{width:100vw;min-width:100vw;border-top-left-radius:0;border-top-right-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
115
|
+
}] });
|
|
129
116
|
|
|
130
117
|
/**
|
|
131
118
|
* Reference to a bottom sheet dispatched from the BottomSheet service.
|
|
@@ -162,14 +149,14 @@ class BottomSheetRef {
|
|
|
162
149
|
this.disableClose = config.disableClose;
|
|
163
150
|
// Emit when opening animation completes
|
|
164
151
|
containerInstance._animationStateChanged
|
|
165
|
-
.pipe(filter((event) => event.phase === 'done' && event.toState === 'visible'), take(1))
|
|
152
|
+
.pipe(filter((event) => (event.phaseName ?? event.phase) === 'done' && event.toState === 'visible'), take(1))
|
|
166
153
|
.subscribe(() => {
|
|
167
154
|
this._afterOpened.next();
|
|
168
155
|
this._afterOpened.complete();
|
|
169
156
|
});
|
|
170
157
|
// Dispose overlay when closing animation is complete
|
|
171
158
|
containerInstance._animationStateChanged
|
|
172
|
-
.pipe(filter((event) => event.phase === 'done' && (event.toState === 'hidden' || event.toState === 'void')), take(1))
|
|
159
|
+
.pipe(filter((event) => (event.phaseName ?? event.phase) === 'done' && (event.toState === 'hidden' || event.toState === 'void')), take(1))
|
|
173
160
|
.subscribe(() => {
|
|
174
161
|
if (this._closeFallbackTimeout) {
|
|
175
162
|
clearTimeout(this._closeFallbackTimeout);
|
|
@@ -256,7 +243,7 @@ class BottomSheet {
|
|
|
256
243
|
open(componentOrTemplateRef, config) {
|
|
257
244
|
const _config = { ...(this._defaultOptions || new BottomSheetConfig()), ...config };
|
|
258
245
|
let ref;
|
|
259
|
-
this._dialog.open(componentOrTemplateRef, {
|
|
246
|
+
const cdkRef = this._dialog.open(componentOrTemplateRef, {
|
|
260
247
|
..._config,
|
|
261
248
|
// Disable closing since we need to sync it up to the animation ourselves.
|
|
262
249
|
disableClose: true,
|
|
@@ -278,6 +265,8 @@ class BottomSheet {
|
|
|
278
265
|
];
|
|
279
266
|
},
|
|
280
267
|
});
|
|
268
|
+
ref._refInstance = (cdkRef.componentInstance ?? null);
|
|
269
|
+
ref._refRef = cdkRef.componentRef ?? null;
|
|
281
270
|
ref.afterDismissed().subscribe(() => {
|
|
282
271
|
// Clear the bottom sheet ref if it hasn't already been replaced by a newer one.
|
|
283
272
|
if (this._openedBottomSheetRef === ref) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-bottom-sheet.mjs","sources":["../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet-config.ts","../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet-container.ts","../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet-ref.ts","../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet.ts","../../../projects/components/bottom-sheet/ngstarter-ui-components-bottom-sheet.ts"],"sourcesContent":["import { InjectionToken, ViewContainerRef } from '@angular/core';\nimport { ScrollStrategy } from '@angular/cdk/overlay';\n\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\nexport const BOTTOM_SHEET_DATA = new InjectionToken<any>('EmrBottomSheetData');\n\n/**\n * Configuration used when opening a bottom sheet.\n */\nexport class BottomSheetConfig<D = any> {\n /** The view container to place the overlay for the bottom sheet into. */\n viewContainerRef?: ViewContainerRef;\n\n /** Extra CSS classes to be added to the bottom sheet container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the bottom sheet. */\n direction?: 'ltr' | 'rtl';\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** Whether the bottom sheet has a backdrop. */\n hasBackdrop?: boolean = true;\n\n /** Custom class for the backdrop. */\n backdropClass?: string;\n\n /** Whether the user can use escape or clicking outside to close the bottom sheet. */\n disableClose?: boolean = false;\n\n /** Aria label to assign to the bottom sheet element. */\n ariaLabel?: string | null = null;\n\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute.\n */\n ariaModal?: boolean = false;\n\n /**\n * Whether the bottom sheet should close when the user goes backwards/forwards in history.\n */\n closeOnNavigation?: boolean = true;\n\n /**\n * Where the bottom sheet should focus on open.\n */\n autoFocus?: string | boolean = 'first-tabbable';\n\n /**\n * Whether the bottom sheet should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus?: boolean = true;\n\n /** Scroll strategy to be used for the bottom sheet. */\n scrollStrategy?: ScrollStrategy;\n\n /** Height for the bottom sheet. */\n height?: string = '';\n\n /** Minimum height for the bottom sheet. If a number is provided, assumes pixel units. */\n minHeight?: string | number;\n\n /** Maximum height for the bottom sheet. If a number is provided, assumes pixel units. */\n maxHeight?: string | number;\n}\n","import {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n OnDestroy,\n inject,\n EventEmitter,\n} from '@angular/core';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { Subscription } from 'rxjs';\nimport { CdkDialogContainer } from '@angular/cdk/dialog';\n\n/**\n * Internal component that wraps user-provided bottom sheet content.\n * @docs-private\n */\n@Component({\n selector: 'ngs-bottom-sheet-container',\n template: '<ng-template cdkPortalOutlet />',\n styleUrl: 'bottom-sheet-container.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n imports: [CdkPortalOutlet],\n host: {\n 'class': 'ngs-bottom-sheet-container',\n 'tabindex': '-1',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-label]': '_config.ariaLabel',\n '[class.ngs-bottom-sheet-container-visible]': '_animationState === \"visible\"',\n '[class.ngs-bottom-sheet-container-hidden]': '_animationState === \"hidden\"',\n '(transitionend)': '_onTransitionEnd($event)',\n },\n})\nexport class BottomSheetContainer extends CdkDialogContainer implements OnDestroy {\n private _breakpointSubscription: Subscription;\n\n /** The state of the bottom sheet animations. */\n _animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n /** Emits whenever the state of the animation changes. */\n _animationStateChanged = new EventEmitter<any>();\n\n /** Whether the component has been destroyed. */\n private _destroyed = false;\n\n constructor() {\n super();\n const breakpointObserver = inject(BreakpointObserver);\n this._breakpointSubscription = breakpointObserver\n .observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n .subscribe(() => {\n const classList = this._elementRef.nativeElement.classList;\n classList.toggle(\n 'ngs-bottom-sheet-container-medium',\n breakpointObserver.isMatched(Breakpoints.Medium)\n );\n classList.toggle(\n 'ngs-bottom-sheet-container-large',\n breakpointObserver.isMatched(Breakpoints.Large)\n );\n classList.toggle(\n 'ngs-bottom-sheet-container-xlarge',\n breakpointObserver.isMatched(Breakpoints.XLarge)\n );\n });\n }\n\n /** Begin animation of bottom sheet entrance into view. */\n enter() {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Begin animation of the bottom sheet exiting from view. */\n exit() {\n if (!this._destroyed) {\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this._breakpointSubscription.unsubscribe();\n this._destroyed = true;\n }\n\n _onTransitionEnd(event: TransitionEvent) {\n if (event.propertyName === 'transform') {\n this._animationStateChanged.emit({\n fromState: this._animationState === 'visible' ? 'void' : 'visible',\n toState: this._animationState,\n totalTime: 300,\n phaseName: 'done',\n });\n }\n }\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { BottomSheetConfig } from './bottom-sheet-config';\n\n/**\n * Reference to a bottom sheet dispatched from the BottomSheet service.\n */\nexport class BottomSheetRef<T = any, R = any> {\n /** @internal */\n _refInstance: T | null = null;\n\n /** @internal */\n _refRef: any = null;\n\n /** Instance of the component making up the content of the bottom sheet. */\n get instance(): T {\n return this._refInstance!;\n }\n\n /**\n * `ComponentRef` of the component opened into the bottom sheet. Will be\n * null when the bottom sheet is opened using a `TemplateRef`.\n */\n get componentRef() {\n return this._refRef;\n }\n\n /** Whether the user is allowed to close the bottom sheet. */\n disableClose: boolean | undefined;\n\n /** Subject for notifying the user that the bottom sheet has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n /** Result to be passed down to the `afterDismissed` stream. */\n private _result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n private _closeFallbackTimeout: any;\n\n constructor(\n private _ref: DialogRef<R, T>,\n config: BottomSheetConfig,\n public containerInstance: any\n ) {\n this.disableClose = config.disableClose;\n\n // Emit when opening animation completes\n containerInstance._animationStateChanged\n .pipe(\n filter((event: any) => event.phase === 'done' && event.toState === 'visible'),\n take(1)\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n // Dispose overlay when closing animation is complete\n containerInstance._animationStateChanged\n .pipe(\n filter((event: any) => event.phase === 'done' && (event.toState === 'hidden' || event.toState === 'void')),\n take(1)\n )\n .subscribe(() => {\n if (this._closeFallbackTimeout) {\n clearTimeout(this._closeFallbackTimeout);\n }\n this._ref.close(this._result);\n });\n\n _ref.overlayRef.detachments().subscribe(() => {\n this._ref.close(this._result);\n });\n\n _ref.backdropClick.subscribe(() => {\n if (!this.disableClose) {\n this.dismiss();\n }\n });\n\n _ref.keydownEvents\n .pipe(filter(event => event.keyCode === ESCAPE))\n .subscribe(event => {\n if (!this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this.dismiss();\n }\n });\n }\n\n /**\n * Dismisses the bottom sheet.\n * @param result Data to be passed back to the bottom sheet opener.\n */\n dismiss(result?: R): void {\n if (!this.containerInstance) {\n return;\n }\n\n // Transition the backdrop in parallel to the bottom sheet.\n this._ref.overlayRef.detachBackdrop();\n\n this._result = result;\n this.containerInstance.exit();\n this._closeFallbackTimeout = setTimeout(() => {\n this._ref.close(this._result);\n }, 400);\n }\n\n /** Gets an observable that is notified when the bottom sheet is finished closing. */\n afterDismissed() {\n return this._ref.closed;\n }\n\n /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\n afterOpened() {\n return this._afterOpened;\n }\n\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick() {\n return this._ref.backdropClick;\n }\n\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents() {\n return this._ref.keydownEvents;\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable, InjectionToken, Injector, OnDestroy, TemplateRef } from '@angular/core';\nimport { Dialog } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { BottomSheetConfig, BOTTOM_SHEET_DATA } from './bottom-sheet-config';\nimport { BottomSheetContainer } from './bottom-sheet-container';\nimport { BottomSheetRef } from './bottom-sheet-ref';\n\n/** Injection token that can be used to specify default bottom sheet options. */\nexport const BOTTOM_SHEET_DEFAULT_OPTIONS = new InjectionToken<BottomSheetConfig>(\n 'ngs-bottom-sheet-default-options'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class BottomSheet implements OnDestroy {\n private _injector = inject(Injector);\n private _overlay = inject(Overlay);\n private _dialog = inject(Dialog);\n private _parentBottomSheet = inject(BottomSheet, { optional: true, skipSelf: true });\n private _defaultOptions = inject(BOTTOM_SHEET_DEFAULT_OPTIONS, { optional: true });\n private _bottomSheetRefAtThisLevel: BottomSheetRef<any> | null = null;\n\n /** Reference to the currently opened bottom sheet. */\n get _openedBottomSheetRef(): BottomSheetRef<any> | null {\n const parent = this._parentBottomSheet;\n return parent ? parent._openedBottomSheetRef : this._bottomSheetRefAtThisLevel;\n }\n\n set _openedBottomSheetRef(value: BottomSheetRef<any> | null) {\n if (this._parentBottomSheet) {\n this._parentBottomSheet._openedBottomSheetRef = value;\n } else {\n this._bottomSheetRefAtThisLevel = value;\n }\n }\n\n open<T, D = any, R = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: BottomSheetConfig<D>\n ): BottomSheetRef<T, R> {\n const _config = { ...(this._defaultOptions || new BottomSheetConfig()), ...config };\n let ref: BottomSheetRef<T, R>;\n\n this._dialog.open<R, T>(componentOrTemplateRef, {\n ...(_config as any),\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Disable closing on detachments so that we can sync up the animation.\n closeOnOverlayDetachments: false,\n maxWidth: '100%',\n container: BottomSheetContainer,\n scrollStrategy: _config.scrollStrategy || this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position()\n .global()\n .centerHorizontally()\n .bottom('0'),\n templateContext: () => ({ bottomSheetRef: ref }),\n providers: (cdkRef: any, _cdkConfig: any, container: any) => {\n ref = new BottomSheetRef<T, R>(cdkRef, _config, container);\n return [\n { provide: BottomSheetRef, useValue: ref },\n { provide: BOTTOM_SHEET_DATA, useValue: _config.data },\n ];\n },\n });\n\n ref!.afterDismissed().subscribe(() => {\n // Clear the bottom sheet ref if it hasn't already been replaced by a newer one.\n if (this._openedBottomSheetRef === ref) {\n this._openedBottomSheetRef = null;\n }\n });\n\n if (this._openedBottomSheetRef) {\n // If a bottom sheet is already in view, dismiss it and enter the\n // new bottom sheet after exit animation is complete.\n this._openedBottomSheetRef.afterDismissed().subscribe(() => ref!.containerInstance?.enter());\n this._openedBottomSheetRef.dismiss();\n } else {\n // If no bottom sheet is in view, enter the new bottom sheet.\n ref!.containerInstance.enter();\n }\n\n this._openedBottomSheetRef = ref!;\n return ref!;\n }\n\n /**\n * Dismisses the currently-visible bottom sheet.\n * @param result Data to pass to the bottom sheet instance.\n */\n dismiss<R = any>(result?: R): void {\n if (this._openedBottomSheetRef) {\n this._openedBottomSheetRef.dismiss(result);\n }\n }\n\n ngOnDestroy() {\n if (this._bottomSheetRefAtThisLevel) {\n this._bottomSheetRefAtThisLevel.dismiss();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-bottom-sheet.mjs","sources":["../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet-config.ts","../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet-container.ts","../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet-ref.ts","../../../projects/components/bottom-sheet/src/bottom-sheet/bottom-sheet.ts","../../../projects/components/bottom-sheet/ngstarter-ui-components-bottom-sheet.ts"],"sourcesContent":["import { InjectionToken, ViewContainerRef } from '@angular/core';\nimport { ScrollStrategy } from '@angular/cdk/overlay';\n\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\nexport const BOTTOM_SHEET_DATA = new InjectionToken<any>('EmrBottomSheetData');\n\n/**\n * Configuration used when opening a bottom sheet.\n */\nexport class BottomSheetConfig<D = any> {\n /** The view container to place the overlay for the bottom sheet into. */\n viewContainerRef?: ViewContainerRef;\n\n /** Extra CSS classes to be added to the bottom sheet container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the bottom sheet. */\n direction?: 'ltr' | 'rtl';\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** Whether the bottom sheet has a backdrop. */\n hasBackdrop?: boolean = true;\n\n /** Custom class for the backdrop. */\n backdropClass?: string;\n\n /** Whether the user can use escape or clicking outside to close the bottom sheet. */\n disableClose?: boolean = false;\n\n /** Aria label to assign to the bottom sheet element. */\n ariaLabel?: string | null = null;\n\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute.\n */\n ariaModal?: boolean = false;\n\n /**\n * Whether the bottom sheet should close when the user goes backwards/forwards in history.\n */\n closeOnNavigation?: boolean = true;\n\n /**\n * Where the bottom sheet should focus on open.\n */\n autoFocus?: string | boolean = 'first-tabbable';\n\n /**\n * Whether the bottom sheet should restore focus to the\n * previously-focused element, after it's closed.\n */\n restoreFocus?: boolean = true;\n\n /** Scroll strategy to be used for the bottom sheet. */\n scrollStrategy?: ScrollStrategy;\n\n /** Height for the bottom sheet. */\n height?: string = '';\n\n /** Minimum height for the bottom sheet. If a number is provided, assumes pixel units. */\n minHeight?: string | number;\n\n /** Maximum height for the bottom sheet. If a number is provided, assumes pixel units. */\n maxHeight?: string | number;\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n OnDestroy,\n EventEmitter,\n} from '@angular/core';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { CdkDialogContainer } from '@angular/cdk/dialog';\n\n/**\n * Internal component that wraps user-provided bottom sheet content.\n * @docs-private\n */\n@Component({\n selector: 'ngs-bottom-sheet-container',\n exportAs: 'ngsBottomSheetContainer',\n imports: [\n CdkPortalOutlet\n ],\n template: '<ng-template cdkPortalOutlet />',\n styleUrl: 'bottom-sheet-container.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-bottom-sheet-container',\n 'tabindex': '-1',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-label]': '_config.ariaLabel',\n '[class.ngs-bottom-sheet-container-visible]': '_animationState === \"visible\"',\n '[class.ngs-bottom-sheet-container-hidden]': '_animationState === \"hidden\"',\n '(transitionend)': '_onTransitionEnd($event)',\n },\n})\nexport class BottomSheetContainer extends CdkDialogContainer implements OnDestroy {\n /** The state of the bottom sheet animations. */\n _animationState: 'void' | 'visible' | 'hidden' = 'void';\n\n /** Emits whenever the state of the animation changes. */\n _animationStateChanged = new EventEmitter<any>();\n\n /** Whether the component has been destroyed. */\n private _destroyed = false;\n\n /** Begin animation of bottom sheet entrance into view. */\n enter() {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** Begin animation of the bottom sheet exiting from view. */\n exit() {\n if (!this._destroyed) {\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this._destroyed = true;\n }\n\n _onTransitionEnd(event: TransitionEvent) {\n if (event.propertyName === 'transform') {\n this._animationStateChanged.emit({\n fromState: this._animationState === 'visible' ? 'void' : 'visible',\n toState: this._animationState,\n totalTime: 300,\n phaseName: 'done',\n });\n }\n }\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { BottomSheetConfig } from './bottom-sheet-config';\n\n/**\n * Reference to a bottom sheet dispatched from the BottomSheet service.\n */\nexport class BottomSheetRef<T = any, R = any> {\n /** @internal */\n _refInstance: T | null = null;\n\n /** @internal */\n _refRef: any = null;\n\n /** Instance of the component making up the content of the bottom sheet. */\n get instance(): T {\n return this._refInstance!;\n }\n\n /**\n * `ComponentRef` of the component opened into the bottom sheet. Will be\n * null when the bottom sheet is opened using a `TemplateRef`.\n */\n get componentRef() {\n return this._refRef;\n }\n\n /** Whether the user is allowed to close the bottom sheet. */\n disableClose: boolean | undefined;\n\n /** Subject for notifying the user that the bottom sheet has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n /** Result to be passed down to the `afterDismissed` stream. */\n private _result: R | undefined;\n\n /** Handle to the timeout that's running as a fallback in case the exit animation doesn't fire. */\n private _closeFallbackTimeout: any;\n\n constructor(\n private _ref: DialogRef<R, T>,\n config: BottomSheetConfig,\n public containerInstance: any\n ) {\n this.disableClose = config.disableClose;\n\n // Emit when opening animation completes\n containerInstance._animationStateChanged\n .pipe(\n filter((event: any) => (event.phaseName ?? event.phase) === 'done' && event.toState === 'visible'),\n take(1)\n )\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n\n // Dispose overlay when closing animation is complete\n containerInstance._animationStateChanged\n .pipe(\n filter((event: any) => (event.phaseName ?? event.phase) === 'done' && (event.toState === 'hidden' || event.toState === 'void')),\n take(1)\n )\n .subscribe(() => {\n if (this._closeFallbackTimeout) {\n clearTimeout(this._closeFallbackTimeout);\n }\n this._ref.close(this._result);\n });\n\n _ref.overlayRef.detachments().subscribe(() => {\n this._ref.close(this._result);\n });\n\n _ref.backdropClick.subscribe(() => {\n if (!this.disableClose) {\n this.dismiss();\n }\n });\n\n _ref.keydownEvents\n .pipe(filter(event => event.keyCode === ESCAPE))\n .subscribe(event => {\n if (!this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this.dismiss();\n }\n });\n }\n\n /**\n * Dismisses the bottom sheet.\n * @param result Data to be passed back to the bottom sheet opener.\n */\n dismiss(result?: R): void {\n if (!this.containerInstance) {\n return;\n }\n\n // Transition the backdrop in parallel to the bottom sheet.\n this._ref.overlayRef.detachBackdrop();\n\n this._result = result;\n this.containerInstance.exit();\n this._closeFallbackTimeout = setTimeout(() => {\n this._ref.close(this._result);\n }, 400);\n }\n\n /** Gets an observable that is notified when the bottom sheet is finished closing. */\n afterDismissed() {\n return this._ref.closed;\n }\n\n /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\n afterOpened() {\n return this._afterOpened;\n }\n\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick() {\n return this._ref.backdropClick;\n }\n\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents() {\n return this._ref.keydownEvents;\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { inject, Injectable, InjectionToken, Injector, OnDestroy, TemplateRef } from '@angular/core';\nimport { Dialog } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { BottomSheetConfig, BOTTOM_SHEET_DATA } from './bottom-sheet-config';\nimport { BottomSheetContainer } from './bottom-sheet-container';\nimport { BottomSheetRef } from './bottom-sheet-ref';\n\n/** Injection token that can be used to specify default bottom sheet options. */\nexport const BOTTOM_SHEET_DEFAULT_OPTIONS = new InjectionToken<BottomSheetConfig>(\n 'ngs-bottom-sheet-default-options'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class BottomSheet implements OnDestroy {\n private _injector = inject(Injector);\n private _overlay = inject(Overlay);\n private _dialog = inject(Dialog);\n private _parentBottomSheet = inject(BottomSheet, { optional: true, skipSelf: true });\n private _defaultOptions = inject(BOTTOM_SHEET_DEFAULT_OPTIONS, { optional: true });\n private _bottomSheetRefAtThisLevel: BottomSheetRef<any> | null = null;\n\n /** Reference to the currently opened bottom sheet. */\n get _openedBottomSheetRef(): BottomSheetRef<any> | null {\n const parent = this._parentBottomSheet;\n return parent ? parent._openedBottomSheetRef : this._bottomSheetRefAtThisLevel;\n }\n\n set _openedBottomSheetRef(value: BottomSheetRef<any> | null) {\n if (this._parentBottomSheet) {\n this._parentBottomSheet._openedBottomSheetRef = value;\n } else {\n this._bottomSheetRefAtThisLevel = value;\n }\n }\n\n open<T, D = any, R = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: BottomSheetConfig<D>\n ): BottomSheetRef<T, R> {\n const _config = { ...(this._defaultOptions || new BottomSheetConfig()), ...config };\n let ref: BottomSheetRef<T, R>;\n\n const cdkRef = this._dialog.open<R, D, T>(componentOrTemplateRef, {\n ...(_config as any),\n // Disable closing since we need to sync it up to the animation ourselves.\n disableClose: true,\n // Disable closing on detachments so that we can sync up the animation.\n closeOnOverlayDetachments: false,\n maxWidth: '100%',\n container: BottomSheetContainer,\n scrollStrategy: _config.scrollStrategy || this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position()\n .global()\n .centerHorizontally()\n .bottom('0'),\n templateContext: () => ({ bottomSheetRef: ref }),\n providers: (cdkRef: any, _cdkConfig: any, container: any) => {\n ref = new BottomSheetRef<T, R>(cdkRef, _config, container);\n return [\n { provide: BottomSheetRef, useValue: ref },\n { provide: BOTTOM_SHEET_DATA, useValue: _config.data },\n ];\n },\n });\n ref!._refInstance = (cdkRef.componentInstance ?? null) as T | null;\n ref!._refRef = (cdkRef as any).componentRef ?? null;\n\n ref!.afterDismissed().subscribe(() => {\n // Clear the bottom sheet ref if it hasn't already been replaced by a newer one.\n if (this._openedBottomSheetRef === ref) {\n this._openedBottomSheetRef = null;\n }\n });\n\n if (this._openedBottomSheetRef) {\n // If a bottom sheet is already in view, dismiss it and enter the\n // new bottom sheet after exit animation is complete.\n this._openedBottomSheetRef.afterDismissed().subscribe(() => ref!.containerInstance?.enter());\n this._openedBottomSheetRef.dismiss();\n } else {\n // If no bottom sheet is in view, enter the new bottom sheet.\n ref!.containerInstance.enter();\n }\n\n this._openedBottomSheetRef = ref!;\n return ref!;\n }\n\n /**\n * Dismisses the currently-visible bottom sheet.\n * @param result Data to pass to the bottom sheet instance.\n */\n dismiss<R = any>(result?: R): void {\n if (this._openedBottomSheetRef) {\n this._openedBottomSheetRef.dismiss(result);\n }\n }\n\n ngOnDestroy() {\n if (this._bottomSheetRefAtThisLevel) {\n this._bottomSheetRefAtThisLevel.dismiss();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAGA;MACa,iBAAiB,GAAG,IAAI,cAAc,CAAM,oBAAoB;AAE7E;;AAEG;MACU,iBAAiB,CAAA;;AAE5B,IAAA,gBAAgB;;AAGhB,IAAA,UAAU;;AAGV,IAAA,SAAS;;IAGT,IAAI,GAAc,IAAI;;IAGtB,WAAW,GAAa,IAAI;;AAG5B,IAAA,aAAa;;IAGb,YAAY,GAAa,KAAK;;IAG9B,SAAS,GAAmB,IAAI;AAEhC;;AAEG;IACH,SAAS,GAAa,KAAK;AAE3B;;AAEG;IACH,iBAAiB,GAAa,IAAI;AAElC;;AAEG;IACH,SAAS,GAAsB,gBAAgB;AAE/C;;;AAGG;IACH,YAAY,GAAa,IAAI;;AAG7B,IAAA,cAAc;;IAGd,MAAM,GAAY,EAAE;;AAGpB,IAAA,SAAS;;AAGT,IAAA,SAAS;AACV;;ACzDD;;;AAGG;AAqBG,MAAO,oBAAqB,SAAQ,kBAAkB,CAAA;;IAE1D,eAAe,GAAkC,MAAM;;AAGvD,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAO;;IAGxC,UAAU,GAAG,KAAK;;IAG1B,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;AAChC,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QACxC;IACF;;IAGA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ;AAC/B,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QACxC;IACF;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;AAEA,IAAA,gBAAgB,CAAC,KAAsB,EAAA;AACrC,QAAA,IAAI,KAAK,CAAC,YAAY,KAAK,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/B,gBAAA,SAAS,EAAE,IAAI,CAAC,eAAe,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS;gBAClE,OAAO,EAAE,IAAI,CAAC,eAAe;AAC7B,gBAAA,SAAS,EAAE,GAAG;AACd,gBAAA,SAAS,EAAE,MAAM;AAClB,aAAA,CAAC;QACJ;IACF;uGAxCW,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,0BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,0CAAA,EAAA,iCAAA,EAAA,yCAAA,EAAA,gCAAA,EAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdrB,iCAAiC,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,siCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAFzC,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgBN,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApBhC,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAC5B,yBAAyB,EAAA,OAAA,EAC1B;wBACP;AACD,qBAAA,EAAA,QAAA,EACS,iCAAiC,EAAA,eAAA,EAE1B,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE,4BAA4B;AACrC,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,aAAa,EAAE,cAAc;AAC7B,wBAAA,mBAAmB,EAAE,mBAAmB;AACxC,wBAAA,mBAAmB,EAAE,mBAAmB;AACxC,wBAAA,4CAA4C,EAAE,+BAA+B;AAC7E,wBAAA,2CAA2C,EAAE,8BAA8B;AAC3E,wBAAA,iBAAiB,EAAE,0BAA0B;AAC9C,qBAAA,EAAA,MAAA,EAAA,CAAA,siCAAA,CAAA,EAAA;;;ACzBH;;AAEG;MACU,cAAc,CAAA;AAiCf,IAAA,IAAA;AAED,IAAA,iBAAA;;IAjCT,YAAY,GAAa,IAAI;;IAG7B,OAAO,GAAQ,IAAI;;AAGnB,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,YAAa;IAC3B;AAEA;;;AAGG;AACH,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,OAAO;IACrB;;AAGA,IAAA,YAAY;;AAGK,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;;AAG3C,IAAA,OAAO;;AAGP,IAAA,qBAAqB;AAE7B,IAAA,WAAA,CACU,IAAqB,EAC7B,MAAyB,EAClB,iBAAsB,EAAA;QAFrB,IAAA,CAAA,IAAI,GAAJ,IAAI;QAEL,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;AAExB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;;AAGvC,QAAA,iBAAiB,CAAC;AACf,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAU,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,EAClG,IAAI,CAAC,CAAC,CAAC;aAER,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC9B,QAAA,CAAC,CAAC;;AAGJ,QAAA,iBAAiB,CAAC;AACf,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAU,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,EAC/H,IAAI,CAAC,CAAC,CAAC;aAER,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,gBAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;YAC1C;YACA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAK;YAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;aAC9C,SAAS,CAAC,KAAK,IAAG;YACjB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBAChD,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAC,MAAU,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAErC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;AAC7B,QAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,MAAK;YAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAC/B,CAAC,EAAE,GAAG,CAAC;IACT;;IAGA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;IACzB;;IAGA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;IAChC;AAEA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;IAChC;AACD;;AC9HD;MACa,4BAA4B,GAAG,IAAI,cAAc,CAC5D,kCAAkC;MAIvB,WAAW,CAAA;AACd,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,IAAA,kBAAkB,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5E,eAAe,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1E,0BAA0B,GAA+B,IAAI;;AAGrE,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;AACtC,QAAA,OAAO,MAAM,GAAG,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,0BAA0B;IAChF;IAEA,IAAI,qBAAqB,CAAC,KAAiC,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,GAAG,KAAK;QACvD;aAAO;AACL,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;QACzC;IACF;IAEA,IAAI,CACF,sBAAyD,EACzD,MAA6B,EAAA;AAE7B,QAAA,MAAM,OAAO,GAAG,EAAE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,iBAAiB,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE;AACnF,QAAA,IAAI,GAAyB;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAU,sBAAsB,EAAE;AAChE,YAAA,GAAI,OAAe;;AAEnB,YAAA,YAAY,EAAE,IAAI;;AAElB,YAAA,yBAAyB,EAAE,KAAK;AAChC,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,SAAS,EAAE,oBAAoB;AAC/B,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAChF,YAAA,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;AACrC,iBAAA,MAAM;AACN,iBAAA,kBAAkB;iBAClB,MAAM,CAAC,GAAG,CAAC;YACd,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;YAChD,SAAS,EAAE,CAAC,MAAW,EAAE,UAAe,EAAE,SAAc,KAAI;gBAC1D,GAAG,GAAG,IAAI,cAAc,CAAO,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;gBAC1D,OAAO;AACL,oBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE;oBAC1C,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE;iBACvD;YACH,CAAC;AACF,SAAA,CAAC;QACF,GAAI,CAAC,YAAY,IAAI,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAa;QAClE,GAAI,CAAC,OAAO,GAAI,MAAc,CAAC,YAAY,IAAI,IAAI;AAEnD,QAAA,GAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAK;;AAEnC,YAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACnC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;;;AAG9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAM,GAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC;AAC5F,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE;QACtC;aAAO;;AAEL,YAAA,GAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;QAChC;AAEA,QAAA,IAAI,CAAC,qBAAqB,GAAG,GAAI;AACjC,QAAA,OAAO,GAAI;IACb;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAU,MAAU,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACnC,YAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE;QAC3C;IACF;uGAzFW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACblC;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, input, booleanAttribute, output, ChangeDetectionStrategy, Component, ChangeDetectorRef, viewChild, signal, forwardRef, computed, contentChildren, effect,
|
|
2
|
+
import { inject, ElementRef, input, booleanAttribute, output, ChangeDetectionStrategy, Component, ChangeDetectorRef, viewChild, signal, forwardRef, computed, contentChildren, effect, Directive } from '@angular/core';
|
|
3
3
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
5
5
|
import { AutoFocusDirective } from '@ngstarter-ui/components/core';
|
|
@@ -435,22 +435,22 @@ class ChipListbox {
|
|
|
435
435
|
useExisting: forwardRef(() => ChipListbox),
|
|
436
436
|
multi: true,
|
|
437
437
|
},
|
|
438
|
-
], queries: [{ propertyName: "_chips", predicate: ChipOption, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content />\n", styles: ["
|
|
438
|
+
], queries: [{ propertyName: "_chips", predicate: ChipOption, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content />\n", styles: [":host{--ngs-chip-listbox-gap: calc(var(--spacing, .25rem) * 2);display:flex;flex-wrap:wrap;outline:none;gap:var(--ngs-chip-listbox-gap)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
439
439
|
}
|
|
440
440
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ChipListbox, decorators: [{
|
|
441
441
|
type: Component,
|
|
442
|
-
args: [{ selector: 'ngs-chip-listbox',
|
|
443
|
-
'class': 'ngs-chip-listbox ngs-chip-set',
|
|
444
|
-
'role': 'listbox',
|
|
445
|
-
'[attr.aria-multiselectable]': 'multiple()',
|
|
446
|
-
'[attr.aria-disabled]': 'isDisabled()',
|
|
447
|
-
}, standalone: true, providers: [
|
|
442
|
+
args: [{ selector: 'ngs-chip-listbox', providers: [
|
|
448
443
|
{
|
|
449
444
|
provide: NG_VALUE_ACCESSOR,
|
|
450
445
|
useExisting: forwardRef(() => ChipListbox),
|
|
451
446
|
multi: true,
|
|
452
447
|
},
|
|
453
|
-
], changeDetection: ChangeDetectionStrategy.OnPush,
|
|
448
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
449
|
+
'class': 'ngs-chip-listbox ngs-chip-set',
|
|
450
|
+
'role': 'listbox',
|
|
451
|
+
'[attr.aria-multiselectable]': 'multiple()',
|
|
452
|
+
'[attr.aria-disabled]': 'isDisabled()',
|
|
453
|
+
}, template: "<ng-content />\n", styles: [":host{--ngs-chip-listbox-gap: calc(var(--spacing, .25rem) * 2);display:flex;flex-wrap:wrap;outline:none;gap:var(--ngs-chip-listbox-gap)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
454
454
|
}], propDecorators: { multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], _chips: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ChipOption), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
455
455
|
|
|
456
456
|
class ChipSet {
|