@agorapulse/ui-components 22.0.27 → 22.0.29

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.
@@ -119,7 +119,7 @@ interface FilterDropdownGroupSelectSingle extends FilterDropdownGroupBase {
119
119
  selectionType: 'single';
120
120
  /** An optional type to determine the icon/avatar/symbol to display for each item. Only applicable for select filter groups. */
121
121
  displayType: SelectLabelSingleDisplayType;
122
- /** An optional text to display when all items are selected. Only applicable for select filter groups with multiple selection. */
122
+ /** Unused: a single-selection option carries no "only" shortcut. */
123
123
  onlyText?: string;
124
124
  /** Whether the dropdown panel shows a search input to filter the options. */
125
125
  searchable?: boolean;
@@ -136,7 +136,9 @@ interface FilterDropdownGroupSelectMultiple extends FilterDropdownGroupBase {
136
136
  selectionType: 'multiple';
137
137
  /** An optional type to determine the icon/avatar/symbol to display for each item. Only applicable for select filter groups. */
138
138
  displayType: SelectLabelSingleDisplayType;
139
- /** An optional text to display when all items are selected. Only applicable for select filter groups with multiple selection. */
139
+ /** Whether each option carries a shortcut narrowing the selection down to that option alone. */
140
+ onlyEnabled?: boolean;
141
+ /** The label of that shortcut, "Only" when omitted. */
140
142
  onlyText?: string;
141
143
  /** Default chip color in `tag` display mode — applies to items without a per-item `tagColor` and to the "+N" overflow chip. */
142
144
  tagColor?: TagColor;
@@ -182,6 +184,7 @@ declare class FilterState {
182
184
  private readonly _draft;
183
185
  private readonly _baseline;
184
186
  private readonly _expanded;
187
+ private readonly _openPanelKeys;
185
188
  readonly groups: _angular_core.Signal<FilterDropdownGroup[]>;
186
189
  readonly draft: _angular_core.Signal<FilterDropdownOutput>;
187
190
  readonly expanded: _angular_core.Signal<Record<string, boolean>>;
@@ -192,6 +195,8 @@ declare class FilterState {
192
195
  readonly buttonsDisabled: _angular_core.Signal<boolean>;
193
196
  /** Clear is gated on "is there anything to clear", not on dirty state. */
194
197
  readonly clearDisabled: _angular_core.Signal<boolean>;
198
+ /** Whether a leaf has a panel of its own showing: the dropdown must not close under it. */
199
+ readonly nestedPanelOpen: _angular_core.Signal<boolean>;
195
200
  /** Refresh the structural schema and reconcile the value keyspace (add empty / drop removed). */
196
201
  setSchema(groups: FilterDropdownGroup[]): void;
197
202
  /** Seed the draft from an external value, projected onto the current keyspace. Echo-gated, silent. */
@@ -214,6 +219,8 @@ declare class FilterState {
214
219
  * the edge where the DOM event happens.
215
220
  */
216
221
  updateValue(key: string, value: FilterDropdownValue): void;
222
+ /** Call whenever a leaf's panel opens or closes. Keyed by leaf, so a repeated open or close is harmless. */
223
+ setNestedPanelOpen(key: string, open: boolean): void;
217
224
  /** Whether a group is currently expanded. Defaults to collapsed for unknown keys. */
218
225
  isExpanded(key: string): boolean;
219
226
  /** Toggle a group's expand/collapse state. Updates internal state only — the config is never mutated. */
@@ -260,8 +267,8 @@ declare class FilterDropdownComponent implements DropdownOverlay {
260
267
  savedValue: _angular_core.InputSignal<FilterDropdownOutput | undefined>;
261
268
  /** Whether the filter needs the apply button to be clicked for applyFilters to emit */
262
269
  needApplyButton: _angular_core.InputSignal<boolean>;
263
- /** Whether to offer a cancel button that discards the unapplied draft and closes the dropdown. */
264
- needCancelButton: _angular_core.InputSignal<boolean>;
270
+ /** Whether to offer a clear button that empties every group's selection. */
271
+ needClearButton: _angular_core.InputSignal<boolean>;
265
272
  /** 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. */
266
273
  closable: _angular_core.InputSignal<boolean>;
267
274
  /**
@@ -289,7 +296,6 @@ declare class FilterDropdownComponent implements DropdownOverlay {
289
296
  resetFilterText: _angular_core.InputSignal<string>;
290
297
  applyFiltersText: _angular_core.InputSignal<string>;
291
298
  clearFilterText: _angular_core.InputSignal<string>;
292
- cancelFilterText: _angular_core.InputSignal<string>;
293
299
  /** Emits when the dropdown menu is opened */
294
300
  opened: _angular_core.OutputEmitterRef<void>;
295
301
  /** Emits when the dropdown menu is closed */
@@ -311,9 +317,14 @@ declare class FilterDropdownComponent implements DropdownOverlay {
311
317
  /** Event emitted when a group with locked feature is clicked */
312
318
  filterDropdownGroupLockedClicked: _angular_core.OutputEmitterRef<FilterDropdownGroup>;
313
319
  readonly isOpen: _angular_core.Signal<boolean>;
320
+ private panelOpenAtGestureStart;
314
321
  savePresetsDropdownItems: _angular_core.Signal<ActionDropdownItem[]>;
315
322
  /** Opens the dropdown menu at the specified trigger element */
316
323
  open(triggerElement?: HTMLElement): void;
324
+ /** A leaf's panel closes on the pointerdown or keydown that dismisses it, so snapshot the flag then: by dismissal it reads false. */
325
+ private trackDismissalGestures;
326
+ /** Backdrop click / Escape: close, unless the gesture was a leaf panel's own dismissal. */
327
+ private dismiss;
317
328
  /** Closes the dropdown menu and cleans up overlay resources */
318
329
  close(): void;
319
330
  /** Toggles the dropdown menu open or closed state */
@@ -326,8 +337,6 @@ declare class FilterDropdownComponent implements DropdownOverlay {
326
337
  onLeafEdit(edit: FilterValueEdit): void;
327
338
  /** Manual-apply commit (Apply button; only rendered when `needApplyButton`). Applying also dismisses the panel. */
328
339
  onApplyFilters(): void;
329
- /** Dismiss without applying: the draft goes back to the last committed value, so reopening shows no leftover edits. */
330
- onCancelFilters(): void;
331
340
  onClearFilters(): void;
332
341
  onResetFilters(): void;
333
342
  /** In auto-apply mode, push the current draft to the consumer. The single place clear/reset/leaf-edit funnel through. */
@@ -336,7 +345,7 @@ declare class FilterDropdownComponent implements DropdownOverlay {
336
345
  onUpdatePresets(): void;
337
346
  protected onActionDropdownItemClick(item: ActionDropdownItem): void;
338
347
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterDropdownComponent, never>;
339
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterDropdownComponent, "ap-filter-dropdown", never, { "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "savedValue": { "alias": "savedValue"; "required": false; "isSignal": true; }; "needApplyButton": { "alias": "needApplyButton"; "required": false; "isSignal": true; }; "needCancelButton": { "alias": "needCancelButton"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "expandOnOpen": { "alias": "expandOnOpen"; "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; }; "defaultPosition": { "alias": "defaultPosition"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "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; }; "cancelFilterText": { "alias": "cancelFilterText"; "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>;
348
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterDropdownComponent, "ap-filter-dropdown", never, { "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "savedValue": { "alias": "savedValue"; "required": false; "isSignal": true; }; "needApplyButton": { "alias": "needApplyButton"; "required": false; "isSignal": true; }; "needClearButton": { "alias": "needClearButton"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "expandOnOpen": { "alias": "expandOnOpen"; "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; }; "defaultPosition": { "alias": "defaultPosition"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "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>;
340
349
  }
341
350
 
342
351
  declare class FilterDropdownButtonComponent {
@@ -354,8 +363,8 @@ declare class FilterDropdownButtonComponent {
354
363
  savedValue: _angular_core.InputSignal<FilterDropdownOutput | undefined>;
355
364
  /** Whether the filter needs the apply button to be clicked for applyFilters to emit */
356
365
  needApplyButton: _angular_core.InputSignal<boolean>;
357
- /** Whether to offer a cancel button that discards the unapplied draft and closes the dropdown. */
358
- needCancelButton: _angular_core.InputSignal<boolean>;
366
+ /** Whether to offer a clear button that empties every group's selection. */
367
+ needClearButton: _angular_core.InputSignal<boolean>;
359
368
  /** 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. */
360
369
  closable: _angular_core.InputSignal<boolean>;
361
370
  /** Policy deciding which groups start expanded on each open ('collapse-empty' | predicate). Omitted → persist. */
@@ -381,7 +390,6 @@ declare class FilterDropdownButtonComponent {
381
390
  resetFilterText: _angular_core.InputSignal<string>;
382
391
  applyFiltersText: _angular_core.InputSignal<string>;
383
392
  clearFilterText: _angular_core.InputSignal<string>;
384
- cancelFilterText: _angular_core.InputSignal<string>;
385
393
  /** Emits when the dropdown menu is opened */
386
394
  opened: _angular_core.OutputEmitterRef<void>;
387
395
  /** Emits when the dropdown menu is closed */
@@ -403,7 +411,7 @@ declare class FilterDropdownButtonComponent {
403
411
  /** Event emitted when a group with locked feature is clicked */
404
412
  filterDropdownGroupLockedClicked: _angular_core.OutputEmitterRef<FilterDropdownGroup>;
405
413
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterDropdownButtonComponent, never>;
406
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterDropdownButtonComponent, "ap-filter-dropdown-button", never, { "buttonFilterText": { "alias": "buttonFilterText"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "savedValue": { "alias": "savedValue"; "required": false; "isSignal": true; }; "needApplyButton": { "alias": "needApplyButton"; "required": false; "isSignal": true; }; "needCancelButton": { "alias": "needCancelButton"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "expandOnOpen": { "alias": "expandOnOpen"; "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; }; "panelClass": { "alias": "panelClass"; "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; }; "cancelFilterText": { "alias": "cancelFilterText"; "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>;
414
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterDropdownButtonComponent, "ap-filter-dropdown-button", never, { "buttonFilterText": { "alias": "buttonFilterText"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "savedValue": { "alias": "savedValue"; "required": false; "isSignal": true; }; "needApplyButton": { "alias": "needApplyButton"; "required": false; "isSignal": true; }; "needClearButton": { "alias": "needClearButton"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "expandOnOpen": { "alias": "expandOnOpen"; "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; }; "panelClass": { "alias": "panelClass"; "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>;
407
415
  }
408
416
 
409
417
  export { FilterDropdownButtonComponent, FilterDropdownComponent };