@agorapulse/ui-components 20.4.24 → 20.4.25
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/agorapulse-ui-components-20.4.25.tgz +0 -0
- package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs +46 -44
- package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs.map +1 -1
- package/filter-dropdown/index.d.ts +16 -12
- package/package.json +1 -1
- package/agorapulse-ui-components-20.4.24.tgz +0 -0
|
Binary file
|
|
@@ -14,13 +14,16 @@ import * as i1 from '@angular/forms';
|
|
|
14
14
|
import { FormsModule } from '@angular/forms';
|
|
15
15
|
import { SelectMultipleDirective, SelectSingleDirective, SelectLabelSingleComponent, SelectLabelMultipleComponent, DropdownItemMultipleTwoLinesComponent, DropdownItemMultipleOneLineComponent, DropdownItemSingleOneLineComponent, DropdownItemSingleTwoLinesComponent } from '@agorapulse/ui-components/select';
|
|
16
16
|
import { NgSelectComponent, NgOptionTemplateDirective, NgLabelTemplateDirective, NgMultiLabelTemplateDirective } from '@ng-select/ng-select';
|
|
17
|
+
import { isEqual } from 'es-toolkit';
|
|
17
18
|
import { FormFieldComponent } from '@agorapulse/ui-components/form-field';
|
|
18
19
|
import { ActionDropdownComponent } from '@agorapulse/ui-components/action-dropdown';
|
|
19
20
|
import { CounterComponent } from '@agorapulse/ui-components/counter';
|
|
20
21
|
|
|
21
22
|
class FilterState {
|
|
22
23
|
_groups = signal([], ...(ngDevMode ? [{ debugName: "_groups" }] : []));
|
|
23
|
-
|
|
24
|
+
// Deep-equal so that re-seeding with equivalent values does not notify downstream effects.
|
|
25
|
+
_draft = signal({}, ...(ngDevMode ? [{ debugName: "_draft", equal: isEqual }] : [{ equal: isEqual }]));
|
|
26
|
+
_baseline = signal({}, ...(ngDevMode ? [{ debugName: "_baseline", equal: isEqual }] : [{ equal: isEqual }]));
|
|
24
27
|
activeFilterCount = computed(() => {
|
|
25
28
|
let count = 0;
|
|
26
29
|
for (const key in this._draft()) {
|
|
@@ -60,17 +63,29 @@ class FilterState {
|
|
|
60
63
|
groups = this._groups.asReadonly();
|
|
61
64
|
draft = this._draft.asReadonly();
|
|
62
65
|
isFilterCountActive = computed(() => this.activeFilterCount() > 0, ...(ngDevMode ? [{ debugName: "isFilterCountActive" }] : []));
|
|
63
|
-
|
|
64
|
-
buttonsDisabled = computed(() => !this.
|
|
65
|
-
/**
|
|
66
|
+
hasChanges = computed(() => !isEqual(this._draft(), this._baseline()), ...(ngDevMode ? [{ debugName: "hasChanges" }] : []));
|
|
67
|
+
buttonsDisabled = computed(() => !this.hasChanges(), ...(ngDevMode ? [{ debugName: "buttonsDisabled" }] : []));
|
|
68
|
+
/** Refresh the groups schema and (re-)seed the draft + baseline from config defaults. */
|
|
66
69
|
initialize(groups) {
|
|
67
70
|
this._groups.set(groups);
|
|
68
|
-
const
|
|
71
|
+
const seeded = this.buildValues(groups);
|
|
72
|
+
// Equivalent values (e.g. the consumer re-passed what it just received): keep draft + baseline as-is.
|
|
73
|
+
if (isEqual(seeded, this._draft())) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this._draft.set(seeded);
|
|
77
|
+
this._baseline.set(seeded);
|
|
78
|
+
}
|
|
79
|
+
/** Adopt the current draft as the baseline (called on Apply / Save / Update). */
|
|
80
|
+
commit() {
|
|
81
|
+
this._baseline.set({ ...this._draft() });
|
|
82
|
+
}
|
|
83
|
+
buildValues(groups) {
|
|
84
|
+
const values = {};
|
|
69
85
|
for (const group of groups) {
|
|
70
|
-
|
|
86
|
+
values[group.key] = this.buildInitialValue(group);
|
|
71
87
|
}
|
|
72
|
-
|
|
73
|
-
this._hasChanges.set(false);
|
|
88
|
+
return values;
|
|
74
89
|
}
|
|
75
90
|
collapseHeader(key) {
|
|
76
91
|
const group = this._groups().find(g => g.key === key);
|
|
@@ -86,7 +101,6 @@ class FilterState {
|
|
|
86
101
|
/** Update a single filter's draft value */
|
|
87
102
|
updateValue(key, value) {
|
|
88
103
|
this._draft.update(draft => ({ ...draft, [key]: value }));
|
|
89
|
-
this._hasChanges.set(true);
|
|
90
104
|
}
|
|
91
105
|
/** Toggle a checkbox item in a checkbox filter */
|
|
92
106
|
toggleCheckbox(key, name, checked) {
|
|
@@ -119,10 +133,9 @@ class FilterState {
|
|
|
119
133
|
getSnapshot() {
|
|
120
134
|
return { ...this._draft() };
|
|
121
135
|
}
|
|
122
|
-
/**
|
|
136
|
+
/** Revert the draft to the committed baseline. */
|
|
123
137
|
reset() {
|
|
124
|
-
this.
|
|
125
|
-
this._hasChanges.set(false);
|
|
138
|
+
this._draft.set({ ...this._baseline() });
|
|
126
139
|
}
|
|
127
140
|
/** Clear all draft values to empty/default states */
|
|
128
141
|
clear() {
|
|
@@ -131,7 +144,6 @@ class FilterState {
|
|
|
131
144
|
cleared[group.key] = this.buildEmptyValue(group);
|
|
132
145
|
}
|
|
133
146
|
this._draft.set(cleared);
|
|
134
|
-
this._hasChanges.set(false);
|
|
135
147
|
}
|
|
136
148
|
buildInitialValue(group) {
|
|
137
149
|
switch (group.filterType) {
|
|
@@ -191,13 +203,10 @@ class FilterState {
|
|
|
191
203
|
}
|
|
192
204
|
}
|
|
193
205
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
194
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterState
|
|
206
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterState });
|
|
195
207
|
}
|
|
196
208
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterState, decorators: [{
|
|
197
|
-
type: Injectable
|
|
198
|
-
args: [{
|
|
199
|
-
providedIn: 'root',
|
|
200
|
-
}]
|
|
209
|
+
type: Injectable
|
|
201
210
|
}] });
|
|
202
211
|
|
|
203
212
|
const MULTIPLE_DISPLAY_TYPES = new Set(['tag', 'label']);
|
|
@@ -359,7 +368,10 @@ class FilterDropdownComponent {
|
|
|
359
368
|
});
|
|
360
369
|
}, ...(ngDevMode ? [{ debugName: "emitOnValueChange" }] : []));
|
|
361
370
|
filterGroupTemplate = viewChild('filterGroupTemplate', ...(ngDevMode ? [{ debugName: "filterGroupTemplate" }] : []));
|
|
362
|
-
/**
|
|
371
|
+
/**
|
|
372
|
+
* The filter groups to display, with their default/initial selection. Configuration, not a live value
|
|
373
|
+
* binding: update only on external changes — never feed the component's own output back in (apply→items→apply loop).
|
|
374
|
+
*/
|
|
363
375
|
items = input(...(ngDevMode ? [undefined, { debugName: "items" }] : []));
|
|
364
376
|
/** Whether the filter needs the apply button to be clicked for applyFilters to emit */
|
|
365
377
|
needApplyButton = input(true, ...(ngDevMode ? [{ debugName: "needApplyButton" }] : []));
|
|
@@ -451,6 +463,7 @@ class FilterDropdownComponent {
|
|
|
451
463
|
}
|
|
452
464
|
onApplyFilters() {
|
|
453
465
|
this.applyFilters.emit(this.filterState.getSnapshot());
|
|
466
|
+
this.filterState.commit();
|
|
454
467
|
}
|
|
455
468
|
onClearFilters() {
|
|
456
469
|
this.filterState.clear();
|
|
@@ -466,9 +479,11 @@ class FilterDropdownComponent {
|
|
|
466
479
|
return;
|
|
467
480
|
}
|
|
468
481
|
this.saveNewPresets.emit(this.filterState.getSnapshot());
|
|
482
|
+
this.filterState.commit();
|
|
469
483
|
}
|
|
470
484
|
onUpdatePresets() {
|
|
471
485
|
this.updatePresets.emit(this.filterState.getSnapshot());
|
|
486
|
+
this.filterState.commit();
|
|
472
487
|
}
|
|
473
488
|
onActionDropdownItemClick(item) {
|
|
474
489
|
switch (item.name) {
|
|
@@ -481,21 +496,25 @@ class FilterDropdownComponent {
|
|
|
481
496
|
}
|
|
482
497
|
}
|
|
483
498
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
484
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: FilterDropdownComponent, isStandalone: true, selector: "ap-filter-dropdown", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, needApplyButton: { classPropertyName: "needApplyButton", publicName: "needApplyButton", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, presetsFeatureLocked: { classPropertyName: "presetsFeatureLocked", publicName: "presetsFeatureLocked", isSignal: true, isRequired: false, transformFunction: null }, savePresetsMode: { classPropertyName: "savePresetsMode", publicName: "savePresetsMode", isSignal: true, isRequired: false, transformFunction: null }, editingPresetsMode: { classPropertyName: "editingPresetsMode", publicName: "editingPresetsMode", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null }, defaultPosition: { classPropertyName: "defaultPosition", publicName: "defaultPosition", isSignal: true, isRequired: false, transformFunction: null }, saveNewPresetsText: { classPropertyName: "saveNewPresetsText", publicName: "saveNewPresetsText", isSignal: true, isRequired: false, transformFunction: null }, saveAsNewPresetText: { classPropertyName: "saveAsNewPresetText", publicName: "saveAsNewPresetText", isSignal: true, isRequired: false, transformFunction: null }, savePresetText: { classPropertyName: "savePresetText", publicName: "savePresetText", isSignal: true, isRequired: false, transformFunction: null }, updateExistingPresetText: { classPropertyName: "updateExistingPresetText", publicName: "updateExistingPresetText", isSignal: true, isRequired: false, transformFunction: null }, resetFilterText: { classPropertyName: "resetFilterText", publicName: "resetFilterText", isSignal: true, isRequired: false, transformFunction: null }, applyFiltersText: { classPropertyName: "applyFiltersText", publicName: "applyFiltersText", isSignal: true, isRequired: false, transformFunction: null }, clearFilterText: { classPropertyName: "clearFilterText", publicName: "clearFilterText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed", presetsLockedClicked: "presetsLockedClicked", saveNewPresets: "saveNewPresets", updatePresets: "updatePresets", applyFilters: "applyFilters", clearFilters: "clearFilters", resetFilters: "resetFilters", lockedFeatureClicked: "lockedFeatureClicked", filterDropdownGroupLockedClicked: "filterDropdownGroupLockedClicked" }, providers: [provideUiComponentsSymbols(apReset, apChevronDown$1, apPlus, apRefresh, apFeatureLock)], viewQueries: [{ propertyName: "filterGroupTemplate", first: true, predicate: ["filterGroupTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #filterGroupTemplate>\n <div\n class=\"ap-filter-dropdown\"\n role=\"menu\"\n tabindex=\"-1\"\n aria-label=\"Filter dropdown\">\n\n <div class=\"ap-filter-dropdown__content\">\n @for (item of filterState.groups(); let last = $last; track item.key) {\n <ap-filter-leaf\n [item]=\"item\"\n [closable]=\"closable()\"\n [isLastLeaf]=\"last\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n </div>\n\n <div class=\"ap-filter-dropdown__footer\">\n @if (savePresetsMode()) {\n <div class=\"ap-filter-dropdown__footer--presets\">\n @if (!editingPresetsMode() || presetsFeatureLocked()) {\n <ap-button\n name=\"filter-dropdown-save-preset\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled() && !presetsFeatureLocked()\"\n [locked]=\"presetsFeatureLocked()\"\n (click)=\"onSavePresets()\">\n {{ saveNewPresetsText() }}\n </ap-button>\n } @else {\n <ap-button\n name=\"filter-dropdown-edit-presets\"\n symbolId=\"chevron-down\"\n symbolPosition=\"right\"\n [apDropdownTrigger]=\"updatePresetsDropdown\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n >\n {{ savePresetText() }}\n </ap-button>\n }\n\n <ap-button\n name=\"filter-dropdown-reset-filters\"\n [symbolId]=\"'reset'\"\n [symbolPosition]=\"'left'\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onResetFilters()\">\n {{ resetFilterText() }}\n </ap-button>\n </div>\n } @else {\n <div class=\"ap-filter-dropdown__footer--apply\">\n <ap-button\n name=\"filter-dropdown-clear-filters\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onClearFilters()\">\n {{ clearFilterText() }}\n </ap-button>\n\n @if (needApplyButton()) {\n <ap-button\n name=\"filter-dropdown-apply-filters\"\n [config]=\"{ color: 'blue', style: 'primary' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onApplyFilters()\">\n {{ applyFiltersText() }}\n </ap-button>\n }\n </div>\n }\n </div>\n </div>\n\n</ng-template>\n\n<ap-action-dropdown\n #updatePresetsDropdown\n [items]=\"savePresetsDropdownItems()\"\n (itemClick)=\"onActionDropdownItemClick($event)\"\n/>\n", styles: [":host{display:none}.ap-filter-dropdown{display:flex;flex-direction:column;width:420px;background-color:var(--comp-action-dropdown-background-color);border-radius:var(--comp-action-dropdown-border-radius);box-shadow:var(--comp-action-dropdown-box-shadow);outline:none;max-height:min(90vh,750px)}.ap-filter-dropdown__footer{padding:var(--ref-spacing-xxs) var(--ref-spacing-sm)}.ap-filter-dropdown__content{overflow-x:hidden;overflow-y:auto}.ap-filter-dropdown__footer{border-top:1px solid var(--comp-action-dropdown-divider-color)}.ap-filter-dropdown__footer--presets{display:flex;justify-content:space-between}.ap-filter-dropdown__footer--apply{display:flex;justify-content:flex-end;gap:var(--ref-spacing-sm)}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ap-button", inputs: ["ariaLabel", "disabled", "name", "form", "config", "loading", "locked", "menuTrigger", "symbolPosition", "symbolId"], outputs: ["menuOpened", "menuClosed", "click", "focus", "blur"] }, { kind: "component", type: FilterLeafComponent, selector: "ap-filter-leaf", inputs: ["item", "closable", "isLastLeaf"], outputs: ["lockedFeatureClicked", "filterDropdownGroupLockedClicked"] }, { kind: "directive", type: DropdownTriggerDirective, selector: "[apDropdownTrigger]", inputs: ["apDropdownTrigger"] }, { kind: "component", type: ActionDropdownComponent, selector: "ap-action-dropdown", inputs: ["items", "largeModeEnabled", "customWidth", "showBackdrop", "disabled", "defaultPosition"], outputs: ["opened", "closed", "itemClick"] }] });
|
|
499
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: FilterDropdownComponent, isStandalone: true, selector: "ap-filter-dropdown", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, needApplyButton: { classPropertyName: "needApplyButton", publicName: "needApplyButton", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, presetsFeatureLocked: { classPropertyName: "presetsFeatureLocked", publicName: "presetsFeatureLocked", isSignal: true, isRequired: false, transformFunction: null }, savePresetsMode: { classPropertyName: "savePresetsMode", publicName: "savePresetsMode", isSignal: true, isRequired: false, transformFunction: null }, editingPresetsMode: { classPropertyName: "editingPresetsMode", publicName: "editingPresetsMode", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null }, defaultPosition: { classPropertyName: "defaultPosition", publicName: "defaultPosition", isSignal: true, isRequired: false, transformFunction: null }, saveNewPresetsText: { classPropertyName: "saveNewPresetsText", publicName: "saveNewPresetsText", isSignal: true, isRequired: false, transformFunction: null }, saveAsNewPresetText: { classPropertyName: "saveAsNewPresetText", publicName: "saveAsNewPresetText", isSignal: true, isRequired: false, transformFunction: null }, savePresetText: { classPropertyName: "savePresetText", publicName: "savePresetText", isSignal: true, isRequired: false, transformFunction: null }, updateExistingPresetText: { classPropertyName: "updateExistingPresetText", publicName: "updateExistingPresetText", isSignal: true, isRequired: false, transformFunction: null }, resetFilterText: { classPropertyName: "resetFilterText", publicName: "resetFilterText", isSignal: true, isRequired: false, transformFunction: null }, applyFiltersText: { classPropertyName: "applyFiltersText", publicName: "applyFiltersText", isSignal: true, isRequired: false, transformFunction: null }, clearFilterText: { classPropertyName: "clearFilterText", publicName: "clearFilterText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed", presetsLockedClicked: "presetsLockedClicked", saveNewPresets: "saveNewPresets", updatePresets: "updatePresets", applyFilters: "applyFilters", clearFilters: "clearFilters", resetFilters: "resetFilters", lockedFeatureClicked: "lockedFeatureClicked", filterDropdownGroupLockedClicked: "filterDropdownGroupLockedClicked" }, providers: [FilterState, provideUiComponentsSymbols(apReset, apChevronDown$1, apPlus, apRefresh, apFeatureLock)], viewQueries: [{ propertyName: "filterGroupTemplate", first: true, predicate: ["filterGroupTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #filterGroupTemplate>\n <div\n class=\"ap-filter-dropdown\"\n role=\"menu\"\n tabindex=\"-1\"\n aria-label=\"Filter dropdown\">\n\n <div class=\"ap-filter-dropdown__content\">\n @for (item of filterState.groups(); let last = $last; track item.key) {\n <ap-filter-leaf\n [item]=\"item\"\n [closable]=\"closable()\"\n [isLastLeaf]=\"last\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n </div>\n\n <div class=\"ap-filter-dropdown__footer\">\n @if (savePresetsMode()) {\n <div class=\"ap-filter-dropdown__footer--presets\">\n @if (!editingPresetsMode() || presetsFeatureLocked()) {\n <ap-button\n name=\"filter-dropdown-save-preset\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled() && !presetsFeatureLocked()\"\n [locked]=\"presetsFeatureLocked()\"\n (click)=\"onSavePresets()\">\n {{ saveNewPresetsText() }}\n </ap-button>\n } @else {\n <ap-button\n name=\"filter-dropdown-edit-presets\"\n symbolId=\"chevron-down\"\n symbolPosition=\"right\"\n [apDropdownTrigger]=\"updatePresetsDropdown\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n >\n {{ savePresetText() }}\n </ap-button>\n }\n\n <ap-button\n name=\"filter-dropdown-reset-filters\"\n [symbolId]=\"'reset'\"\n [symbolPosition]=\"'left'\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onResetFilters()\">\n {{ resetFilterText() }}\n </ap-button>\n </div>\n } @else {\n <div class=\"ap-filter-dropdown__footer--apply\">\n <ap-button\n name=\"filter-dropdown-clear-filters\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onClearFilters()\">\n {{ clearFilterText() }}\n </ap-button>\n\n @if (needApplyButton()) {\n <ap-button\n name=\"filter-dropdown-apply-filters\"\n [config]=\"{ color: 'blue', style: 'primary' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onApplyFilters()\">\n {{ applyFiltersText() }}\n </ap-button>\n }\n </div>\n }\n </div>\n </div>\n\n</ng-template>\n\n<ap-action-dropdown\n #updatePresetsDropdown\n [items]=\"savePresetsDropdownItems()\"\n (itemClick)=\"onActionDropdownItemClick($event)\"\n/>\n", styles: [":host{display:none}.ap-filter-dropdown{display:flex;flex-direction:column;width:420px;background-color:var(--comp-action-dropdown-background-color);border-radius:var(--comp-action-dropdown-border-radius);box-shadow:var(--comp-action-dropdown-box-shadow);outline:none;max-height:min(90vh,750px)}.ap-filter-dropdown__footer{padding:var(--ref-spacing-xxs) var(--ref-spacing-sm)}.ap-filter-dropdown__content{overflow-x:hidden;overflow-y:auto}.ap-filter-dropdown__footer{border-top:1px solid var(--comp-action-dropdown-divider-color)}.ap-filter-dropdown__footer--presets{display:flex;justify-content:space-between}.ap-filter-dropdown__footer--apply{display:flex;justify-content:flex-end;gap:var(--ref-spacing-sm)}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ap-button", inputs: ["ariaLabel", "disabled", "name", "form", "config", "loading", "locked", "menuTrigger", "symbolPosition", "symbolId"], outputs: ["menuOpened", "menuClosed", "click", "focus", "blur"] }, { kind: "component", type: FilterLeafComponent, selector: "ap-filter-leaf", inputs: ["item", "closable", "isLastLeaf"], outputs: ["lockedFeatureClicked", "filterDropdownGroupLockedClicked"] }, { kind: "directive", type: DropdownTriggerDirective, selector: "[apDropdownTrigger]", inputs: ["apDropdownTrigger"] }, { kind: "component", type: ActionDropdownComponent, selector: "ap-action-dropdown", inputs: ["items", "largeModeEnabled", "customWidth", "showBackdrop", "disabled", "defaultPosition"], outputs: ["opened", "closed", "itemClick"] }] });
|
|
485
500
|
}
|
|
486
501
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterDropdownComponent, decorators: [{
|
|
487
502
|
type: Component,
|
|
488
|
-
args: [{ selector: 'ap-filter-dropdown', imports: [ButtonComponent, FilterLeafComponent, DropdownTriggerDirective, ActionDropdownComponent], providers: [provideUiComponentsSymbols(apReset, apChevronDown$1, apPlus, apRefresh, apFeatureLock)], template: "<ng-template #filterGroupTemplate>\n <div\n class=\"ap-filter-dropdown\"\n role=\"menu\"\n tabindex=\"-1\"\n aria-label=\"Filter dropdown\">\n\n <div class=\"ap-filter-dropdown__content\">\n @for (item of filterState.groups(); let last = $last; track item.key) {\n <ap-filter-leaf\n [item]=\"item\"\n [closable]=\"closable()\"\n [isLastLeaf]=\"last\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n </div>\n\n <div class=\"ap-filter-dropdown__footer\">\n @if (savePresetsMode()) {\n <div class=\"ap-filter-dropdown__footer--presets\">\n @if (!editingPresetsMode() || presetsFeatureLocked()) {\n <ap-button\n name=\"filter-dropdown-save-preset\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled() && !presetsFeatureLocked()\"\n [locked]=\"presetsFeatureLocked()\"\n (click)=\"onSavePresets()\">\n {{ saveNewPresetsText() }}\n </ap-button>\n } @else {\n <ap-button\n name=\"filter-dropdown-edit-presets\"\n symbolId=\"chevron-down\"\n symbolPosition=\"right\"\n [apDropdownTrigger]=\"updatePresetsDropdown\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n >\n {{ savePresetText() }}\n </ap-button>\n }\n\n <ap-button\n name=\"filter-dropdown-reset-filters\"\n [symbolId]=\"'reset'\"\n [symbolPosition]=\"'left'\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onResetFilters()\">\n {{ resetFilterText() }}\n </ap-button>\n </div>\n } @else {\n <div class=\"ap-filter-dropdown__footer--apply\">\n <ap-button\n name=\"filter-dropdown-clear-filters\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onClearFilters()\">\n {{ clearFilterText() }}\n </ap-button>\n\n @if (needApplyButton()) {\n <ap-button\n name=\"filter-dropdown-apply-filters\"\n [config]=\"{ color: 'blue', style: 'primary' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onApplyFilters()\">\n {{ applyFiltersText() }}\n </ap-button>\n }\n </div>\n }\n </div>\n </div>\n\n</ng-template>\n\n<ap-action-dropdown\n #updatePresetsDropdown\n [items]=\"savePresetsDropdownItems()\"\n (itemClick)=\"onActionDropdownItemClick($event)\"\n/>\n", styles: [":host{display:none}.ap-filter-dropdown{display:flex;flex-direction:column;width:420px;background-color:var(--comp-action-dropdown-background-color);border-radius:var(--comp-action-dropdown-border-radius);box-shadow:var(--comp-action-dropdown-box-shadow);outline:none;max-height:min(90vh,750px)}.ap-filter-dropdown__footer{padding:var(--ref-spacing-xxs) var(--ref-spacing-sm)}.ap-filter-dropdown__content{overflow-x:hidden;overflow-y:auto}.ap-filter-dropdown__footer{border-top:1px solid var(--comp-action-dropdown-divider-color)}.ap-filter-dropdown__footer--presets{display:flex;justify-content:space-between}.ap-filter-dropdown__footer--apply{display:flex;justify-content:flex-end;gap:var(--ref-spacing-sm)}\n"] }]
|
|
503
|
+
args: [{ selector: 'ap-filter-dropdown', imports: [ButtonComponent, FilterLeafComponent, DropdownTriggerDirective, ActionDropdownComponent], providers: [FilterState, provideUiComponentsSymbols(apReset, apChevronDown$1, apPlus, apRefresh, apFeatureLock)], template: "<ng-template #filterGroupTemplate>\n <div\n class=\"ap-filter-dropdown\"\n role=\"menu\"\n tabindex=\"-1\"\n aria-label=\"Filter dropdown\">\n\n <div class=\"ap-filter-dropdown__content\">\n @for (item of filterState.groups(); let last = $last; track item.key) {\n <ap-filter-leaf\n [item]=\"item\"\n [closable]=\"closable()\"\n [isLastLeaf]=\"last\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n </div>\n\n <div class=\"ap-filter-dropdown__footer\">\n @if (savePresetsMode()) {\n <div class=\"ap-filter-dropdown__footer--presets\">\n @if (!editingPresetsMode() || presetsFeatureLocked()) {\n <ap-button\n name=\"filter-dropdown-save-preset\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled() && !presetsFeatureLocked()\"\n [locked]=\"presetsFeatureLocked()\"\n (click)=\"onSavePresets()\">\n {{ saveNewPresetsText() }}\n </ap-button>\n } @else {\n <ap-button\n name=\"filter-dropdown-edit-presets\"\n symbolId=\"chevron-down\"\n symbolPosition=\"right\"\n [apDropdownTrigger]=\"updatePresetsDropdown\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n >\n {{ savePresetText() }}\n </ap-button>\n }\n\n <ap-button\n name=\"filter-dropdown-reset-filters\"\n [symbolId]=\"'reset'\"\n [symbolPosition]=\"'left'\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onResetFilters()\">\n {{ resetFilterText() }}\n </ap-button>\n </div>\n } @else {\n <div class=\"ap-filter-dropdown__footer--apply\">\n <ap-button\n name=\"filter-dropdown-clear-filters\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onClearFilters()\">\n {{ clearFilterText() }}\n </ap-button>\n\n @if (needApplyButton()) {\n <ap-button\n name=\"filter-dropdown-apply-filters\"\n [config]=\"{ color: 'blue', style: 'primary' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onApplyFilters()\">\n {{ applyFiltersText() }}\n </ap-button>\n }\n </div>\n }\n </div>\n </div>\n\n</ng-template>\n\n<ap-action-dropdown\n #updatePresetsDropdown\n [items]=\"savePresetsDropdownItems()\"\n (itemClick)=\"onActionDropdownItemClick($event)\"\n/>\n", styles: [":host{display:none}.ap-filter-dropdown{display:flex;flex-direction:column;width:420px;background-color:var(--comp-action-dropdown-background-color);border-radius:var(--comp-action-dropdown-border-radius);box-shadow:var(--comp-action-dropdown-box-shadow);outline:none;max-height:min(90vh,750px)}.ap-filter-dropdown__footer{padding:var(--ref-spacing-xxs) var(--ref-spacing-sm)}.ap-filter-dropdown__content{overflow-x:hidden;overflow-y:auto}.ap-filter-dropdown__footer{border-top:1px solid var(--comp-action-dropdown-divider-color)}.ap-filter-dropdown__footer--presets{display:flex;justify-content:space-between}.ap-filter-dropdown__footer--apply{display:flex;justify-content:flex-end;gap:var(--ref-spacing-sm)}\n"] }]
|
|
489
504
|
}], propDecorators: { filterGroupTemplate: [{ type: i0.ViewChild, args: ['filterGroupTemplate', { isSignal: true }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], needApplyButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "needApplyButton", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], presetsFeatureLocked: [{ type: i0.Input, args: [{ isSignal: true, alias: "presetsFeatureLocked", required: false }] }], savePresetsMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "savePresetsMode", required: false }] }], editingPresetsMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "editingPresetsMode", required: false }] }], showBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBackdrop", required: false }] }], defaultPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPosition", required: false }] }], saveNewPresetsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveNewPresetsText", required: false }] }], saveAsNewPresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveAsNewPresetText", required: false }] }], savePresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "savePresetText", required: false }] }], updateExistingPresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "updateExistingPresetText", required: false }] }], resetFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetFilterText", required: false }] }], applyFiltersText: [{ type: i0.Input, args: [{ isSignal: true, alias: "applyFiltersText", required: false }] }], clearFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearFilterText", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], presetsLockedClicked: [{ type: i0.Output, args: ["presetsLockedClicked"] }], saveNewPresets: [{ type: i0.Output, args: ["saveNewPresets"] }], updatePresets: [{ type: i0.Output, args: ["updatePresets"] }], applyFilters: [{ type: i0.Output, args: ["applyFilters"] }], clearFilters: [{ type: i0.Output, args: ["clearFilters"] }], resetFilters: [{ type: i0.Output, args: ["resetFilters"] }], lockedFeatureClicked: [{ type: i0.Output, args: ["lockedFeatureClicked"] }], filterDropdownGroupLockedClicked: [{ type: i0.Output, args: ["filterDropdownGroupLockedClicked"] }] } });
|
|
490
505
|
|
|
491
506
|
class FilterDropdownButtonComponent {
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
507
|
+
// FilterState is provided by the inner FilterDropdownComponent, so read the counter through it.
|
|
508
|
+
filterDropdown = viewChild(FilterDropdownComponent, ...(ngDevMode ? [{ debugName: "filterDropdown" }] : []));
|
|
509
|
+
isFilterCountActive = computed(() => this.filterDropdown()?.filterState.isFilterCountActive() ?? false, ...(ngDevMode ? [{ debugName: "isFilterCountActive" }] : []));
|
|
510
|
+
activeFilterCount = computed(() => this.filterDropdown()?.filterState.activeFilterCount() ?? 0, ...(ngDevMode ? [{ debugName: "activeFilterCount" }] : []));
|
|
495
511
|
/** text of the button, input specific to the button */
|
|
496
512
|
buttonFilterText = input('Filters', ...(ngDevMode ? [{ debugName: "buttonFilterText" }] : []));
|
|
497
513
|
/** input specific to the filter-dropdown */
|
|
498
|
-
/**
|
|
514
|
+
/**
|
|
515
|
+
* The filter groups to display, with their default/initial selection. Configuration, not a live value
|
|
516
|
+
* binding: update only on external changes — never feed the component's own output back in (apply→items→apply loop).
|
|
517
|
+
*/
|
|
499
518
|
items = input(...(ngDevMode ? [undefined, { debugName: "items" }] : []));
|
|
500
519
|
/** Whether the filter needs the apply button to be clicked for applyFilters to emit */
|
|
501
520
|
needApplyButton = input(true, ...(ngDevMode ? [{ debugName: "needApplyButton" }] : []));
|
|
@@ -540,30 +559,13 @@ class FilterDropdownButtonComponent {
|
|
|
540
559
|
lockedFeatureClicked = output();
|
|
541
560
|
/** Event emitted when a group with locked feature is clicked */
|
|
542
561
|
filterDropdownGroupLockedClicked = output();
|
|
543
|
-
onApplyFilters() {
|
|
544
|
-
this.applyFilters.emit(this.filterState.getSnapshot());
|
|
545
|
-
}
|
|
546
|
-
onClearFilters() {
|
|
547
|
-
this.filterState.clear();
|
|
548
|
-
this.clearFilters.emit();
|
|
549
|
-
}
|
|
550
|
-
onResetFilters() {
|
|
551
|
-
this.filterState.reset();
|
|
552
|
-
this.resetFilters.emit();
|
|
553
|
-
}
|
|
554
|
-
onSavePresets() {
|
|
555
|
-
this.saveNewPresets.emit(this.filterState.getSnapshot());
|
|
556
|
-
}
|
|
557
|
-
onUpdatePresets() {
|
|
558
|
-
this.updatePresets.emit(this.filterState.getSnapshot());
|
|
559
|
-
}
|
|
560
562
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterDropdownButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
561
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: FilterDropdownButtonComponent, isStandalone: true, selector: "ap-filter-dropdown-button", inputs: { buttonFilterText: { classPropertyName: "buttonFilterText", publicName: "buttonFilterText", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, needApplyButton: { classPropertyName: "needApplyButton", publicName: "needApplyButton", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, presetsFeatureLocked: { classPropertyName: "presetsFeatureLocked", publicName: "presetsFeatureLocked", isSignal: true, isRequired: false, transformFunction: null }, savePresetsMode: { classPropertyName: "savePresetsMode", publicName: "savePresetsMode", isSignal: true, isRequired: false, transformFunction: null }, editingPresetsMode: { classPropertyName: "editingPresetsMode", publicName: "editingPresetsMode", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, defaultPosition: { classPropertyName: "defaultPosition", publicName: "defaultPosition", isSignal: true, isRequired: false, transformFunction: null }, saveNewPresetsText: { classPropertyName: "saveNewPresetsText", publicName: "saveNewPresetsText", isSignal: true, isRequired: false, transformFunction: null }, saveAsNewPresetText: { classPropertyName: "saveAsNewPresetText", publicName: "saveAsNewPresetText", isSignal: true, isRequired: false, transformFunction: null }, savePresetText: { classPropertyName: "savePresetText", publicName: "savePresetText", isSignal: true, isRequired: false, transformFunction: null }, updateExistingPresetText: { classPropertyName: "updateExistingPresetText", publicName: "updateExistingPresetText", isSignal: true, isRequired: false, transformFunction: null }, resetFilterText: { classPropertyName: "resetFilterText", publicName: "resetFilterText", isSignal: true, isRequired: false, transformFunction: null }, applyFiltersText: { classPropertyName: "applyFiltersText", publicName: "applyFiltersText", isSignal: true, isRequired: false, transformFunction: null }, clearFilterText: { classPropertyName: "clearFilterText", publicName: "clearFilterText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed", presetsLockedClicked: "presetsLockedClicked", saveNewPresets: "saveNewPresets", updatePresets: "updatePresets", applyFilters: "applyFilters", clearFilters: "clearFilters", resetFilters: "resetFilters", lockedFeatureClicked: "lockedFeatureClicked", filterDropdownGroupLockedClicked: "filterDropdownGroupLockedClicked" }, providers: [withSymbols(apFilter, apFilterFill)], ngImport: i0, template: "<ap-button\n [apDropdownTrigger]=\"filterDropdown\"\n [config]=\"{ style: 'stroked', color: isFilterCountActive() ? 'blue' : 'grey' }\"\n ariaLabel=\"Button toggling filters\"\n name=\"toggle-filter\"\n symbolPosition=\"left\">\n <ap-symbol [symbolId]=\"isFilterCountActive() ? 'filter_fill' : 'filter'\" />\n @if (isFilterCountActive()) {\n <ap-counter\n size=\"big\"\n color=\"blue\"\n [background]=\"true\">\n {{ activeFilterCount() }}\n </ap-counter>\n }\n {{ buttonFilterText() }}\n</ap-button>\n\n<ap-filter-dropdown\n #filterDropdown\n [presetsFeatureLocked]=\"presetsFeatureLocked()\"\n [applyFiltersText]=\"applyFiltersText()\"\n [clearFilterText]=\"clearFilterText()\"\n [closable]=\"closable()\"\n [defaultPosition]=\"defaultPosition()\"\n [editingPresetsMode]=\"editingPresetsMode()\"\n [items]=\"items()\"\n [needApplyButton]=\"needApplyButton()\"\n [resetFilterText]=\"resetFilterText()\"\n [saveAsNewPresetText]=\"saveAsNewPresetText()\"\n [saveNewPresetsText]=\"saveNewPresetsText()\"\n [savePresetText]=\"savePresetText()\"\n [savePresetsMode]=\"savePresetsMode()\"\n [showBackdrop]=\"showBackdrop()\"\n (applyFilters)=\"applyFilters.emit($event)\"\n (clearFilters)=\"clearFilters.emit()\"\n (closed)=\"closed.emit()\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\"\n (opened)=\"opened.emit()\"\n (presetsLockedClicked)=\"presetsLockedClicked.emit()\"\n (resetFilters)=\"resetFilters.emit()\"\n (saveNewPresets)=\"saveNewPresets.emit($event)\"\n (updatePresets)=\"updatePresets.emit($event)\"\n [updateExistingPresetText]=\"updateExistingPresetText()\" />\n", dependencies: [{ kind: "component", type: ButtonComponent, selector: "ap-button", inputs: ["ariaLabel", "disabled", "name", "form", "config", "loading", "locked", "menuTrigger", "symbolPosition", "symbolId"], outputs: ["menuOpened", "menuClosed", "click", "focus", "blur"] }, { kind: "directive", type: DropdownTriggerDirective, selector: "[apDropdownTrigger]", inputs: ["apDropdownTrigger"] }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "component", type: FilterDropdownComponent, selector: "ap-filter-dropdown", inputs: ["items", "needApplyButton", "closable", "presetsFeatureLocked", "savePresetsMode", "editingPresetsMode", "showBackdrop", "defaultPosition", "saveNewPresetsText", "saveAsNewPresetText", "savePresetText", "updateExistingPresetText", "resetFilterText", "applyFiltersText", "clearFilterText"], outputs: ["opened", "closed", "presetsLockedClicked", "saveNewPresets", "updatePresets", "applyFilters", "clearFilters", "resetFilters", "lockedFeatureClicked", "filterDropdownGroupLockedClicked"] }, { kind: "component", type: CounterComponent, selector: "ap-counter", inputs: ["color", "size", "notif", "background", "role"] }] });
|
|
563
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: FilterDropdownButtonComponent, isStandalone: true, selector: "ap-filter-dropdown-button", inputs: { buttonFilterText: { classPropertyName: "buttonFilterText", publicName: "buttonFilterText", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, needApplyButton: { classPropertyName: "needApplyButton", publicName: "needApplyButton", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, presetsFeatureLocked: { classPropertyName: "presetsFeatureLocked", publicName: "presetsFeatureLocked", isSignal: true, isRequired: false, transformFunction: null }, savePresetsMode: { classPropertyName: "savePresetsMode", publicName: "savePresetsMode", isSignal: true, isRequired: false, transformFunction: null }, editingPresetsMode: { classPropertyName: "editingPresetsMode", publicName: "editingPresetsMode", isSignal: true, isRequired: false, transformFunction: null }, showBackdrop: { classPropertyName: "showBackdrop", publicName: "showBackdrop", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, defaultPosition: { classPropertyName: "defaultPosition", publicName: "defaultPosition", isSignal: true, isRequired: false, transformFunction: null }, saveNewPresetsText: { classPropertyName: "saveNewPresetsText", publicName: "saveNewPresetsText", isSignal: true, isRequired: false, transformFunction: null }, saveAsNewPresetText: { classPropertyName: "saveAsNewPresetText", publicName: "saveAsNewPresetText", isSignal: true, isRequired: false, transformFunction: null }, savePresetText: { classPropertyName: "savePresetText", publicName: "savePresetText", isSignal: true, isRequired: false, transformFunction: null }, updateExistingPresetText: { classPropertyName: "updateExistingPresetText", publicName: "updateExistingPresetText", isSignal: true, isRequired: false, transformFunction: null }, resetFilterText: { classPropertyName: "resetFilterText", publicName: "resetFilterText", isSignal: true, isRequired: false, transformFunction: null }, applyFiltersText: { classPropertyName: "applyFiltersText", publicName: "applyFiltersText", isSignal: true, isRequired: false, transformFunction: null }, clearFilterText: { classPropertyName: "clearFilterText", publicName: "clearFilterText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed", presetsLockedClicked: "presetsLockedClicked", saveNewPresets: "saveNewPresets", updatePresets: "updatePresets", applyFilters: "applyFilters", clearFilters: "clearFilters", resetFilters: "resetFilters", lockedFeatureClicked: "lockedFeatureClicked", filterDropdownGroupLockedClicked: "filterDropdownGroupLockedClicked" }, providers: [withSymbols(apFilter, apFilterFill)], viewQueries: [{ propertyName: "filterDropdown", first: true, predicate: FilterDropdownComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ap-button\n [apDropdownTrigger]=\"filterDropdown\"\n [config]=\"{ style: 'stroked', color: isFilterCountActive() ? 'blue' : 'grey' }\"\n ariaLabel=\"Button toggling filters\"\n name=\"toggle-filter\"\n symbolPosition=\"left\">\n <ap-symbol [symbolId]=\"isFilterCountActive() ? 'filter_fill' : 'filter'\" />\n @if (isFilterCountActive()) {\n <ap-counter\n size=\"big\"\n color=\"blue\"\n [background]=\"true\">\n {{ activeFilterCount() }}\n </ap-counter>\n }\n {{ buttonFilterText() }}\n</ap-button>\n\n<ap-filter-dropdown\n #filterDropdown\n [presetsFeatureLocked]=\"presetsFeatureLocked()\"\n [applyFiltersText]=\"applyFiltersText()\"\n [clearFilterText]=\"clearFilterText()\"\n [closable]=\"closable()\"\n [defaultPosition]=\"defaultPosition()\"\n [editingPresetsMode]=\"editingPresetsMode()\"\n [items]=\"items()\"\n [needApplyButton]=\"needApplyButton()\"\n [resetFilterText]=\"resetFilterText()\"\n [saveAsNewPresetText]=\"saveAsNewPresetText()\"\n [saveNewPresetsText]=\"saveNewPresetsText()\"\n [savePresetText]=\"savePresetText()\"\n [savePresetsMode]=\"savePresetsMode()\"\n [showBackdrop]=\"showBackdrop()\"\n (applyFilters)=\"applyFilters.emit($event)\"\n (clearFilters)=\"clearFilters.emit()\"\n (closed)=\"closed.emit()\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\"\n (opened)=\"opened.emit()\"\n (presetsLockedClicked)=\"presetsLockedClicked.emit()\"\n (resetFilters)=\"resetFilters.emit()\"\n (saveNewPresets)=\"saveNewPresets.emit($event)\"\n (updatePresets)=\"updatePresets.emit($event)\"\n [updateExistingPresetText]=\"updateExistingPresetText()\" />\n", dependencies: [{ kind: "component", type: ButtonComponent, selector: "ap-button", inputs: ["ariaLabel", "disabled", "name", "form", "config", "loading", "locked", "menuTrigger", "symbolPosition", "symbolId"], outputs: ["menuOpened", "menuClosed", "click", "focus", "blur"] }, { kind: "directive", type: DropdownTriggerDirective, selector: "[apDropdownTrigger]", inputs: ["apDropdownTrigger"] }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "component", type: FilterDropdownComponent, selector: "ap-filter-dropdown", inputs: ["items", "needApplyButton", "closable", "presetsFeatureLocked", "savePresetsMode", "editingPresetsMode", "showBackdrop", "defaultPosition", "saveNewPresetsText", "saveAsNewPresetText", "savePresetText", "updateExistingPresetText", "resetFilterText", "applyFiltersText", "clearFilterText"], outputs: ["opened", "closed", "presetsLockedClicked", "saveNewPresets", "updatePresets", "applyFilters", "clearFilters", "resetFilters", "lockedFeatureClicked", "filterDropdownGroupLockedClicked"] }, { kind: "component", type: CounterComponent, selector: "ap-counter", inputs: ["color", "size", "notif", "background", "role"] }] });
|
|
562
564
|
}
|
|
563
565
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: FilterDropdownButtonComponent, decorators: [{
|
|
564
566
|
type: Component,
|
|
565
567
|
args: [{ selector: 'ap-filter-dropdown-button', imports: [ButtonComponent, DropdownTriggerDirective, SymbolComponent, FilterDropdownComponent, CounterComponent], providers: [withSymbols(apFilter, apFilterFill)], template: "<ap-button\n [apDropdownTrigger]=\"filterDropdown\"\n [config]=\"{ style: 'stroked', color: isFilterCountActive() ? 'blue' : 'grey' }\"\n ariaLabel=\"Button toggling filters\"\n name=\"toggle-filter\"\n symbolPosition=\"left\">\n <ap-symbol [symbolId]=\"isFilterCountActive() ? 'filter_fill' : 'filter'\" />\n @if (isFilterCountActive()) {\n <ap-counter\n size=\"big\"\n color=\"blue\"\n [background]=\"true\">\n {{ activeFilterCount() }}\n </ap-counter>\n }\n {{ buttonFilterText() }}\n</ap-button>\n\n<ap-filter-dropdown\n #filterDropdown\n [presetsFeatureLocked]=\"presetsFeatureLocked()\"\n [applyFiltersText]=\"applyFiltersText()\"\n [clearFilterText]=\"clearFilterText()\"\n [closable]=\"closable()\"\n [defaultPosition]=\"defaultPosition()\"\n [editingPresetsMode]=\"editingPresetsMode()\"\n [items]=\"items()\"\n [needApplyButton]=\"needApplyButton()\"\n [resetFilterText]=\"resetFilterText()\"\n [saveAsNewPresetText]=\"saveAsNewPresetText()\"\n [saveNewPresetsText]=\"saveNewPresetsText()\"\n [savePresetText]=\"savePresetText()\"\n [savePresetsMode]=\"savePresetsMode()\"\n [showBackdrop]=\"showBackdrop()\"\n (applyFilters)=\"applyFilters.emit($event)\"\n (clearFilters)=\"clearFilters.emit()\"\n (closed)=\"closed.emit()\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\"\n (opened)=\"opened.emit()\"\n (presetsLockedClicked)=\"presetsLockedClicked.emit()\"\n (resetFilters)=\"resetFilters.emit()\"\n (saveNewPresets)=\"saveNewPresets.emit($event)\"\n (updatePresets)=\"updatePresets.emit($event)\"\n [updateExistingPresetText]=\"updateExistingPresetText()\" />\n" }]
|
|
566
|
-
}], propDecorators: { buttonFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonFilterText", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], needApplyButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "needApplyButton", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], presetsFeatureLocked: [{ type: i0.Input, args: [{ isSignal: true, alias: "presetsFeatureLocked", required: false }] }], savePresetsMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "savePresetsMode", required: false }] }], editingPresetsMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "editingPresetsMode", required: false }] }], showBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBackdrop", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], defaultPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPosition", required: false }] }], saveNewPresetsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveNewPresetsText", required: false }] }], saveAsNewPresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveAsNewPresetText", required: false }] }], savePresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "savePresetText", required: false }] }], updateExistingPresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "updateExistingPresetText", required: false }] }], resetFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetFilterText", required: false }] }], applyFiltersText: [{ type: i0.Input, args: [{ isSignal: true, alias: "applyFiltersText", required: false }] }], clearFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearFilterText", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], presetsLockedClicked: [{ type: i0.Output, args: ["presetsLockedClicked"] }], saveNewPresets: [{ type: i0.Output, args: ["saveNewPresets"] }], updatePresets: [{ type: i0.Output, args: ["updatePresets"] }], applyFilters: [{ type: i0.Output, args: ["applyFilters"] }], clearFilters: [{ type: i0.Output, args: ["clearFilters"] }], resetFilters: [{ type: i0.Output, args: ["resetFilters"] }], lockedFeatureClicked: [{ type: i0.Output, args: ["lockedFeatureClicked"] }], filterDropdownGroupLockedClicked: [{ type: i0.Output, args: ["filterDropdownGroupLockedClicked"] }] } });
|
|
568
|
+
}], propDecorators: { filterDropdown: [{ type: i0.ViewChild, args: [i0.forwardRef(() => FilterDropdownComponent), { isSignal: true }] }], buttonFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonFilterText", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], needApplyButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "needApplyButton", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], presetsFeatureLocked: [{ type: i0.Input, args: [{ isSignal: true, alias: "presetsFeatureLocked", required: false }] }], savePresetsMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "savePresetsMode", required: false }] }], editingPresetsMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "editingPresetsMode", required: false }] }], showBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBackdrop", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], defaultPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPosition", required: false }] }], saveNewPresetsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveNewPresetsText", required: false }] }], saveAsNewPresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveAsNewPresetText", required: false }] }], savePresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "savePresetText", required: false }] }], updateExistingPresetText: [{ type: i0.Input, args: [{ isSignal: true, alias: "updateExistingPresetText", required: false }] }], resetFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetFilterText", required: false }] }], applyFiltersText: [{ type: i0.Input, args: [{ isSignal: true, alias: "applyFiltersText", required: false }] }], clearFilterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearFilterText", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], presetsLockedClicked: [{ type: i0.Output, args: ["presetsLockedClicked"] }], saveNewPresets: [{ type: i0.Output, args: ["saveNewPresets"] }], updatePresets: [{ type: i0.Output, args: ["updatePresets"] }], applyFilters: [{ type: i0.Output, args: ["applyFilters"] }], clearFilters: [{ type: i0.Output, args: ["clearFilters"] }], resetFilters: [{ type: i0.Output, args: ["resetFilters"] }], lockedFeatureClicked: [{ type: i0.Output, args: ["lockedFeatureClicked"] }], filterDropdownGroupLockedClicked: [{ type: i0.Output, args: ["filterDropdownGroupLockedClicked"] }] } });
|
|
567
569
|
|
|
568
570
|
/**
|
|
569
571
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agorapulse-ui-components-filter-dropdown.mjs","sources":["../../../libs/ui-components/filter-dropdown/src/filter.state.ts","../../../libs/ui-components/filter-dropdown/src/filter-leaf-select/filter-leaf-select.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-leaf-select/filter-leaf-select.component.html","../../../libs/ui-components/filter-dropdown/src/filter-leaf/filter-leaf.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-leaf/filter-leaf.component.html","../../../libs/ui-components/filter-dropdown/src/filter-dropdown/filter-dropdown.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-dropdown/filter-dropdown.component.html","../../../libs/ui-components/filter-dropdown/src/filter-dropdown-button/filter-dropdown-button.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-dropdown-button/filter-dropdown-button.component.html","../../../libs/ui-components/filter-dropdown/src/agorapulse-ui-components-filter-dropdown.ts"],"sourcesContent":["import type { Period } from '@agorapulse/ui-components/datepicker';\nimport { computed, Injectable, signal } from '@angular/core';\nimport type {\n FilterDropdownGroup,\n FilterDropdownOutput,\n FilterDropdownValue,\n FilterDropdownValueCheckbox,\n FilterDropdownValueDateRange,\n FilterDropdownValueMultipleSelect,\n FilterDropdownValueRadio,\n FilterDropdownValueSingleSelect,\n FilterDropdownValueToggle,\n} from './filter.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FilterState {\n private readonly _groups = signal<FilterDropdownGroup[]>([]);\n private readonly _draft = signal<FilterDropdownOutput>({});\n activeFilterCount = computed(() => {\n let count = 0;\n for (const key in this._draft()) {\n const value = this._draft()[key];\n if (!value) continue;\n switch (value.filterType) {\n case 'checkbox':\n if (value.selected.length > 0) {\n count += 1;\n }\n break;\n case 'radio':\n if (value.selected) count += 1;\n break;\n case 'toggle':\n if (value.checked) count += 1;\n break;\n case 'select':\n if (value.selectionType === 'single' && value.selected) {\n count += 1;\n } else if (value.selectionType === 'multiple') {\n count += value.selected.length > 0 ? 1 : 0;\n }\n break;\n case 'date-range':\n if (value.selectedPeriod) count += 1;\n break;\n }\n }\n return count;\n });\n\n readonly groups = this._groups.asReadonly();\n readonly draft = this._draft.asReadonly();\n isFilterCountActive = computed(() => this.activeFilterCount() > 0);\n private readonly _hasChanges = signal(false);\n readonly buttonsDisabled = computed(() => !this._hasChanges());\n\n /** Initialize groups and seed draft from config defaults */\n initialize(groups: FilterDropdownGroup[]): void {\n this._groups.set(groups);\n const initial: FilterDropdownOutput = {};\n for (const group of groups) {\n initial[group.key] = this.buildInitialValue(group);\n }\n this._draft.set(initial);\n this._hasChanges.set(false);\n }\n\n collapseHeader(key: string): void {\n const group = this._groups().find(g => g.key === key);\n if (group) {\n group.expanded = !group.expanded;\n this._groups.update(gs => [...gs]);\n }\n }\n\n /** Get the draft value for a specific filter key */\n getValue(key: string): FilterDropdownValue | undefined {\n return this._draft()[key];\n }\n\n /** Update a single filter's draft value */\n updateValue(key: string, value: FilterDropdownValue): void {\n this._draft.update(draft => ({ ...draft, [key]: value }));\n this._hasChanges.set(true);\n }\n\n /** Toggle a checkbox item in a checkbox filter */\n toggleCheckbox(key: string, name: string, checked: boolean): void {\n const current = this._draft()[key];\n if (current?.filterType !== 'checkbox') return;\n\n const selected = checked ? [...current.selected, name] : current.selected.filter(n => n !== name);\n\n this.updateValue(key, { filterType: 'checkbox', selected });\n }\n\n /** Set the selected radio value */\n setRadioValue(key: string, value: unknown): void {\n this.updateValue(key, { filterType: 'radio', selected: value });\n }\n\n /** Set the toggle checked state */\n setToggleValue(key: string, checked: boolean): void {\n this.updateValue(key, { filterType: 'toggle', checked });\n }\n\n /** Set selected indices for a select filter */\n setSingleSelectValue(key: string, selected: unknown): void {\n this.updateValue(key, { filterType: 'select', selectionType: 'single', selected });\n }\n\n setMultipleSelectValue(key: string, selected: unknown[]): void {\n this.updateValue(key, { filterType: 'select', selectionType: 'multiple', selected });\n }\n\n /** Set the selected period for a date range filter */\n setDateRangeValue(key: string, selectedPeriod: Period): void {\n this.updateValue(key, { filterType: 'date-range', selectedPeriod });\n }\n\n /** Return the current draft snapshot (used on Apply) */\n getSnapshot(): FilterDropdownOutput {\n return { ...this._draft() };\n }\n\n /** Reset draft to initial values from the current config */\n reset(): void {\n this.initialize(this._groups());\n this._hasChanges.set(false);\n }\n\n /** Clear all draft values to empty/default states */\n clear(): void {\n const cleared: FilterDropdownOutput = {};\n for (const group of this._groups()) {\n cleared[group.key] = this.buildEmptyValue(group);\n }\n this._draft.set(cleared);\n this._hasChanges.set(false);\n }\n\n private buildInitialValue(group: FilterDropdownGroup): FilterDropdownValue {\n switch (group.filterType) {\n case 'checkbox':\n return {\n filterType: 'checkbox',\n selected: group.defaultSelected ?? [],\n } satisfies FilterDropdownValueCheckbox;\n case 'radio':\n const firstItem = group.items[0].value;\n return {\n filterType: 'radio',\n selected: group.defaultSelected ?? firstItem,\n } satisfies FilterDropdownValueRadio;\n case 'toggle':\n return {\n filterType: 'toggle',\n checked: group.defaultSelected ?? false,\n } satisfies FilterDropdownValueToggle;\n case 'select':\n if (group.selectionType === 'single') {\n return {\n filterType: 'select',\n selectionType: 'single',\n selected: group.defaultSelected ? group.defaultSelected : undefined,\n } satisfies FilterDropdownValueSingleSelect;\n } else {\n return {\n filterType: 'select',\n selectionType: 'multiple',\n selected: group.defaultSelected ?? [],\n } satisfies FilterDropdownValueMultipleSelect;\n }\n case 'date-range':\n return {\n filterType: 'date-range',\n selectedPeriod: group.selectedPeriod,\n } satisfies FilterDropdownValueDateRange;\n }\n }\n\n private buildEmptyValue(group: FilterDropdownGroup): FilterDropdownValue {\n switch (group.filterType) {\n case 'checkbox':\n return { filterType: 'checkbox', selected: [] };\n case 'radio':\n return { filterType: 'radio', selected: null };\n case 'toggle':\n return { filterType: 'toggle', checked: false };\n case 'select':\n if (group.selectionType === 'single') {\n return { filterType: 'select', selectionType: 'single', selected: undefined };\n }\n return { filterType: 'select', selectionType: 'multiple', selected: [] };\n case 'date-range':\n return { filterType: 'date-range', selectedPeriod: undefined };\n }\n }\n}\n","import {\n DropdownItemMultipleOneLineComponent,\n DropdownItemMultipleTwoLinesComponent,\n DropdownItemSingleOneLineComponent,\n DropdownItemSingleTwoLinesComponent,\n SelectLabelMultipleComponent,\n SelectLabelMultipleDisplayType,\n SelectLabelSingleComponent,\n SelectMultipleDirective,\n SelectSingleDirective,\n} from '@agorapulse/ui-components/select';\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n NgLabelTemplateDirective,\n NgMultiLabelTemplateDirective,\n NgOptionTemplateDirective,\n NgSelectComponent,\n} from '@ng-select/ng-select';\nimport { FilterDropdownGroupSelectSingle, FilterDropdownGroupSelectMultiple, FilterDropdownItemSelect } from '../filter.model';\nimport { FilterState } from '../filter.state';\nimport { FormFieldComponent } from '@agorapulse/ui-components/form-field';\n\nconst MULTIPLE_DISPLAY_TYPES = new Set<string>(['tag', 'label']);\n\n@Component({\n selector: 'ap-filter-leaf-select',\n templateUrl: './filter-leaf-select.component.html',\n imports: [\n FormsModule,\n NgSelectComponent,\n SelectMultipleDirective,\n SelectSingleDirective,\n SelectLabelSingleComponent,\n SelectLabelMultipleComponent,\n NgOptionTemplateDirective,\n DropdownItemMultipleTwoLinesComponent,\n DropdownItemMultipleOneLineComponent,\n DropdownItemSingleOneLineComponent,\n DropdownItemSingleTwoLinesComponent,\n NgLabelTemplateDirective,\n NgMultiLabelTemplateDirective,\n FormFieldComponent,\n ],\n})\nexport class FilterLeafSelectComponent {\n readonly filterState = inject(FilterState);\n\n item = input.required<FilterDropdownGroupSelectSingle | FilterDropdownGroupSelectMultiple>();\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n\n multipleDisplayType = computed<SelectLabelMultipleDisplayType>(() => {\n const dt = this.item().displayType;\n return MULTIPLE_DISPLAY_TYPES.has(dt) ? (dt as SelectLabelMultipleDisplayType) : 'label';\n });\n\n singleSelectValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'select' && value.selectionType === 'single' ? value.selected : undefined;\n });\n\n multipleSelectValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'select' && value?.selectionType === 'multiple' ? value.selected : [];\n });\n}\n","@let selectItem = item();\n<div class=\"ap-filter-leaf__option\">\n <ap-form-field>\n @if (selectItem.label) {\n <label for=\"select-{{ selectItem.key }}\">\n {{ selectItem.label }}\n </label>\n }\n @if (selectItem.selectionType === 'single') {\n <ng-select\n id=\"select-{{ selectItem.key }}\"\n apSelectSingle\n bindLabel=\"label\"\n bindValue=\"value\"\n [disabled]=\"!!selectItem.featureLocked\"\n [items]=\"selectItem.items\"\n [placeholder]=\"selectItem.placeholder ?? 'Select an option'\"\n [inlineLabel]=\"selectItem.inlineLabel\"\n [ngModel]=\"singleSelectValue()\"\n (ngModelChange)=\"filterState.setSingleSelectValue(selectItem.key, $event)\"\n >\n <ng-template\n let-item=\"item\"\n ng-label-tmp>\n <ap-select-label-single\n [displayType]=\"selectItem.displayType\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [label]=\"item.label\" />\n </ng-template>\n\n <ng-template\n let-item=\"item\"\n let-item$=\"item$\"\n ng-option-tmp>\n @if (item.caption) {\n <ap-dropdown-item-single-two-lines\n [caption]=\"item$.caption\"\n [selected]=\"item$.selected\"\n [text]=\"item$.label\"\n [avatarUrl]=\"item$.avatarUrl\"\n [network]=\"item$.network\"\n [symbolId]=\"item$.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n } @else {\n <ap-dropdown-item-single-one-line\n [selected]=\"item$.selected\"\n [text]=\"item.label\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [symbolId]=\"item.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n }\n\n </ng-template>\n\n </ng-select>\n } @else {\n <ng-select\n id=\"select-{{ selectItem.key }}\"\n apSelectMultiple\n bindLabel=\"label\"\n bindValue=\"value\"\n [items]=\"selectItem.items\"\n [placeholder]=\"selectItem.placeholder ?? 'Select an option'\"\n [inlineLabel]=\"selectItem.inlineLabel\"\n [ngModel]=\"multipleSelectValue()\"\n (ngModelChange)=\"filterState.setMultipleSelectValue(selectItem.key, $event)\">\n <ng-template\n let-items=\"items\"\n let-clear=\"clear\"\n ng-multi-label-tmp>\n <ap-select-label-multiple\n bindValue=\"value\"\n bindLabel=\"label\"\n [displayType]=\"multipleDisplayType()\"\n [selectedItems]=\"items\"\n (removeItem)=\"clear($event)\"\n />\n </ng-template>\n\n <ng-template\n let-item=\"item\"\n let-item$=\"item$\"\n ng-option-tmp>\n @if (item.caption) {\n <ap-dropdown-item-multiple-two-lines\n [selected]=\"item$.selected\"\n [onlyText]=\"selectItem.onlyText ?? 'Only'\"\n [caption]=\"item.caption\"\n [text]=\"item.label\"\n [htmlId]=\"item$.htmlId\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [symbolId]=\"item.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n } @else {\n <ap-dropdown-item-multiple-one-line\n [onlyText]=\"selectItem.onlyText ?? 'Only'\"\n [selected]=\"item$.selected\"\n [htmlId]=\"item$.htmlId\"\n [text]=\"item.label\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [symbolId]=\"item.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n }\n </ng-template>\n </ng-select>\n }\n </ap-form-field>\n</div>\n","import { CheckboxComponent } from '@agorapulse/ui-components/checkbox';\nimport { DatepickerMode, InputDatepickerComponent, Period } from '@agorapulse/ui-components/datepicker';\nimport { provideUiComponentsSymbols } from '@agorapulse/ui-components/providers';\nimport { RadioComponent } from '@agorapulse/ui-components/radio';\nimport { ToggleComponent } from '@agorapulse/ui-components/toggle';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apFeatureLock, apInfo, SymbolComponent } from '@agorapulse/ui-symbol';\nimport { apChevronDown } from '@agorapulse/ui-symbol/icons';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FilterLeafSelectComponent } from '../filter-leaf-select/filter-leaf-select.component';\nimport { FilterDropdownGroup, FilterDropdownItemSelect } from '../filter.model';\nimport { FilterState } from '../filter.state';\n\n@Component({\n selector: 'ap-filter-leaf',\n templateUrl: './filter-leaf.component.html',\n styleUrl: './filter-leaf.component.scss',\n imports: [\n TooltipDirective,\n SymbolComponent,\n CheckboxComponent,\n RadioComponent,\n ToggleComponent,\n FormsModule,\n FilterLeafSelectComponent,\n InputDatepickerComponent,\n SymbolComponent,\n SymbolComponent,\n ],\n providers: [provideUiComponentsSymbols(apChevronDown, apInfo, apFeatureLock)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterLeafComponent {\n protected readonly DatepickerMode = DatepickerMode;\n\n public readonly filterState = inject(FilterState);\n\n /** item propagated from FilterDropdownComponent */\n item = input.required<FilterDropdownGroup>();\n /** whether the leaf is closable */\n closable = input(true);\n\n isLastLeaf = input(false);\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n\n /** Event emitted when a group with locked feature is clicked */\n filterDropdownGroupLockedClicked = output<FilterDropdownGroup>();\n\n displayLabelInLeaf = computed(() => {\n const item = this.item();\n return item.filterType === 'checkbox' || item.filterType === 'radio' || item.filterType === 'toggle';\n });\n\n checkboxItem = computed(() => {\n const item = this.item();\n return item.filterType === 'checkbox' ? item : undefined;\n });\n\n radioItem = computed(() => {\n const item = this.item();\n return item.filterType === 'radio' ? item : undefined;\n });\n\n toggleItem = computed(() => {\n const item = this.item();\n return item.filterType === 'toggle' ? item : undefined;\n });\n\n selectItem = computed(() => {\n const item = this.item();\n return item.filterType === 'select' ? item : undefined;\n });\n\n dateRangeItem = computed(() => {\n const item = this.item();\n return item.filterType === 'date-range' ? item : undefined;\n });\n\n radioValue = computed<unknown | null>(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'radio' ? value.selected : null;\n });\n\n checkboxValue = computed<Record<string, boolean>>(() => {\n const checkboxItem = this.checkboxItem();\n const checkboxValueByKey: Record<string, boolean> = {};\n checkboxItem?.items.forEach(item => (checkboxValueByKey[item.name] = false));\n\n const value = this.filterState.getValue(this.item().key);\n if (value && value.filterType === 'checkbox') {\n value.selected.forEach(item => (checkboxValueByKey[item] = true));\n }\n return checkboxValueByKey;\n });\n\n toggleValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'toggle' ? value.checked : false;\n });\n\n dateRangeValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'date-range' ? value.selectedPeriod : { startDate: undefined, endDate: undefined };\n });\n\n onHeaderClick(): void {\n if (this.closable() || !this.item().featureLocked) {\n this.filterState.collapseHeader(this.item().key);\n }\n if (this.item().featureLocked) {\n this.filterDropdownGroupLockedClicked.emit(this.item());\n }\n }\n\n onCheckboxChange(name: string, checked: boolean): void {\n this.filterState.toggleCheckbox(this.item().key, name, checked);\n }\n\n onRadioClick(value: unknown): void {\n this.filterState.setRadioValue(this.item().key, value);\n }\n\n onToggleChange(checked: boolean): void {\n this.filterState.setToggleValue(this.item().key, checked);\n }\n\n onDateRangeChange(dateRange: Period): void {\n this.filterState.setDateRangeValue(this.item().key, dateRange);\n }\n}\n","<div [class.with-border-bottom]=\"!isLastLeaf()\" class=\"ap-filter-leaf\">\n\n <div\n (click)=\"onHeaderClick()\"\n (keyup.enter)=\"onHeaderClick()\"\n [class.ap-filter-leaf__closable]=\"closable() || item().featureLocked\"\n [class.ap-filter-leaf__expanded]=\"(!closable() || item().expanded) && (!item().featureLocked || !closable())\"\n class=\"ap-filter-leaf__header\" tabindex=\"0\">\n <div class=\"ap-filter-leaf__title\">\n <span>{{ item().title }}</span>\n @if (item().tooltipText) {\n <ap-symbol color=\"light-grey\" symbolId=\"info\" size=\"sm\" [apTooltip]=\"item().tooltipText\" />\n }\n </div>\n @if (item().featureLocked) {\n <div class=\"ap-filter-leaf__actions\">\n <ap-symbol color=\"purple\" symbolId=\"feature-lock\" size=\"sm\"\n [apTooltip]=\"item().featureLockTooltipText\" />\n </div>\n } @else if (closable()) {\n <div class=\"ap-filter-leaf__actions\" [class.ap-filter-leaf__chevron--rotated]=\"!item().expanded\">\n <ap-symbol symbolId=\"chevron-up\" size=\"sm\" />\n </div>\n }\n </div>\n\n @if ((!closable() || item().expanded) && (!item().featureLocked || !closable())) {\n <div class=\"ap-filter-leaf__content\">\n @if (item().label && displayLabelInLeaf()) {\n <span class=\"ap-filter-leaf__label\">{{ item().label }}</span>\n }\n @switch (item().filterType) {\n @case ('checkbox') {\n @if (checkboxItem(); as vCheckboxItem) {\n @for (option of vCheckboxItem.items; track option.name) {\n <div class=\"ap-filter-leaf__option\">\n <ap-checkbox\n [name]=\"'checkbox-' + option.name\"\n [checked]=\"checkboxValue()[option.name]\"\n [disabled]=\"!!option.disabled || item().featureLocked\"\n (change)=\"onCheckboxChange(option.name, $event)\"\n >\n <span>{{ option.label }}</span>\n </ap-checkbox>\n </div>\n }\n }\n }\n @case ('radio') {\n @if (radioItem(); as vRadioItem) {\n @for (option of vRadioItem.items; track option.radioId) {\n <div class=\"ap-filter-leaf__option\">\n <ap-radio\n [radioId]=\"option.radioId\"\n [value]=\"option.value\"\n [disabled]=\"!!option.disabled || !!item().featureLocked\"\n [name]=\"item().key\"\n [ngModel]=\"radioValue()\"\n (ngModelChange)=\"onRadioClick($event)\"\n >\n <span>{{ option.label }}</span>\n </ap-radio>\n </div>\n }\n }\n }\n @case ('toggle') {\n @if (toggleItem(); as vToggleItem) {\n <div class=\"ap-filter-leaf__option\">\n <ap-toggle\n [name]=\"'toggle-' + vToggleItem.item.name\"\n [checked]=\"toggleValue()\"\n [disabled]=\"vToggleItem.item.disabled || item().featureLocked\"\n (change)=\"onToggleChange($event)\"\n />\n <span class=\"toggle\"\n [class.disabled]=\"vToggleItem.item.disabled || item().featureLocked\">{{ vToggleItem.item.label }}</span>\n </div>\n }\n }\n @case ('select') {\n @if (selectItem(); as vSelectItem) {\n <ap-filter-leaf-select [item]=\"vSelectItem\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n }\n @case ('date-range') {\n @if (dateRangeItem(); as vDateRangeItem) {\n <ap-input-datepicker\n [disabled]=\"!!item().featureLocked\"\n [label]=\"vDateRangeItem.label\"\n [mode]=\"DatepickerMode.Range\"\n [placeholder]=\"vDateRangeItem.placeholder ?? 'Select date range'\"\n [minDate]=\"vDateRangeItem.minDate\"\n [maxDate]=\"vDateRangeItem.maxDate\"\n [dateFormat]=\"vDateRangeItem.dateFormat ?? 'MMMM DD, YYYY'\"\n [selectedPeriod]=\"dateRangeValue()\"\n (periodChanged)=\"onDateRangeChange($event)\"\n />\n }\n }\n }\n </div>\n }\n\n</div>\n","import { ButtonComponent } from '@agorapulse/ui-components/button';\nimport { createDropdownOverlay, DropdownOverlay, DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { FilterLeafComponent } from '../filter-leaf/filter-leaf.component';\nimport { provideUiComponentsSymbols } from '@agorapulse/ui-components/providers';\nimport { apChevronDown, apFeatureLock, apPlus, apRefresh, apReset } from '@agorapulse/ui-symbol';\nimport { Component, computed, effect, inject, input, output, TemplateRef, untracked, viewChild } from '@angular/core';\nimport { FilterDropdownGroup, FilterDropdownItemSelect, FilterDropdownOutput } from '../filter.model';\nimport { FilterState } from '../filter.state';\nimport { ActionDropdownComponent, ActionDropdownItem } from '@agorapulse/ui-components/action-dropdown';\n\n@Component({\n selector: 'ap-filter-dropdown',\n templateUrl: './filter-dropdown.component.html',\n styleUrl: './filter-dropdown.component.scss',\n imports: [ButtonComponent, FilterLeafComponent, DropdownTriggerDirective, ActionDropdownComponent],\n providers: [provideUiComponentsSymbols(apReset, apChevronDown, apPlus, apRefresh, apFeatureLock)],\n})\nexport class FilterDropdownComponent implements DropdownOverlay {\n private readonly overlay = createDropdownOverlay();\n readonly filterState = inject(FilterState);\n\n initGroups = effect(() => {\n const groups = this.items();\n untracked(() => {\n if (groups) {\n this.filterState.initialize(groups);\n }\n });\n });\n\n emitOnValueChange = effect(() => {\n this.filterState.draft(); // track changes to draft\n const needApply = this.needApplyButton();\n untracked(() => {\n if (!needApply) {\n this.applyFilters.emit(this.filterState.getSnapshot());\n }\n });\n });\n\n filterGroupTemplate = viewChild<TemplateRef<unknown>>('filterGroupTemplate');\n\n /** The filter groups to display in the dropdown */\n items = input<FilterDropdownGroup[]>();\n /** Whether the filter needs the apply button to be clicked for applyFilters to emit */\n needApplyButton = input(true);\n /** Whether the filter group can be closed (collapsed) by the user. If false, the group will always be expanded and the user won't see a toggle button. */\n closable = input(true);\n /** whether the feature to save presets is locked for the org */\n presetsFeatureLocked = input(false);\n /** whether the mode is in preset mode */\n savePresetsMode = input(false);\n /** whether the user is currently editing presets. Only necessary if savePresetsMode is at true */\n editingPresetsMode = input(false);\n\n /** Whether to show a backdrop that closes the dropdown when clicked */\n showBackdrop = input(true);\n /** Default position for the dropdown relative to the trigger element */\n defaultPosition = input<'right' | 'left'>('right');\n\n saveNewPresetsText = input('Save new presets');\n saveAsNewPresetText = input('Save as new preset');\n savePresetText = input('Save preset');\n updateExistingPresetText = input('Update existing preset');\n resetFilterText = input('Reset filters');\n\n applyFiltersText = input('Apply filters');\n clearFilterText = input('Clear filters');\n\n /** Emits when the dropdown menu is opened */\n opened = output<void>();\n /** Emits when the dropdown menu is closed */\n closed = output<void>();\n\n /** Emits when save presets is clicked but is feature locked */\n presetsLockedClicked = output<void>();\n /** Emits when save presets is clicked */\n saveNewPresets = output<FilterDropdownOutput>();\n /** Emits when save presets is clicked */\n updatePresets = output<FilterDropdownOutput>();\n /** Emits when filters are applied */\n applyFilters = output<FilterDropdownOutput>();\n /** Emits when user clicks on clear filter */\n clearFilters = output<void>();\n /** Emits when user clicks on reset filter */\n resetFilters = output<void>();\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n /** Event emitted when a group with locked feature is clicked */\n filterDropdownGroupLockedClicked = output<FilterDropdownGroup>();\n\n readonly isOpen = this.overlay.isOpen;\n\n savePresetsDropdownItems = computed<ActionDropdownItem[]>(() => {\n if (!this.savePresetsMode() || !this.editingPresetsMode()) return [];\n return [\n {\n name: 'saveAsNewPresets',\n startSymbolId: 'plus',\n label: this.saveAsNewPresetText(),\n dataTrack: 'save-new-preset',\n },\n {\n name: 'updatePresets',\n startSymbolId: 'refresh',\n label: this.updateExistingPresetText(),\n dataTrack: 'update-existing-preset',\n },\n ];\n });\n\n /** Opens the dropdown menu at the specified trigger element */\n open(triggerElement?: HTMLElement): void {\n const template = this.filterGroupTemplate();\n if (this.isOpen() || !template) return;\n\n this.overlay.open(template, triggerElement, {\n showBackdrop: this.showBackdrop(),\n defaultPosition: this.defaultPosition(),\n onClose: () => this.close(),\n });\n this.opened.emit();\n }\n\n /** Closes the dropdown menu and cleans up overlay resources */\n close(): void {\n if (!this.isOpen()) return;\n this.overlay.close();\n this.closed.emit();\n }\n\n /** Toggles the dropdown menu open or closed state */\n toggle(triggerElement?: HTMLElement): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open(triggerElement);\n }\n }\n\n onApplyFilters(): void {\n this.applyFilters.emit(this.filterState.getSnapshot());\n }\n\n onClearFilters(): void {\n this.filterState.clear();\n this.clearFilters.emit();\n }\n\n onResetFilters(): void {\n this.filterState.reset();\n this.resetFilters.emit();\n }\n\n onSavePresets(): void {\n if (this.presetsFeatureLocked()) {\n this.presetsLockedClicked.emit();\n return;\n }\n this.saveNewPresets.emit(this.filterState.getSnapshot());\n }\n\n onUpdatePresets(): void {\n this.updatePresets.emit(this.filterState.getSnapshot());\n }\n\n protected onActionDropdownItemClick(item: ActionDropdownItem): void {\n switch (item.name) {\n case 'saveAsNewPresets':\n this.onSavePresets();\n break;\n case 'updatePresets':\n this.onUpdatePresets();\n break;\n }\n }\n}\n","<ng-template #filterGroupTemplate>\n <div\n class=\"ap-filter-dropdown\"\n role=\"menu\"\n tabindex=\"-1\"\n aria-label=\"Filter dropdown\">\n\n <div class=\"ap-filter-dropdown__content\">\n @for (item of filterState.groups(); let last = $last; track item.key) {\n <ap-filter-leaf\n [item]=\"item\"\n [closable]=\"closable()\"\n [isLastLeaf]=\"last\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n </div>\n\n <div class=\"ap-filter-dropdown__footer\">\n @if (savePresetsMode()) {\n <div class=\"ap-filter-dropdown__footer--presets\">\n @if (!editingPresetsMode() || presetsFeatureLocked()) {\n <ap-button\n name=\"filter-dropdown-save-preset\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled() && !presetsFeatureLocked()\"\n [locked]=\"presetsFeatureLocked()\"\n (click)=\"onSavePresets()\">\n {{ saveNewPresetsText() }}\n </ap-button>\n } @else {\n <ap-button\n name=\"filter-dropdown-edit-presets\"\n symbolId=\"chevron-down\"\n symbolPosition=\"right\"\n [apDropdownTrigger]=\"updatePresetsDropdown\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n >\n {{ savePresetText() }}\n </ap-button>\n }\n\n <ap-button\n name=\"filter-dropdown-reset-filters\"\n [symbolId]=\"'reset'\"\n [symbolPosition]=\"'left'\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onResetFilters()\">\n {{ resetFilterText() }}\n </ap-button>\n </div>\n } @else {\n <div class=\"ap-filter-dropdown__footer--apply\">\n <ap-button\n name=\"filter-dropdown-clear-filters\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onClearFilters()\">\n {{ clearFilterText() }}\n </ap-button>\n\n @if (needApplyButton()) {\n <ap-button\n name=\"filter-dropdown-apply-filters\"\n [config]=\"{ color: 'blue', style: 'primary' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onApplyFilters()\">\n {{ applyFiltersText() }}\n </ap-button>\n }\n </div>\n }\n </div>\n </div>\n\n</ng-template>\n\n<ap-action-dropdown\n #updatePresetsDropdown\n [items]=\"savePresetsDropdownItems()\"\n (itemClick)=\"onActionDropdownItemClick($event)\"\n/>\n","import { ButtonComponent } from '@agorapulse/ui-components/button';\nimport { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { apFilter, apFilterFill, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { Component, inject, input, output } from '@angular/core';\nimport { FilterDropdownComponent } from '../filter-dropdown/filter-dropdown.component';\nimport { FilterDropdownGroup, FilterDropdownItemSelect, FilterDropdownOutput } from '../filter.model';\nimport { FilterState } from '../filter.state';\n\n@Component({\n selector: 'ap-filter-dropdown-button',\n templateUrl: './filter-dropdown-button.component.html',\n imports: [ButtonComponent, DropdownTriggerDirective, SymbolComponent, FilterDropdownComponent, CounterComponent],\n providers: [withSymbols(apFilter, apFilterFill)],\n})\nexport class FilterDropdownButtonComponent {\n readonly filterState = inject(FilterState);\n isFilterCountActive = this.filterState.isFilterCountActive;\n activeFilterCount = this.filterState.activeFilterCount;\n\n /** text of the button, input specific to the button */\n buttonFilterText = input('Filters');\n\n /** input specific to the filter-dropdown */\n /** The filter groups to display in the dropdown */\n items = input<FilterDropdownGroup[]>();\n /** Whether the filter needs the apply button to be clicked for applyFilters to emit */\n needApplyButton = input(true);\n /** Whether the filter group can be closed (collapsed) by the user. If false, the group will always be expanded and the user won't see a toggle button. */\n closable = input(true);\n /** whether the feature to save presets is locked for the org */\n presetsFeatureLocked = input(false);\n /** whether the mode is in preset mode */\n savePresetsMode = input(false);\n /** whether the user is currently editing presets. Only necessary if savePresetsMode is at true */\n editingPresetsMode = input(false);\n\n /** Whether to show a backdrop that closes the dropdown when clicked */\n showBackdrop = input(true);\n /** Whether the dropdown is disabled and cannot be opened */\n disabled = input(false);\n /** Default position for the dropdown relative to the trigger element */\n defaultPosition = input<'right' | 'left'>('right');\n\n saveNewPresetsText = input('Save new presets');\n saveAsNewPresetText = input('Save as new preset');\n savePresetText = input('Save preset');\n updateExistingPresetText = input('Update existing preset');\n resetFilterText = input('Reset filters');\n\n applyFiltersText = input('Apply filters');\n clearFilterText = input('Clear filters');\n\n /** Emits when the dropdown menu is opened */\n opened = output<void>();\n /** Emits when the dropdown menu is closed */\n closed = output<void>();\n\n /** Emits when save presets is clicked but is feature locked */\n presetsLockedClicked = output<void>();\n /** Emits when save presets is clicked */\n saveNewPresets = output<FilterDropdownOutput>();\n /** Emits when save presets is clicked */\n updatePresets = output<FilterDropdownOutput>();\n /** Emits when filters are applied */\n applyFilters = output<FilterDropdownOutput>();\n /** Emits when user clicks on clear filter */\n clearFilters = output<void>();\n /** Emits when user clicks on reset filter */\n resetFilters = output<void>();\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n /** Event emitted when a group with locked feature is clicked */\n filterDropdownGroupLockedClicked = output<FilterDropdownGroup>();\n\n onApplyFilters(): void {\n this.applyFilters.emit(this.filterState.getSnapshot());\n }\n\n onClearFilters(): void {\n this.filterState.clear();\n this.clearFilters.emit();\n }\n\n onResetFilters(): void {\n this.filterState.reset();\n this.resetFilters.emit();\n }\n\n onSavePresets(): void {\n this.saveNewPresets.emit(this.filterState.getSnapshot());\n }\n\n onUpdatePresets(): void {\n this.updatePresets.emit(this.filterState.getSnapshot());\n }\n}\n","<ap-button\n [apDropdownTrigger]=\"filterDropdown\"\n [config]=\"{ style: 'stroked', color: isFilterCountActive() ? 'blue' : 'grey' }\"\n ariaLabel=\"Button toggling filters\"\n name=\"toggle-filter\"\n symbolPosition=\"left\">\n <ap-symbol [symbolId]=\"isFilterCountActive() ? 'filter_fill' : 'filter'\" />\n @if (isFilterCountActive()) {\n <ap-counter\n size=\"big\"\n color=\"blue\"\n [background]=\"true\">\n {{ activeFilterCount() }}\n </ap-counter>\n }\n {{ buttonFilterText() }}\n</ap-button>\n\n<ap-filter-dropdown\n #filterDropdown\n [presetsFeatureLocked]=\"presetsFeatureLocked()\"\n [applyFiltersText]=\"applyFiltersText()\"\n [clearFilterText]=\"clearFilterText()\"\n [closable]=\"closable()\"\n [defaultPosition]=\"defaultPosition()\"\n [editingPresetsMode]=\"editingPresetsMode()\"\n [items]=\"items()\"\n [needApplyButton]=\"needApplyButton()\"\n [resetFilterText]=\"resetFilterText()\"\n [saveAsNewPresetText]=\"saveAsNewPresetText()\"\n [saveNewPresetsText]=\"saveNewPresetsText()\"\n [savePresetText]=\"savePresetText()\"\n [savePresetsMode]=\"savePresetsMode()\"\n [showBackdrop]=\"showBackdrop()\"\n (applyFilters)=\"applyFilters.emit($event)\"\n (clearFilters)=\"clearFilters.emit()\"\n (closed)=\"closed.emit()\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\"\n (opened)=\"opened.emit()\"\n (presetsLockedClicked)=\"presetsLockedClicked.emit()\"\n (resetFilters)=\"resetFilters.emit()\"\n (saveNewPresets)=\"saveNewPresets.emit($event)\"\n (updatePresets)=\"updatePresets.emit($event)\"\n [updateExistingPresetText]=\"updateExistingPresetText()\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["apChevronDown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agorapulse-ui-components-filter-dropdown.mjs","sources":["../../../libs/ui-components/filter-dropdown/src/filter.state.ts","../../../libs/ui-components/filter-dropdown/src/filter-leaf-select/filter-leaf-select.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-leaf-select/filter-leaf-select.component.html","../../../libs/ui-components/filter-dropdown/src/filter-leaf/filter-leaf.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-leaf/filter-leaf.component.html","../../../libs/ui-components/filter-dropdown/src/filter-dropdown/filter-dropdown.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-dropdown/filter-dropdown.component.html","../../../libs/ui-components/filter-dropdown/src/filter-dropdown-button/filter-dropdown-button.component.ts","../../../libs/ui-components/filter-dropdown/src/filter-dropdown-button/filter-dropdown-button.component.html","../../../libs/ui-components/filter-dropdown/src/agorapulse-ui-components-filter-dropdown.ts"],"sourcesContent":["import type { Period } from '@agorapulse/ui-components/datepicker';\nimport { computed, Injectable, signal } from '@angular/core';\nimport { isEqual } from 'es-toolkit';\nimport type {\n FilterDropdownGroup,\n FilterDropdownOutput,\n FilterDropdownValue,\n FilterDropdownValueCheckbox,\n FilterDropdownValueDateRange,\n FilterDropdownValueMultipleSelect,\n FilterDropdownValueRadio,\n FilterDropdownValueSingleSelect,\n FilterDropdownValueToggle,\n} from './filter.model';\n\n@Injectable()\nexport class FilterState {\n private readonly _groups = signal<FilterDropdownGroup[]>([]);\n // Deep-equal so that re-seeding with equivalent values does not notify downstream effects.\n private readonly _draft = signal<FilterDropdownOutput>({}, { equal: isEqual });\n private readonly _baseline = signal<FilterDropdownOutput>({}, { equal: isEqual });\n activeFilterCount = computed(() => {\n let count = 0;\n for (const key in this._draft()) {\n const value = this._draft()[key];\n if (!value) continue;\n switch (value.filterType) {\n case 'checkbox':\n if (value.selected.length > 0) {\n count += 1;\n }\n break;\n case 'radio':\n if (value.selected) count += 1;\n break;\n case 'toggle':\n if (value.checked) count += 1;\n break;\n case 'select':\n if (value.selectionType === 'single' && value.selected) {\n count += 1;\n } else if (value.selectionType === 'multiple') {\n count += value.selected.length > 0 ? 1 : 0;\n }\n break;\n case 'date-range':\n if (value.selectedPeriod) count += 1;\n break;\n }\n }\n return count;\n });\n\n readonly groups = this._groups.asReadonly();\n readonly draft = this._draft.asReadonly();\n isFilterCountActive = computed(() => this.activeFilterCount() > 0);\n readonly hasChanges = computed(() => !isEqual(this._draft(), this._baseline()));\n readonly buttonsDisabled = computed(() => !this.hasChanges());\n\n /** Refresh the groups schema and (re-)seed the draft + baseline from config defaults. */\n initialize(groups: FilterDropdownGroup[]): void {\n this._groups.set(groups);\n const seeded = this.buildValues(groups);\n // Equivalent values (e.g. the consumer re-passed what it just received): keep draft + baseline as-is.\n if (isEqual(seeded, this._draft())) {\n return;\n }\n this._draft.set(seeded);\n this._baseline.set(seeded);\n }\n\n /** Adopt the current draft as the baseline (called on Apply / Save / Update). */\n commit(): void {\n this._baseline.set({ ...this._draft() });\n }\n\n private buildValues(groups: FilterDropdownGroup[]): FilterDropdownOutput {\n const values: FilterDropdownOutput = {};\n for (const group of groups) {\n values[group.key] = this.buildInitialValue(group);\n }\n return values;\n }\n\n collapseHeader(key: string): void {\n const group = this._groups().find(g => g.key === key);\n if (group) {\n group.expanded = !group.expanded;\n this._groups.update(gs => [...gs]);\n }\n }\n\n /** Get the draft value for a specific filter key */\n getValue(key: string): FilterDropdownValue | undefined {\n return this._draft()[key];\n }\n\n /** Update a single filter's draft value */\n updateValue(key: string, value: FilterDropdownValue): void {\n this._draft.update(draft => ({ ...draft, [key]: value }));\n }\n\n /** Toggle a checkbox item in a checkbox filter */\n toggleCheckbox(key: string, name: string, checked: boolean): void {\n const current = this._draft()[key];\n if (current?.filterType !== 'checkbox') return;\n\n const selected = checked ? [...current.selected, name] : current.selected.filter(n => n !== name);\n\n this.updateValue(key, { filterType: 'checkbox', selected });\n }\n\n /** Set the selected radio value */\n setRadioValue(key: string, value: unknown): void {\n this.updateValue(key, { filterType: 'radio', selected: value });\n }\n\n /** Set the toggle checked state */\n setToggleValue(key: string, checked: boolean): void {\n this.updateValue(key, { filterType: 'toggle', checked });\n }\n\n /** Set selected indices for a select filter */\n setSingleSelectValue(key: string, selected: unknown): void {\n this.updateValue(key, { filterType: 'select', selectionType: 'single', selected });\n }\n\n setMultipleSelectValue(key: string, selected: unknown[]): void {\n this.updateValue(key, { filterType: 'select', selectionType: 'multiple', selected });\n }\n\n /** Set the selected period for a date range filter */\n setDateRangeValue(key: string, selectedPeriod: Period): void {\n this.updateValue(key, { filterType: 'date-range', selectedPeriod });\n }\n\n /** Return the current draft snapshot (used on Apply) */\n getSnapshot(): FilterDropdownOutput {\n return { ...this._draft() };\n }\n\n /** Revert the draft to the committed baseline. */\n reset(): void {\n this._draft.set({ ...this._baseline() });\n }\n\n /** Clear all draft values to empty/default states */\n clear(): void {\n const cleared: FilterDropdownOutput = {};\n for (const group of this._groups()) {\n cleared[group.key] = this.buildEmptyValue(group);\n }\n this._draft.set(cleared);\n }\n\n private buildInitialValue(group: FilterDropdownGroup): FilterDropdownValue {\n switch (group.filterType) {\n case 'checkbox':\n return {\n filterType: 'checkbox',\n selected: group.defaultSelected ?? [],\n } satisfies FilterDropdownValueCheckbox;\n case 'radio':\n const firstItem = group.items[0].value;\n return {\n filterType: 'radio',\n selected: group.defaultSelected ?? firstItem,\n } satisfies FilterDropdownValueRadio;\n case 'toggle':\n return {\n filterType: 'toggle',\n checked: group.defaultSelected ?? false,\n } satisfies FilterDropdownValueToggle;\n case 'select':\n if (group.selectionType === 'single') {\n return {\n filterType: 'select',\n selectionType: 'single',\n selected: group.defaultSelected ? group.defaultSelected : undefined,\n } satisfies FilterDropdownValueSingleSelect;\n } else {\n return {\n filterType: 'select',\n selectionType: 'multiple',\n selected: group.defaultSelected ?? [],\n } satisfies FilterDropdownValueMultipleSelect;\n }\n case 'date-range':\n return {\n filterType: 'date-range',\n selectedPeriod: group.selectedPeriod,\n } satisfies FilterDropdownValueDateRange;\n }\n }\n\n private buildEmptyValue(group: FilterDropdownGroup): FilterDropdownValue {\n switch (group.filterType) {\n case 'checkbox':\n return { filterType: 'checkbox', selected: [] };\n case 'radio':\n return { filterType: 'radio', selected: null };\n case 'toggle':\n return { filterType: 'toggle', checked: false };\n case 'select':\n if (group.selectionType === 'single') {\n return { filterType: 'select', selectionType: 'single', selected: undefined };\n }\n return { filterType: 'select', selectionType: 'multiple', selected: [] };\n case 'date-range':\n return { filterType: 'date-range', selectedPeriod: undefined };\n }\n }\n}\n","import {\n DropdownItemMultipleOneLineComponent,\n DropdownItemMultipleTwoLinesComponent,\n DropdownItemSingleOneLineComponent,\n DropdownItemSingleTwoLinesComponent,\n SelectLabelMultipleComponent,\n SelectLabelMultipleDisplayType,\n SelectLabelSingleComponent,\n SelectMultipleDirective,\n SelectSingleDirective,\n} from '@agorapulse/ui-components/select';\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n NgLabelTemplateDirective,\n NgMultiLabelTemplateDirective,\n NgOptionTemplateDirective,\n NgSelectComponent,\n} from '@ng-select/ng-select';\nimport { FilterDropdownGroupSelectSingle, FilterDropdownGroupSelectMultiple, FilterDropdownItemSelect } from '../filter.model';\nimport { FilterState } from '../filter.state';\nimport { FormFieldComponent } from '@agorapulse/ui-components/form-field';\n\nconst MULTIPLE_DISPLAY_TYPES = new Set<string>(['tag', 'label']);\n\n@Component({\n selector: 'ap-filter-leaf-select',\n templateUrl: './filter-leaf-select.component.html',\n imports: [\n FormsModule,\n NgSelectComponent,\n SelectMultipleDirective,\n SelectSingleDirective,\n SelectLabelSingleComponent,\n SelectLabelMultipleComponent,\n NgOptionTemplateDirective,\n DropdownItemMultipleTwoLinesComponent,\n DropdownItemMultipleOneLineComponent,\n DropdownItemSingleOneLineComponent,\n DropdownItemSingleTwoLinesComponent,\n NgLabelTemplateDirective,\n NgMultiLabelTemplateDirective,\n FormFieldComponent,\n ],\n})\nexport class FilterLeafSelectComponent {\n readonly filterState = inject(FilterState);\n\n item = input.required<FilterDropdownGroupSelectSingle | FilterDropdownGroupSelectMultiple>();\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n\n multipleDisplayType = computed<SelectLabelMultipleDisplayType>(() => {\n const dt = this.item().displayType;\n return MULTIPLE_DISPLAY_TYPES.has(dt) ? (dt as SelectLabelMultipleDisplayType) : 'label';\n });\n\n singleSelectValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'select' && value.selectionType === 'single' ? value.selected : undefined;\n });\n\n multipleSelectValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'select' && value?.selectionType === 'multiple' ? value.selected : [];\n });\n}\n","@let selectItem = item();\n<div class=\"ap-filter-leaf__option\">\n <ap-form-field>\n @if (selectItem.label) {\n <label for=\"select-{{ selectItem.key }}\">\n {{ selectItem.label }}\n </label>\n }\n @if (selectItem.selectionType === 'single') {\n <ng-select\n id=\"select-{{ selectItem.key }}\"\n apSelectSingle\n bindLabel=\"label\"\n bindValue=\"value\"\n [disabled]=\"!!selectItem.featureLocked\"\n [items]=\"selectItem.items\"\n [placeholder]=\"selectItem.placeholder ?? 'Select an option'\"\n [inlineLabel]=\"selectItem.inlineLabel\"\n [ngModel]=\"singleSelectValue()\"\n (ngModelChange)=\"filterState.setSingleSelectValue(selectItem.key, $event)\"\n >\n <ng-template\n let-item=\"item\"\n ng-label-tmp>\n <ap-select-label-single\n [displayType]=\"selectItem.displayType\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [label]=\"item.label\" />\n </ng-template>\n\n <ng-template\n let-item=\"item\"\n let-item$=\"item$\"\n ng-option-tmp>\n @if (item.caption) {\n <ap-dropdown-item-single-two-lines\n [caption]=\"item$.caption\"\n [selected]=\"item$.selected\"\n [text]=\"item$.label\"\n [avatarUrl]=\"item$.avatarUrl\"\n [network]=\"item$.network\"\n [symbolId]=\"item$.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n } @else {\n <ap-dropdown-item-single-one-line\n [selected]=\"item$.selected\"\n [text]=\"item.label\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [symbolId]=\"item.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n }\n\n </ng-template>\n\n </ng-select>\n } @else {\n <ng-select\n id=\"select-{{ selectItem.key }}\"\n apSelectMultiple\n bindLabel=\"label\"\n bindValue=\"value\"\n [items]=\"selectItem.items\"\n [placeholder]=\"selectItem.placeholder ?? 'Select an option'\"\n [inlineLabel]=\"selectItem.inlineLabel\"\n [ngModel]=\"multipleSelectValue()\"\n (ngModelChange)=\"filterState.setMultipleSelectValue(selectItem.key, $event)\">\n <ng-template\n let-items=\"items\"\n let-clear=\"clear\"\n ng-multi-label-tmp>\n <ap-select-label-multiple\n bindValue=\"value\"\n bindLabel=\"label\"\n [displayType]=\"multipleDisplayType()\"\n [selectedItems]=\"items\"\n (removeItem)=\"clear($event)\"\n />\n </ng-template>\n\n <ng-template\n let-item=\"item\"\n let-item$=\"item$\"\n ng-option-tmp>\n @if (item.caption) {\n <ap-dropdown-item-multiple-two-lines\n [selected]=\"item$.selected\"\n [onlyText]=\"selectItem.onlyText ?? 'Only'\"\n [caption]=\"item.caption\"\n [text]=\"item.label\"\n [htmlId]=\"item$.htmlId\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [symbolId]=\"item.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n } @else {\n <ap-dropdown-item-multiple-one-line\n [onlyText]=\"selectItem.onlyText ?? 'Only'\"\n [selected]=\"item$.selected\"\n [htmlId]=\"item$.htmlId\"\n [text]=\"item.label\"\n [avatarUrl]=\"item.avatarUrl\"\n [network]=\"item.network\"\n [symbolId]=\"item.symbolId\"\n [isFeatureLocked]=\"item.featureLocked\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit(item)\"\n />\n }\n </ng-template>\n </ng-select>\n }\n </ap-form-field>\n</div>\n","import { CheckboxComponent } from '@agorapulse/ui-components/checkbox';\nimport { DatepickerMode, InputDatepickerComponent, Period } from '@agorapulse/ui-components/datepicker';\nimport { provideUiComponentsSymbols } from '@agorapulse/ui-components/providers';\nimport { RadioComponent } from '@agorapulse/ui-components/radio';\nimport { ToggleComponent } from '@agorapulse/ui-components/toggle';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apFeatureLock, apInfo, SymbolComponent } from '@agorapulse/ui-symbol';\nimport { apChevronDown } from '@agorapulse/ui-symbol/icons';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FilterLeafSelectComponent } from '../filter-leaf-select/filter-leaf-select.component';\nimport { FilterDropdownGroup, FilterDropdownItemSelect } from '../filter.model';\nimport { FilterState } from '../filter.state';\n\n@Component({\n selector: 'ap-filter-leaf',\n templateUrl: './filter-leaf.component.html',\n styleUrl: './filter-leaf.component.scss',\n imports: [\n TooltipDirective,\n SymbolComponent,\n CheckboxComponent,\n RadioComponent,\n ToggleComponent,\n FormsModule,\n FilterLeafSelectComponent,\n InputDatepickerComponent,\n SymbolComponent,\n SymbolComponent,\n ],\n providers: [provideUiComponentsSymbols(apChevronDown, apInfo, apFeatureLock)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterLeafComponent {\n protected readonly DatepickerMode = DatepickerMode;\n\n public readonly filterState = inject(FilterState);\n\n /** item propagated from FilterDropdownComponent */\n item = input.required<FilterDropdownGroup>();\n /** whether the leaf is closable */\n closable = input(true);\n\n isLastLeaf = input(false);\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n\n /** Event emitted when a group with locked feature is clicked */\n filterDropdownGroupLockedClicked = output<FilterDropdownGroup>();\n\n displayLabelInLeaf = computed(() => {\n const item = this.item();\n return item.filterType === 'checkbox' || item.filterType === 'radio' || item.filterType === 'toggle';\n });\n\n checkboxItem = computed(() => {\n const item = this.item();\n return item.filterType === 'checkbox' ? item : undefined;\n });\n\n radioItem = computed(() => {\n const item = this.item();\n return item.filterType === 'radio' ? item : undefined;\n });\n\n toggleItem = computed(() => {\n const item = this.item();\n return item.filterType === 'toggle' ? item : undefined;\n });\n\n selectItem = computed(() => {\n const item = this.item();\n return item.filterType === 'select' ? item : undefined;\n });\n\n dateRangeItem = computed(() => {\n const item = this.item();\n return item.filterType === 'date-range' ? item : undefined;\n });\n\n radioValue = computed<unknown | null>(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'radio' ? value.selected : null;\n });\n\n checkboxValue = computed<Record<string, boolean>>(() => {\n const checkboxItem = this.checkboxItem();\n const checkboxValueByKey: Record<string, boolean> = {};\n checkboxItem?.items.forEach(item => (checkboxValueByKey[item.name] = false));\n\n const value = this.filterState.getValue(this.item().key);\n if (value && value.filterType === 'checkbox') {\n value.selected.forEach(item => (checkboxValueByKey[item] = true));\n }\n return checkboxValueByKey;\n });\n\n toggleValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'toggle' ? value.checked : false;\n });\n\n dateRangeValue = computed(() => {\n const value = this.filterState.getValue(this.item().key);\n return value?.filterType === 'date-range' ? value.selectedPeriod : { startDate: undefined, endDate: undefined };\n });\n\n onHeaderClick(): void {\n if (this.closable() || !this.item().featureLocked) {\n this.filterState.collapseHeader(this.item().key);\n }\n if (this.item().featureLocked) {\n this.filterDropdownGroupLockedClicked.emit(this.item());\n }\n }\n\n onCheckboxChange(name: string, checked: boolean): void {\n this.filterState.toggleCheckbox(this.item().key, name, checked);\n }\n\n onRadioClick(value: unknown): void {\n this.filterState.setRadioValue(this.item().key, value);\n }\n\n onToggleChange(checked: boolean): void {\n this.filterState.setToggleValue(this.item().key, checked);\n }\n\n onDateRangeChange(dateRange: Period): void {\n this.filterState.setDateRangeValue(this.item().key, dateRange);\n }\n}\n","<div [class.with-border-bottom]=\"!isLastLeaf()\" class=\"ap-filter-leaf\">\n\n <div\n (click)=\"onHeaderClick()\"\n (keyup.enter)=\"onHeaderClick()\"\n [class.ap-filter-leaf__closable]=\"closable() || item().featureLocked\"\n [class.ap-filter-leaf__expanded]=\"(!closable() || item().expanded) && (!item().featureLocked || !closable())\"\n class=\"ap-filter-leaf__header\" tabindex=\"0\">\n <div class=\"ap-filter-leaf__title\">\n <span>{{ item().title }}</span>\n @if (item().tooltipText) {\n <ap-symbol color=\"light-grey\" symbolId=\"info\" size=\"sm\" [apTooltip]=\"item().tooltipText\" />\n }\n </div>\n @if (item().featureLocked) {\n <div class=\"ap-filter-leaf__actions\">\n <ap-symbol color=\"purple\" symbolId=\"feature-lock\" size=\"sm\"\n [apTooltip]=\"item().featureLockTooltipText\" />\n </div>\n } @else if (closable()) {\n <div class=\"ap-filter-leaf__actions\" [class.ap-filter-leaf__chevron--rotated]=\"!item().expanded\">\n <ap-symbol symbolId=\"chevron-up\" size=\"sm\" />\n </div>\n }\n </div>\n\n @if ((!closable() || item().expanded) && (!item().featureLocked || !closable())) {\n <div class=\"ap-filter-leaf__content\">\n @if (item().label && displayLabelInLeaf()) {\n <span class=\"ap-filter-leaf__label\">{{ item().label }}</span>\n }\n @switch (item().filterType) {\n @case ('checkbox') {\n @if (checkboxItem(); as vCheckboxItem) {\n @for (option of vCheckboxItem.items; track option.name) {\n <div class=\"ap-filter-leaf__option\">\n <ap-checkbox\n [name]=\"'checkbox-' + option.name\"\n [checked]=\"checkboxValue()[option.name]\"\n [disabled]=\"!!option.disabled || item().featureLocked\"\n (change)=\"onCheckboxChange(option.name, $event)\"\n >\n <span>{{ option.label }}</span>\n </ap-checkbox>\n </div>\n }\n }\n }\n @case ('radio') {\n @if (radioItem(); as vRadioItem) {\n @for (option of vRadioItem.items; track option.radioId) {\n <div class=\"ap-filter-leaf__option\">\n <ap-radio\n [radioId]=\"option.radioId\"\n [value]=\"option.value\"\n [disabled]=\"!!option.disabled || !!item().featureLocked\"\n [name]=\"item().key\"\n [ngModel]=\"radioValue()\"\n (ngModelChange)=\"onRadioClick($event)\"\n >\n <span>{{ option.label }}</span>\n </ap-radio>\n </div>\n }\n }\n }\n @case ('toggle') {\n @if (toggleItem(); as vToggleItem) {\n <div class=\"ap-filter-leaf__option\">\n <ap-toggle\n [name]=\"'toggle-' + vToggleItem.item.name\"\n [checked]=\"toggleValue()\"\n [disabled]=\"vToggleItem.item.disabled || item().featureLocked\"\n (change)=\"onToggleChange($event)\"\n />\n <span class=\"toggle\"\n [class.disabled]=\"vToggleItem.item.disabled || item().featureLocked\">{{ vToggleItem.item.label }}</span>\n </div>\n }\n }\n @case ('select') {\n @if (selectItem(); as vSelectItem) {\n <ap-filter-leaf-select [item]=\"vSelectItem\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n }\n @case ('date-range') {\n @if (dateRangeItem(); as vDateRangeItem) {\n <ap-input-datepicker\n [disabled]=\"!!item().featureLocked\"\n [label]=\"vDateRangeItem.label\"\n [mode]=\"DatepickerMode.Range\"\n [placeholder]=\"vDateRangeItem.placeholder ?? 'Select date range'\"\n [minDate]=\"vDateRangeItem.minDate\"\n [maxDate]=\"vDateRangeItem.maxDate\"\n [dateFormat]=\"vDateRangeItem.dateFormat ?? 'MMMM DD, YYYY'\"\n [selectedPeriod]=\"dateRangeValue()\"\n (periodChanged)=\"onDateRangeChange($event)\"\n />\n }\n }\n }\n </div>\n }\n\n</div>\n","import { ButtonComponent } from '@agorapulse/ui-components/button';\nimport { createDropdownOverlay, DropdownOverlay, DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { FilterLeafComponent } from '../filter-leaf/filter-leaf.component';\nimport { provideUiComponentsSymbols } from '@agorapulse/ui-components/providers';\nimport { apChevronDown, apFeatureLock, apPlus, apRefresh, apReset } from '@agorapulse/ui-symbol';\nimport { Component, computed, effect, inject, input, output, TemplateRef, untracked, viewChild } from '@angular/core';\nimport { FilterDropdownGroup, FilterDropdownItemSelect, FilterDropdownOutput } from '../filter.model';\nimport { FilterState } from '../filter.state';\nimport { ActionDropdownComponent, ActionDropdownItem } from '@agorapulse/ui-components/action-dropdown';\n\n@Component({\n selector: 'ap-filter-dropdown',\n templateUrl: './filter-dropdown.component.html',\n styleUrl: './filter-dropdown.component.scss',\n imports: [ButtonComponent, FilterLeafComponent, DropdownTriggerDirective, ActionDropdownComponent],\n providers: [FilterState, provideUiComponentsSymbols(apReset, apChevronDown, apPlus, apRefresh, apFeatureLock)],\n})\nexport class FilterDropdownComponent implements DropdownOverlay {\n private readonly overlay = createDropdownOverlay();\n readonly filterState = inject(FilterState);\n\n initGroups = effect(() => {\n const groups = this.items();\n untracked(() => {\n if (groups) {\n this.filterState.initialize(groups);\n }\n });\n });\n\n emitOnValueChange = effect(() => {\n this.filterState.draft(); // track changes to draft\n const needApply = this.needApplyButton();\n untracked(() => {\n if (!needApply) {\n this.applyFilters.emit(this.filterState.getSnapshot());\n }\n });\n });\n\n filterGroupTemplate = viewChild<TemplateRef<unknown>>('filterGroupTemplate');\n\n /**\n * The filter groups to display, with their default/initial selection. Configuration, not a live value\n * binding: update only on external changes — never feed the component's own output back in (apply→items→apply loop).\n */\n items = input<FilterDropdownGroup[]>();\n /** Whether the filter needs the apply button to be clicked for applyFilters to emit */\n needApplyButton = input(true);\n /** Whether the filter group can be closed (collapsed) by the user. If false, the group will always be expanded and the user won't see a toggle button. */\n closable = input(true);\n /** whether the feature to save presets is locked for the org */\n presetsFeatureLocked = input(false);\n /** whether the mode is in preset mode */\n savePresetsMode = input(false);\n /** whether the user is currently editing presets. Only necessary if savePresetsMode is at true */\n editingPresetsMode = input(false);\n\n /** Whether to show a backdrop that closes the dropdown when clicked */\n showBackdrop = input(true);\n /** Default position for the dropdown relative to the trigger element */\n defaultPosition = input<'right' | 'left'>('right');\n\n saveNewPresetsText = input('Save new presets');\n saveAsNewPresetText = input('Save as new preset');\n savePresetText = input('Save preset');\n updateExistingPresetText = input('Update existing preset');\n resetFilterText = input('Reset filters');\n\n applyFiltersText = input('Apply filters');\n clearFilterText = input('Clear filters');\n\n /** Emits when the dropdown menu is opened */\n opened = output<void>();\n /** Emits when the dropdown menu is closed */\n closed = output<void>();\n\n /** Emits when save presets is clicked but is feature locked */\n presetsLockedClicked = output<void>();\n /** Emits when save presets is clicked */\n saveNewPresets = output<FilterDropdownOutput>();\n /** Emits when save presets is clicked */\n updatePresets = output<FilterDropdownOutput>();\n /** Emits when filters are applied */\n applyFilters = output<FilterDropdownOutput>();\n /** Emits when user clicks on clear filter */\n clearFilters = output<void>();\n /** Emits when user clicks on reset filter */\n resetFilters = output<void>();\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n /** Event emitted when a group with locked feature is clicked */\n filterDropdownGroupLockedClicked = output<FilterDropdownGroup>();\n\n readonly isOpen = this.overlay.isOpen;\n\n savePresetsDropdownItems = computed<ActionDropdownItem[]>(() => {\n if (!this.savePresetsMode() || !this.editingPresetsMode()) return [];\n return [\n {\n name: 'saveAsNewPresets',\n startSymbolId: 'plus',\n label: this.saveAsNewPresetText(),\n dataTrack: 'save-new-preset',\n },\n {\n name: 'updatePresets',\n startSymbolId: 'refresh',\n label: this.updateExistingPresetText(),\n dataTrack: 'update-existing-preset',\n },\n ];\n });\n\n /** Opens the dropdown menu at the specified trigger element */\n open(triggerElement?: HTMLElement): void {\n const template = this.filterGroupTemplate();\n if (this.isOpen() || !template) return;\n\n this.overlay.open(template, triggerElement, {\n showBackdrop: this.showBackdrop(),\n defaultPosition: this.defaultPosition(),\n onClose: () => this.close(),\n });\n this.opened.emit();\n }\n\n /** Closes the dropdown menu and cleans up overlay resources */\n close(): void {\n if (!this.isOpen()) return;\n this.overlay.close();\n this.closed.emit();\n }\n\n /** Toggles the dropdown menu open or closed state */\n toggle(triggerElement?: HTMLElement): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open(triggerElement);\n }\n }\n\n onApplyFilters(): void {\n this.applyFilters.emit(this.filterState.getSnapshot());\n this.filterState.commit();\n }\n\n onClearFilters(): void {\n this.filterState.clear();\n this.clearFilters.emit();\n }\n\n onResetFilters(): void {\n this.filterState.reset();\n this.resetFilters.emit();\n }\n\n onSavePresets(): void {\n if (this.presetsFeatureLocked()) {\n this.presetsLockedClicked.emit();\n return;\n }\n this.saveNewPresets.emit(this.filterState.getSnapshot());\n this.filterState.commit();\n }\n\n onUpdatePresets(): void {\n this.updatePresets.emit(this.filterState.getSnapshot());\n this.filterState.commit();\n }\n\n protected onActionDropdownItemClick(item: ActionDropdownItem): void {\n switch (item.name) {\n case 'saveAsNewPresets':\n this.onSavePresets();\n break;\n case 'updatePresets':\n this.onUpdatePresets();\n break;\n }\n }\n}\n","<ng-template #filterGroupTemplate>\n <div\n class=\"ap-filter-dropdown\"\n role=\"menu\"\n tabindex=\"-1\"\n aria-label=\"Filter dropdown\">\n\n <div class=\"ap-filter-dropdown__content\">\n @for (item of filterState.groups(); let last = $last; track item.key) {\n <ap-filter-leaf\n [item]=\"item\"\n [closable]=\"closable()\"\n [isLastLeaf]=\"last\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\" />\n }\n </div>\n\n <div class=\"ap-filter-dropdown__footer\">\n @if (savePresetsMode()) {\n <div class=\"ap-filter-dropdown__footer--presets\">\n @if (!editingPresetsMode() || presetsFeatureLocked()) {\n <ap-button\n name=\"filter-dropdown-save-preset\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled() && !presetsFeatureLocked()\"\n [locked]=\"presetsFeatureLocked()\"\n (click)=\"onSavePresets()\">\n {{ saveNewPresetsText() }}\n </ap-button>\n } @else {\n <ap-button\n name=\"filter-dropdown-edit-presets\"\n symbolId=\"chevron-down\"\n symbolPosition=\"right\"\n [apDropdownTrigger]=\"updatePresetsDropdown\"\n [config]=\"{ color: 'blue', style: 'stroked-transparent' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n >\n {{ savePresetText() }}\n </ap-button>\n }\n\n <ap-button\n name=\"filter-dropdown-reset-filters\"\n [symbolId]=\"'reset'\"\n [symbolPosition]=\"'left'\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onResetFilters()\">\n {{ resetFilterText() }}\n </ap-button>\n </div>\n } @else {\n <div class=\"ap-filter-dropdown__footer--apply\">\n <ap-button\n name=\"filter-dropdown-clear-filters\"\n [config]=\"{ color: 'blue', style: 'ghost' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onClearFilters()\">\n {{ clearFilterText() }}\n </ap-button>\n\n @if (needApplyButton()) {\n <ap-button\n name=\"filter-dropdown-apply-filters\"\n [config]=\"{ color: 'blue', style: 'primary' }\"\n [disabled]=\"filterState.buttonsDisabled()\"\n (click)=\"onApplyFilters()\">\n {{ applyFiltersText() }}\n </ap-button>\n }\n </div>\n }\n </div>\n </div>\n\n</ng-template>\n\n<ap-action-dropdown\n #updatePresetsDropdown\n [items]=\"savePresetsDropdownItems()\"\n (itemClick)=\"onActionDropdownItemClick($event)\"\n/>\n","import { ButtonComponent } from '@agorapulse/ui-components/button';\nimport { CounterComponent } from '@agorapulse/ui-components/counter';\nimport { DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { apFilter, apFilterFill, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport { Component, computed, input, output, viewChild } from '@angular/core';\nimport { FilterDropdownComponent } from '../filter-dropdown/filter-dropdown.component';\nimport { FilterDropdownGroup, FilterDropdownItemSelect, FilterDropdownOutput } from '../filter.model';\n\n@Component({\n selector: 'ap-filter-dropdown-button',\n templateUrl: './filter-dropdown-button.component.html',\n imports: [ButtonComponent, DropdownTriggerDirective, SymbolComponent, FilterDropdownComponent, CounterComponent],\n providers: [withSymbols(apFilter, apFilterFill)],\n})\nexport class FilterDropdownButtonComponent {\n // FilterState is provided by the inner FilterDropdownComponent, so read the counter through it.\n private readonly filterDropdown = viewChild(FilterDropdownComponent);\n isFilterCountActive = computed(() => this.filterDropdown()?.filterState.isFilterCountActive() ?? false);\n activeFilterCount = computed(() => this.filterDropdown()?.filterState.activeFilterCount() ?? 0);\n\n /** text of the button, input specific to the button */\n buttonFilterText = input('Filters');\n\n /** input specific to the filter-dropdown */\n /**\n * The filter groups to display, with their default/initial selection. Configuration, not a live value\n * binding: update only on external changes — never feed the component's own output back in (apply→items→apply loop).\n */\n items = input<FilterDropdownGroup[]>();\n /** Whether the filter needs the apply button to be clicked for applyFilters to emit */\n needApplyButton = input(true);\n /** Whether the filter group can be closed (collapsed) by the user. If false, the group will always be expanded and the user won't see a toggle button. */\n closable = input(true);\n /** whether the feature to save presets is locked for the org */\n presetsFeatureLocked = input(false);\n /** whether the mode is in preset mode */\n savePresetsMode = input(false);\n /** whether the user is currently editing presets. Only necessary if savePresetsMode is at true */\n editingPresetsMode = input(false);\n\n /** Whether to show a backdrop that closes the dropdown when clicked */\n showBackdrop = input(true);\n /** Whether the dropdown is disabled and cannot be opened */\n disabled = input(false);\n /** Default position for the dropdown relative to the trigger element */\n defaultPosition = input<'right' | 'left'>('right');\n\n saveNewPresetsText = input('Save new presets');\n saveAsNewPresetText = input('Save as new preset');\n savePresetText = input('Save preset');\n updateExistingPresetText = input('Update existing preset');\n resetFilterText = input('Reset filters');\n\n applyFiltersText = input('Apply filters');\n clearFilterText = input('Clear filters');\n\n /** Emits when the dropdown menu is opened */\n opened = output<void>();\n /** Emits when the dropdown menu is closed */\n closed = output<void>();\n\n /** Emits when save presets is clicked but is feature locked */\n presetsLockedClicked = output<void>();\n /** Emits when save presets is clicked */\n saveNewPresets = output<FilterDropdownOutput>();\n /** Emits when save presets is clicked */\n updatePresets = output<FilterDropdownOutput>();\n /** Emits when filters are applied */\n applyFilters = output<FilterDropdownOutput>();\n /** Emits when user clicks on clear filter */\n clearFilters = output<void>();\n /** Emits when user clicks on reset filter */\n resetFilters = output<void>();\n\n /** Event emitted when a select item feature locked is clicked */\n lockedFeatureClicked = output<FilterDropdownItemSelect>();\n /** Event emitted when a group with locked feature is clicked */\n filterDropdownGroupLockedClicked = output<FilterDropdownGroup>();\n}\n","<ap-button\n [apDropdownTrigger]=\"filterDropdown\"\n [config]=\"{ style: 'stroked', color: isFilterCountActive() ? 'blue' : 'grey' }\"\n ariaLabel=\"Button toggling filters\"\n name=\"toggle-filter\"\n symbolPosition=\"left\">\n <ap-symbol [symbolId]=\"isFilterCountActive() ? 'filter_fill' : 'filter'\" />\n @if (isFilterCountActive()) {\n <ap-counter\n size=\"big\"\n color=\"blue\"\n [background]=\"true\">\n {{ activeFilterCount() }}\n </ap-counter>\n }\n {{ buttonFilterText() }}\n</ap-button>\n\n<ap-filter-dropdown\n #filterDropdown\n [presetsFeatureLocked]=\"presetsFeatureLocked()\"\n [applyFiltersText]=\"applyFiltersText()\"\n [clearFilterText]=\"clearFilterText()\"\n [closable]=\"closable()\"\n [defaultPosition]=\"defaultPosition()\"\n [editingPresetsMode]=\"editingPresetsMode()\"\n [items]=\"items()\"\n [needApplyButton]=\"needApplyButton()\"\n [resetFilterText]=\"resetFilterText()\"\n [saveAsNewPresetText]=\"saveAsNewPresetText()\"\n [saveNewPresetsText]=\"saveNewPresetsText()\"\n [savePresetText]=\"savePresetText()\"\n [savePresetsMode]=\"savePresetsMode()\"\n [showBackdrop]=\"showBackdrop()\"\n (applyFilters)=\"applyFilters.emit($event)\"\n (clearFilters)=\"clearFilters.emit()\"\n (closed)=\"closed.emit()\"\n (filterDropdownGroupLockedClicked)=\"filterDropdownGroupLockedClicked.emit($event)\"\n (lockedFeatureClicked)=\"lockedFeatureClicked.emit($event)\"\n (opened)=\"opened.emit()\"\n (presetsLockedClicked)=\"presetsLockedClicked.emit()\"\n (resetFilters)=\"resetFilters.emit()\"\n (saveNewPresets)=\"saveNewPresets.emit($event)\"\n (updatePresets)=\"updatePresets.emit($event)\"\n [updateExistingPresetText]=\"updateExistingPresetText()\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["apChevronDown"],"mappings":"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"}
|
|
@@ -23,7 +23,6 @@ interface FilterDropdownItemRadio {
|
|
|
23
23
|
interface FilterDropdownItemToggle {
|
|
24
24
|
label: string;
|
|
25
25
|
name: string;
|
|
26
|
-
checked?: boolean;
|
|
27
26
|
disabled?: boolean;
|
|
28
27
|
}
|
|
29
28
|
interface FilterDropdownItemSelect {
|
|
@@ -148,14 +147,18 @@ type FilterDropdownGroup = FilterDropdownGroupCheckbox | FilterDropdownGroupRadi
|
|
|
148
147
|
declare class FilterState {
|
|
149
148
|
private readonly _groups;
|
|
150
149
|
private readonly _draft;
|
|
150
|
+
private readonly _baseline;
|
|
151
151
|
activeFilterCount: _angular_core.Signal<number>;
|
|
152
152
|
readonly groups: _angular_core.Signal<FilterDropdownGroup[]>;
|
|
153
153
|
readonly draft: _angular_core.Signal<FilterDropdownOutput>;
|
|
154
154
|
isFilterCountActive: _angular_core.Signal<boolean>;
|
|
155
|
-
|
|
155
|
+
readonly hasChanges: _angular_core.Signal<boolean>;
|
|
156
156
|
readonly buttonsDisabled: _angular_core.Signal<boolean>;
|
|
157
|
-
/**
|
|
157
|
+
/** Refresh the groups schema and (re-)seed the draft + baseline from config defaults. */
|
|
158
158
|
initialize(groups: FilterDropdownGroup[]): void;
|
|
159
|
+
/** Adopt the current draft as the baseline (called on Apply / Save / Update). */
|
|
160
|
+
commit(): void;
|
|
161
|
+
private buildValues;
|
|
159
162
|
collapseHeader(key: string): void;
|
|
160
163
|
/** Get the draft value for a specific filter key */
|
|
161
164
|
getValue(key: string): FilterDropdownValue | undefined;
|
|
@@ -174,7 +177,7 @@ declare class FilterState {
|
|
|
174
177
|
setDateRangeValue(key: string, selectedPeriod: Period): void;
|
|
175
178
|
/** Return the current draft snapshot (used on Apply) */
|
|
176
179
|
getSnapshot(): FilterDropdownOutput;
|
|
177
|
-
/**
|
|
180
|
+
/** Revert the draft to the committed baseline. */
|
|
178
181
|
reset(): void;
|
|
179
182
|
/** Clear all draft values to empty/default states */
|
|
180
183
|
clear(): void;
|
|
@@ -190,7 +193,10 @@ declare class FilterDropdownComponent implements DropdownOverlay {
|
|
|
190
193
|
initGroups: _angular_core.EffectRef;
|
|
191
194
|
emitOnValueChange: _angular_core.EffectRef;
|
|
192
195
|
filterGroupTemplate: _angular_core.Signal<TemplateRef<unknown> | undefined>;
|
|
193
|
-
/**
|
|
196
|
+
/**
|
|
197
|
+
* The filter groups to display, with their default/initial selection. Configuration, not a live value
|
|
198
|
+
* binding: update only on external changes — never feed the component's own output back in (apply→items→apply loop).
|
|
199
|
+
*/
|
|
194
200
|
items: _angular_core.InputSignal<FilterDropdownGroup[] | undefined>;
|
|
195
201
|
/** Whether the filter needs the apply button to be clicked for applyFilters to emit */
|
|
196
202
|
needApplyButton: _angular_core.InputSignal<boolean>;
|
|
@@ -252,13 +258,16 @@ declare class FilterDropdownComponent implements DropdownOverlay {
|
|
|
252
258
|
}
|
|
253
259
|
|
|
254
260
|
declare class FilterDropdownButtonComponent {
|
|
255
|
-
readonly
|
|
261
|
+
private readonly filterDropdown;
|
|
256
262
|
isFilterCountActive: _angular_core.Signal<boolean>;
|
|
257
263
|
activeFilterCount: _angular_core.Signal<number>;
|
|
258
264
|
/** text of the button, input specific to the button */
|
|
259
265
|
buttonFilterText: _angular_core.InputSignal<string>;
|
|
260
266
|
/** input specific to the filter-dropdown */
|
|
261
|
-
/**
|
|
267
|
+
/**
|
|
268
|
+
* The filter groups to display, with their default/initial selection. Configuration, not a live value
|
|
269
|
+
* binding: update only on external changes — never feed the component's own output back in (apply→items→apply loop).
|
|
270
|
+
*/
|
|
262
271
|
items: _angular_core.InputSignal<FilterDropdownGroup[] | undefined>;
|
|
263
272
|
/** Whether the filter needs the apply button to be clicked for applyFilters to emit */
|
|
264
273
|
needApplyButton: _angular_core.InputSignal<boolean>;
|
|
@@ -303,11 +312,6 @@ declare class FilterDropdownButtonComponent {
|
|
|
303
312
|
lockedFeatureClicked: _angular_core.OutputEmitterRef<FilterDropdownItemSelect>;
|
|
304
313
|
/** Event emitted when a group with locked feature is clicked */
|
|
305
314
|
filterDropdownGroupLockedClicked: _angular_core.OutputEmitterRef<FilterDropdownGroup>;
|
|
306
|
-
onApplyFilters(): void;
|
|
307
|
-
onClearFilters(): void;
|
|
308
|
-
onResetFilters(): void;
|
|
309
|
-
onSavePresets(): void;
|
|
310
|
-
onUpdatePresets(): void;
|
|
311
315
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterDropdownButtonComponent, never>;
|
|
312
316
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterDropdownButtonComponent, "ap-filter-dropdown-button", never, { "buttonFilterText": { "alias": "buttonFilterText"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "needApplyButton": { "alias": "needApplyButton"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "presetsFeatureLocked": { "alias": "presetsFeatureLocked"; "required": false; "isSignal": true; }; "savePresetsMode": { "alias": "savePresetsMode"; "required": false; "isSignal": true; }; "editingPresetsMode": { "alias": "editingPresetsMode"; "required": false; "isSignal": true; }; "showBackdrop": { "alias": "showBackdrop"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "defaultPosition": { "alias": "defaultPosition"; "required": false; "isSignal": true; }; "saveNewPresetsText": { "alias": "saveNewPresetsText"; "required": false; "isSignal": true; }; "saveAsNewPresetText": { "alias": "saveAsNewPresetText"; "required": false; "isSignal": true; }; "savePresetText": { "alias": "savePresetText"; "required": false; "isSignal": true; }; "updateExistingPresetText": { "alias": "updateExistingPresetText"; "required": false; "isSignal": true; }; "resetFilterText": { "alias": "resetFilterText"; "required": false; "isSignal": true; }; "applyFiltersText": { "alias": "applyFiltersText"; "required": false; "isSignal": true; }; "clearFilterText": { "alias": "clearFilterText"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; "presetsLockedClicked": "presetsLockedClicked"; "saveNewPresets": "saveNewPresets"; "updatePresets": "updatePresets"; "applyFilters": "applyFilters"; "clearFilters": "clearFilters"; "resetFilters": "resetFilters"; "lockedFeatureClicked": "lockedFeatureClicked"; "filterDropdownGroupLockedClicked": "filterDropdownGroupLockedClicked"; }, never, never, true, never>;
|
|
313
317
|
}
|
package/package.json
CHANGED
|
Binary file
|