valtech-components 2.0.293 → 2.0.294

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.
@@ -0,0 +1,219 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { addIcons } from 'ionicons';
4
+ import { globe, language } from 'ionicons/icons';
5
+ import { Subscription, of } from 'rxjs';
6
+ import { map } from 'rxjs/operators';
7
+ import { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../../services/lang-provider/lang-provider.service";
10
+ import * as i2 from "../../../services/content.service";
11
+ /**
12
+ * val-language-selector
13
+ *
14
+ * A specialized language selector component that integrates with the LangService.
15
+ * Uses the popover-selector component internally and provides language-specific functionality.
16
+ *
17
+ * @example
18
+ * // Basic usage (auto-detects languages from LangService)
19
+ * <val-language-selector
20
+ * [props]="{ showLabel: true, showFlags: true }">
21
+ * </val-language-selector>
22
+ *
23
+ * @example
24
+ * // Custom configuration
25
+ * const languageProps: LanguageSelectorMetadata = {
26
+ * showLabel: true,
27
+ * label: 'Choose Language',
28
+ * showFlags: true,
29
+ * color: 'primary',
30
+ * size: 'large',
31
+ * fill: 'outline',
32
+ * customLanguageNames: {
33
+ * 'es': 'Español',
34
+ * 'en': 'English',
35
+ * 'fr': 'Français'
36
+ * }
37
+ * };
38
+ *
39
+ * @example
40
+ * // With reactive content
41
+ * const languageProps: LanguageSelectorMetadata = {
42
+ * showLabel: true,
43
+ * labelConfig: {
44
+ * className: 'myComponent',
45
+ * key: 'languageLabel',
46
+ * fallback: 'Language'
47
+ * },
48
+ * color: 'tertiary'
49
+ * };
50
+ *
51
+ * @input props: LanguageSelectorMetadata - Configuration for the language selector
52
+ * @output languageChange: EventEmitter<string> - Emitted when language changes
53
+ */
54
+ export class LanguageSelectorComponent {
55
+ constructor(langService, contentService) {
56
+ this.langService = langService;
57
+ this.contentService = contentService;
58
+ /**
59
+ * Language selector configuration object.
60
+ * @type {LanguageSelectorMetadata}
61
+ */
62
+ this.props = {};
63
+ /**
64
+ * Event emitted when the language selection changes.
65
+ * Emits the selected language code.
66
+ */
67
+ this.languageChange = new EventEmitter();
68
+ this.subscriptions = new Subscription();
69
+ /** Default language display names */
70
+ this.defaultLanguageNames = {
71
+ es: 'Español',
72
+ en: 'English',
73
+ fr: 'Français',
74
+ de: 'Deutsch',
75
+ pt: 'Português',
76
+ it: 'Italiano',
77
+ zh: '中文',
78
+ ja: '日本語',
79
+ ko: '한국어',
80
+ ru: 'Русский',
81
+ ar: 'العربية',
82
+ };
83
+ /** Default flag icons for languages */
84
+ this.defaultLanguageFlags = {
85
+ es: '🇪🇸',
86
+ en: '🇺🇸',
87
+ fr: '🇫🇷',
88
+ de: '🇩🇪',
89
+ pt: '🇵🇹',
90
+ it: '🇮🇹',
91
+ zh: '🇨🇳',
92
+ ja: '🇯🇵',
93
+ ko: '🇰🇷',
94
+ ru: '🇷🇺',
95
+ ar: '🇸🇦',
96
+ };
97
+ // Register required icons
98
+ addIcons({ language, globe });
99
+ }
100
+ ngOnInit() {
101
+ this.initializeLanguageState();
102
+ this.initializeLabel();
103
+ this.initializePopoverProps();
104
+ }
105
+ ngOnDestroy() {
106
+ this.subscriptions.unsubscribe();
107
+ }
108
+ initializeLanguageState() {
109
+ // Get current language and available languages from LangService
110
+ this.currentLanguage$ = this.langService.currentLang$;
111
+ this.availableLanguages$ = this.currentLanguage$.pipe(map(() => this.props.availableLanguages || this.langService.availableLangs));
112
+ }
113
+ initializeLabel() {
114
+ // Initialize label observable based on configuration
115
+ if (this.props.label !== undefined) {
116
+ // Static label
117
+ this.label$ = of(this.props.label);
118
+ }
119
+ else if (this.props.labelConfig) {
120
+ // Reactive label
121
+ this.label$ = this.contentService.fromContent({
122
+ className: this.props.labelConfig.className || '_global',
123
+ key: this.props.labelConfig.key,
124
+ fallback: this.props.labelConfig.fallback || 'Language',
125
+ interpolation: this.props.labelConfig.interpolation,
126
+ });
127
+ }
128
+ else {
129
+ // Default label from global content
130
+ this.label$ = this.contentService.fromContent({
131
+ className: '_global',
132
+ key: 'language',
133
+ fallback: 'Idioma',
134
+ });
135
+ }
136
+ }
137
+ initializePopoverProps() {
138
+ // Subscribe to language state changes to update popover props
139
+ const languageSubscription = this.availableLanguages$.subscribe(availableLanguages => {
140
+ const currentLanguageSubscription = this.currentLanguage$.subscribe(currentLanguage => {
141
+ this.updatePopoverProps(availableLanguages, currentLanguage);
142
+ });
143
+ this.subscriptions.add(currentLanguageSubscription);
144
+ });
145
+ this.subscriptions.add(languageSubscription);
146
+ // Subscribe to label changes
147
+ const labelSubscription = this.label$.subscribe(label => {
148
+ if (this.popoverProps) {
149
+ this.popoverProps = {
150
+ ...this.popoverProps,
151
+ label: this.props.showLabel !== false ? label : undefined,
152
+ };
153
+ }
154
+ });
155
+ this.subscriptions.add(labelSubscription);
156
+ }
157
+ updatePopoverProps(availableLanguages, currentLanguage) {
158
+ // Convert language codes to popover options
159
+ const options = availableLanguages.map(lang => ({
160
+ value: lang,
161
+ label: this.getLanguageDisplayName(lang),
162
+ icon: this.props.showFlags ? undefined : undefined, // We'll use text flags instead
163
+ }));
164
+ // Create popover configuration
165
+ this.popoverProps = {
166
+ options,
167
+ selectedValue: currentLanguage,
168
+ label: this.props.showLabel !== false ? '' : undefined, // Will be set by label subscription
169
+ icon: 'language',
170
+ placeholder: 'Seleccionar idioma...',
171
+ color: this.props.color || 'medium',
172
+ size: this.props.size || 'default',
173
+ fill: this.props.fill || 'outline',
174
+ shape: this.props.shape,
175
+ expand: this.props.expand,
176
+ disabled: this.props.disabled || false,
177
+ interface: 'popover',
178
+ showCheckmark: true,
179
+ multiple: false,
180
+ cancelText: 'Cancelar',
181
+ okText: 'Aceptar',
182
+ };
183
+ }
184
+ getLanguageDisplayName(languageCode) {
185
+ // Use custom names if provided, otherwise use defaults, otherwise use the code itself
186
+ const customName = this.props.customLanguageNames?.[languageCode];
187
+ const defaultName = this.defaultLanguageNames[languageCode];
188
+ const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';
189
+ const displayName = customName || defaultName || languageCode.toUpperCase();
190
+ return flag ? `${flag} ${displayName}` : displayName;
191
+ }
192
+ /**
193
+ * Handle language selection change.
194
+ * @param selectedLanguage - The selected language code(s)
195
+ */
196
+ onLanguageChange(selectedLanguage) {
197
+ if (typeof selectedLanguage === 'string') {
198
+ // Update the language service
199
+ this.langService.setLang(selectedLanguage);
200
+ // Emit the change event
201
+ this.languageChange.emit(selectedLanguage);
202
+ }
203
+ }
204
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LanguageSelectorComponent, deps: [{ token: i1.LangService }, { token: i2.ContentService }], target: i0.ɵɵFactoryTarget.Component }); }
205
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LanguageSelectorComponent, isStandalone: true, selector: "val-language-selector", inputs: { props: "props" }, outputs: { languageChange: "languageChange" }, ngImport: i0, template: `
206
+ <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
207
+ `, isInline: true, styles: [":host{display:block}val-popover-selector .selector-trigger .trigger-text{display:flex;align-items:center;gap:8px}.language-flag{font-size:1.2em;margin-right:4px}@media (max-width: 768px){val-popover-selector .selector-trigger{--padding-start: 8px;--padding-end: 8px}val-popover-selector .selector-trigger .trigger-text{font-size:14px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PopoverSelectorComponent, selector: "val-popover-selector", inputs: ["props"], outputs: ["selectionChange"] }] }); }
208
+ }
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LanguageSelectorComponent, decorators: [{
210
+ type: Component,
211
+ args: [{ selector: 'val-language-selector', standalone: true, imports: [CommonModule, PopoverSelectorComponent], template: `
212
+ <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
213
+ `, styles: [":host{display:block}val-popover-selector .selector-trigger .trigger-text{display:flex;align-items:center;gap:8px}.language-flag{font-size:1.2em;margin-right:4px}@media (max-width: 768px){val-popover-selector .selector-trigger{--padding-start: 8px;--padding-end: 8px}val-popover-selector .selector-trigger .trigger-text{font-size:14px}}\n"] }]
214
+ }], ctorParameters: () => [{ type: i1.LangService }, { type: i2.ContentService }], propDecorators: { props: [{
215
+ type: Input
216
+ }], languageChange: [{
217
+ type: Output
218
+ }] } });
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvbGFuZ3VhZ2Utc2VsZWN0b3IvbGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFjLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXJDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7O0FBYTFGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBMkRwQyxZQUNVLFdBQXdCLEVBQ3hCLGNBQThCO1FBRDlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTVEeEM7OztXQUdHO1FBRUgsVUFBSyxHQUE2QixFQUFFLENBQUM7UUFFckM7OztXQUdHO1FBRUgsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBY3BDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzQyxxQ0FBcUM7UUFDcEIseUJBQW9CLEdBQTJC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QyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpGLE1BQU0sV0FBVyxHQUFHLFVBQVUsSUFBSSxXQUFXLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxnQkFBbUM7UUFDbEQsSUFBSSxPQUFPLGdCQUFnQixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTNDLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDOytHQXJMVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qiw0SkFoRDFCOztHQUVULDBaQUhTLFlBQVksK0JBQUUsd0JBQXdCOzs0RkFpRHJDLHlCQUF5QjtrQkFwRHJDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxZQUN2Qzs7R0FFVDs2R0FvREQsS0FBSztzQkFESixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgZ2xvYmUsIGxhbmd1YWdlIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5nT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci90eXBlcyc7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJPcHRpb24sIFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhIH0gZnJvbSAnLi4vcG9wb3Zlci1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUG9wb3ZlclNlbGVjdG9yQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLXBvcG92ZXItc2VsZWN0b3IgW3Byb3BzXT1cInBvcG92ZXJQcm9wc1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCI+IDwvdmFsLXBvcG92ZXItc2VsZWN0b3I+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqXG4gKiBBIHNwZWNpYWxpemVkIGxhbmd1YWdlIHNlbGVjdG9yIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgTGFuZ1NlcnZpY2UuXG4gKiBVc2VzIHRoZSBwb3BvdmVyLXNlbGVjdG9yIGNvbXBvbmVudCBpbnRlcm5hbGx5IGFuZCBwcm92aWRlcyBsYW5ndWFnZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSAoYXV0by1kZXRlY3RzIGxhbmd1YWdlcyBmcm9tIExhbmdTZXJ2aWNlKVxuICogPHZhbC1sYW5ndWFnZS1zZWxlY3RvclxuICogICBbcHJvcHNdPVwieyBzaG93TGFiZWw6IHRydWUsIHNob3dGbGFnczogdHJ1ZSB9XCI+XG4gKiA8L3ZhbC1sYW5ndWFnZS1zZWxlY3Rvcj5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9tIGNvbmZpZ3VyYXRpb25cbiAqIGNvbnN0IGxhbmd1YWdlUHJvcHM6IExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSA9IHtcbiAqICAgc2hvd0xhYmVsOiB0cnVlLFxuICogICBsYWJlbDogJ0Nob29zZSBMYW5ndWFnZScsXG4gKiAgIHNob3dGbGFnczogdHJ1ZSxcbiAqICAgY29sb3I6ICdwcmltYXJ5JyxcbiAqICAgc2l6ZTogJ2xhcmdlJyxcbiAqICAgZmlsbDogJ291dGxpbmUnLFxuICogICBjdXN0b21MYW5ndWFnZU5hbWVzOiB7XG4gKiAgICAgJ2VzJzogJ0VzcGHDsW9sJyxcbiAqICAgICAnZW4nOiAnRW5nbGlzaCcsXG4gKiAgICAgJ2ZyJzogJ0ZyYW7Dp2FpcydcbiAqICAgfVxuICogfTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2l0aCByZWFjdGl2ZSBjb250ZW50XG4gKiBjb25zdCBsYW5ndWFnZVByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gKiAgIHNob3dMYWJlbDogdHJ1ZSxcbiAqICAgbGFiZWxDb25maWc6IHtcbiAqICAgICBjbGFzc05hbWU6ICdteUNvbXBvbmVudCcsXG4gKiAgICAga2V5OiAnbGFuZ3VhZ2VMYWJlbCcsXG4gKiAgICAgZmFsbGJhY2s6ICdMYW5ndWFnZSdcbiAqICAgfSxcbiAqICAgY29sb3I6ICd0ZXJ0aWFyeSdcbiAqIH07XG4gKlxuICogQGlucHV0IHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3JcbiAqIEBvdXRwdXQgbGFuZ3VhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+IC0gRW1pdHRlZCB3aGVuIGxhbmd1YWdlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGNsYXNzIExhbmd1YWdlU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBzZWxlY3RvciBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHR5cGUge0xhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YX1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7fTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBsYW5ndWFnZSBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGxhbmd1YWdlIGNvZGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbGFuZ3VhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogUG9wb3ZlciBzZWxlY3RvciBjb25maWd1cmF0aW9uICovXG4gIHBvcG92ZXJQcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGE7XG5cbiAgLyoqIEN1cnJlbnQgbGFuZ3VhZ2Ugb2JzZXJ2YWJsZSAqL1xuICBjdXJyZW50TGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPExhbmdPcHRpb24+O1xuXG4gIC8qKiBBdmFpbGFibGUgbGFuZ3VhZ2VzIG9ic2VydmFibGUgKi9cbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5nT3B0aW9uW10+O1xuXG4gIC8qKiBMYWJlbCBvYnNlcnZhYmxlIGZvciByZWFjdGl2ZSBjb250ZW50ICovXG4gIGxhYmVsJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAvKiogRGVmYXVsdCBsYW5ndWFnZSBkaXNwbGF5IG5hbWVzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExhbmd1YWdlTmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgZXM6ICdFc3Bhw7FvbCcsXG4gICAgZW46ICdFbmdsaXNoJyxcbiAgICBmcjogJ0ZyYW7Dp2FpcycsXG4gICAgZGU6ICdEZXV0c2NoJyxcbiAgICBwdDogJ1BvcnR1Z3XDqnMnLFxuICAgIGl0OiAnSXRhbGlhbm8nLFxuICAgIHpoOiAn5Lit5paHJyxcbiAgICBqYTogJ+aXpeacrOiqnicsXG4gICAga286ICftlZzqta3slrQnLFxuICAgIHJ1OiAn0KDRg9GB0YHQutC40LknLFxuICAgIGFyOiAn2KfZhNi52LHYqNmK2KknLFxuICB9O1xuXG4gIC8qKiBEZWZhdWx0IGZsYWcgaWNvbnMgZm9yIGxhbmd1YWdlcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZUZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGVzOiAn8J+HqvCfh7gnLFxuICAgIGVuOiAn8J+HuvCfh7gnLFxuICAgIGZyOiAn8J+Hq/Cfh7cnLFxuICAgIGRlOiAn8J+HqfCfh6onLFxuICAgIHB0OiAn8J+HtfCfh7knLFxuICAgIGl0OiAn8J+HrvCfh7knLFxuICAgIHpoOiAn8J+HqPCfh7MnLFxuICAgIGphOiAn8J+Hr/Cfh7UnLFxuICAgIGtvOiAn8J+HsPCfh7cnLFxuICAgIHJ1OiAn8J+Ht/Cfh7onLFxuICAgIGFyOiAn8J+HuPCfh6YnLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudFNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlXG4gICkge1xuICAgIC8vIFJlZ2lzdGVyIHJlcXVpcmVkIGljb25zXG4gICAgYWRkSWNvbnMoeyBsYW5ndWFnZSwgZ2xvYmUgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVMYW5ndWFnZVN0YXRlKCk7XG4gICAgdGhpcy5pbml0aWFsaXplTGFiZWwoKTtcbiAgICB0aGlzLmluaXRpYWxpemVQb3BvdmVyUHJvcHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGFuZ3VhZ2VTdGF0ZSgpIHtcbiAgICAvLyBHZXQgY3VycmVudCBsYW5ndWFnZSBhbmQgYXZhaWxhYmxlIGxhbmd1YWdlcyBmcm9tIExhbmdTZXJ2aWNlXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy5sYW5nU2VydmljZS5jdXJyZW50TGFuZyQ7XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMkID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UkLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5wcm9wcy5hdmFpbGFibGVMYW5ndWFnZXMgfHwgdGhpcy5sYW5nU2VydmljZS5hdmFpbGFibGVMYW5ncylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGFiZWwoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBsYWJlbCBvYnNlcnZhYmxlIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAodGhpcy5wcm9wcy5sYWJlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTdGF0aWMgbGFiZWxcbiAgICAgIHRoaXMubGFiZWwkID0gb2YodGhpcy5wcm9wcy5sYWJlbCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmxhYmVsQ29uZmlnKSB7XG4gICAgICAvLyBSZWFjdGl2ZSBsYWJlbFxuICAgICAgdGhpcy5sYWJlbCQgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmZyb21Db250ZW50KHtcbiAgICAgICAgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmxhYmVsQ29uZmlnLmNsYXNzTmFtZSB8fCAnX2dsb2JhbCcsXG4gICAgICAgIGtleTogdGhpcy5wcm9wcy5sYWJlbENvbmZpZy5rZXksXG4gICAgICAgIGZhbGxiYWNrOiB0aGlzLnByb3BzLmxhYmVsQ29uZmlnLmZhbGxiYWNrIHx8ICdMYW5ndWFnZScsXG4gICAgICAgIGludGVycG9sYXRpb246IHRoaXMucHJvcHMubGFiZWxDb25maWcuaW50ZXJwb2xhdGlvbixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IGxhYmVsIGZyb20gZ2xvYmFsIGNvbnRlbnRcbiAgICAgIHRoaXMubGFiZWwkID0gdGhpcy5jb250ZW50U2VydmljZS5mcm9tQ29udGVudCh7XG4gICAgICAgIGNsYXNzTmFtZTogJ19nbG9iYWwnLFxuICAgICAgICBrZXk6ICdsYW5ndWFnZScsXG4gICAgICAgIGZhbGxiYWNrOiAnSWRpb21hJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBvcG92ZXJQcm9wcygpIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gbGFuZ3VhZ2Ugc3RhdGUgY2hhbmdlcyB0byB1cGRhdGUgcG9wb3ZlciBwcm9wc1xuICAgIGNvbnN0IGxhbmd1YWdlU3Vic2NyaXB0aW9uID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMkLnN1YnNjcmliZShhdmFpbGFibGVMYW5ndWFnZXMgPT4ge1xuICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlU3Vic2NyaXB0aW9uID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UkLnN1YnNjcmliZShjdXJyZW50TGFuZ3VhZ2UgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcG92ZXJQcm9wcyhhdmFpbGFibGVMYW5ndWFnZXMsIGN1cnJlbnRMYW5ndWFnZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoY3VycmVudExhbmd1YWdlU3Vic2NyaXB0aW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGxhbmd1YWdlU3Vic2NyaXB0aW9uKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBsYWJlbCBjaGFuZ2VzXG4gICAgY29uc3QgbGFiZWxTdWJzY3JpcHRpb24gPSB0aGlzLmxhYmVsJC5zdWJzY3JpYmUobGFiZWwgPT4ge1xuICAgICAgaWYgKHRoaXMucG9wb3ZlclByb3BzKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlclByb3BzID0ge1xuICAgICAgICAgIC4uLnRoaXMucG9wb3ZlclByb3BzLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnByb3BzLnNob3dMYWJlbCAhPT0gZmFsc2UgPyBsYWJlbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGxhYmVsU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9wb3ZlclByb3BzKGF2YWlsYWJsZUxhbmd1YWdlczogTGFuZ09wdGlvbltdLCBjdXJyZW50TGFuZ3VhZ2U6IExhbmdPcHRpb24pIHtcbiAgICAvLyBDb252ZXJ0IGxhbmd1YWdlIGNvZGVzIHRvIHBvcG92ZXIgb3B0aW9uc1xuICAgIGNvbnN0IG9wdGlvbnM6IFBvcG92ZXJPcHRpb25bXSA9IGF2YWlsYWJsZUxhbmd1YWdlcy5tYXAobGFuZyA9PiAoe1xuICAgICAgdmFsdWU6IGxhbmcsXG4gICAgICBsYWJlbDogdGhpcy5nZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmcpLFxuICAgICAgaWNvbjogdGhpcy5wcm9wcy5zaG93RmxhZ3MgPyB1bmRlZmluZWQgOiB1bmRlZmluZWQsIC8vIFdlJ2xsIHVzZSB0ZXh0IGZsYWdzIGluc3RlYWRcbiAgICB9KSk7XG5cbiAgICAvLyBDcmVhdGUgcG9wb3ZlciBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5wb3BvdmVyUHJvcHMgPSB7XG4gICAgICBvcHRpb25zLFxuICAgICAgc2VsZWN0ZWRWYWx1ZTogY3VycmVudExhbmd1YWdlLFxuICAgICAgbGFiZWw6IHRoaXMucHJvcHMuc2hvd0xhYmVsICE9PSBmYWxzZSA/ICcnIDogdW5kZWZpbmVkLCAvLyBXaWxsIGJlIHNldCBieSBsYWJlbCBzdWJzY3JpcHRpb25cbiAgICAgIGljb246ICdsYW5ndWFnZScsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjY2lvbmFyIGlkaW9tYS4uLicsXG4gICAgICBjb2xvcjogdGhpcy5wcm9wcy5jb2xvciB8fCAnbWVkaXVtJyxcbiAgICAgIHNpemU6IHRoaXMucHJvcHMuc2l6ZSB8fCAnZGVmYXVsdCcsXG4gICAgICBmaWxsOiB0aGlzLnByb3BzLmZpbGwgfHwgJ291dGxpbmUnLFxuICAgICAgc2hhcGU6IHRoaXMucHJvcHMuc2hhcGUsXG4gICAgICBleHBhbmQ6IHRoaXMucHJvcHMuZXhwYW5kLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2UsXG4gICAgICBpbnRlcmZhY2U6ICdwb3BvdmVyJyxcbiAgICAgIHNob3dDaGVja21hcms6IHRydWUsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBjYW5jZWxUZXh0OiAnQ2FuY2VsYXInLFxuICAgICAgb2tUZXh0OiAnQWNlcHRhcicsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFuZ3VhZ2VEaXNwbGF5TmFtZShsYW5ndWFnZUNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gVXNlIGN1c3RvbSBuYW1lcyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0cywgb3RoZXJ3aXNlIHVzZSB0aGUgY29kZSBpdHNlbGZcbiAgICBjb25zdCBjdXN0b21OYW1lID0gdGhpcy5wcm9wcy5jdXN0b21MYW5ndWFnZU5hbWVzPy5bbGFuZ3VhZ2VDb2RlXTtcbiAgICBjb25zdCBkZWZhdWx0TmFtZSA9IHRoaXMuZGVmYXVsdExhbmd1YWdlTmFtZXNbbGFuZ3VhZ2VDb2RlXTtcbiAgICBjb25zdCBmbGFnID0gdGhpcy5wcm9wcy5zaG93RmxhZ3MgPyB0aGlzLmRlZmF1bHRMYW5ndWFnZUZsYWdzW2xhbmd1YWdlQ29kZV0gOiAnJztcblxuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gY3VzdG9tTmFtZSB8fCBkZWZhdWx0TmFtZSB8fCBsYW5ndWFnZUNvZGUudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gZmxhZyA/IGAke2ZsYWd9ICR7ZGlzcGxheU5hbWV9YCA6IGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBsYW5ndWFnZSBzZWxlY3Rpb24gY2hhbmdlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRMYW5ndWFnZSAtIFRoZSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlKHMpXG4gICAqL1xuICBvbkxhbmd1YWdlQ2hhbmdlKHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RlZExhbmd1YWdlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVXBkYXRlIHRoZSBsYW5ndWFnZSBzZXJ2aWNlXG4gICAgICB0aGlzLmxhbmdTZXJ2aWNlLnNldExhbmcoc2VsZWN0ZWRMYW5ndWFnZSk7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudFxuICAgICAgdGhpcy5sYW5ndWFnZUNoYW5nZS5lbWl0KHNlbGVjdGVkTGFuZ3VhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9sYW5ndWFnZS1zZWxlY3Rvci90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3IgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHZhbC1sYW5ndWFnZS1zZWxlY3RvciBjb21wb25lbnQuXG4gKiBBIHNwZWNpYWxpemVkIGNvbXBvbmVudCBmb3IgbGFuZ3VhZ2Ugc2VsZWN0aW9uLlxuICpcbiAqIEBwcm9wZXJ0eSBjdXJyZW50TGFuZ3VhZ2UgLSBDdXJyZW50bHkgc2VsZWN0ZWQgbGFuZ3VhZ2UgY29kZS5cbiAqIEBwcm9wZXJ0eSBhdmFpbGFibGVMYW5ndWFnZXMgLSBBcnJheSBvZiBhdmFpbGFibGUgbGFuZ3VhZ2UgY29kZXMuXG4gKiBAcHJvcGVydHkgc2hvd0xhYmVsIC0gV2hldGhlciB0byBzaG93IHRoZSBsYWJlbC5cbiAqIEBwcm9wZXJ0eSBsYWJlbCAtIEN1c3RvbSBsYWJlbCB0ZXh0IChzdGF0aWMpLlxuICogQHByb3BlcnR5IGxhYmVsQ29uZmlnIC0gUmVhY3RpdmUgY29udGVudCBjb25maWd1cmF0aW9uIGZvciBsYWJlbC5cbiAqIEBwcm9wZXJ0eSBzaG93RmxhZ3MgLSBXaGV0aGVyIHRvIHNob3cgZmxhZyBpY29ucyBmb3IgbGFuZ3VhZ2VzLlxuICogQHByb3BlcnR5IGNvbG9yIC0gQnV0dG9uIGNvbG9yIChJb25pYyBjb2xvciBzdHJpbmcpLlxuICogQHByb3BlcnR5IHNpemUgLSBCdXR0b24gc2l6ZSAoJ3NtYWxsJyB8ICdkZWZhdWx0JyB8ICdsYXJnZScpLlxuICogQHByb3BlcnR5IGZpbGwgLSBCdXR0b24gZmlsbCBzdHlsZSAoJ2NsZWFyJyB8ICdvdXRsaW5lJyB8ICdzb2xpZCcgfCAnZGVmYXVsdCcpLlxuICogQHByb3BlcnR5IHNoYXBlIC0gQnV0dG9uIHNoYXBlICgncm91bmQnIHwgdW5kZWZpbmVkKS5cbiAqIEBwcm9wZXJ0eSBleHBhbmQgLSBCdXR0b24gZXhwYW5zaW9uICgnZnVsbCcgfCAnYmxvY2snIHwgdW5kZWZpbmVkKS5cbiAqIEBwcm9wZXJ0eSBkaXNhYmxlZCAtIFdoZXRoZXIgdGhlIHNlbGVjdG9yIGlzIGRpc2FibGVkLlxuICogQHByb3BlcnR5IGN1c3RvbUxhbmd1YWdlTmFtZXMgLSBDdXN0b20gZGlzcGxheSBuYW1lcyBmb3IgbGFuZ3VhZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSB7XG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgbGFuZ3VhZ2UgY29kZSAqL1xuICBjdXJyZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBhdmFpbGFibGUgbGFuZ3VhZ2UgY29kZXMgKi9cbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzPzogc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIGxhYmVsICovXG4gIHNob3dMYWJlbD86IGJvb2xlYW47XG4gIC8qKiBTdGF0aWMgbGFiZWwgdGV4dCAodGFrZXMgcHJlY2VkZW5jZSBvdmVyIGxhYmVsQ29uZmlnKSAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqIFJlYWN0aXZlIGNvbnRlbnQgY29uZmlndXJhdGlvbiBmb3IgbGFiZWwgKi9cbiAgbGFiZWxDb25maWc/OiB7XG4gICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIGtleTogc3RyaW5nO1xuICAgIGZhbGxiYWNrPzogc3RyaW5nO1xuICAgIGludGVycG9sYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB9O1xuICAvKiogV2hldGhlciB0byBzaG93IGZsYWcgaWNvbnMgZm9yIGxhbmd1YWdlcyAqL1xuICBzaG93RmxhZ3M/OiBib29sZWFuO1xuICAvKiogQnV0dG9uIGNvbG9yICovXG4gIGNvbG9yPzogQ29sb3I7XG4gIC8qKiBCdXR0b24gc2l6ZSAqL1xuICBzaXplPzogJ3NtYWxsJyB8ICdkZWZhdWx0JyB8ICdsYXJnZSc7XG4gIC8qKiBCdXR0b24gZmlsbCBzdHlsZSAqL1xuICBmaWxsPzogJ2NsZWFyJyB8ICdvdXRsaW5lJyB8ICdzb2xpZCcgfCAnZGVmYXVsdCc7XG4gIC8qKiBCdXR0b24gc2hhcGUgKi9cbiAgc2hhcGU/OiAncm91bmQnO1xuICAvKiogQnV0dG9uIGV4cGFuc2lvbiAqL1xuICBleHBhbmQ/OiAnZnVsbCcgfCAnYmxvY2snO1xuICAvKiogV2hldGhlciB0aGUgc2VsZWN0b3IgaXMgZGlzYWJsZWQgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIGRpc3BsYXkgbmFtZXMgZm9yIGxhbmd1YWdlcyAqL1xuICBjdXN0b21MYW5ndWFnZU5hbWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiJdfQ==
@@ -0,0 +1,170 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { IonButton, IonIcon, IonItem, IonLabel, IonSelect, IonSelectOption } from '@ionic/angular/standalone';
4
+ import { addIcons } from 'ionicons';
5
+ import { chevronDown } from 'ionicons/icons';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ /**
9
+ * val-popover-selector
10
+ *
11
+ * A generic reusable popover selector component that can be used for any type of selection.
12
+ * Provides a button trigger that opens a popover with selectable options.
13
+ *
14
+ * @example
15
+ * // Basic usage
16
+ * <val-popover-selector
17
+ * [props]="selectorProps"
18
+ * (selectionChange)="onSelectionChange($event)">
19
+ * </val-popover-selector>
20
+ *
21
+ * @example
22
+ * // With icon and custom styling
23
+ * const selectorProps: PopoverSelectorMetadata = {
24
+ * options: [
25
+ * { value: 'option1', label: 'Option 1', icon: 'star' },
26
+ * { value: 'option2', label: 'Option 2', icon: 'heart' }
27
+ * ],
28
+ * selectedValue: 'option1',
29
+ * label: 'Choose option',
30
+ * icon: 'settings',
31
+ * color: 'primary',
32
+ * size: 'large',
33
+ * fill: 'solid'
34
+ * };
35
+ *
36
+ * @input props: PopoverSelectorMetadata - Configuration for the selector
37
+ * @output selectionChange: EventEmitter<string | string[]> - Emitted when selection changes
38
+ */
39
+ export class PopoverSelectorComponent {
40
+ constructor() {
41
+ /**
42
+ * Event emitted when the selection changes.
43
+ * Emits the selected value(s).
44
+ */
45
+ this.selectionChange = new EventEmitter();
46
+ // Register required icons
47
+ addIcons({ chevronDown });
48
+ }
49
+ /**
50
+ * Handle selection change from the ion-select.
51
+ * @param event - The ion-select change event
52
+ */
53
+ onSelectionChange(event) {
54
+ const selectedValue = event.detail.value;
55
+ this.selectionChange.emit(selectedValue);
56
+ }
57
+ /**
58
+ * Get the display text for the trigger button.
59
+ * Shows the selected option's label or placeholder.
60
+ * @returns The display text
61
+ */
62
+ getDisplayText() {
63
+ if (!this.props.selectedValue) {
64
+ return this.props.placeholder || 'Seleccionar...';
65
+ }
66
+ if (Array.isArray(this.props.selectedValue)) {
67
+ // Multiple selection
68
+ if (this.props.selectedValue.length === 0) {
69
+ return this.props.placeholder || 'Seleccionar...';
70
+ }
71
+ if (this.props.selectedValue.length === 1) {
72
+ const option = this.props.options.find(opt => opt.value === this.props.selectedValue[0]);
73
+ return option?.label || this.props.selectedValue[0];
74
+ }
75
+ return `${this.props.selectedValue.length} seleccionados`;
76
+ }
77
+ // Single selection
78
+ const selectedOption = this.props.options.find(opt => opt.value === this.props.selectedValue);
79
+ return selectedOption?.label || this.props.selectedValue;
80
+ }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopoverSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PopoverSelectorComponent, isStandalone: true, selector: "val-popover-selector", inputs: { props: "props" }, outputs: { selectionChange: "selectionChange" }, ngImport: i0, template: `
83
+ <ion-item [disabled]="props.disabled" lines="none">
84
+ <ion-label *ngIf="props.label" position="stacked">{{ props.label }}</ion-label>
85
+ <ion-select
86
+ [value]="props.selectedValue"
87
+ [placeholder]="props.placeholder || 'Seleccionar...'"
88
+ [interface]="props.interface || 'popover'"
89
+ [multiple]="props.multiple || false"
90
+ [disabled]="props.disabled || false"
91
+ [cancelText]="props.cancelText || 'Cancelar'"
92
+ [okText]="props.okText || 'Aceptar'"
93
+ (ionChange)="onSelectionChange($event)"
94
+ class="popover-selector-select"
95
+ >
96
+ <ion-button
97
+ slot="trigger"
98
+ [fill]="props.fill || 'outline'"
99
+ [size]="props.size || 'default'"
100
+ [shape]="props.shape"
101
+ [expand]="props.expand"
102
+ [color]="props.color || 'medium'"
103
+ [disabled]="props.disabled || false"
104
+ class="selector-trigger"
105
+ >
106
+ <ion-icon *ngIf="props.icon" [name]="props.icon" slot="start"> </ion-icon>
107
+
108
+ <span class="trigger-text">{{ getDisplayText() }}</span>
109
+
110
+ <ion-icon name="chevron-down" slot="end" class="chevron-icon"> </ion-icon>
111
+ </ion-button>
112
+
113
+ <ion-select-option *ngFor="let option of props.options" [value]="option.value" [disabled]="option.disabled">
114
+ <div class="option-content">
115
+ <ion-icon *ngIf="option.icon" [name]="option.icon" class="option-icon"> </ion-icon>
116
+ <span>{{ option.label }}</span>
117
+ </div>
118
+ </ion-select-option>
119
+ </ion-select>
120
+ </ion-item>
121
+ `, isInline: true, styles: [".popover-selector-select{width:100%}.popover-selector-select .selector-trigger{width:100%;justify-content:space-between;text-align:left}.popover-selector-select .selector-trigger .trigger-text{flex:1;text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popover-selector-select .selector-trigger .chevron-icon{margin-left:auto;transition:transform .2s ease}.popover-selector-select .selector-trigger.select-expanded .chevron-icon{transform:rotate(180deg)}.option-content{display:flex;align-items:center;gap:8px}.option-content .option-icon{font-size:16px;width:16px;height:16px}.popover-selector-select.size-small .selector-trigger{--padding-start: 8px;--padding-end: 8px;font-size:14px}.popover-selector-select.size-large .selector-trigger{--padding-start: 16px;--padding-end: 16px;font-size:18px}ion-item[disabled]{opacity:.6;pointer-events:none}\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: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "expandedIcon", "fill", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }] }); }
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopoverSelectorComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'val-popover-selector', standalone: true, imports: [CommonModule, IonButton, IonIcon, IonSelect, IonSelectOption, IonItem, IonLabel], template: `
126
+ <ion-item [disabled]="props.disabled" lines="none">
127
+ <ion-label *ngIf="props.label" position="stacked">{{ props.label }}</ion-label>
128
+ <ion-select
129
+ [value]="props.selectedValue"
130
+ [placeholder]="props.placeholder || 'Seleccionar...'"
131
+ [interface]="props.interface || 'popover'"
132
+ [multiple]="props.multiple || false"
133
+ [disabled]="props.disabled || false"
134
+ [cancelText]="props.cancelText || 'Cancelar'"
135
+ [okText]="props.okText || 'Aceptar'"
136
+ (ionChange)="onSelectionChange($event)"
137
+ class="popover-selector-select"
138
+ >
139
+ <ion-button
140
+ slot="trigger"
141
+ [fill]="props.fill || 'outline'"
142
+ [size]="props.size || 'default'"
143
+ [shape]="props.shape"
144
+ [expand]="props.expand"
145
+ [color]="props.color || 'medium'"
146
+ [disabled]="props.disabled || false"
147
+ class="selector-trigger"
148
+ >
149
+ <ion-icon *ngIf="props.icon" [name]="props.icon" slot="start"> </ion-icon>
150
+
151
+ <span class="trigger-text">{{ getDisplayText() }}</span>
152
+
153
+ <ion-icon name="chevron-down" slot="end" class="chevron-icon"> </ion-icon>
154
+ </ion-button>
155
+
156
+ <ion-select-option *ngFor="let option of props.options" [value]="option.value" [disabled]="option.disabled">
157
+ <div class="option-content">
158
+ <ion-icon *ngIf="option.icon" [name]="option.icon" class="option-icon"> </ion-icon>
159
+ <span>{{ option.label }}</span>
160
+ </div>
161
+ </ion-select-option>
162
+ </ion-select>
163
+ </ion-item>
164
+ `, styles: [".popover-selector-select{width:100%}.popover-selector-select .selector-trigger{width:100%;justify-content:space-between;text-align:left}.popover-selector-select .selector-trigger .trigger-text{flex:1;text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popover-selector-select .selector-trigger .chevron-icon{margin-left:auto;transition:transform .2s ease}.popover-selector-select .selector-trigger.select-expanded .chevron-icon{transform:rotate(180deg)}.option-content{display:flex;align-items:center;gap:8px}.option-content .option-icon{font-size:16px;width:16px;height:16px}.popover-selector-select.size-small .selector-trigger{--padding-start: 8px;--padding-end: 8px;font-size:14px}.popover-selector-select.size-large .selector-trigger{--padding-start: 16px;--padding-end: 16px;font-size:18px}ion-item[disabled]{opacity:.6;pointer-events:none}\n"] }]
165
+ }], ctorParameters: () => [], propDecorators: { props: [{
166
+ type: Input
167
+ }], selectionChange: [{
168
+ type: Output
169
+ }] } });
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFpRDdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBZW5DO1FBUEE7OztXQUdHO1FBRUgsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUd0RCwwQkFBMEI7UUFDMUIsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLGdCQUFnQixDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzVDLHFCQUFxQjtZQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekYsT0FBTyxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQztRQUM1RCxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RixPQUFPLGNBQWMsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDM0QsQ0FBQzsrR0F0RFUsd0JBQXdCO21HQUF4Qix3QkFBd0IsNkpBekV6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNULGk3QkF4Q1MsWUFBWSxnUUFBRSxTQUFTLG9QQUFFLE9BQU8sMkpBQUUsU0FBUyx1VEFBRSxlQUFlLDZGQUFFLE9BQU8sME5BQUUsUUFBUTs7NEZBMEU5RSx3QkFBd0I7a0JBN0VwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsWUFDaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDVDt3REF3Q0QsS0FBSztzQkFESixLQUFLO2dCQVFOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25JdGVtLCBJb25MYWJlbCwgSW9uU2VsZWN0LCBJb25TZWxlY3RPcHRpb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hldnJvbkRvd24gfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtcG9wb3Zlci1zZWxlY3RvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uU2VsZWN0LCBJb25TZWxlY3RPcHRpb24sIElvbkl0ZW0sIElvbkxhYmVsXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLWl0ZW0gW2Rpc2FibGVkXT1cInByb3BzLmRpc2FibGVkXCIgbGluZXM9XCJub25lXCI+XG4gICAgICA8aW9uLWxhYmVsICpuZ0lmPVwicHJvcHMubGFiZWxcIiBwb3NpdGlvbj1cInN0YWNrZWRcIj57eyBwcm9wcy5sYWJlbCB9fTwvaW9uLWxhYmVsPlxuICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgW3ZhbHVlXT1cInByb3BzLnNlbGVjdGVkVmFsdWVcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMucGxhY2Vob2xkZXIgfHwgJ1NlbGVjY2lvbmFyLi4uJ1wiXG4gICAgICAgIFtpbnRlcmZhY2VdPVwicHJvcHMuaW50ZXJmYWNlIHx8ICdwb3BvdmVyJ1wiXG4gICAgICAgIFttdWx0aXBsZV09XCJwcm9wcy5tdWx0aXBsZSB8fCBmYWxzZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJwcm9wcy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgIFtjYW5jZWxUZXh0XT1cInByb3BzLmNhbmNlbFRleHQgfHwgJ0NhbmNlbGFyJ1wiXG4gICAgICAgIFtva1RleHRdPVwicHJvcHMub2tUZXh0IHx8ICdBY2VwdGFyJ1wiXG4gICAgICAgIChpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwicG9wb3Zlci1zZWxlY3Rvci1zZWxlY3RcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICBbZmlsbF09XCJwcm9wcy5maWxsIHx8ICdvdXRsaW5lJ1wiXG4gICAgICAgICAgW3NpemVdPVwicHJvcHMuc2l6ZSB8fCAnZGVmYXVsdCdcIlxuICAgICAgICAgIFtzaGFwZV09XCJwcm9wcy5zaGFwZVwiXG4gICAgICAgICAgW2V4cGFuZF09XCJwcm9wcy5leHBhbmRcIlxuICAgICAgICAgIFtjb2xvcl09XCJwcm9wcy5jb2xvciB8fCAnbWVkaXVtJ1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInByb3BzLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdG9yLXRyaWdnZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlvbi1pY29uICpuZ0lmPVwicHJvcHMuaWNvblwiIFtuYW1lXT1cInByb3BzLmljb25cIiBzbG90PVwic3RhcnRcIj4gPC9pb24taWNvbj5cblxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJpZ2dlci10ZXh0XCI+e3sgZ2V0RGlzcGxheVRleHQoKSB9fTwvc3Bhbj5cblxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1kb3duXCIgc2xvdD1cImVuZFwiIGNsYXNzPVwiY2hldnJvbi1pY29uXCI+IDwvaW9uLWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wcy5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cIm9wdGlvbi5pY29uXCIgW25hbWVdPVwib3B0aW9uLmljb25cIiBjbGFzcz1cIm9wdGlvbi1pY29uXCI+IDwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyBvcHRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24taXRlbT5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vcG9wb3Zlci1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLXBvcG92ZXItc2VsZWN0b3JcbiAqXG4gKiBBIGdlbmVyaWMgcmV1c2FibGUgcG9wb3ZlciBzZWxlY3RvciBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYW55IHR5cGUgb2Ygc2VsZWN0aW9uLlxuICogUHJvdmlkZXMgYSBidXR0b24gdHJpZ2dlciB0aGF0IG9wZW5zIGEgcG9wb3ZlciB3aXRoIHNlbGVjdGFibGUgb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgdXNhZ2VcbiAqIDx2YWwtcG9wb3Zlci1zZWxlY3RvclxuICogICBbcHJvcHNdPVwic2VsZWN0b3JQcm9wc1wiXG4gKiAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICogPC92YWwtcG9wb3Zlci1zZWxlY3Rvcj5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2l0aCBpY29uIGFuZCBjdXN0b20gc3R5bGluZ1xuICogY29uc3Qgc2VsZWN0b3JQcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gKiAgIG9wdGlvbnM6IFtcbiAqICAgICB7IHZhbHVlOiAnb3B0aW9uMScsIGxhYmVsOiAnT3B0aW9uIDEnLCBpY29uOiAnc3RhcicgfSxcbiAqICAgICB7IHZhbHVlOiAnb3B0aW9uMicsIGxhYmVsOiAnT3B0aW9uIDInLCBpY29uOiAnaGVhcnQnIH1cbiAqICAgXSxcbiAqICAgc2VsZWN0ZWRWYWx1ZTogJ29wdGlvbjEnLFxuICogICBsYWJlbDogJ0Nob29zZSBvcHRpb24nLFxuICogICBpY29uOiAnc2V0dGluZ3MnLFxuICogICBjb2xvcjogJ3ByaW1hcnknLFxuICogICBzaXplOiAnbGFyZ2UnLFxuICogICBmaWxsOiAnc29saWQnXG4gKiB9O1xuICpcbiAqIEBpbnB1dCBwcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0b3JcbiAqIEBvdXRwdXQgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgc3RyaW5nW10+IC0gRW1pdHRlZCB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBjbGFzcyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQge1xuICAvKipcbiAgICogUG9wb3ZlciBzZWxlY3RvciBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHR5cGUge1BvcG92ZXJTZWxlY3Rvck1ldGFkYXRhfVxuICAgKi9cbiAgQElucHV0KClcbiAgcHJvcHM6IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgdmFsdWUocykuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBzdHJpbmdbXT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWdpc3RlciByZXF1aXJlZCBpY29uc1xuICAgIGFkZEljb25zKHsgY2hldnJvbkRvd24gfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2UgZnJvbSB0aGUgaW9uLXNlbGVjdC5cbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGlvbi1zZWxlY3QgY2hhbmdlIGV2ZW50XG4gICAqL1xuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LmRldGFpbC52YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGlzcGxheSB0ZXh0IGZvciB0aGUgdHJpZ2dlciBidXR0b24uXG4gICAqIFNob3dzIHRoZSBzZWxlY3RlZCBvcHRpb24ncyBsYWJlbCBvciBwbGFjZWhvbGRlci5cbiAgICogQHJldHVybnMgVGhlIGRpc3BsYXkgdGV4dFxuICAgKi9cbiAgZ2V0RGlzcGxheVRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMucGxhY2Vob2xkZXIgfHwgJ1NlbGVjY2lvbmFyLi4uJztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnBsYWNlaG9sZGVyIHx8ICdTZWxlY2Npb25hci4uLic7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09PSB0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWVbMF0pO1xuICAgICAgICByZXR1cm4gb3B0aW9uPy5sYWJlbCB8fCB0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWVbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlLmxlbmd0aH0gc2VsZWNjaW9uYWRvc2A7XG4gICAgfVxuXG4gICAgLy8gU2luZ2xlIHNlbGVjdGlvblxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PT0gdGhpcy5wcm9wcy5zZWxlY3RlZFZhbHVlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb24/LmxhYmVsIHx8IHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9wb3BvdmVyLXNlbGVjdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuLyoqXG4gKiBPcHRpb24gZm9yIHRoZSBwb3BvdmVyIHNlbGVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvcG92ZXJPcHRpb24ge1xuICAvKiogT3B0aW9uIHZhbHVlICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBPcHRpb24gZGlzcGxheSBsYWJlbCAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogT3B0aW9uIGljb24gKG9wdGlvbmFsKSAqL1xuICBpY29uPzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdmFsLXBvcG92ZXItc2VsZWN0b3IgY29tcG9uZW50LlxuICogQSBnZW5lcmljIHJldXNhYmxlIHBvcG92ZXIgc2VsZWN0b3IgY29tcG9uZW50LlxuICpcbiAqIEBwcm9wZXJ0eSBvcHRpb25zIC0gQXJyYXkgb2Ygc2VsZWN0YWJsZSBvcHRpb25zLlxuICogQHByb3BlcnR5IHNlbGVjdGVkVmFsdWUgLSBDdXJyZW50bHkgc2VsZWN0ZWQgdmFsdWUuXG4gKiBAcHJvcGVydHkgbGFiZWwgLSBEaXNwbGF5IGxhYmVsIGZvciB0aGUgc2VsZWN0b3IuXG4gKiBAcHJvcGVydHkgaWNvbiAtIEljb24gdG8gZGlzcGxheSBpbiB0aGUgdHJpZ2dlciBidXR0b24gKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSBwbGFjZWhvbGRlciAtIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gKiBAcHJvcGVydHkgY29sb3IgLSBCdXR0b24gY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gKiBAcHJvcGVydHkgc2l6ZSAtIEJ1dHRvbiBzaXplICgnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJykuXG4gKiBAcHJvcGVydHkgZmlsbCAtIEJ1dHRvbiBmaWxsIHN0eWxlICgnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JykuXG4gKiBAcHJvcGVydHkgc2hhcGUgLSBCdXR0b24gc2hhcGUgKCdyb3VuZCcgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGV4cGFuZCAtIEJ1dHRvbiBleHBhbnNpb24gKCdmdWxsJyB8ICdibG9jaycgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGRpc2FibGVkIC0gV2hldGhlciB0aGUgc2VsZWN0b3IgaXMgZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkgaW50ZXJmYWNlIC0gUG9wb3ZlciBpbnRlcmZhY2Ugc3R5bGUgKCdwb3BvdmVyJyB8ICdhY3Rpb24tc2hlZXQnIHwgJ2FsZXJ0JykuXG4gKiBAcHJvcGVydHkgc2hvd0NoZWNrbWFyayAtIFdoZXRoZXIgdG8gc2hvdyBjaGVja21hcmtzIGZvciBzZWxlY3RlZCBvcHRpb25zLlxuICogQHByb3BlcnR5IG11bHRpcGxlIC0gV2hldGhlciBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSBjYW5jZWxUZXh0IC0gVGV4dCBmb3IgY2FuY2VsIGJ1dHRvbi5cbiAqIEBwcm9wZXJ0eSBva1RleHQgLSBUZXh0IGZvciBPSyBidXR0b24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEge1xuICAvKiogQXJyYXkgb2Ygc2VsZWN0YWJsZSBvcHRpb25zICovXG4gIG9wdGlvbnM6IFBvcG92ZXJPcHRpb25bXTtcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCB2YWx1ZShzKSAqL1xuICBzZWxlY3RlZFZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgc2VsZWN0b3IgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBJY29uIHRvIGRpc3BsYXkgaW4gdGhlIHRyaWdnZXIgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBvcHRpb24gaXMgc2VsZWN0ZWQgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBCdXR0b24gY29sb3IgKi9cbiAgY29sb3I/OiBDb2xvcjtcbiAgLyoqIEJ1dHRvbiBzaXplICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJztcbiAgLyoqIEJ1dHRvbiBmaWxsIHN0eWxlICovXG4gIGZpbGw/OiAnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JztcbiAgLyoqIEJ1dHRvbiBzaGFwZSAqL1xuICBzaGFwZT86ICdyb3VuZCc7XG4gIC8qKiBCdXR0b24gZXhwYW5zaW9uICovXG4gIGV4cGFuZD86ICdmdWxsJyB8ICdibG9jayc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3RvciBpcyBkaXNhYmxlZCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBQb3BvdmVyIGludGVyZmFjZSBzdHlsZSAqL1xuICBpbnRlcmZhY2U/OiAncG9wb3ZlcicgfCAnYWN0aW9uLXNoZWV0JyB8ICdhbGVydCc7XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgY2hlY2ttYXJrcyBmb3Igc2VsZWN0ZWQgb3B0aW9ucyAqL1xuICBzaG93Q2hlY2ttYXJrPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIGFsbG93ZWQgKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICAvKiogQ2FuY2VsIGJ1dHRvbiB0ZXh0ICovXG4gIGNhbmNlbFRleHQ/OiBzdHJpbmc7XG4gIC8qKiBPSyBidXR0b24gdGV4dCAqL1xuICBva1RleHQ/OiBzdHJpbmc7XG59XG4iXX0=