@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.
@@ -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
- _draft = signal({}, ...(ngDevMode ? [{ debugName: "_draft" }] : []));
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
- _hasChanges = signal(false, ...(ngDevMode ? [{ debugName: "_hasChanges" }] : []));
64
- buttonsDisabled = computed(() => !this._hasChanges(), ...(ngDevMode ? [{ debugName: "buttonsDisabled" }] : []));
65
- /** Initialize groups and seed draft from config defaults */
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 initial = {};
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
- initial[group.key] = this.buildInitialValue(group);
86
+ values[group.key] = this.buildInitialValue(group);
71
87
  }
72
- this._draft.set(initial);
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
- /** Reset draft to initial values from the current config */
136
+ /** Revert the draft to the committed baseline. */
123
137
  reset() {
124
- this.initialize(this._groups());
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, providedIn: 'root' });
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
- /** The filter groups to display in the dropdown */
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
- filterState = inject(FilterState);
493
- isFilterCountActive = this.filterState.isFilterCountActive;
494
- activeFilterCount = this.filterState.activeFilterCount;
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
- /** The filter groups to display in the dropdown */
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
- private readonly _hasChanges;
155
+ readonly hasChanges: _angular_core.Signal<boolean>;
156
156
  readonly buttonsDisabled: _angular_core.Signal<boolean>;
157
- /** Initialize groups and seed draft from config defaults */
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
- /** Reset draft to initial values from the current config */
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
- /** The filter groups to display in the dropdown */
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 filterState: FilterState;
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
- /** The filter groups to display in the dropdown */
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@agorapulse/ui-components",
3
3
  "description": "Agorapulse UI Components Library",
4
- "version": "20.4.24",
4
+ "version": "20.4.25",
5
5
  "author": "Benoit Hediard",
6
6
  "repository": {
7
7
  "type": "git",