@agorapulse/ui-components 22.0.28 → 22.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agorapulse-ui-components-22.0.30.tgz +0 -0
- package/fesm2022/agorapulse-ui-components-dropdown-base.mjs +4 -6
- package/fesm2022/agorapulse-ui-components-dropdown-base.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs +58 -26
- package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-nav-selector-testing.mjs +4 -2
- package/fesm2022/agorapulse-ui-components-nav-selector-testing.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs +279 -141
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -1
- package/package.json +1 -1
- package/types/agorapulse-ui-components-filter-dropdown.d.ts +16 -10
- package/types/agorapulse-ui-components-nav-selector-testing.d.ts +3 -1
- package/types/agorapulse-ui-components-nav-selector.d.ts +33 -1
- package/agorapulse-ui-components-22.0.28.tgz +0 -0
package/package.json
CHANGED
|
@@ -184,6 +184,7 @@ declare class FilterState {
|
|
|
184
184
|
private readonly _draft;
|
|
185
185
|
private readonly _baseline;
|
|
186
186
|
private readonly _expanded;
|
|
187
|
+
private readonly _openPanelKeys;
|
|
187
188
|
readonly groups: _angular_core.Signal<FilterDropdownGroup[]>;
|
|
188
189
|
readonly draft: _angular_core.Signal<FilterDropdownOutput>;
|
|
189
190
|
readonly expanded: _angular_core.Signal<Record<string, boolean>>;
|
|
@@ -194,6 +195,8 @@ declare class FilterState {
|
|
|
194
195
|
readonly buttonsDisabled: _angular_core.Signal<boolean>;
|
|
195
196
|
/** Clear is gated on "is there anything to clear", not on dirty state. */
|
|
196
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>;
|
|
197
200
|
/** Refresh the structural schema and reconcile the value keyspace (add empty / drop removed). */
|
|
198
201
|
setSchema(groups: FilterDropdownGroup[]): void;
|
|
199
202
|
/** Seed the draft from an external value, projected onto the current keyspace. Echo-gated, silent. */
|
|
@@ -216,6 +219,8 @@ declare class FilterState {
|
|
|
216
219
|
* the edge where the DOM event happens.
|
|
217
220
|
*/
|
|
218
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;
|
|
219
224
|
/** Whether a group is currently expanded. Defaults to collapsed for unknown keys. */
|
|
220
225
|
isExpanded(key: string): boolean;
|
|
221
226
|
/** Toggle a group's expand/collapse state. Updates internal state only — the config is never mutated. */
|
|
@@ -262,8 +267,8 @@ declare class FilterDropdownComponent implements DropdownOverlay {
|
|
|
262
267
|
savedValue: _angular_core.InputSignal<FilterDropdownOutput | undefined>;
|
|
263
268
|
/** Whether the filter needs the apply button to be clicked for applyFilters to emit */
|
|
264
269
|
needApplyButton: _angular_core.InputSignal<boolean>;
|
|
265
|
-
/** Whether to offer a
|
|
266
|
-
|
|
270
|
+
/** Whether to offer a clear button that empties every group's selection. */
|
|
271
|
+
needClearButton: _angular_core.InputSignal<boolean>;
|
|
267
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. */
|
|
268
273
|
closable: _angular_core.InputSignal<boolean>;
|
|
269
274
|
/**
|
|
@@ -291,7 +296,6 @@ declare class FilterDropdownComponent implements DropdownOverlay {
|
|
|
291
296
|
resetFilterText: _angular_core.InputSignal<string>;
|
|
292
297
|
applyFiltersText: _angular_core.InputSignal<string>;
|
|
293
298
|
clearFilterText: _angular_core.InputSignal<string>;
|
|
294
|
-
cancelFilterText: _angular_core.InputSignal<string>;
|
|
295
299
|
/** Emits when the dropdown menu is opened */
|
|
296
300
|
opened: _angular_core.OutputEmitterRef<void>;
|
|
297
301
|
/** Emits when the dropdown menu is closed */
|
|
@@ -313,9 +317,14 @@ declare class FilterDropdownComponent implements DropdownOverlay {
|
|
|
313
317
|
/** Event emitted when a group with locked feature is clicked */
|
|
314
318
|
filterDropdownGroupLockedClicked: _angular_core.OutputEmitterRef<FilterDropdownGroup>;
|
|
315
319
|
readonly isOpen: _angular_core.Signal<boolean>;
|
|
320
|
+
private panelOpenAtGestureStart;
|
|
316
321
|
savePresetsDropdownItems: _angular_core.Signal<ActionDropdownItem[]>;
|
|
317
322
|
/** Opens the dropdown menu at the specified trigger element */
|
|
318
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;
|
|
319
328
|
/** Closes the dropdown menu and cleans up overlay resources */
|
|
320
329
|
close(): void;
|
|
321
330
|
/** Toggles the dropdown menu open or closed state */
|
|
@@ -328,8 +337,6 @@ declare class FilterDropdownComponent implements DropdownOverlay {
|
|
|
328
337
|
onLeafEdit(edit: FilterValueEdit): void;
|
|
329
338
|
/** Manual-apply commit (Apply button; only rendered when `needApplyButton`). Applying also dismisses the panel. */
|
|
330
339
|
onApplyFilters(): void;
|
|
331
|
-
/** Dismiss without applying: the draft goes back to the last committed value, so reopening shows no leftover edits. */
|
|
332
|
-
onCancelFilters(): void;
|
|
333
340
|
onClearFilters(): void;
|
|
334
341
|
onResetFilters(): void;
|
|
335
342
|
/** In auto-apply mode, push the current draft to the consumer. The single place clear/reset/leaf-edit funnel through. */
|
|
@@ -338,7 +345,7 @@ declare class FilterDropdownComponent implements DropdownOverlay {
|
|
|
338
345
|
onUpdatePresets(): void;
|
|
339
346
|
protected onActionDropdownItemClick(item: ActionDropdownItem): void;
|
|
340
347
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterDropdownComponent, never>;
|
|
341
|
-
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; }; "
|
|
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>;
|
|
342
349
|
}
|
|
343
350
|
|
|
344
351
|
declare class FilterDropdownButtonComponent {
|
|
@@ -356,8 +363,8 @@ declare class FilterDropdownButtonComponent {
|
|
|
356
363
|
savedValue: _angular_core.InputSignal<FilterDropdownOutput | undefined>;
|
|
357
364
|
/** Whether the filter needs the apply button to be clicked for applyFilters to emit */
|
|
358
365
|
needApplyButton: _angular_core.InputSignal<boolean>;
|
|
359
|
-
/** Whether to offer a
|
|
360
|
-
|
|
366
|
+
/** Whether to offer a clear button that empties every group's selection. */
|
|
367
|
+
needClearButton: _angular_core.InputSignal<boolean>;
|
|
361
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. */
|
|
362
369
|
closable: _angular_core.InputSignal<boolean>;
|
|
363
370
|
/** Policy deciding which groups start expanded on each open ('collapse-empty' | predicate). Omitted → persist. */
|
|
@@ -383,7 +390,6 @@ declare class FilterDropdownButtonComponent {
|
|
|
383
390
|
resetFilterText: _angular_core.InputSignal<string>;
|
|
384
391
|
applyFiltersText: _angular_core.InputSignal<string>;
|
|
385
392
|
clearFilterText: _angular_core.InputSignal<string>;
|
|
386
|
-
cancelFilterText: _angular_core.InputSignal<string>;
|
|
387
393
|
/** Emits when the dropdown menu is opened */
|
|
388
394
|
opened: _angular_core.OutputEmitterRef<void>;
|
|
389
395
|
/** Emits when the dropdown menu is closed */
|
|
@@ -405,7 +411,7 @@ declare class FilterDropdownButtonComponent {
|
|
|
405
411
|
/** Event emitted when a group with locked feature is clicked */
|
|
406
412
|
filterDropdownGroupLockedClicked: _angular_core.OutputEmitterRef<FilterDropdownGroup>;
|
|
407
413
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterDropdownButtonComponent, never>;
|
|
408
|
-
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; }; "
|
|
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>;
|
|
409
415
|
}
|
|
410
416
|
|
|
411
417
|
export { FilterDropdownButtonComponent, FilterDropdownComponent };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AvatarNetwork } from '@agorapulse/ui-components/avatar';
|
|
2
|
-
import { NavSelectorLeafAction, NavSelectorLeafDetails, NavSelectorLeaf } from '@agorapulse/ui-components/nav-selector';
|
|
2
|
+
import { NavSelectorLeafAction, NavSelectorLeafDetails, NavSelectorLeafTags, NavSelectorLeaf } from '@agorapulse/ui-components/nav-selector';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Usage Example:
|
|
@@ -35,6 +35,7 @@ declare function generateLeafElements(options: {
|
|
|
35
35
|
featureLockedFrequency?: number;
|
|
36
36
|
actions?: NavSelectorLeafAction[];
|
|
37
37
|
details?: Partial<NavSelectorLeafDetails>[];
|
|
38
|
+
tags?: NavSelectorLeafTags;
|
|
38
39
|
}, customizer?: (leaf: NavSelectorLeaf, index: number) => NavSelectorLeaf): NavSelectorLeaf[];
|
|
39
40
|
/**
|
|
40
41
|
* Utility function to generate group type elements with children
|
|
@@ -58,6 +59,7 @@ declare function generateGroupElements(options: {
|
|
|
58
59
|
featureLockedFrequency?: number;
|
|
59
60
|
actions?: NavSelectorLeafAction[];
|
|
60
61
|
details?: Partial<NavSelectorLeafDetails>[];
|
|
62
|
+
tags?: NavSelectorLeafTags;
|
|
61
63
|
}): any;
|
|
62
64
|
|
|
63
65
|
export { generateGroupElements, generateLeafElements };
|
|
@@ -42,6 +42,18 @@ interface NavSelectorTranslatedTexts {
|
|
|
42
42
|
viewMore: string;
|
|
43
43
|
/** Text of the button to show less details, it’s used when we limit the number of details displayed */
|
|
44
44
|
viewLess: string;
|
|
45
|
+
/** Text of the button opening the filter dropdown */
|
|
46
|
+
filter: string;
|
|
47
|
+
/** Text of the button clearing the filters inside the filter dropdown */
|
|
48
|
+
clearFilters: string;
|
|
49
|
+
/** Text of the button applying the filters picked inside the filter dropdown */
|
|
50
|
+
applyFilters: string;
|
|
51
|
+
/**
|
|
52
|
+
* Heading of each tag group inside the filter dropdown, keyed by tag name. Tag names are a structural taxonomy, not
|
|
53
|
+
* consumer data like the tag values are, so they need a translation of their own. Keying on `NavSelectorLeafTags`
|
|
54
|
+
* makes the compiler ask for one whenever a tag name is added.
|
|
55
|
+
*/
|
|
56
|
+
tagNames: Record<keyof NavSelectorLeafTags, string>;
|
|
45
57
|
}
|
|
46
58
|
/**
|
|
47
59
|
* Common interface for the NavSelector
|
|
@@ -69,6 +81,12 @@ type NavSelectorLeafAction = {
|
|
|
69
81
|
/** Whether to add a divider before this item */
|
|
70
82
|
dividerEnabled?: boolean;
|
|
71
83
|
};
|
|
84
|
+
/**
|
|
85
|
+
* Represent tags on a leaf. It can support many kind of tags so it is flexible
|
|
86
|
+
*/
|
|
87
|
+
type NavSelectorLeafTags = {
|
|
88
|
+
attributes: string[];
|
|
89
|
+
};
|
|
72
90
|
/**
|
|
73
91
|
* Represent final entry of the nav selector
|
|
74
92
|
*/
|
|
@@ -97,6 +115,8 @@ type NavSelectorLeaf = {
|
|
|
97
115
|
details: NavSelectorLeafDetails[];
|
|
98
116
|
/** Optional actions that can be performed on the leaf */
|
|
99
117
|
actions: NavSelectorLeafAction[];
|
|
118
|
+
/** List of tags */
|
|
119
|
+
tags: NavSelectorLeafTags;
|
|
100
120
|
type: 'LEAF';
|
|
101
121
|
} & NavSelectorBaseNode;
|
|
102
122
|
/**
|
|
@@ -244,6 +264,12 @@ type InternalNavSelectorCategory = {
|
|
|
244
264
|
avatarPictureUrlDisplayed: boolean;
|
|
245
265
|
type: 'CATEGORY';
|
|
246
266
|
} & InternalNavSelectorBaseNode;
|
|
267
|
+
/**
|
|
268
|
+
* Represent final tags of leaf. It can support many kind of tags so it is flexible.
|
|
269
|
+
*/
|
|
270
|
+
type InternalNavSelectorLeafTags = {
|
|
271
|
+
attributes: string[];
|
|
272
|
+
};
|
|
247
273
|
/**
|
|
248
274
|
* Represent final entry of the nav selector
|
|
249
275
|
*/
|
|
@@ -291,6 +317,8 @@ type InternalNavSelectorLeaf = {
|
|
|
291
317
|
/** Details of the leaf */
|
|
292
318
|
details: InternalNavSelectorLeafDetails[];
|
|
293
319
|
type: 'LEAF';
|
|
320
|
+
/** List of tags of the leaf */
|
|
321
|
+
tags: InternalNavSelectorLeafTags;
|
|
294
322
|
/** Indicates if the view more section should be display for details */
|
|
295
323
|
viewMoreDisplayable: boolean;
|
|
296
324
|
/** Indicates if the view more or view less button is displayed */
|
|
@@ -343,6 +371,8 @@ declare class NavSelectorState {
|
|
|
343
371
|
style: Signal<NavSelectorStyle>;
|
|
344
372
|
private multipleModeEnabled;
|
|
345
373
|
private _texts;
|
|
374
|
+
tagsFilterDisplayed: Signal<boolean>;
|
|
375
|
+
tagsFilters: _angular_core.WritableSignal<Partial<InternalNavSelectorLeafTags>>;
|
|
346
376
|
isMultipleModeEnabled: _angular_core.WritableSignal<boolean>;
|
|
347
377
|
search: _angular_core.WritableSignal<string>;
|
|
348
378
|
noResults: Signal<boolean>;
|
|
@@ -380,6 +410,8 @@ declare class NavSelectorState {
|
|
|
380
410
|
onArrowUp(): void;
|
|
381
411
|
private collectSelectedUids;
|
|
382
412
|
private getFoldingOptions;
|
|
413
|
+
filterTags(tags: InternalNavSelectorLeafTags): void;
|
|
414
|
+
clearFilterTags(): void;
|
|
383
415
|
fold(entry: InternalNavSelectorEntry): void;
|
|
384
416
|
unfold(entry: InternalNavSelectorEntry): void;
|
|
385
417
|
updateDetailsDisplayedLimit(detailsDisplayedLimit: number): void;
|
|
@@ -441,4 +473,4 @@ declare class NavSelectorComponent implements OnInit {
|
|
|
441
473
|
}
|
|
442
474
|
|
|
443
475
|
export { NavSelectorComponent, NavSelectorPopoverItemComponent };
|
|
444
|
-
export type { NavSelectorCategory, NavSelectorCategoryEmptyStateActionEvent, NavSelectorEntry, NavSelectorGroup, NavSelectorLeaf, NavSelectorLeafAction, NavSelectorLeafActionClickedEvent, NavSelectorLeafDetails, NavSelectorTranslatedTexts, NodeAccessibility };
|
|
476
|
+
export type { NavSelectorCategory, NavSelectorCategoryEmptyStateActionEvent, NavSelectorEntry, NavSelectorGroup, NavSelectorLeaf, NavSelectorLeafAction, NavSelectorLeafActionClickedEvent, NavSelectorLeafDetails, NavSelectorLeafTags, NavSelectorTranslatedTexts, NodeAccessibility };
|
|
Binary file
|