@odx/angular 6.0.1 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/cdk/dynamic-view/lib/tokens/dynamic-view-context.d.ts +4 -0
- package/cdk/dynamic-view/lib/tokens/dynamic-view-default-host.d.ts +10 -0
- package/components/autocomplete/lib/autocomplete.component.d.ts +1 -0
- package/components/checkbox/lib/checkbox.component.d.ts +1 -1
- package/components/radio-group/lib/components/radio-button/radio-button.component.d.ts +18 -1
- package/components/toast/lib/components/toast-item/toast-item.component.d.ts +5 -4
- package/components/toast/lib/models/toast.d.ts +4 -2
- package/components/tooltip/lib/helpers/resolve-tooltip-trigger-events.d.ts +7 -0
- package/esm2022/cdk/autocomplete-control/lib/autocomplete-control.mjs +2 -2
- package/esm2022/cdk/dynamic-view/lib/tokens/dynamic-view-context.mjs +5 -1
- package/esm2022/cdk/dynamic-view/lib/tokens/dynamic-view-default-host.mjs +11 -1
- package/esm2022/components/autocomplete/lib/autocomplete.component.mjs +12 -5
- package/esm2022/components/checkbox/lib/checkbox.component.mjs +2 -2
- package/esm2022/components/radio-group/lib/components/radio-button/radio-button.component.mjs +20 -3
- package/esm2022/components/select/lib/components/select-option/select-option.component.mjs +4 -3
- package/esm2022/components/select/lib/select.component.mjs +4 -4
- package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +2 -1
- package/esm2022/components/toast/lib/components/toast-container/toast-container.component.mjs +3 -3
- package/esm2022/components/toast/lib/components/toast-item/toast-item.component.mjs +5 -3
- package/esm2022/components/toast/lib/models/toast.mjs +1 -1
- package/esm2022/components/tooltip/lib/helpers/resolve-tooltip-trigger-events.mjs +8 -1
- package/esm2022/internal/lib/helpers/decorator-property-name.mjs +9 -1
- package/esm2022/localization/lib/models/localization-feature.mjs +8 -1
- package/fesm2022/odx-angular-cdk-autocomplete-control.mjs +1 -1
- package/fesm2022/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
- package/fesm2022/odx-angular-cdk-dynamic-view.mjs +14 -0
- package/fesm2022/odx-angular-cdk-dynamic-view.mjs.map +1 -1
- package/fesm2022/odx-angular-components-autocomplete.mjs +11 -4
- package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/odx-angular-components-checkbox.mjs +1 -1
- package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/odx-angular-components-radio-group.mjs +19 -2
- package/fesm2022/odx-angular-components-radio-group.mjs.map +1 -1
- package/fesm2022/odx-angular-components-select.mjs +5 -5
- package/fesm2022/odx-angular-components-select.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tab-bar.mjs +1 -0
- package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
- package/fesm2022/odx-angular-components-toast.mjs +6 -4
- package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tooltip.mjs +7 -0
- package/fesm2022/odx-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/odx-angular-internal.mjs +8 -0
- package/fesm2022/odx-angular-internal.mjs.map +1 -1
- package/fesm2022/odx-angular-localization.mjs +7 -0
- package/fesm2022/odx-angular-localization.mjs.map +1 -1
- package/internal/lib/helpers/decorator-property-name.d.ts +8 -0
- package/localization/lib/models/localization-feature.d.ts +7 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-select.mjs","sources":["../../../../libs/angular/components/select/src/lib/select.tokens.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.html","../../../../libs/angular/components/select/src/lib/directives/select-input-control.directive.ts","../../../../libs/angular/components/select/src/lib/pipes/select-search-filter.pipe.ts","../../../../libs/angular/components/select/src/lib/select.component.ts","../../../../libs/angular/components/select/src/lib/select.component.html","../../../../libs/angular/components/select/src/lib/select.module.ts","../../../../libs/angular/components/select/src/odx-angular-components-select.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { SelectComponent } from './select.component';\n\nexport const SELECT_CONTROL = new InjectionToken<SelectComponent>('@odx/angular/components/select::SelectComponent');\n","import { booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CoreModule, detectControllerChanges } from '@odx/angular';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { OptionControl } from '@odx/angular/cdk/option-control';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { SELECT_CONTROL } from '../../select.tokens';\n\n/**\n * SelectOptionComponent is a customizable option element for use within a SelectComponent.\n * It supports complex data structures, integration with checkbox components for multi-select,\n * and can be disabled as needed.\n * It extends OptionControl to provide additional behavior specific to select components.\n *\n * @see {OptionControl}\n */\n@CSSComponent('select-option')\n@Component({\n standalone: true,\n selector: 'odx-select-option, odx-option',\n imports: [CoreModule, DynamicViewDirective, CheckboxComponent],\n templateUrl: './select-option.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'disabled || null',\n '[class.is-disabled]': 'disabled',\n },\n})\nexport class SelectOptionComponent<T = unknown> extends OptionControl<T> implements OnInit {\n private _isDisabled = false;\n\n protected readonly selectControl = inject(SELECT_CONTROL);\n\n /**\n * Indicates whether the option is currently selected.\n *\n * @type {boolean}\n */\n public isSelected = false;\n\n /**\n * Indicates whether a not found message should be displayed, used typically for search results.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public notFoundMessage = false;\n\n /**\n * Setter for the disabled state of the select option.\n *\n * @param value - The new value for the disabled state.\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n this._isDisabled = value;\n }\n\n /**\n * Getter for the disabled state of the select option.\n *\n * @returns {boolean} The current disabled state of the option.\n */\n public get disabled(): boolean {\n return this._isDisabled;\n }\n\n constructor() {\n super();\n\n detectControllerChanges(this.selectControl)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.isSelected = this.selectControl.isOptionSelected(this);\n });\n }\n\n public ngOnInit(): void {\n this.isSelected = this.selectControl.isOptionSelected(this);\n }\n\n /**\n * Sets active styles for the option when it becomes the target of keyboard navigation or mouse hover.\n */\n public override setActiveStyles(): void {\n if (this.disabled) return;\n\n this.isActive = true;\n\n if (this.selectControl.isOpen) {\n this.selectControl.scrollOptionIntoView(this);\n } else {\n this.selectControl.selectOption(this);\n }\n }\n\n /**\n * Toggles the selection state of the option when it is part of a multi-select control.\n */\n public switchCheckbox(): void {\n if (this.selectControl.multiple) {\n this.isSelected = !this.isSelected;\n this.cdr.markForCheck();\n }\n }\n\n protected selectOption(): void {\n this.selectControl.selectOption(this);\n }\n}\n","<odx-checkbox [checked]=\"isSelected\" *ngIf=\"selectControl.multiple && !notFoundMessage; else single\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</odx-checkbox>\n\n<ng-template #single>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent } from '@odx/angular/internal';\n\n/**\n * SelectInputControlDirective extends InputControlDirective to provide additional behavior\n * specific to select components with search functionality. This directive manages interactions\n * within the search input field, such as resetting the field content upon specific key events.\n *\n * @see {InputControlDirective}\n */\n@CSSComponent('select__control')\n@Directive({\n standalone: true,\n selector: 'input[odxSelectSearchField]',\n})\nexport class SelectInputControlDirective extends InputControlDirective {\n /**\n * Dynamic content to be displayed when no matching search results are found.\n * This can be specified as HTML content or a string.\n */\n @Input('odxSelectSearchField')\n public notFoundContent: DynamicContent | null = null;\n\n @HostListener('keydown.delete')\n public handleDelete(): void {\n this.reset();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { BaseSearchFilterPipe } from '@odx/angular/cdk/autocomplete-control';\n/**\n * SelectSearchFilterPipe extends BaseSearchFilterPipe to provide search filtering functionality\n * specifically for select components. It filters options based on the input query, supporting\n * complex filtering logic as defined in the BaseSearchFilterPipe.\n *\n * This pipe is not pure, meaning it updates and reevaluates when inputs change or when\n * impure actions occur in the application.\n *\n * @see {BaseSearchFilterPipe}\n */\n@Pipe({\n pure: false,\n name: 'odxSelectSearchFilter',\n standalone: true,\n})\nexport class SelectSearchFilterPipe extends BaseSearchFilterPipe implements PipeTransform {}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n HostListener,\n inject,\n Input,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CoreModule, IdentityMatcher, ODX_IDENTITY_MATCHER } from '@odx/angular';\nimport { AutocompleteControl, ODX_SEARCH_FILTER_HOST } from '@odx/angular/cdk/autocomplete-control';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { DropdownDirective } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromQueryList } from '@odx/angular/rxjs';\nimport { deferFn } from '@odx/angular/utils';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SELECT_CONTROL } from './select.tokens';\n\n/**\n * SelectComponent provides an advanced dropdown list that supports autocomplete, multiple selection,\n * and accessibility features. It extends AutocompleteControl for seamless integration with Angular forms.\n *\n * @see {AutocompleteControl}\n */\n@CSSComponent('select')\n@Component({\n standalone: true,\n selector: 'odx-select',\n imports: [CoreModule, DropdownDirective, IconComponent, DynamicViewDirective, SelectOptionComponent, LoadingSpinnerModule],\n templateUrl: './select.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: SELECT_CONTROL,\n useExisting: forwardRef(() => SelectComponent),\n },\n {\n provide: ODX_SEARCH_FILTER_HOST,\n useExisting: SELECT_CONTROL,\n },\n ],\n host: {\n '[tabindex]': 'searchFieldEnabled || isDisabled ? -1 : 0',\n '[attr.aria-multiselectable]': 'multiple',\n },\n})\nexport class SelectComponent<T = unknown> extends AutocompleteControl<T | null> implements AfterViewInit {\n protected searchFieldEnabled = false;\n protected selectedOption: SelectOptionComponent<T> | null = null;\n protected selectedOptionText: string | null = null;\n\n @ContentChildren(SelectOptionComponent, { descendants: true, emitDistinctChangesOnly: true })\n protected options?: QueryList<SelectOptionComponent<T>>;\n\n /**\n * Directive managing the search input field within the select.\n *\n * @type {SelectInputControlDirective}\n */\n @ContentChild(SelectInputControlDirective)\n public searchField?: SelectInputControlDirective;\n\n /**\n * Returns the content of the selected option for display. This can be a template or plain text.\n *\n * @type {TemplateRef<{ $implicit: T | null }> | string | null}\n */\n public get selectedOptionContent(): TemplateRef<{ $implicit: T | null }> | string | null {\n return this.selectedOption ? this.selectedOptionTemplate ?? this.selectedOptionText : null;\n }\n\n /**\n * Placeholder text for the select input when no option is selected.\n *\n * @type {string}\n */\n @Input()\n public placeholder = '';\n\n /**\n * Sets whether multiple options can be selected.\n *\n * @type {boolean}\n */\n @CSSModifier()\n @Input({ transform: booleanAttribute })\n public multiple = false;\n\n /**\n * Custom template for displaying the selected option.\n *\n * @type {TemplateRef<{ $implicit: T }> | null}\n */\n @Input()\n public selectedOptionTemplate?: TemplateRef<{ $implicit: T }> | null = null;\n\n /**\n * Function to determine if two options are identical, useful for detecting changes in selection.\n *\n * @type {IdentityMatcher<T | null>}\n *\n * @example\n * ```ts\n * (item1, item2) => item1.id === item2.id\n * ```\n */\n @Input()\n public identityMatcher: IdentityMatcher<T | null> = inject(ODX_IDENTITY_MATCHER);\n\n public override ngAfterViewInit(): void {\n if (!this.options) return;\n\n this.initKeyManager(this.options);\n this.handleQueryListOption(this.options);\n this.handleSearchFieldChanges();\n }\n\n /**\n * Registers a function to be called when the value of the select changes.\n *\n * @param {Function} fn The function to be called when the value changes.\n * @returns {void}\n */\n public override registerOnChange(fn: (value: T | null) => void): void {\n super.registerOnChange((value) => {\n this.updateSelectedOption();\n fn(value);\n });\n }\n\n /**\n * Selects a given option and updates the component's value accordingly.\n *\n * @param {SelectOptionComponent<T | T[]> | null} option The option to select.\n * @returns {void}\n */\n public selectOption(option?: SelectOptionComponent<T | T[]> | null): void {\n if (option && !option.disabled) {\n this.optionSelected.emit();\n option.switchCheckbox();\n const value = this.multiple ? this.multipleSelectValueResolver(option as SelectOptionComponent<T>) : option.value;\n this.updateValue((value as T) ?? null);\n }\n\n !this.multiple && this.closeDropdown();\n }\n\n /**\n * Checks whether a given option is selected.\n *\n * @param {SelectOptionComponent<T | T[]>} option The option to check.\n * @returns {boolean} Whether the option is selected.\n */\n public isOptionSelected(option: SelectOptionComponent<T | T[]>): boolean {\n if (option && !option.disabled) {\n if (this.multiple && Array.isArray(this.value)) {\n return (this.value as T[]).some((val) => this.identityMatcher(option.value as T, val));\n }\n return this.identityMatcher(option.value as T, this.value);\n }\n return false;\n }\n\n protected override initKeyManager(options: QueryList<SelectOptionComponent<T>>): void {\n this.keyManager = new ActiveDescendantKeyManager(options).withHomeAndEnd().skipPredicate((item) => item.disabled);\n }\n\n protected handleQueryListOption(options: QueryList<SelectOptionComponent<T>>): void {\n fromQueryList(options)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.updateSelectedOption();\n if (this.isOpen) {\n deferFn(() => this.activateSelectedOption());\n }\n });\n }\n\n protected handleSearchFieldChanges(): void {\n this.searchField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.triggerControllerChange());\n }\n\n @HostListener('click', ['$event'])\n @HostListener('keydown', ['$event'])\n protected handleControllerEvent(event: KeyboardEvent) {\n if (this.isLoading || this.readonlyController?.readonly) return;\n if (this.isOpen && this.hasOptions) {\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.selectOption(this.keyManager?.activeItem as SelectOptionComponent<T> | undefined);\n return;\n }\n }\n this.keyManager?.onKeydown(event);\n }\n\n protected activateSelectedOption(): void {\n let activeIndex = this.options?.toArray().findIndex((option) => option.isSelected && !option.disabled);\n if (!activeIndex || activeIndex === -1) {\n activeIndex = this.options?.toArray().findIndex((option) => !option.disabled) ?? -1;\n }\n this.keyManager?.setActiveItem(activeIndex);\n }\n\n protected onDropdownOpen(): void {\n this.activateSelectedOption();\n if (!this.searchFieldEnabled) {\n deferFn(() => this.focusSelectSearchField());\n }\n }\n\n protected onDropdownClose(): void {\n this.disableSmoothScroll();\n this.element.nativeElement.blur();\n if (this.searchFieldEnabled) {\n this.searchFieldEnabled = false;\n this.element.nativeElement?.focus();\n }\n }\n\n protected onDropdownClosed(): void {\n this.searchField?.reset();\n }\n\n private updateSelectedOption(): void {\n const options = this.options?.toArray();\n this.selectedOption = options?.find((option) => option.isSelected) ?? null;\n\n if (this.multiple) {\n this.options?.forEach((option) => (option.isSelected = this.isOptionSelected(option)));\n this.selectedOptionText =\n options\n ?.filter(({ isSelected }) => isSelected)\n .map((option) => this.stringify?.(option.value) ?? option.getLabel())\n .join(', ') ?? null;\n\n this.changeDetector.detectChanges();\n return;\n }\n this.selectedOptionText = this.selectedOption ? this.stringify?.(this.selectedOption?.value) ?? this.selectedOption.getLabel() : null;\n this.changeDetector.detectChanges();\n }\n\n private focusSelectSearchField(): void {\n this.searchFieldEnabled = !!this.searchField;\n deferFn(() => this.searchField?.focus());\n this.changeDetector.detectChanges();\n }\n\n private multipleSelectValueResolver(option: SelectOptionComponent<T>): T {\n let value = Array.isArray(this.value) ? (this.value as T[]) : [];\n if (option.isSelected) {\n (value as T[]).push(option.value as T);\n } else {\n value = value.filter((val) => !this.identityMatcher(option.value as T, val));\n }\n return value as T;\n }\n}\n","<div\n aria-haspopup=\"listbox\"\n class=\"odx-select__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n (odxDropdownAfterOpen)=\"enableSmoothScroll()\"\n>\n <ng-template [ngIf]=\"!searchFieldEnabled\" [ngIfElse]=\"searchFieldTemplate\">\n <div class=\"odx-select__value\" *ngIf=\"selectedOptionContent; else placeholderTemplate\">\n <ng-template [odxDynamicView]=\"selectedOptionContent\" [odxDynamicViewContext]=\"{ $implicit: value }\"></ng-template>\n </div>\n </ng-template>\n <ng-template #placeholderTemplate>\n <div class=\"odx-select__placeholder\">\n {{ placeholder }}\n </div>\n </ng-template>\n <ng-template #searchFieldTemplate>\n <ng-content select=\"[odxSelectSearchField]\"></ng-content>\n </ng-template>\n <odx-icon class=\"odx-select__indicator\" name=\"chevron-down\" iconSet=\"core\"></odx-icon>\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n <ng-template [ngIf]=\"hasOptions\" [ngIfElse]=\"noOptionsTemplate\">\n <ng-content></ng-content>\n </ng-template>\n <ng-template #noOptionsTemplate>\n <odx-select-option disabled notFoundMessage>\n <ng-template [odxDynamicView]=\"searchField?.notFoundContent\"></ng-template>\n </odx-select-option>\n </ng-template>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SelectSearchFilterPipe } from './pipes';\nimport { SelectComponent } from './select.component';\n\nconst modules = [SelectComponent, SelectInputControlDirective, SelectSearchFilterPipe, SelectOptionComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class SelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-select.mjs","sources":["../../../../libs/angular/components/select/src/lib/select.tokens.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.ts","../../../../libs/angular/components/select/src/lib/components/select-option/select-option.component.html","../../../../libs/angular/components/select/src/lib/directives/select-input-control.directive.ts","../../../../libs/angular/components/select/src/lib/pipes/select-search-filter.pipe.ts","../../../../libs/angular/components/select/src/lib/select.component.ts","../../../../libs/angular/components/select/src/lib/select.component.html","../../../../libs/angular/components/select/src/lib/select.module.ts","../../../../libs/angular/components/select/src/odx-angular-components-select.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { SelectComponent } from './select.component';\n\nexport const SELECT_CONTROL = new InjectionToken<SelectComponent>('@odx/angular/components/select::SelectComponent');\n","import { booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { CoreModule, detectControllerChanges } from '@odx/angular';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { OptionControl } from '@odx/angular/cdk/option-control';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { SELECT_CONTROL } from '../../select.tokens';\n\n/**\n * SelectOptionComponent is a customizable option element for use within a SelectComponent.\n * It supports complex data structures, integration with checkbox components for multi-select,\n * and can be disabled as needed.\n * It extends OptionControl to provide additional behavior specific to select components.\n *\n * @see {OptionControl}\n */\n@CSSComponent('select-option')\n@Component({\n standalone: true,\n selector: 'odx-select-option, odx-option',\n imports: [CoreModule, DynamicViewDirective, CheckboxComponent],\n templateUrl: './select-option.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'disabled || null',\n '[class.is-disabled]': 'disabled',\n },\n})\nexport class SelectOptionComponent<T = unknown> extends OptionControl<T> implements OnInit {\n private _isDisabled = false;\n\n protected readonly selectControl = inject(SELECT_CONTROL);\n\n /**\n * Indicates whether the option is currently selected.\n *\n * @type {boolean}\n */\n public isSelected = false;\n\n /**\n * Indicates whether a not found message should be displayed, used typically for search results.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public notFoundMessage = false;\n\n /**\n * Setter for the disabled state of the select option.\n *\n * @param value - The new value for the disabled state.\n */\n @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n this._isDisabled = value;\n }\n\n /**\n * Getter for the disabled state of the select option.\n *\n * @returns {boolean} The current disabled state of the option.\n */\n public get disabled(): boolean {\n return this._isDisabled;\n }\n\n constructor() {\n super();\n\n detectControllerChanges(this.selectControl)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.isSelected = this.selectControl.isOptionSelected(this);\n });\n }\n\n public ngOnInit(): void {\n this.isSelected = this.selectControl.isOptionSelected(this);\n }\n\n /**\n * Sets active styles for the option when it becomes the target of keyboard navigation or mouse hover.\n */\n public override setActiveStyles(): void {\n if (this.disabled) return;\n\n this.isActive = true;\n\n if (this.selectControl.isOpen) {\n this.selectControl.scrollOptionIntoView(this);\n } else {\n this.selectControl.selectOption(this);\n }\n }\n\n /**\n * Toggles the selection state of the option when it is part of a multi-select control.\n */\n public switchCheckbox(): void {\n if (this.selectControl.multiple) {\n this.isSelected = !this.isSelected;\n this.cdr.markForCheck();\n }\n }\n\n protected selectOption(): void {\n this.selectControl.selectOption(this);\n }\n}\n","<odx-checkbox [checked]=\"isSelected\" [disabled]=\"disabled\" *ngIf=\"selectControl.multiple && !notFoundMessage; else single\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</odx-checkbox>\n\n<ng-template #single>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent } from '@odx/angular/internal';\n\n/**\n * SelectInputControlDirective extends InputControlDirective to provide additional behavior\n * specific to select components with search functionality. This directive manages interactions\n * within the search input field, such as resetting the field content upon specific key events.\n *\n * @see {InputControlDirective}\n */\n@CSSComponent('select__control')\n@Directive({\n standalone: true,\n selector: 'input[odxSelectSearchField]',\n})\nexport class SelectInputControlDirective extends InputControlDirective {\n /**\n * Dynamic content to be displayed when no matching search results are found.\n * This can be specified as HTML content or a string.\n */\n @Input('odxSelectSearchField')\n public notFoundContent: DynamicContent | null = null;\n\n @HostListener('keydown.delete')\n public handleDelete(): void {\n this.reset();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { BaseSearchFilterPipe } from '@odx/angular/cdk/autocomplete-control';\n/**\n * SelectSearchFilterPipe extends BaseSearchFilterPipe to provide search filtering functionality\n * specifically for select components. It filters options based on the input query, supporting\n * complex filtering logic as defined in the BaseSearchFilterPipe.\n *\n * This pipe is not pure, meaning it updates and reevaluates when inputs change or when\n * impure actions occur in the application.\n *\n * @see {BaseSearchFilterPipe}\n */\n@Pipe({\n pure: false,\n name: 'odxSelectSearchFilter',\n standalone: true,\n})\nexport class SelectSearchFilterPipe extends BaseSearchFilterPipe implements PipeTransform {}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n forwardRef,\n HostListener,\n inject,\n Input,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CoreModule, IdentityMatcher, ODX_IDENTITY_MATCHER } from '@odx/angular';\nimport { AutocompleteControl, ODX_SEARCH_FILTER_HOST } from '@odx/angular/cdk/autocomplete-control';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { DropdownDirective } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromQueryList } from '@odx/angular/rxjs';\nimport { deferFn } from '@odx/angular/utils';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SELECT_CONTROL } from './select.tokens';\n\n/**\n * SelectComponent provides an advanced dropdown list that supports autocomplete, multiple selection,\n * and accessibility features. It extends AutocompleteControl for seamless integration with Angular forms.\n *\n * @see {AutocompleteControl}\n */\n@CSSComponent('select')\n@Component({\n standalone: true,\n selector: 'odx-select',\n imports: [CoreModule, DropdownDirective, IconComponent, DynamicViewDirective, SelectOptionComponent, LoadingSpinnerModule],\n templateUrl: './select.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: SELECT_CONTROL,\n useExisting: forwardRef(() => SelectComponent),\n },\n {\n provide: ODX_SEARCH_FILTER_HOST,\n useExisting: SELECT_CONTROL,\n },\n ],\n host: {\n '[tabindex]': 'searchFieldEnabled || isDisabled ? -1 : 0',\n '[attr.aria-multiselectable]': 'multiple',\n },\n})\nexport class SelectComponent<T = unknown> extends AutocompleteControl<T | null> implements AfterViewInit {\n protected searchFieldEnabled = false;\n protected selectedOption: SelectOptionComponent<T> | null = null;\n protected selectedOptionText: string | null = null;\n\n @ContentChildren(SelectOptionComponent, { descendants: true, emitDistinctChangesOnly: true })\n protected options?: QueryList<SelectOptionComponent<T>>;\n\n /**\n * Directive managing the search input field within the select.\n *\n * @type {SelectInputControlDirective}\n */\n @ContentChild(SelectInputControlDirective)\n public searchField?: SelectInputControlDirective;\n\n /**\n * Returns the content of the selected option for display. This can be a template or plain text.\n *\n * @type {TemplateRef<{ $implicit: T | null }> | string | null}\n */\n public get selectedOptionContent(): TemplateRef<{ $implicit: T | null }> | string | null {\n return this.selectedOption ? this.selectedOptionTemplate ?? this.selectedOptionText : null;\n }\n\n /**\n * Placeholder text for the select input when no option is selected.\n *\n * @type {string}\n */\n @Input()\n public placeholder = '';\n\n /**\n * Sets whether multiple options can be selected.\n *\n * @type {boolean}\n */\n @CSSModifier()\n @Input({ transform: booleanAttribute })\n public multiple = false;\n\n /**\n * Custom template for displaying the selected option.\n *\n * @type {TemplateRef<{ $implicit: T }> | null}\n */\n @Input()\n public selectedOptionTemplate?: TemplateRef<{ $implicit: T }> | null = null;\n\n /**\n * Function to determine if two options are identical, useful for detecting changes in selection.\n *\n * @type {IdentityMatcher<T | null>}\n *\n * @example\n * ```ts\n * (item1, item2) => item1.id === item2.id\n * ```\n */\n @Input()\n public identityMatcher: IdentityMatcher<T | null> = inject(ODX_IDENTITY_MATCHER);\n\n public override ngAfterViewInit(): void {\n if (!this.options) return;\n\n this.initKeyManager(this.options);\n this.handleQueryListOption(this.options);\n this.handleSearchFieldChanges();\n }\n\n /**\n * Registers a function to be called when the value of the select changes.\n *\n * @param {Function} fn The function to be called when the value changes.\n * @returns {void}\n */\n public override registerOnChange(fn: (value: T | null) => void): void {\n super.registerOnChange((value) => {\n this.updateSelectedOption();\n fn(value);\n });\n }\n\n /**\n * Selects a given option and updates the component's value accordingly.\n *\n * @param {SelectOptionComponent<T | T[]> | null} option The option to select.\n * @returns {void}\n */\n public selectOption(option?: SelectOptionComponent<T | T[]> | null): void {\n if (option && !option.disabled) {\n this.optionSelected.emit();\n option.switchCheckbox();\n const value = this.multiple ? this.multipleSelectValueResolver(option as SelectOptionComponent<T>) : option.value;\n this.updateValue((value as T) ?? null);\n }\n\n !this.multiple && !option?.disabled && this.closeDropdown();\n }\n\n /**\n * Checks whether a given option is selected.\n *\n * @param {SelectOptionComponent<T | T[]>} option The option to check.\n * @returns {boolean} Whether the option is selected.\n */\n public isOptionSelected(option: SelectOptionComponent<T | T[]>): boolean {\n if (option && !option.disabled) {\n if (this.multiple && Array.isArray(this.value)) {\n return (this.value as T[]).some((val) => this.identityMatcher(option.value as T, val));\n }\n return this.identityMatcher(option.value as T, this.value);\n }\n return false;\n }\n\n protected override initKeyManager(options: QueryList<SelectOptionComponent<T>>): void {\n this.keyManager = new ActiveDescendantKeyManager(options).withHomeAndEnd().skipPredicate((item) => item.disabled);\n }\n\n protected handleQueryListOption(options: QueryList<SelectOptionComponent<T>>): void {\n fromQueryList(options)\n .pipe(this.takeUntilDestroyed())\n .subscribe(() => {\n this.updateSelectedOption();\n if (this.isOpen) {\n deferFn(() => this.activateSelectedOption());\n }\n });\n }\n\n protected handleSearchFieldChanges(): void {\n this.searchField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.triggerControllerChange());\n }\n\n @HostListener('click', ['$event'])\n @HostListener('keydown', ['$event'])\n protected handleControllerEvent(event: KeyboardEvent) {\n if (this.isLoading || this.readonlyController?.readonly || !this.isOpen) return;\n if (this.hasOptions) {\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.selectOption(this.keyManager?.activeItem as SelectOptionComponent<T> | undefined);\n return;\n }\n }\n this.keyManager?.onKeydown(event);\n }\n\n protected activateSelectedOption(): void {\n let activeIndex = this.options?.toArray().findIndex((option) => option.isSelected && !option.disabled);\n if (!activeIndex || activeIndex === -1) {\n activeIndex = this.options?.toArray().findIndex((option) => !option.disabled) ?? -1;\n }\n this.keyManager?.setActiveItem(activeIndex);\n }\n\n protected onDropdownOpen(): void {\n this.activateSelectedOption();\n if (!this.searchFieldEnabled) {\n deferFn(() => this.focusSelectSearchField());\n }\n }\n\n protected onDropdownClose(): void {\n this.disableSmoothScroll();\n this.element.nativeElement.blur();\n if (this.searchFieldEnabled) {\n this.searchFieldEnabled = false;\n this.element.nativeElement?.focus();\n }\n }\n\n protected onDropdownClosed(): void {\n this.searchField?.reset();\n }\n\n private updateSelectedOption(): void {\n const options = this.options?.toArray();\n this.selectedOption = options?.find((option) => option.isSelected) ?? null;\n\n if (this.multiple) {\n this.options?.forEach((option) => (option.isSelected = this.isOptionSelected(option)));\n this.selectedOptionText =\n options\n ?.filter(({ isSelected }) => isSelected)\n .map((option) => this.stringify?.(option.value) ?? option.getLabel())\n .join(', ') ?? null;\n\n this.changeDetector.detectChanges();\n return;\n }\n this.selectedOptionText = this.selectedOption ? this.stringify?.(this.selectedOption?.value) ?? this.selectedOption.getLabel() : null;\n this.changeDetector.detectChanges();\n }\n\n private focusSelectSearchField(): void {\n this.searchFieldEnabled = !!this.searchField;\n deferFn(() => this.searchField?.focus());\n this.changeDetector.detectChanges();\n }\n\n private multipleSelectValueResolver(option: SelectOptionComponent<T>): T {\n let value = Array.isArray(this.value) ? (this.value as T[]) : [];\n if (option.isSelected) {\n (value as T[]).push(option.value as T);\n } else {\n value = value.filter((val) => !this.identityMatcher(option.value as T, val));\n }\n return value as T;\n }\n}\n","<div\n aria-haspopup=\"listbox\"\n class=\"odx-select__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n (odxDropdownAfterOpen)=\"enableSmoothScroll()\"\n>\n <ng-template [ngIf]=\"!searchFieldEnabled\" [ngIfElse]=\"searchFieldTemplate\">\n <div class=\"odx-select__value\" *ngIf=\"selectedOptionContent; else placeholderTemplate\">\n <ng-template [odxDynamicView]=\"selectedOptionContent\" [odxDynamicViewContext]=\"{ $implicit: value }\"></ng-template>\n </div>\n </ng-template>\n <ng-template #placeholderTemplate>\n <div class=\"odx-select__placeholder\">\n {{ placeholder }}\n </div>\n </ng-template>\n <ng-template #searchFieldTemplate>\n <ng-content select=\"[odxSelectSearchField]\"></ng-content>\n </ng-template>\n <odx-icon class=\"odx-select__indicator\" name=\"chevron-down\" iconSet=\"core\"></odx-icon>\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n <ng-template [ngIf]=\"hasOptions\" [ngIfElse]=\"noOptionsTemplate\">\n <ng-content></ng-content>\n </ng-template>\n <ng-template #noOptionsTemplate>\n <odx-select-option disabled notFoundMessage>\n <ng-template [odxDynamicView]=\"searchField?.notFoundContent\"></ng-template>\n </odx-select-option>\n </ng-template>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { SelectOptionComponent } from './components';\nimport { SelectInputControlDirective } from './directives';\nimport { SelectSearchFilterPipe } from './pipes';\nimport { SelectComponent } from './select.component';\n\nconst modules = [SelectComponent, SelectInputControlDirective, SelectSearchFilterPipe, SelectOptionComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class SelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -176,6 +176,7 @@ let TabBarComponent = class TabBarComponent {
|
|
|
176
176
|
const updateActionVisibility$ = fromEvent(this.tabBarPanelElement.nativeElement, 'transitionend').pipe(tap(({ target }) => target === this.tabBarPanelElement.nativeElement && this.updateActionVisbility()));
|
|
177
177
|
const activeItemChange$ = merge(this.keyManager.change.pipe(tap(() => this.activeItemChange())), this.selectedIndex$$.pipe(tap((index) => this.keyManager?.setActiveItem(index))));
|
|
178
178
|
merge(activeItemChange$, updatePanelPosition$, updateActionVisibility$).pipe(this.takeUntilDestroyed()).subscribe();
|
|
179
|
+
this.tabs.changes.pipe(this.takeUntilDestroyed()).subscribe(() => this.selectedIndex$$.next(this.selectedIndex$$.value));
|
|
179
180
|
}
|
|
180
181
|
/**
|
|
181
182
|
* Activates the specified tab item.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-tab-bar.mjs","sources":["../../../../libs/angular/components/tab-bar/src/lib/tab-bar.config.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.ts","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.module.ts","../../../../libs/angular/components/tab-bar/src/odx-angular-components-tab-bar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TabBarComponent } from './tab-bar.component';\n\nexport const TAB_BAR = new InjectionToken<TabBarComponent>('tabBar');\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { DisabledController } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, untilDestroyed } from '@odx/angular/utils';\nimport { filter } from 'rxjs';\nimport { TAB_BAR } from '../../tab-bar.config';\n\n/**\n * Represents an individual tab item in a tab bar interface, providing functionalities\n * for activation, deactivation, and optional closing of the tab. This component is designed\n * to be used within a `TabBarComponent` to create a complete tabbed interface.\n *\n * It supports disabled state management through `DisabledController`, allowing the tab to be\n * disabled based on parent component states or its own `disabled` input property.\n *\n * The component integrates with Angular's `RouterLinkActive` to automatically set active\n * styles based on the current router state, enhancing SPA navigation experiences.\n */\n@CSSComponent('tab-bar-item')\n@Component({\n selector: 'odx-tab-bar-item',\n standalone: true,\n imports: [CommonModule, IconComponent],\n templateUrl: './tab-bar-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'disabled',\n '[class.is-active]': 'isActive',\n '[attr.aria-selected]': 'isActive',\n '[class.is-closable]': 'closable',\n role: 'tab',\n },\n})\nexport class TabBarItemComponent implements Highlightable, OnInit {\n private readonly disabledController = DisabledController.inject();\n private readonly tabBar = inject(TAB_BAR);\n private readonly routerLinkActive = inject(RouterLinkActive, { optional: true, self: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected isActive = false;\n\n public readonly element: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get disabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n /**\n * Indicates if the tab can be closed. This controls the visibility of the close button\n * and enables the emission of the `tabClose` event when the tab is closed.\n * @type {boolean}\n */\n @Input({ transform: booleanAttribute })\n public closable = false;\n\n /**\n * Event emitter that fires when the tab is closed. It emits the instance of the tab item component.\n * @type {EventEmitter<TabBarItemComponent>}\n */\n @Output()\n public tabClose = new EventEmitter<TabBarItemComponent>();\n\n public ngOnInit(): void {\n this.routerLinkActive?.isActiveChange.pipe(this.takeUntilDestroyed(), filter(Boolean)).subscribe(() => {\n this.onClick();\n });\n }\n\n /**\n * Sets the tab as active and applies corresponding styles. This method is part of the\n * `Highlightable` interface, allowing the tab bar to manage active states.\n */\n public setActiveStyles(): void {\n deferFn(() => (this.isActive = true));\n }\n\n /**\n * Sets the tab as inactive and removes corresponding active styles. This method is part of the\n * `Highlightable` interface.\n */\n public setInactiveStyles(): void {\n deferFn(() => (this.isActive = false));\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.disabled) return;\n this.tabBar.activateItem(this);\n }\n\n protected handleClose(event: Event): void {\n event.stopPropagation();\n if (this.disabled || !this.closable) return;\n this.tabBar.removeItem(this);\n this.tabClose.emit(this);\n }\n}\n","<ng-content select=\"odx-icon\"></ng-content>\n<ng-content></ng-content>\n<odx-icon name=\"close\" iconSet=\"core\" size=\"small\" *ngIf=\"closable\" (click)=\"handleClose($event)\"></odx-icon>\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n numberAttribute,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromElementResize$, fromQueryList } from '@odx/angular/rxjs';\nimport { applyStyles, cssTranslate, deferFn, injectElement, px, untilDestroyed } from '@odx/angular/utils';\nimport { BehaviorSubject, debounceTime, fromEvent, merge, tap } from 'rxjs';\nimport { TabBarItemComponent } from './components';\nimport { TabChangeEvent } from './models';\nimport { TAB_BAR } from './tab-bar.config';\n\n/**\n * `TabBarComponent` creates a dynamic and accessible tab bar interface,\n * facilitating the management and interaction with a collection of tabs.\n * It supports keyboard navigation, dynamic tab management, and responsive overflow actions.\n *\n * The component integrates with Angular's ContentChildren to dynamically manage the tabs based on their content.\n * It uses ActiveDescendantKeyManager from Angular CDK for managing focus and keyboard navigation,\n * making it accessible and user-friendly. Additionally, it handles overflow with navigational arrows,\n * allowing for a smooth user experience even with a large number of tabs.\n */\n@CSSComponent('tab-bar')\n@Component({\n selector: 'odx-tab-bar',\n standalone: true,\n imports: [CommonModule, IconComponent, ActiveIndicatorDirective],\n templateUrl: './tab-bar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }],\n host: {\n role: 'tabpanel',\n tabindex: '0',\n },\n})\nexport class TabBarComponent implements AfterViewInit {\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly selectedIndex$$ = new BehaviorSubject(0);\n\n protected activeItem: TabBarItemComponent | null = null;\n\n protected keyManager?: ActiveDescendantKeyManager<TabBarItemComponent>;\n\n @ViewChild('tabBarPanel')\n protected tabBarPanelElement!: ElementRef<HTMLElement>;\n\n @ViewChildren('tabAction')\n protected tabActionElements!: QueryList<ElementRef<HTMLElement>>;\n\n @ContentChildren(TabBarItemComponent)\n protected tabs!: QueryList<TabBarItemComponent>;\n\n public readonly element = injectElement();\n\n /**\n * Indicates whether the tab bar has overflowed to the left.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowLeft = false;\n\n /**\n * Indicates whether the tab bar has overflowed to the right.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowRight = false;\n\n /**\n * Gets or sets the index of the currently selected tab. Use this property to programmatically\n * change the active tab. It responds to changes by updating the active state of the corresponding\n * tab item and adjusting the view if necessary.\n *\n * @type {number}\n * @example\n * Programmatically select the second tab (index starts from 0):\n * ```html\n * <odx-tab-bar [selectedIndex]=\"1\"></odx-tab-bar>\n * ```\n */\n @Input({ transform: numberAttribute })\n public set selectedIndex(value: number) {\n this.selectedIndex$$.next(value);\n }\n\n /**\n * An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`\n * which contains the index of the newly selected tab and the instance of the corresponding\n * `TabBarItemComponent`. Subscribe to this output to perform actions when the active tab changes.\n *\n * @emits {TabChangeEvent}\n * @example\n * ```html\n * <odx-tab-bar (selectedTabChanged)=\"onTabChange($event)\"></odx-tab-bar>\n * ```\n *\n * ```ts\n * onTabChange(event: TabChangeEvent): void {\n * console.log(`New active tab index: ${event.selectedIndex}`);\n * }\n * ```\n */\n @Output()\n public selectedTabChanged = new EventEmitter<TabChangeEvent>();\n\n public ngAfterViewInit(): void {\n this.keyManager = new ActiveDescendantKeyManager(this.tabs).withWrap().withHomeAndEnd().withHorizontalOrientation('ltr').withVerticalOrientation(false);\n const updatePanelPosition$ = merge(this.selectedTabChanged, fromQueryList(this.tabs), fromElementResize$(this.element.nativeElement)).pipe(\n debounceTime(0),\n tap(() => this.updatePanelPosition()),\n );\n const updateActionVisibility$ = fromEvent(this.tabBarPanelElement.nativeElement, 'transitionend').pipe(\n tap(({ target }) => target === this.tabBarPanelElement.nativeElement && this.updateActionVisbility()),\n );\n const activeItemChange$ = merge(\n this.keyManager.change.pipe(tap(() => this.activeItemChange())),\n this.selectedIndex$$.pipe(tap((index) => this.keyManager?.setActiveItem(index))),\n );\n merge(activeItemChange$, updatePanelPosition$, updateActionVisibility$).pipe(this.takeUntilDestroyed()).subscribe();\n }\n\n /**\n * Activates the specified tab item.\n *\n * @param {TabBarItemComponent | null} item - The tab item to activate. If not provided or null, the active item will be cleared.\n *\n * @example\n * ```ts\n * // Activate the first tab item\n * tabBar.activateItem(tabItems[0]);\n *\n * // Clear the active item\n * tabBar.activateItem(null);\n * ```\n */\n public activateItem(item?: TabBarItemComponent | null): void {\n if (item === this.activeItem) return;\n const selectedIndex = item ? this.tabs.toArray().indexOf(item) : -1;\n this.keyManager?.setActiveItem(selectedIndex);\n }\n\n /**\n * Removes the specified item from the tab bar.\n * If the removed item is the active item, it sets the previous item as the new active item.\n *\n * @param {TabBarItemComponent} item - The item to be removed from the tab bar.\n */\n public removeItem(item: TabBarItemComponent): void {\n if (this.activeItem !== item) return;\n deferFn(() => this.keyManager?.setPreviousItemActive());\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.keyManager?.onKeydown(event);\n }\n\n private updatePanelPosition(): void {\n const activeElement = this.activeItem?.element.nativeElement;\n if (!activeElement) return;\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n const maxPanelPositionX = Math.floor(tabBarRect.width - panelRect.width);\n const panelPositionX = tabBarRect.width / 2 - activeElement.offsetLeft - activeElement.offsetWidth / 2;\n const positionX = Math.min(0, Math.max(panelPositionX, maxPanelPositionX));\n applyStyles(this.tabBarPanelElement.nativeElement, {\n transform: cssTranslate(px(positionX), 0),\n });\n this.updateActionVisbility();\n }\n\n private updateActionVisbility(): void {\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n this.overflowLeft = panelRect.left < tabBarRect.left;\n this.overflowRight = panelRect.right > tabBarRect.right;\n this.changeDetector.detectChanges();\n }\n\n private activeItemChange(): void {\n const { activeItemIndex, activeItem } = this.keyManager ?? {};\n this.activeItem = activeItem ?? null;\n this.selectedTabChanged.emit({ selectedIndex: activeItemIndex ?? -1, selectedTab: this.keyManager?.activeItem ?? null });\n }\n}\n","<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--prev\"\n [class.is-active]=\"overflowLeft\"\n (click)=\"keyManager?.setPreviousItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-left\" iconSet=\"core\"></odx-icon>\n</button>\n<div class=\"odx-tab-bar__inner\">\n <div class=\"odx-tab-bar__panel\" role=\"tablist\" #tabBarPanel>\n <ng-content></ng-content>\n <div class=\"odx-tab-bar__indicator\" [odxActiveIndicator]=\"activeItem?.element?.nativeElement\" odxActiveIndicatorPosition=\"start\"></div>\n </div>\n</div>\n<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--next\"\n [class.is-active]=\"overflowRight\"\n (click)=\"keyManager?.setNextItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-right\" iconSet=\"core\"></odx-icon>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { TabBarItemComponent } from './components';\nimport { TabBarComponent } from './tab-bar.component';\n\nconst modules = [TabBarComponent, TabBarItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TabBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-tab-bar.mjs","sources":["../../../../libs/angular/components/tab-bar/src/lib/tab-bar.config.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.ts","../../../../libs/angular/components/tab-bar/src/lib/components/tab-bar-item/tab-bar-item.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.ts","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.component.html","../../../../libs/angular/components/tab-bar/src/lib/tab-bar.module.ts","../../../../libs/angular/components/tab-bar/src/odx-angular-components-tab-bar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TabBarComponent } from './tab-bar.component';\n\nexport const TAB_BAR = new InjectionToken<TabBarComponent>('tabBar');\n","import { Highlightable } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { DisabledController } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, untilDestroyed } from '@odx/angular/utils';\nimport { filter } from 'rxjs';\nimport { TAB_BAR } from '../../tab-bar.config';\n\n/**\n * Represents an individual tab item in a tab bar interface, providing functionalities\n * for activation, deactivation, and optional closing of the tab. This component is designed\n * to be used within a `TabBarComponent` to create a complete tabbed interface.\n *\n * It supports disabled state management through `DisabledController`, allowing the tab to be\n * disabled based on parent component states or its own `disabled` input property.\n *\n * The component integrates with Angular's `RouterLinkActive` to automatically set active\n * styles based on the current router state, enhancing SPA navigation experiences.\n */\n@CSSComponent('tab-bar-item')\n@Component({\n selector: 'odx-tab-bar-item',\n standalone: true,\n imports: [CommonModule, IconComponent],\n templateUrl: './tab-bar-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'disabled',\n '[class.is-active]': 'isActive',\n '[attr.aria-selected]': 'isActive',\n '[class.is-closable]': 'closable',\n role: 'tab',\n },\n})\nexport class TabBarItemComponent implements Highlightable, OnInit {\n private readonly disabledController = DisabledController.inject();\n private readonly tabBar = inject(TAB_BAR);\n private readonly routerLinkActive = inject(RouterLinkActive, { optional: true, self: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected isActive = false;\n\n public readonly element: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get disabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n /**\n * Indicates if the tab can be closed. This controls the visibility of the close button\n * and enables the emission of the `tabClose` event when the tab is closed.\n * @type {boolean}\n */\n @Input({ transform: booleanAttribute })\n public closable = false;\n\n /**\n * Event emitter that fires when the tab is closed. It emits the instance of the tab item component.\n * @type {EventEmitter<TabBarItemComponent>}\n */\n @Output()\n public tabClose = new EventEmitter<TabBarItemComponent>();\n\n public ngOnInit(): void {\n this.routerLinkActive?.isActiveChange.pipe(this.takeUntilDestroyed(), filter(Boolean)).subscribe(() => {\n this.onClick();\n });\n }\n\n /**\n * Sets the tab as active and applies corresponding styles. This method is part of the\n * `Highlightable` interface, allowing the tab bar to manage active states.\n */\n public setActiveStyles(): void {\n deferFn(() => (this.isActive = true));\n }\n\n /**\n * Sets the tab as inactive and removes corresponding active styles. This method is part of the\n * `Highlightable` interface.\n */\n public setInactiveStyles(): void {\n deferFn(() => (this.isActive = false));\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.disabled) return;\n this.tabBar.activateItem(this);\n }\n\n protected handleClose(event: Event): void {\n event.stopPropagation();\n if (this.disabled || !this.closable) return;\n this.tabBar.removeItem(this);\n this.tabClose.emit(this);\n }\n}\n","<ng-content select=\"odx-icon\"></ng-content>\n<ng-content></ng-content>\n<odx-icon name=\"close\" iconSet=\"core\" size=\"small\" *ngIf=\"closable\" (click)=\"handleClose($event)\"></odx-icon>\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n numberAttribute,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { fromElementResize$, fromQueryList } from '@odx/angular/rxjs';\nimport { applyStyles, cssTranslate, deferFn, injectElement, px, untilDestroyed } from '@odx/angular/utils';\nimport { BehaviorSubject, debounceTime, fromEvent, merge, tap } from 'rxjs';\nimport { TabBarItemComponent } from './components';\nimport { TabChangeEvent } from './models';\nimport { TAB_BAR } from './tab-bar.config';\n\n/**\n * `TabBarComponent` creates a dynamic and accessible tab bar interface,\n * facilitating the management and interaction with a collection of tabs.\n * It supports keyboard navigation, dynamic tab management, and responsive overflow actions.\n *\n * The component integrates with Angular's ContentChildren to dynamically manage the tabs based on their content.\n * It uses ActiveDescendantKeyManager from Angular CDK for managing focus and keyboard navigation,\n * making it accessible and user-friendly. Additionally, it handles overflow with navigational arrows,\n * allowing for a smooth user experience even with a large number of tabs.\n */\n@CSSComponent('tab-bar')\n@Component({\n selector: 'odx-tab-bar',\n standalone: true,\n imports: [CommonModule, IconComponent, ActiveIndicatorDirective],\n templateUrl: './tab-bar.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TAB_BAR, useExisting: forwardRef(() => TabBarComponent) }],\n host: {\n role: 'tabpanel',\n tabindex: '0',\n },\n})\nexport class TabBarComponent implements AfterViewInit {\n private readonly changeDetector = inject(ChangeDetectorRef);\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly selectedIndex$$ = new BehaviorSubject(0);\n\n protected activeItem: TabBarItemComponent | null = null;\n\n protected keyManager?: ActiveDescendantKeyManager<TabBarItemComponent>;\n\n @ViewChild('tabBarPanel')\n protected tabBarPanelElement!: ElementRef<HTMLElement>;\n\n @ViewChildren('tabAction')\n protected tabActionElements!: QueryList<ElementRef<HTMLElement>>;\n\n @ContentChildren(TabBarItemComponent)\n protected tabs!: QueryList<TabBarItemComponent>;\n\n public readonly element = injectElement();\n\n /**\n * Indicates whether the tab bar has overflowed to the left.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowLeft = false;\n\n /**\n * Indicates whether the tab bar has overflowed to the right.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public overflowRight = false;\n\n /**\n * Gets or sets the index of the currently selected tab. Use this property to programmatically\n * change the active tab. It responds to changes by updating the active state of the corresponding\n * tab item and adjusting the view if necessary.\n *\n * @type {number}\n * @example\n * Programmatically select the second tab (index starts from 0):\n * ```html\n * <odx-tab-bar [selectedIndex]=\"1\"></odx-tab-bar>\n * ```\n */\n @Input({ transform: numberAttribute })\n public set selectedIndex(value: number) {\n this.selectedIndex$$.next(value);\n }\n\n /**\n * An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`\n * which contains the index of the newly selected tab and the instance of the corresponding\n * `TabBarItemComponent`. Subscribe to this output to perform actions when the active tab changes.\n *\n * @emits {TabChangeEvent}\n * @example\n * ```html\n * <odx-tab-bar (selectedTabChanged)=\"onTabChange($event)\"></odx-tab-bar>\n * ```\n *\n * ```ts\n * onTabChange(event: TabChangeEvent): void {\n * console.log(`New active tab index: ${event.selectedIndex}`);\n * }\n * ```\n */\n @Output()\n public selectedTabChanged = new EventEmitter<TabChangeEvent>();\n\n public ngAfterViewInit(): void {\n this.keyManager = new ActiveDescendantKeyManager(this.tabs).withWrap().withHomeAndEnd().withHorizontalOrientation('ltr').withVerticalOrientation(false);\n const updatePanelPosition$ = merge(this.selectedTabChanged, fromQueryList(this.tabs), fromElementResize$(this.element.nativeElement)).pipe(\n debounceTime(0),\n tap(() => this.updatePanelPosition()),\n );\n const updateActionVisibility$ = fromEvent(this.tabBarPanelElement.nativeElement, 'transitionend').pipe(\n tap(({ target }) => target === this.tabBarPanelElement.nativeElement && this.updateActionVisbility()),\n );\n const activeItemChange$ = merge(\n this.keyManager.change.pipe(tap(() => this.activeItemChange())),\n this.selectedIndex$$.pipe(tap((index) => this.keyManager?.setActiveItem(index))),\n );\n merge(activeItemChange$, updatePanelPosition$, updateActionVisibility$).pipe(this.takeUntilDestroyed()).subscribe();\n this.tabs.changes.pipe(this.takeUntilDestroyed()).subscribe(() => this.selectedIndex$$.next(this.selectedIndex$$.value));\n }\n\n /**\n * Activates the specified tab item.\n *\n * @param {TabBarItemComponent | null} item - The tab item to activate. If not provided or null, the active item will be cleared.\n *\n * @example\n * ```ts\n * // Activate the first tab item\n * tabBar.activateItem(tabItems[0]);\n *\n * // Clear the active item\n * tabBar.activateItem(null);\n * ```\n */\n public activateItem(item?: TabBarItemComponent | null): void {\n if (item === this.activeItem) return;\n const selectedIndex = item ? this.tabs.toArray().indexOf(item) : -1;\n this.keyManager?.setActiveItem(selectedIndex);\n }\n\n /**\n * Removes the specified item from the tab bar.\n * If the removed item is the active item, it sets the previous item as the new active item.\n *\n * @param {TabBarItemComponent} item - The item to be removed from the tab bar.\n */\n public removeItem(item: TabBarItemComponent): void {\n if (this.activeItem !== item) return;\n deferFn(() => this.keyManager?.setPreviousItemActive());\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.keyManager?.onKeydown(event);\n }\n\n private updatePanelPosition(): void {\n const activeElement = this.activeItem?.element.nativeElement;\n if (!activeElement) return;\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n const maxPanelPositionX = Math.floor(tabBarRect.width - panelRect.width);\n const panelPositionX = tabBarRect.width / 2 - activeElement.offsetLeft - activeElement.offsetWidth / 2;\n const positionX = Math.min(0, Math.max(panelPositionX, maxPanelPositionX));\n applyStyles(this.tabBarPanelElement.nativeElement, {\n transform: cssTranslate(px(positionX), 0),\n });\n this.updateActionVisbility();\n }\n\n private updateActionVisbility(): void {\n const panelRect = this.tabBarPanelElement.nativeElement.getBoundingClientRect();\n const tabBarRect = this.element.nativeElement.getBoundingClientRect();\n this.overflowLeft = panelRect.left < tabBarRect.left;\n this.overflowRight = panelRect.right > tabBarRect.right;\n this.changeDetector.detectChanges();\n }\n\n private activeItemChange(): void {\n const { activeItemIndex, activeItem } = this.keyManager ?? {};\n this.activeItem = activeItem ?? null;\n this.selectedTabChanged.emit({ selectedIndex: activeItemIndex ?? -1, selectedTab: this.keyManager?.activeItem ?? null });\n }\n}\n","<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--prev\"\n [class.is-active]=\"overflowLeft\"\n (click)=\"keyManager?.setPreviousItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-left\" iconSet=\"core\"></odx-icon>\n</button>\n<div class=\"odx-tab-bar__inner\">\n <div class=\"odx-tab-bar__panel\" role=\"tablist\" #tabBarPanel>\n <ng-content></ng-content>\n <div class=\"odx-tab-bar__indicator\" [odxActiveIndicator]=\"activeItem?.element?.nativeElement\" odxActiveIndicatorPosition=\"start\"></div>\n </div>\n</div>\n<button\n #tabAction\n class=\"odx-tab-bar__action odx-tab-bar__action--next\"\n [class.is-active]=\"overflowRight\"\n (click)=\"keyManager?.setNextItemActive()\"\n tabindex=\"-1\"\n>\n <odx-icon class=\"tab-bar-action-icon\" name=\"chevron-right\" iconSet=\"core\"></odx-icon>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { TabBarItemComponent } from './components';\nimport { TabBarComponent } from './tab-bar.component';\n\nconst modules = [TabBarComponent, TabBarItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TabBarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -183,7 +183,7 @@ let ToastItemComponent = class ToastItemComponent {
|
|
|
183
183
|
this.dismiss.next();
|
|
184
184
|
}
|
|
185
185
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
186
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ToastItemComponent, isStandalone: true, selector: "odx-toast", inputs: { id: "id", title: "title", description: "description", variant: "variant", actions: "actions", options: "options" }, outputs: { dismiss: "dismiss" }, host: { properties: { "attr.id": "id" } }, ngImport: i0, template: "<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\"></odx-icon>\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\"> </ng-template>\n </p>\n <p class=\"odx-toast-item__description\" *ngIf=\"description\">\n <ng-template [odxDynamicView]=\"description\"> </ng-template>\n </p>\n </div>\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\" *ngIf=\"options?.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</div>\n<odx-action-group class=\"odx-toast-item__buttons\" *ngIf=\"!!actions?.length\">\n <button odxButton (click)=\"action.action()\" *ngFor=\"let action of actions\">\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft *ngIf=\"action.leftIcon\"></odx-icon>\n <ng-template [odxDynamicView]=\"action.label\"> </ng-template>\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight *ngIf=\"action.rightIcon\"></odx-icon>\n </button>\n</odx-action-group>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
186
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ToastItemComponent, isStandalone: true, selector: "odx-toast", inputs: { id: "id", title: "title", description: "description", descriptionContext: "descriptionContext", variant: "variant", actions: "actions", options: "options" }, outputs: { dismiss: "dismiss" }, host: { properties: { "attr.id": "id" } }, ngImport: i0, template: "<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\"></odx-icon>\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\"> </ng-template>\n </p>\n <p class=\"odx-toast-item__description\" *ngIf=\"description\">\n <ng-template [odxDynamicView]=\"description\" [odxDynamicViewContext]=\"descriptionContext\"> </ng-template>\n </p>\n </div>\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\" *ngIf=\"options?.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</div>\n<odx-action-group class=\"odx-toast-item__buttons\" *ngIf=\"!!actions?.length\">\n <button odxButton (click)=\"action.action()\" *ngFor=\"let action of actions\">\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft *ngIf=\"action.leftIcon\"></odx-icon>\n <ng-template [odxDynamicView]=\"action.label\"> </ng-template>\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight *ngIf=\"action.rightIcon\"></odx-icon>\n </button>\n</odx-action-group>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
187
187
|
};
|
|
188
188
|
__decorate([
|
|
189
189
|
CSSModifier(),
|
|
@@ -196,13 +196,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
196
196
|
type: Component,
|
|
197
197
|
args: [{ selector: 'odx-toast', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [CommonModule, IconComponent, ButtonComponent, DynamicViewDirective, ActionGroupComponent], host: {
|
|
198
198
|
'[attr.id]': 'id',
|
|
199
|
-
}, template: "<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\"></odx-icon>\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\"> </ng-template>\n </p>\n <p class=\"odx-toast-item__description\" *ngIf=\"description\">\n <ng-template [odxDynamicView]=\"description\"> </ng-template>\n </p>\n </div>\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\" *ngIf=\"options?.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</div>\n<odx-action-group class=\"odx-toast-item__buttons\" *ngIf=\"!!actions?.length\">\n <button odxButton (click)=\"action.action()\" *ngFor=\"let action of actions\">\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft *ngIf=\"action.leftIcon\"></odx-icon>\n <ng-template [odxDynamicView]=\"action.label\"> </ng-template>\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight *ngIf=\"action.rightIcon\"></odx-icon>\n </button>\n</odx-action-group>\n" }]
|
|
199
|
+
}, template: "<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\"></odx-icon>\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\"> </ng-template>\n </p>\n <p class=\"odx-toast-item__description\" *ngIf=\"description\">\n <ng-template [odxDynamicView]=\"description\" [odxDynamicViewContext]=\"descriptionContext\"> </ng-template>\n </p>\n </div>\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\" *ngIf=\"options?.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</div>\n<odx-action-group class=\"odx-toast-item__buttons\" *ngIf=\"!!actions?.length\">\n <button odxButton (click)=\"action.action()\" *ngFor=\"let action of actions\">\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft *ngIf=\"action.leftIcon\"></odx-icon>\n <ng-template [odxDynamicView]=\"action.label\"> </ng-template>\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight *ngIf=\"action.rightIcon\"></odx-icon>\n </button>\n</odx-action-group>\n" }]
|
|
200
200
|
}], propDecorators: { id: [{
|
|
201
201
|
type: Input
|
|
202
202
|
}], title: [{
|
|
203
203
|
type: Input
|
|
204
204
|
}], description: [{
|
|
205
205
|
type: Input
|
|
206
|
+
}], descriptionContext: [{
|
|
207
|
+
type: Input
|
|
206
208
|
}], variant: [{
|
|
207
209
|
type: Input
|
|
208
210
|
}], actions: [{
|
|
@@ -246,7 +248,7 @@ let ToastContainerComponent = class ToastContainerComponent {
|
|
|
246
248
|
this.toastService.dismiss(itemRef);
|
|
247
249
|
}
|
|
248
250
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
249
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: ToastContainerComponent, isStandalone: true, selector: "odx-toast-container", inputs: { maxItems: ["maxItems", "maxItems", numberAttribute] }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "<odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n *ngFor=\"let toastRef of items$ | async; trackBy: trackById\"\n></odx-toast>\n<odx-chip class=\"odx-toast-container__counter\" *ngIf=\"hiddenToasts$ | async as more\">{{ more }} more Notifications</odx-chip>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: ChipComponent, selector: "odx-chip", inputs: ["removable", "size", "variant"], outputs: ["remove"] }, { kind: "component", type: ToastItemComponent, selector: "odx-toast", inputs: ["id", "title", "description", "variant", "actions", "options"], outputs: ["dismiss"] }], animations: [
|
|
251
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: ToastContainerComponent, isStandalone: true, selector: "odx-toast-container", inputs: { maxItems: ["maxItems", "maxItems", numberAttribute] }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "<odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [descriptionContext]=\"toastRef.item.descriptionContext\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n *ngFor=\"let toastRef of items$ | async; trackBy: trackById\"\n></odx-toast>\n<odx-chip class=\"odx-toast-container__counter\" *ngIf=\"hiddenToasts$ | async as more\">{{ more }} more Notifications</odx-chip>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: ChipComponent, selector: "odx-chip", inputs: ["removable", "size", "variant"], outputs: ["remove"] }, { kind: "component", type: ToastItemComponent, selector: "odx-toast", inputs: ["id", "title", "description", "descriptionContext", "variant", "actions", "options"], outputs: ["dismiss"] }], animations: [
|
|
250
252
|
trigger('slide', [
|
|
251
253
|
transition(':enter', group([
|
|
252
254
|
useAnimation(expand),
|
|
@@ -271,7 +273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
271
273
|
])),
|
|
272
274
|
transition(':leave', group([useAnimation(collapse)])),
|
|
273
275
|
]),
|
|
274
|
-
], template: "<odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n *ngFor=\"let toastRef of items$ | async; trackBy: trackById\"\n></odx-toast>\n<odx-chip class=\"odx-toast-container__counter\" *ngIf=\"hiddenToasts$ | async as more\">{{ more }} more Notifications</odx-chip>\n" }]
|
|
276
|
+
], template: "<odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [descriptionContext]=\"toastRef.item.descriptionContext\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n *ngFor=\"let toastRef of items$ | async; trackBy: trackById\"\n></odx-toast>\n<odx-chip class=\"odx-toast-container__counter\" *ngIf=\"hiddenToasts$ | async as more\">{{ more }} more Notifications</odx-chip>\n" }]
|
|
275
277
|
}], propDecorators: { maxItems: [{
|
|
276
278
|
type: Input,
|
|
277
279
|
args: [{ transform: numberAttribute }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-toast.mjs","sources":["../../../../libs/angular/components/toast/src/lib/toast.config.ts","../../../../libs/angular/components/toast/src/lib/toast.service.ts","../../../../libs/angular/components/toast/src/lib/models/toast-variant.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.html","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.html","../../../../libs/angular/components/toast/src/lib/toast.module.ts","../../../../libs/angular/components/toast/src/odx-angular-components-toast.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { ToastOptions } from './models/toast.options';\n\nexport type ToastConfig = ToastOptions;\n\n/**\n * Utility functions generated by `createConfigTokens` to handle injection and provision of `ToastConfig`.\n * These include tokens and functions to access and provide the default configuration for toasts.\n *\n * `ToastDefaultConfig` provides the default settings for toasts.\n * `ToastConfig` is a token that can be used to inject toast configuration settings.\n * `injectToastConfig` is a function that retrieves the current toast configuration.\n * `provideToastConfig` is a function used to specify a custom configuration for toasts.\n *\n * @example\n * ```ts\n * // In module providers:\n * providers: [\n * provideToastConfig({ // ... global module configuration }),\n * ]\n *\n * // In a component or service:\n * constructor(@Inject(ToastConfig) private readonly config: ToastConfig) {}\n *\n * // Or using the `injectToastConfig` function:\n * @Component({ ... })\n * export class MyComponent {\n * private readonly config = injectToastConfig();\n * }\n * ```\n */\nexport const { ToastDefaultConfig, ToastConfig, injectToastConfig, provideToastConfig } = createConfigTokens('Toast', '@odx/angular/components/toast', {\n dismissable: true,\n duration: 0,\n} as ToastConfig);\n","import { Injectable } from '@angular/core';\nimport { deepmerge } from '@odx/angular/internal';\nimport { getUniqueId, Queue } from '@odx/angular/utils';\nimport { Toast, ToastOptions, ToastRef } from './models';\nimport { injectToastConfig } from './toast.config';\n\n/**\n * ToastService provides a centralized management system for toasts within an application.\n * It handles the creation, updates, and dismissal of toasts based on a FIFO (first-in, first-out) queue.\n * This service integrates custom toast options with default configurations and supports reactive updates through observables.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n private readonly queue = new Queue<ToastRef>();\n private readonly defaultOptions = injectToastConfig();\n\n /**\n * Observable stream of active toasts.\n */\n public readonly toasts$ = this.queue.value$;\n\n /**\n * Observable that emits when any update occurs in the toast queue.\n */\n public readonly onUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is added.\n */\n public readonly onToastAdd$ = this.queue.onAdd$;\n\n /**\n * Observable that emits when a toast is updated.\n */\n public readonly onToastUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is removed.\n */\n public readonly onToastRemove$ = this.queue.onRemove$;\n\n /**\n * @deprecated Use `toasts$` instead\n */\n public readonly queue$ = this.toasts$;\n /**\n * @deprecated Use `onToastAdd$` instead\n */\n public readonly onAdd$ = this.onToastAdd$;\n /**\n * @deprecated Use `onToastRemove$` instead\n */\n public readonly onRemove$ = this.onToastRemove$;\n\n /**\n * @deprecated Use `create` instead\n */\n public add(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.create(item, options);\n }\n\n /**\n * Creates and queues a new toast based on the provided item and options.\n * Merges given options with default configurations.\n * @param {Toast} item The toast item to create.\n * @param {Partial<ToastOptions>} options Optional additional options for the toast.\n * @returns {ToastRef} The reference to the newly created toast.\n */\n public create(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.queue.add({\n id: item.id ?? getUniqueId('odx-toast'),\n item,\n options: deepmerge(this.defaultOptions, options) as ToastOptions,\n });\n }\n\n /**\n * @deprecated Use `dismiss` instead\n */\n public remove(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.dismiss(refOrId);\n }\n\n /**\n * Dismisses a specific toast identified by a reference or ID.\n * @param {ToastRef | ToastRef['id']} refOrId The reference or ID of the toast to dismiss.\n * @returns {ToastRef | null} The reference to the dismissed toast, or null if not found.\n */\n public dismiss(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.queue.remove(refOrId);\n }\n\n /**\n * @deprecated Use `dismissAll` instead\n */\n public clear(): void {\n return this.dismissAll();\n }\n\n /**\n * Dismisses all toasts currently being displayed.\n */\n public dismissAll(): void {\n this.queue.clear();\n }\n}\n","export type ToastVariant = (typeof ToastVariant)[keyof typeof ToastVariant];\n\nexport const ToastVariant = {\n DEFAULT: 'default',\n WARNING: 'warning',\n DANGER: 'danger',\n SUCCESS: 'success',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { DynamicTextContent, DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { tap, timer } from 'rxjs';\nimport { ToastAction, ToastOptions, ToastVariant } from '../../models';\n\n@CSSComponent('toast-item')\n@Component({\n selector: 'odx-toast',\n templateUrl: './toast-item.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, IconComponent, ButtonComponent, DynamicViewDirective, ActionGroupComponent],\n host: {\n '[attr.id]': 'id',\n },\n})\nexport class ToastItemComponent implements OnInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n\n public readonly element = injectElement();\n\n public get icon(): string {\n switch (this.variant) {\n case ToastVariant.WARNING:\n return 'warning';\n case ToastVariant.DANGER:\n return 'error';\n case ToastVariant.SUCCESS:\n return 'check';\n default:\n return 'info';\n }\n }\n\n @Input()\n public id!: string;\n\n @Input()\n public title!: DynamicTextContent;\n\n @Input()\n public description?: DynamicTextContent | null;\n\n @CSSModifier()\n @Input()\n public variant?: ToastVariant | null = ToastVariant.DEFAULT;\n\n @Input()\n public actions?: ToastAction[];\n\n @Input()\n public options!: ToastOptions;\n\n @Output()\n public readonly dismiss = new EventEmitter<void>();\n\n public ngOnInit(): void {\n const { duration } = this.options;\n if (duration > 0) {\n timer(duration)\n .pipe(\n this.takeUntilDestroyed(),\n tap(() => this.onDismiss()),\n )\n .subscribe();\n }\n }\n\n public onDismiss(): void {\n this.dismiss.next();\n }\n}\n","<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\"></odx-icon>\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\"> </ng-template>\n </p>\n <p class=\"odx-toast-item__description\" *ngIf=\"description\">\n <ng-template [odxDynamicView]=\"description\"> </ng-template>\n </p>\n </div>\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\" *ngIf=\"options?.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</div>\n<odx-action-group class=\"odx-toast-item__buttons\" *ngIf=\"!!actions?.length\">\n <button odxButton (click)=\"action.action()\" *ngFor=\"let action of actions\">\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft *ngIf=\"action.leftIcon\"></odx-icon>\n <ng-template [odxDynamicView]=\"action.label\"> </ng-template>\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight *ngIf=\"action.rightIcon\"></odx-icon>\n </button>\n</odx-action-group>\n","import { group, transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewEncapsulation,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { collapse, expand, fadeIn, slideInRight } from '@odx/angular/animations';\nimport { ChipComponent } from '@odx/angular/components/chip';\nimport { HeaderComponent } from '@odx/angular/components/header';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement, px, trackById } from '@odx/angular/utils';\nimport { Observable, map } from 'rxjs';\nimport { ToastRef } from '../../models';\nimport { ToastService } from '../../toast.service';\nimport { ToastItemComponent } from '../toast-item/toast-item.component';\n\nconst TOAST_ANIMATION_DELAY = '125ms';\n@CSSComponent('toast-container')\n@Component({\n selector: 'odx-toast-container',\n templateUrl: './toast-container.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, ChipComponent, ToastItemComponent],\n animations: [\n trigger('slide', [\n transition(\n ':enter',\n group([\n useAnimation(expand),\n useAnimation(fadeIn(), { params: { delay: TOAST_ANIMATION_DELAY } }),\n useAnimation(slideInRight, { params: { delay: TOAST_ANIMATION_DELAY } }),\n ]),\n ),\n transition(':leave', group([useAnimation(collapse)])),\n ]),\n ],\n})\nexport class ToastContainerComponent implements AfterViewInit, OnDestroy {\n private static INITIALIZED = false;\n\n private readonly windowRef = inject(WindowRef);\n private readonly renderer = inject(Renderer2);\n private readonly toastService = inject(ToastService);\n\n protected readonly trackById = trackById;\n\n public readonly element = injectElement();\n public readonly items$: Observable<ToastRef[]> = this.toastService.toasts$.pipe(map((refs) => refs.slice(0, this.maxItems)));\n public readonly hiddenToasts$: Observable<number> = this.toastService.toasts$.pipe(map((refs) => Math.max(0, refs.length - this.maxItems)));\n\n @Input({ transform: numberAttribute })\n public maxItems = 3;\n\n @Output()\n public readonly dismiss = this.toastService.onToastRemove$;\n\n public ngAfterViewInit(): void {\n if (ToastContainerComponent.INITIALIZED) {\n throw new Error('Only one toast container per application allowed');\n }\n ToastContainerComponent.INITIALIZED = true;\n const headerElement = this.windowRef.queryByComponent(HeaderComponent);\n if (headerElement) {\n this.renderer.setStyle(this.element.nativeElement, 'top', px(headerElement.offsetHeight));\n }\n }\n\n public ngOnDestroy(): void {\n ToastContainerComponent.INITIALIZED = false;\n }\n\n protected onDismiss(itemRef: ToastRef): void {\n this.toastService.dismiss(itemRef);\n }\n}\n","<odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n *ngFor=\"let toastRef of items$ | async; trackBy: trackById\"\n></odx-toast>\n<odx-chip class=\"odx-toast-container__counter\" *ngIf=\"hiddenToasts$ | async as more\">{{ more }} more Notifications</odx-chip>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ToastContainerComponent, ToastItemComponent } from './components';\n\nconst modules = [ToastContainerComponent, ToastItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class ToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-toast.mjs","sources":["../../../../libs/angular/components/toast/src/lib/toast.config.ts","../../../../libs/angular/components/toast/src/lib/toast.service.ts","../../../../libs/angular/components/toast/src/lib/models/toast-variant.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.html","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.html","../../../../libs/angular/components/toast/src/lib/toast.module.ts","../../../../libs/angular/components/toast/src/odx-angular-components-toast.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { ToastOptions } from './models/toast.options';\n\nexport type ToastConfig = ToastOptions;\n\n/**\n * Utility functions generated by `createConfigTokens` to handle injection and provision of `ToastConfig`.\n * These include tokens and functions to access and provide the default configuration for toasts.\n *\n * `ToastDefaultConfig` provides the default settings for toasts.\n * `ToastConfig` is a token that can be used to inject toast configuration settings.\n * `injectToastConfig` is a function that retrieves the current toast configuration.\n * `provideToastConfig` is a function used to specify a custom configuration for toasts.\n *\n * @example\n * ```ts\n * // In module providers:\n * providers: [\n * provideToastConfig({ // ... global module configuration }),\n * ]\n *\n * // In a component or service:\n * constructor(@Inject(ToastConfig) private readonly config: ToastConfig) {}\n *\n * // Or using the `injectToastConfig` function:\n * @Component({ ... })\n * export class MyComponent {\n * private readonly config = injectToastConfig();\n * }\n * ```\n */\nexport const { ToastDefaultConfig, ToastConfig, injectToastConfig, provideToastConfig } = createConfigTokens('Toast', '@odx/angular/components/toast', {\n dismissable: true,\n duration: 0,\n} as ToastConfig);\n","import { Injectable } from '@angular/core';\nimport { deepmerge } from '@odx/angular/internal';\nimport { getUniqueId, Queue } from '@odx/angular/utils';\nimport { Toast, ToastOptions, ToastRef } from './models';\nimport { injectToastConfig } from './toast.config';\n\n/**\n * ToastService provides a centralized management system for toasts within an application.\n * It handles the creation, updates, and dismissal of toasts based on a FIFO (first-in, first-out) queue.\n * This service integrates custom toast options with default configurations and supports reactive updates through observables.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n private readonly queue = new Queue<ToastRef>();\n private readonly defaultOptions = injectToastConfig();\n\n /**\n * Observable stream of active toasts.\n */\n public readonly toasts$ = this.queue.value$;\n\n /**\n * Observable that emits when any update occurs in the toast queue.\n */\n public readonly onUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is added.\n */\n public readonly onToastAdd$ = this.queue.onAdd$;\n\n /**\n * Observable that emits when a toast is updated.\n */\n public readonly onToastUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is removed.\n */\n public readonly onToastRemove$ = this.queue.onRemove$;\n\n /**\n * @deprecated Use `toasts$` instead\n */\n public readonly queue$ = this.toasts$;\n /**\n * @deprecated Use `onToastAdd$` instead\n */\n public readonly onAdd$ = this.onToastAdd$;\n /**\n * @deprecated Use `onToastRemove$` instead\n */\n public readonly onRemove$ = this.onToastRemove$;\n\n /**\n * @deprecated Use `create` instead\n */\n public add(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.create(item, options);\n }\n\n /**\n * Creates and queues a new toast based on the provided item and options.\n * Merges given options with default configurations.\n * @param {Toast} item The toast item to create.\n * @param {Partial<ToastOptions>} options Optional additional options for the toast.\n * @returns {ToastRef} The reference to the newly created toast.\n */\n public create(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.queue.add({\n id: item.id ?? getUniqueId('odx-toast'),\n item,\n options: deepmerge(this.defaultOptions, options) as ToastOptions,\n });\n }\n\n /**\n * @deprecated Use `dismiss` instead\n */\n public remove(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.dismiss(refOrId);\n }\n\n /**\n * Dismisses a specific toast identified by a reference or ID.\n * @param {ToastRef | ToastRef['id']} refOrId The reference or ID of the toast to dismiss.\n * @returns {ToastRef | null} The reference to the dismissed toast, or null if not found.\n */\n public dismiss(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.queue.remove(refOrId);\n }\n\n /**\n * @deprecated Use `dismissAll` instead\n */\n public clear(): void {\n return this.dismissAll();\n }\n\n /**\n * Dismisses all toasts currently being displayed.\n */\n public dismissAll(): void {\n this.queue.clear();\n }\n}\n","export type ToastVariant = (typeof ToastVariant)[keyof typeof ToastVariant];\n\nexport const ToastVariant = {\n DEFAULT: 'default',\n WARNING: 'warning',\n DANGER: 'danger',\n SUCCESS: 'success',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, Type, ViewEncapsulation } from '@angular/core';\nimport { DynamicContent, DynamicTextContent, DynamicViewDirective, GetDynamicViewContext } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { tap, timer } from 'rxjs';\nimport { ToastAction, ToastOptions, ToastVariant } from '../../models';\n\n@CSSComponent('toast-item')\n@Component({\n selector: 'odx-toast',\n templateUrl: './toast-item.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, IconComponent, ButtonComponent, DynamicViewDirective, ActionGroupComponent],\n host: {\n '[attr.id]': 'id',\n },\n})\nexport class ToastItemComponent implements OnInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n\n public readonly element = injectElement();\n\n public get icon(): string {\n switch (this.variant) {\n case ToastVariant.WARNING:\n return 'warning';\n case ToastVariant.DANGER:\n return 'error';\n case ToastVariant.SUCCESS:\n return 'check';\n default:\n return 'info';\n }\n }\n\n @Input()\n public id!: string;\n\n @Input()\n public title!: DynamicTextContent;\n\n @Input()\n public description?: DynamicContent | null;\n\n @Input()\n public descriptionContext?: GetDynamicViewContext<Type<unknown>>;\n\n @CSSModifier()\n @Input()\n public variant?: ToastVariant | null = ToastVariant.DEFAULT;\n\n @Input()\n public actions?: ToastAction[];\n\n @Input()\n public options!: ToastOptions;\n\n @Output()\n public readonly dismiss = new EventEmitter<void>();\n\n public ngOnInit(): void {\n const { duration } = this.options;\n if (duration > 0) {\n timer(duration)\n .pipe(\n this.takeUntilDestroyed(),\n tap(() => this.onDismiss()),\n )\n .subscribe();\n }\n }\n\n public onDismiss(): void {\n this.dismiss.next();\n }\n}\n","<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\"></odx-icon>\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\"> </ng-template>\n </p>\n <p class=\"odx-toast-item__description\" *ngIf=\"description\">\n <ng-template [odxDynamicView]=\"description\" [odxDynamicViewContext]=\"descriptionContext\"> </ng-template>\n </p>\n </div>\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\" *ngIf=\"options?.dismissable\">\n <odx-icon name=\"close\" iconSet=\"core\"></odx-icon>\n </button>\n</div>\n<odx-action-group class=\"odx-toast-item__buttons\" *ngIf=\"!!actions?.length\">\n <button odxButton (click)=\"action.action()\" *ngFor=\"let action of actions\">\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft *ngIf=\"action.leftIcon\"></odx-icon>\n <ng-template [odxDynamicView]=\"action.label\"> </ng-template>\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight *ngIf=\"action.rightIcon\"></odx-icon>\n </button>\n</odx-action-group>\n","import { group, transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewEncapsulation,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { collapse, expand, fadeIn, slideInRight } from '@odx/angular/animations';\nimport { ChipComponent } from '@odx/angular/components/chip';\nimport { HeaderComponent } from '@odx/angular/components/header';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement, px, trackById } from '@odx/angular/utils';\nimport { Observable, map } from 'rxjs';\nimport { ToastRef } from '../../models';\nimport { ToastService } from '../../toast.service';\nimport { ToastItemComponent } from '../toast-item/toast-item.component';\n\nconst TOAST_ANIMATION_DELAY = '125ms';\n@CSSComponent('toast-container')\n@Component({\n selector: 'odx-toast-container',\n templateUrl: './toast-container.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, ChipComponent, ToastItemComponent],\n animations: [\n trigger('slide', [\n transition(\n ':enter',\n group([\n useAnimation(expand),\n useAnimation(fadeIn(), { params: { delay: TOAST_ANIMATION_DELAY } }),\n useAnimation(slideInRight, { params: { delay: TOAST_ANIMATION_DELAY } }),\n ]),\n ),\n transition(':leave', group([useAnimation(collapse)])),\n ]),\n ],\n})\nexport class ToastContainerComponent implements AfterViewInit, OnDestroy {\n private static INITIALIZED = false;\n\n private readonly windowRef = inject(WindowRef);\n private readonly renderer = inject(Renderer2);\n private readonly toastService = inject(ToastService);\n\n protected readonly trackById = trackById;\n\n public readonly element = injectElement();\n public readonly items$: Observable<ToastRef[]> = this.toastService.toasts$.pipe(map((refs) => refs.slice(0, this.maxItems)));\n public readonly hiddenToasts$: Observable<number> = this.toastService.toasts$.pipe(map((refs) => Math.max(0, refs.length - this.maxItems)));\n\n @Input({ transform: numberAttribute })\n public maxItems = 3;\n\n @Output()\n public readonly dismiss = this.toastService.onToastRemove$;\n\n public ngAfterViewInit(): void {\n if (ToastContainerComponent.INITIALIZED) {\n throw new Error('Only one toast container per application allowed');\n }\n ToastContainerComponent.INITIALIZED = true;\n const headerElement = this.windowRef.queryByComponent(HeaderComponent);\n if (headerElement) {\n this.renderer.setStyle(this.element.nativeElement, 'top', px(headerElement.offsetHeight));\n }\n }\n\n public ngOnDestroy(): void {\n ToastContainerComponent.INITIALIZED = false;\n }\n\n protected onDismiss(itemRef: ToastRef): void {\n this.toastService.dismiss(itemRef);\n }\n}\n","<odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [descriptionContext]=\"toastRef.item.descriptionContext\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n *ngFor=\"let toastRef of items$ | async; trackBy: trackById\"\n></odx-toast>\n<odx-chip class=\"odx-toast-container__counter\" *ngIf=\"hiddenToasts$ | async as more\">{{ more }} more Notifications</odx-chip>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ToastContainerComponent, ToastItemComponent } from './components';\n\nconst modules = [ToastContainerComponent, ToastItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class ToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACU,MAAA,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE,+BAA+B,EAAE;AACrJ,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,QAAQ,EAAE,CAAC;AACG,CAAA;;AC5BhB;;;;AAIG;MAIU,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,KAAK,EAAY,CAAC;QAC9B,IAAc,CAAA,cAAA,GAAG,iBAAiB,EAAE,CAAC;AAEtD;;AAEG;AACa,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAE5C;;AAEG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAEjD;;AAEG;AACa,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAEhD;;AAEG;AACa,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAEtD;;AAEG;AACa,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAEtD;;AAEG;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC;;AAEG;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1C;;AAEG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;AAqDjD,KAAA;AAnDC;;AAEG;AACI,IAAA,GAAG,CAAC,IAAW,EAAE,OAAA,GAAiC,EAAE,EAAA;QACzD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACnC;AAED;;;;;;AAMG;AACI,IAAA,MAAM,CAAC,IAAW,EAAE,OAAA,GAAiC,EAAE,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,WAAW,CAAC,WAAW,CAAC;YACvC,IAAI;YACJ,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAiB;AACjE,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;AACI,IAAA,MAAM,CAAC,OAAkC,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9B;AAED;;;;AAIG;AACI,IAAA,OAAO,CAAC,OAAkC,EAAA;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACnC;AAED;;AAEG;IACI,KAAK,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;KAC1B;AAED;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KACpB;+GA5FU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACXY,MAAA,YAAY,GAAG;AAC1B,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,OAAO,EAAE,SAAS;;;ACiBP,IAAA,kBAAkB,GAAxB,MAAM,kBAAkB,CAAA;AAAxB,IAAA,WAAA,GAAA;QACY,IAAkB,CAAA,kBAAA,GAAG,cAAc,EAAE,CAAC;QAEvC,IAAO,CAAA,OAAA,GAAG,aAAa,EAAE,CAAC;AA6BnC,QAAA,IAAA,CAAA,OAAO,GAAyB,YAAY,CAAC,OAAO,CAAC;AAS5C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AAiBpD,KAAA;AArDC,IAAA,IAAW,IAAI,GAAA;QACb,QAAQ,IAAI,CAAC,OAAO;YAClB,KAAK,YAAY,CAAC,OAAO;AACvB,gBAAA,OAAO,SAAS,CAAC;YACnB,KAAK,YAAY,CAAC,MAAM;AACtB,gBAAA,OAAO,OAAO,CAAC;YACjB,KAAK,YAAY,CAAC,OAAO;AACvB,gBAAA,OAAO,OAAO,CAAC;AACjB,YAAA;AACE,gBAAA,OAAO,MAAM,CAAC;AACjB,SAAA;KACF;IA2BM,QAAQ,GAAA;AACb,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,KAAK,CAAC,QAAQ,CAAC;AACZ,iBAAA,IAAI,CACH,IAAI,CAAC,kBAAkB,EAAE,EACzB,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAC5B;AACA,iBAAA,SAAS,EAAE,CAAC;AAChB,SAAA;KACF;IAEM,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;+GAzDU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB/B,qnCAqBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDHY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;AAqC3F,UAAA,CAAA;AAFN,IAAA,WAAW,EAAE;;AAE8C,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAhCjD,kBAAkB,GAAA,UAAA,CAAA;IAZ9B,YAAY,CAAC,YAAY,CAAC;AAYd,CAAA,EAAA,kBAAkB,CA0D9B,CAAA;4FA1DY,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,SAAS;+BACE,WAAW,EAAA,UAAA,EAET,IAAI,EACC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,EAC7F,IAAA,EAAA;AACJ,wBAAA,WAAW,EAAE,IAAI;AAClB,qBAAA,EAAA,QAAA,EAAA,qnCAAA,EAAA,CAAA;8BAqBM,EAAE,EAAA,CAAA;sBADR,KAAK;gBAIC,KAAK,EAAA,CAAA;sBADX,KAAK;gBAIC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAIC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAKC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIU,OAAO,EAAA,CAAA;sBADtB,MAAM;;;;AEtCT,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAuBzB,IAAA,uBAAuB,GAA7B,MAAM,uBAAuB,CAAA;AAA7B,IAAA,WAAA,GAAA;AAGY,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QAElC,IAAS,CAAA,SAAA,GAAG,SAAS,CAAC;QAEzB,IAAO,CAAA,OAAA,GAAG,aAAa,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,MAAM,GAA2B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7G,QAAA,IAAA,CAAA,aAAa,GAAuB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAGrI,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;AAGJ,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;AAoB5D,KAAA;;aApCgB,IAAW,CAAA,WAAA,GAAG,KAAH,CAAS,EAAA;IAkB5B,eAAe,GAAA;QACpB,IAAI,yBAAuB,CAAC,WAAW,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACrE,SAAA;AACD,QAAA,yBAAuB,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;AACvE,QAAA,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3F,SAAA;KACF;IAEM,WAAW,GAAA;AAChB,QAAA,yBAAuB,CAAC,WAAW,GAAG,KAAK,CAAC;KAC7C;AAES,IAAA,SAAS,CAAC,OAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC;+GApCU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAad,eAAe,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7DrC,6iBAaA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDoBY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EAAE,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAC7C,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,OAAO,EAAE;AACf,gBAAA,UAAU,CACR,QAAQ,EACR,KAAK,CAAC;oBACJ,YAAY,CAAC,MAAM,CAAC;AACpB,oBAAA,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACpE,oBAAA,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACzE,iBAAA,CAAC,CACH;AACD,gBAAA,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACtD,CAAC;AACH,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;AAEU,uBAAuB,GAAA,yBAAA,GAAA,UAAA,CAAA;IAtBnC,YAAY,CAAC,iBAAiB,CAAC;AAsBnB,CAAA,EAAA,uBAAuB,CAqCnC,CAAA;4FArCY,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAEnB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAC9C,UAAA,EAAA;wBACV,OAAO,CAAC,OAAO,EAAE;AACf,4BAAA,UAAU,CACR,QAAQ,EACR,KAAK,CAAC;gCACJ,YAAY,CAAC,MAAM,CAAC;AACpB,gCAAA,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACpE,gCAAA,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACzE,6BAAA,CAAC,CACH;AACD,4BAAA,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;yBACtD,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,6iBAAA,EAAA,CAAA;8BAgBM,QAAQ,EAAA,CAAA;sBADd,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAIrB,OAAO,EAAA,CAAA;sBADtB,MAAM;;;AE5DT,MAAM,OAAO,GAAG,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;MAMjD,WAAW,CAAA;+GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;gHAAX,WAAW,EAAA,OAAA,EAAA,CANP,uBAAuB,EAAE,kBAAkB,aAIhD,UAAU,EAJL,uBAAuB,EAAE,kBAAkB,CAAA,EAAA,CAAA,CAAA,EAAA;gHAM/C,WAAW,EAAA,OAAA,EAAA,CAHb,OAAO,EACN,UAAU,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC;AAClC,iBAAA,CAAA;;;ACTD;;AAEG;;;;"}
|
|
@@ -8,6 +8,13 @@ import { injectElement, EventManager, untilDestroyed, hasChanged, getUniqueId }
|
|
|
8
8
|
import { Subject, filter, tap, merge } from 'rxjs';
|
|
9
9
|
import { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
* Resolves the appropriate event names for the provided tooltip trigger.
|
|
14
|
+
*
|
|
15
|
+
* @param {TooltipTrigger} trigger - The trigger to resolve.
|
|
16
|
+
* @returns {[string, string | null]} - The event names for the trigger.
|
|
17
|
+
*/
|
|
11
18
|
function resolveTooltipTriggerEvents(trigger) {
|
|
12
19
|
if (trigger === 'click') {
|
|
13
20
|
return ['click', null];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-tooltip.mjs","sources":["../../../../libs/angular/components/tooltip/src/lib/helpers/resolve-tooltip-trigger-events.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-size.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-options.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.html","../../../../libs/angular/components/tooltip/src/lib/tooltip.directive.ts","../../../../libs/angular/components/tooltip/src/odx-angular-components-tooltip.ts"],"sourcesContent":["import { TooltipTrigger } from '../models';\n\nexport function resolveTooltipTriggerEvents(trigger: TooltipTrigger): [string, string | null] {\n if (trigger === 'click') {\n return ['click', null];\n } else {\n return ['mouseenter', 'mouseleave'];\n }\n}\n","export type TooltipSize = typeof TooltipSize[keyof typeof TooltipSize];\n\nexport const TooltipSize = {\n AUTO: 'auto',\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\n","import { ConnectedOverlayOptions } from '@odx/angular/cdk/connected-overlay';\nimport { TooltipSize } from './tooltip-size';\nimport { TooltipTrigger } from './tooltip-trigger';\n\nexport interface TooltipOptions extends Pick<ConnectedOverlayOptions, 'position' | 'matchReferenceWidth'> {\n trigger: TooltipTrigger;\n delayIn: number;\n delayOut: number;\n size: TooltipSize;\n}\n\nexport const DefaultTooltipOptions: TooltipOptions = {\n matchReferenceWidth: false,\n size: TooltipSize.AUTO,\n trigger: 'hover',\n position: 'top',\n delayIn: 0,\n delayOut: 0,\n};\n","import { ChangeDetectionStrategy, Component, inject, Injector, Input, Type, ViewEncapsulation } from '@angular/core';\nimport { DynamicContent, DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { TooltipSize } from './models';\n\n/**\n /**\n * TooltipComponent displays contextual information related to an element when the user hovers over\n * or focuses on the element. It supports dynamic content and can be styled with different sizes.\n *\n * The component uses dynamic content rendering to provide flexible display options including text,\n * templates, or even other Angular components, making it highly customizable.\n */\n@CSSComponent('tooltip')\n@Component({\n standalone: true,\n selector: 'odx-tooltip',\n imports: [DynamicViewDirective],\n templateUrl: './tooltip.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n role: 'tooltip',\n },\n})\nexport class TooltipComponent {\n protected readonly injector = inject(Injector);\n public readonly element = injectElement();\n\n /**\n * The ID attribute of the tooltip, used for accessibility purposes to link the tooltip with its owner element.\n */\n @Input()\n public id: string | null = null;\n\n /**\n * The content to be displayed within the tooltip. This can be text, a template reference, or a dynamic component.\n */\n @Input()\n public content?: Exclude<DynamicContent, Type<unknown>> | null;\n\n /**\n * Determines the size of the tooltip. It can adjust based on the content size or be set to specific dimensions.\n * The size influences the CSS class applied to the tooltip, allowing for custom styles.\n *\n * @see {TooltipSize}\n */\n @CSSModifier()\n @Input()\n public size: TooltipSize = TooltipSize.AUTO;\n}\n","<ng-template [odxDynamicView]=\"content\" [odxDynamicViewInjector]=\"injector\"></ng-template>\n","import { booleanAttribute, Directive, inject, Input, OnChanges, OnInit, Type } from '@angular/core';\nimport { ConnectedOverlayRef, ConnectedOverlayService } from '@odx/angular/cdk/connected-overlay';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, deepmerge } from '@odx/angular/internal';\nimport { delayUntil } from '@odx/angular/rxjs';\nimport { EventManager, getUniqueId, hasChanged, injectElement, NgChanges, untilDestroyed } from '@odx/angular/utils';\nimport { filter, merge, Subject, tap } from 'rxjs';\nimport { resolveTooltipTriggerEvents } from './helpers';\nimport { DefaultTooltipOptions, TooltipOptions, TooltipSize } from './models';\nimport { TooltipComponent } from './tooltip.component';\n\n/**\n * TooltipDirective manages tooltips for host elements by creating overlay components dynamically.\n * It provides configuration options such as content, delay timings, visibility, and tooltip sizing.\n * This directive uses Angular's connected overlay system to position and manage tooltip visibility.\n */\n@CSSComponent('tooltip-host')\n@Directive({\n standalone: true,\n selector: '[odxTooltip]',\n exportAs: 'odxTooltip',\n providers: [EventManager],\n host: {\n '[attr.aria-describedby]': 'tooltipId',\n },\n})\nexport class TooltipDirective implements OnInit, OnChanges {\n private readonly eventManager = inject(EventManager);\n private readonly connectedOverlayService = inject(ConnectedOverlayService);\n private readonly showTrigger$$ = new Subject<void>();\n private readonly hideTrigger$$ = new Subject<void>();\n private connectedOverlayRef: ConnectedOverlayRef | null = null;\n private tooltipOptions = DefaultTooltipOptions;\n\n protected tooltipId: string | null = null;\n public readonly element = injectElement();\n\n /**\n * Input for dynamic content to display in the tooltip.\n * This content is reactive and can change dynamically.\n */\n @Input('odxTooltip')\n public content?: Exclude<DynamicContent, Type<unknown>> | null = null;\n\n /**\n * Controls whether the tooltip is disabled. A disabled tooltip will not be displayed.\n */\n @Input({ alias: 'odxTooltipDisabled', transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Configuration options for the tooltip.\n * It allows setting various behaviors like delay and positioning.\n *\n * @see {TooltipOptions}\n */\n @Input('odxTooltipOptions')\n public set options(value: Partial<TooltipOptions> | null | undefined) {\n this.tooltipOptions = deepmerge(DefaultTooltipOptions, value) as TooltipOptions;\n }\n\n /**\n * Sets the size of the tooltip.\n * @see {TooltipSize}\n */\n @Input('odxTooltipSize')\n public size?: TooltipSize | null = null;\n\n /**\n * Controls the visibility of the tooltip.\n * Useful for programmatically toggling the tooltip display.\n */\n @Input({ alias: 'odxTooltipVisible', transform: booleanAttribute })\n public visible = false;\n\n /**\n * Indicates whether the tooltip is currently open.\n */\n public get isOpen(): boolean {\n return this.connectedOverlayRef !== null;\n }\n\n constructor() {\n const takeUntilDestroyed = untilDestroyed();\n const show$ = this.showTrigger$$.pipe(\n filter(() => !this.isOpen),\n delayUntil(() => this.tooltipOptions.delayIn, this.hideTrigger$$),\n tap(() => this.show()),\n );\n const hide$ = this.hideTrigger$$.pipe(\n filter(() => this.isOpen),\n delayUntil(() => this.tooltipOptions.delayOut, this.showTrigger$$),\n tap(() => this.hide()),\n );\n merge(show$, hide$).pipe(takeUntilDestroyed()).subscribe();\n }\n\n public ngOnInit(): void {\n this.registerEvents();\n }\n\n public ngOnChanges(changes: NgChanges<TooltipDirective>): void {\n if (hasChanged(changes, 'disabled') && this.disabled) {\n this.hide();\n }\n if (hasChanged(changes, ['content', 'size'])) {\n this.connectedOverlayRef?.update({ context: { content: this.content, size: this.size } });\n }\n if (hasChanged(changes, 'options')) {\n this.connectedOverlayRef?.update(this.tooltipOptions);\n this.registerEvents();\n }\n if (this.visible && !this.disabled) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Shows the tooltip, creating and attaching the overlay to the host element.\n */\n public show(): void {\n if (this.isOpen || this.disabled) return;\n this.tooltipId = getUniqueId('odx-tooltip');\n this.connectedOverlayRef = this.connectedOverlayService.createOverlay(this.element.nativeElement, {\n ...this.tooltipOptions,\n containerClass: 'odx-tooltip-overlay',\n content: TooltipComponent,\n context: { content: this.content, size: this.size, id: this.tooltipId },\n showArrow: true,\n enableFallback: true,\n });\n }\n\n /**\n * Hides the tooltip, detaching the overlay from the host element.\n */\n public hide(): void {\n if (!this.isOpen || (this.visible && !this.disabled)) return;\n this.connectedOverlayRef?.close();\n this.connectedOverlayRef = null;\n this.tooltipId = null;\n }\n\n private registerEvents(): void {\n const [openEvent, closeEvent] = resolveTooltipTriggerEvents(this.tooltipOptions.trigger);\n this.eventManager.destroyListeners();\n this.eventManager.register([openEvent, 'focusin'], () => this.showTrigger$$.next());\n this.eventManager.register([closeEvent, 'focusout'], () => this.hideTrigger$$.next());\n this.eventManager.register(['keyup.esc'], () => this.hideTrigger$$.next(), 'document');\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":"odx-angular-components-tooltip.mjs","sources":["../../../../libs/angular/components/tooltip/src/lib/helpers/resolve-tooltip-trigger-events.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-size.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-options.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.html","../../../../libs/angular/components/tooltip/src/lib/tooltip.directive.ts","../../../../libs/angular/components/tooltip/src/odx-angular-components-tooltip.ts"],"sourcesContent":["import { TooltipTrigger } from '../models';\n\n/**\n * @internal\n * Resolves the appropriate event names for the provided tooltip trigger.\n *\n * @param {TooltipTrigger} trigger - The trigger to resolve.\n * @returns {[string, string | null]} - The event names for the trigger.\n */\nexport function resolveTooltipTriggerEvents(trigger: TooltipTrigger): [string, string | null] {\n if (trigger === 'click') {\n return ['click', null];\n } else {\n return ['mouseenter', 'mouseleave'];\n }\n}\n","export type TooltipSize = typeof TooltipSize[keyof typeof TooltipSize];\n\nexport const TooltipSize = {\n AUTO: 'auto',\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\n","import { ConnectedOverlayOptions } from '@odx/angular/cdk/connected-overlay';\nimport { TooltipSize } from './tooltip-size';\nimport { TooltipTrigger } from './tooltip-trigger';\n\nexport interface TooltipOptions extends Pick<ConnectedOverlayOptions, 'position' | 'matchReferenceWidth'> {\n trigger: TooltipTrigger;\n delayIn: number;\n delayOut: number;\n size: TooltipSize;\n}\n\nexport const DefaultTooltipOptions: TooltipOptions = {\n matchReferenceWidth: false,\n size: TooltipSize.AUTO,\n trigger: 'hover',\n position: 'top',\n delayIn: 0,\n delayOut: 0,\n};\n","import { ChangeDetectionStrategy, Component, inject, Injector, Input, Type, ViewEncapsulation } from '@angular/core';\nimport { DynamicContent, DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { TooltipSize } from './models';\n\n/**\n /**\n * TooltipComponent displays contextual information related to an element when the user hovers over\n * or focuses on the element. It supports dynamic content and can be styled with different sizes.\n *\n * The component uses dynamic content rendering to provide flexible display options including text,\n * templates, or even other Angular components, making it highly customizable.\n */\n@CSSComponent('tooltip')\n@Component({\n standalone: true,\n selector: 'odx-tooltip',\n imports: [DynamicViewDirective],\n templateUrl: './tooltip.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n role: 'tooltip',\n },\n})\nexport class TooltipComponent {\n protected readonly injector = inject(Injector);\n public readonly element = injectElement();\n\n /**\n * The ID attribute of the tooltip, used for accessibility purposes to link the tooltip with its owner element.\n */\n @Input()\n public id: string | null = null;\n\n /**\n * The content to be displayed within the tooltip. This can be text, a template reference, or a dynamic component.\n */\n @Input()\n public content?: Exclude<DynamicContent, Type<unknown>> | null;\n\n /**\n * Determines the size of the tooltip. It can adjust based on the content size or be set to specific dimensions.\n * The size influences the CSS class applied to the tooltip, allowing for custom styles.\n *\n * @see {TooltipSize}\n */\n @CSSModifier()\n @Input()\n public size: TooltipSize = TooltipSize.AUTO;\n}\n","<ng-template [odxDynamicView]=\"content\" [odxDynamicViewInjector]=\"injector\"></ng-template>\n","import { booleanAttribute, Directive, inject, Input, OnChanges, OnInit, Type } from '@angular/core';\nimport { ConnectedOverlayRef, ConnectedOverlayService } from '@odx/angular/cdk/connected-overlay';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, deepmerge } from '@odx/angular/internal';\nimport { delayUntil } from '@odx/angular/rxjs';\nimport { EventManager, getUniqueId, hasChanged, injectElement, NgChanges, untilDestroyed } from '@odx/angular/utils';\nimport { filter, merge, Subject, tap } from 'rxjs';\nimport { resolveTooltipTriggerEvents } from './helpers';\nimport { DefaultTooltipOptions, TooltipOptions, TooltipSize } from './models';\nimport { TooltipComponent } from './tooltip.component';\n\n/**\n * TooltipDirective manages tooltips for host elements by creating overlay components dynamically.\n * It provides configuration options such as content, delay timings, visibility, and tooltip sizing.\n * This directive uses Angular's connected overlay system to position and manage tooltip visibility.\n */\n@CSSComponent('tooltip-host')\n@Directive({\n standalone: true,\n selector: '[odxTooltip]',\n exportAs: 'odxTooltip',\n providers: [EventManager],\n host: {\n '[attr.aria-describedby]': 'tooltipId',\n },\n})\nexport class TooltipDirective implements OnInit, OnChanges {\n private readonly eventManager = inject(EventManager);\n private readonly connectedOverlayService = inject(ConnectedOverlayService);\n private readonly showTrigger$$ = new Subject<void>();\n private readonly hideTrigger$$ = new Subject<void>();\n private connectedOverlayRef: ConnectedOverlayRef | null = null;\n private tooltipOptions = DefaultTooltipOptions;\n\n protected tooltipId: string | null = null;\n public readonly element = injectElement();\n\n /**\n * Input for dynamic content to display in the tooltip.\n * This content is reactive and can change dynamically.\n */\n @Input('odxTooltip')\n public content?: Exclude<DynamicContent, Type<unknown>> | null = null;\n\n /**\n * Controls whether the tooltip is disabled. A disabled tooltip will not be displayed.\n */\n @Input({ alias: 'odxTooltipDisabled', transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Configuration options for the tooltip.\n * It allows setting various behaviors like delay and positioning.\n *\n * @see {TooltipOptions}\n */\n @Input('odxTooltipOptions')\n public set options(value: Partial<TooltipOptions> | null | undefined) {\n this.tooltipOptions = deepmerge(DefaultTooltipOptions, value) as TooltipOptions;\n }\n\n /**\n * Sets the size of the tooltip.\n * @see {TooltipSize}\n */\n @Input('odxTooltipSize')\n public size?: TooltipSize | null = null;\n\n /**\n * Controls the visibility of the tooltip.\n * Useful for programmatically toggling the tooltip display.\n */\n @Input({ alias: 'odxTooltipVisible', transform: booleanAttribute })\n public visible = false;\n\n /**\n * Indicates whether the tooltip is currently open.\n */\n public get isOpen(): boolean {\n return this.connectedOverlayRef !== null;\n }\n\n constructor() {\n const takeUntilDestroyed = untilDestroyed();\n const show$ = this.showTrigger$$.pipe(\n filter(() => !this.isOpen),\n delayUntil(() => this.tooltipOptions.delayIn, this.hideTrigger$$),\n tap(() => this.show()),\n );\n const hide$ = this.hideTrigger$$.pipe(\n filter(() => this.isOpen),\n delayUntil(() => this.tooltipOptions.delayOut, this.showTrigger$$),\n tap(() => this.hide()),\n );\n merge(show$, hide$).pipe(takeUntilDestroyed()).subscribe();\n }\n\n public ngOnInit(): void {\n this.registerEvents();\n }\n\n public ngOnChanges(changes: NgChanges<TooltipDirective>): void {\n if (hasChanged(changes, 'disabled') && this.disabled) {\n this.hide();\n }\n if (hasChanged(changes, ['content', 'size'])) {\n this.connectedOverlayRef?.update({ context: { content: this.content, size: this.size } });\n }\n if (hasChanged(changes, 'options')) {\n this.connectedOverlayRef?.update(this.tooltipOptions);\n this.registerEvents();\n }\n if (this.visible && !this.disabled) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Shows the tooltip, creating and attaching the overlay to the host element.\n */\n public show(): void {\n if (this.isOpen || this.disabled) return;\n this.tooltipId = getUniqueId('odx-tooltip');\n this.connectedOverlayRef = this.connectedOverlayService.createOverlay(this.element.nativeElement, {\n ...this.tooltipOptions,\n containerClass: 'odx-tooltip-overlay',\n content: TooltipComponent,\n context: { content: this.content, size: this.size, id: this.tooltipId },\n showArrow: true,\n enableFallback: true,\n });\n }\n\n /**\n * Hides the tooltip, detaching the overlay from the host element.\n */\n public hide(): void {\n if (!this.isOpen || (this.visible && !this.disabled)) return;\n this.connectedOverlayRef?.close();\n this.connectedOverlayRef = null;\n this.tooltipId = null;\n }\n\n private registerEvents(): void {\n const [openEvent, closeEvent] = resolveTooltipTriggerEvents(this.tooltipOptions.trigger);\n this.eventManager.destroyListeners();\n this.eventManager.register([openEvent, 'focusin'], () => this.showTrigger$$.next());\n this.eventManager.register([closeEvent, 'focusout'], () => this.hideTrigger$$.next());\n this.eventManager.register(['keyup.esc'], () => this.hideTrigger$$.next(), 'document');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAEA;;;;;;AAMG;AACG,SAAU,2BAA2B,CAAC,OAAuB,EAAA;IACjE,IAAI,OAAO,KAAK,OAAO,EAAE;AACvB,QAAA,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxB,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACrC,KAAA;AACH;;ACba,MAAA,WAAW,GAAG;AACzB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,OAAO;;;ACKH,MAAA,qBAAqB,GAAmB;AACnD,IAAA,mBAAmB,EAAE,KAAK;IAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE,CAAC;;;ACXb;;;;;;;AAOG;AAcU,IAAA,gBAAgB,GAAtB,MAAM,gBAAgB,CAAA;AAAtB,IAAA,WAAA,GAAA;AACc,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAO,CAAA,OAAA,GAAG,aAAa,EAAE,CAAC;AAE1C;;AAEG;QAEI,IAAE,CAAA,EAAA,GAAkB,IAAI,CAAC;AAQhC;;;;;AAKG;AAGI,QAAA,IAAA,CAAA,IAAI,GAAgB,WAAW,CAAC,IAAI,CAAC;AAC7C,KAAA;+GAzBY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3B7B,kGACA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDiBY,oBAAoB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;AAiCvB,UAAA,CAAA;AAFN,IAAA,WAAW,EAAE;;AAE8B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAxBjC,gBAAgB,GAAA,UAAA,CAAA;IAb5B,YAAY,CAAC,SAAS,CAAC;AAaX,CAAA,EAAA,gBAAgB,CAyB5B,CAAA;4FAzBY,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAZ5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACN,QAAA,EAAA,aAAa,EACd,OAAA,EAAA,CAAC,oBAAoB,CAAC,EAAA,aAAA,EAEhB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACJ,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,IAAI,EAAE,SAAS;AAChB,qBAAA,EAAA,QAAA,EAAA,kGAAA,EAAA,CAAA;8BAUM,EAAE,EAAA,CAAA;sBADR,KAAK;gBAOC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAWC,IAAI,EAAA,CAAA;sBADV,KAAK;;;AEvCR;;;;AAIG;AAWU,IAAA,gBAAgB,GAAtB,MAAM,gBAAgB,CAAA;AAwB3B;;;;;AAKG;IACH,IACW,OAAO,CAAC,KAAiD,EAAA;QAClE,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,qBAAqB,EAAE,KAAK,CAAmB,CAAC;KACjF;AAgBD;;AAEG;AACH,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC;KAC1C;AAED,IAAA,WAAA,GAAA;AAvDiB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;AACpC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;QAC7C,IAAmB,CAAA,mBAAA,GAA+B,IAAI,CAAC;QACvD,IAAc,CAAA,cAAA,GAAG,qBAAqB,CAAC;QAErC,IAAS,CAAA,SAAA,GAAkB,IAAI,CAAC;QAC1B,IAAO,CAAA,OAAA,GAAG,aAAa,EAAE,CAAC;AAE1C;;;AAGG;QAEI,IAAO,CAAA,OAAA,GAAmD,IAAI,CAAC;AAEtE;;AAEG;QAEI,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAaxB;;;AAGG;QAEI,IAAI,CAAA,IAAA,GAAwB,IAAI,CAAC;AAExC;;;AAGG;QAEI,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAUrB,QAAA,MAAM,kBAAkB,GAAG,cAAc,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAC1B,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,EACjE,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CACvB,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACnC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EACzB,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,EAClE,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CACvB,CAAC;AACF,QAAA,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;KAC5D;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;AAEM,IAAA,WAAW,CAAC,OAAoC,EAAA;QACrD,IAAI,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACpD,IAAI,CAAC,IAAI,EAAE,CAAC;AACb,SAAA;QACD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE;YAC5C,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3F,SAAA;AACD,QAAA,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;YAClC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,IAAI,EAAE,CAAC;AACb,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,IAAI,EAAE,CAAC;AACb,SAAA;KACF;AAED;;AAEG;IACI,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YAChG,GAAG,IAAI,CAAC,cAAc;AACtB,YAAA,cAAc,EAAE,qBAAqB;AACrC,YAAA,OAAO,EAAE,gBAAgB;AACzB,YAAA,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE;AACvE,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,cAAc,EAAE,IAAI;AACrB,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;IACI,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO;AAC7D,QAAA,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;IAEO,cAAc,GAAA;AACpB,QAAA,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;KACxF;+GA7HU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,2IAqBsB,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,SAAA,EAyBjB,gBAAgB,CAnDrD,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;AAKd,gBAAgB,GAAA,UAAA,CAAA;IAV5B,YAAY,CAAC,cAAc,CAAC;;AAUhB,CAAA,EAAA,gBAAgB,CA8H5B,CAAA;4FA9HY,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAT5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE,CAAC,YAAY,CAAC;AACzB,oBAAA,IAAI,EAAE;AACJ,wBAAA,yBAAyB,EAAE,WAAW;AACvC,qBAAA;AACF,iBAAA,CAAA;0EAiBQ,OAAO,EAAA,CAAA;sBADb,KAAK;uBAAC,YAAY,CAAA;gBAOZ,QAAQ,EAAA,CAAA;sBADd,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAUxD,OAAO,EAAA,CAAA;sBADjB,KAAK;uBAAC,mBAAmB,CAAA;gBAUnB,IAAI,EAAA,CAAA;sBADV,KAAK;uBAAC,gBAAgB,CAAA;gBAQhB,OAAO,EAAA,CAAA;sBADb,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;;ACxEpE;;AAEG;;;;"}
|