@agorapulse/ui-components 18.0.9 → 18.0.11

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.
Files changed (65) hide show
  1. package/agorapulse-ui-components-18.0.11.tgz +0 -0
  2. package/esm2022/datepicker/datepicker.component.mjs +1 -1
  3. package/esm2022/index.mjs +2 -1
  4. package/esm2022/input-search/input-search.component.mjs +5 -4
  5. package/esm2022/nav-selector/agorapulse-ui-components-nav-selector.mjs +5 -0
  6. package/esm2022/nav-selector/directives/tree-node-accessibility.directive.mjs +30 -0
  7. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.component.mjs +81 -0
  8. package/esm2022/nav-selector/nav-selector-category/nav-selector-category.presenter.mjs +29 -0
  9. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.component.mjs +142 -0
  10. package/esm2022/nav-selector/nav-selector-group/nav-selector-group.presenter.mjs +31 -0
  11. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.component.mjs +240 -0
  12. package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.mjs +35 -0
  13. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.mjs +39 -0
  14. package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.mjs +18 -0
  15. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.mjs +92 -0
  16. package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.mjs +31 -0
  17. package/esm2022/nav-selector/nav-selector.component.mjs +123 -0
  18. package/esm2022/nav-selector/nav-selector.mjs +9 -0
  19. package/esm2022/nav-selector/nav-selector.state.mjs +173 -0
  20. package/esm2022/nav-selector/public_api.mjs +2 -0
  21. package/esm2022/nav-selector/utils/leaf.utils.mjs +10 -0
  22. package/esm2022/nav-selector/utils/nav-selector.accessibility.mjs +171 -0
  23. package/esm2022/nav-selector/utils/nav-selector.builder.mjs +263 -0
  24. package/esm2022/nav-selector/utils/nav-selector.filter.mjs +102 -0
  25. package/esm2022/nav-selector/utils/nav-selector.folding.mjs +219 -0
  26. package/esm2022/nav-selector/utils/nav-selector.minifying.mjs +50 -0
  27. package/esm2022/nav-selector/utils/nav-selector.multi-select.mjs +208 -0
  28. package/esm2022/nav-selector/utils/nav-selector.single-select.mjs +91 -0
  29. package/esm2022/nav-selector/utils/nav-selector.view-more.mjs +98 -0
  30. package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
  31. package/fesm2022/agorapulse-ui-components-input-search.mjs +4 -3
  32. package/fesm2022/agorapulse-ui-components-input-search.mjs.map +1 -1
  33. package/fesm2022/agorapulse-ui-components-nav-selector.mjs +2198 -0
  34. package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -0
  35. package/fesm2022/agorapulse-ui-components.mjs +1 -0
  36. package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
  37. package/index.d.ts +1 -0
  38. package/input-search/input-search.component.d.ts +1 -1
  39. package/nav-selector/directives/tree-node-accessibility.directive.d.ts +9 -0
  40. package/nav-selector/index.d.ts +5 -0
  41. package/nav-selector/nav-selector-category/nav-selector-category.component.d.ts +16 -0
  42. package/nav-selector/nav-selector-category/nav-selector-category.presenter.d.ts +14 -0
  43. package/nav-selector/nav-selector-group/nav-selector-group.component.d.ts +29 -0
  44. package/nav-selector/nav-selector-group/nav-selector-group.presenter.d.ts +17 -0
  45. package/nav-selector/nav-selector-leaf/nav-selector-leaf.component.d.ts +51 -0
  46. package/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.d.ts +19 -0
  47. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.d.ts +13 -0
  48. package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.d.ts +10 -0
  49. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.d.ts +24 -0
  50. package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.d.ts +14 -0
  51. package/nav-selector/nav-selector.component.d.ts +29 -0
  52. package/nav-selector/nav-selector.d.ts +220 -0
  53. package/nav-selector/nav-selector.state.d.ts +47 -0
  54. package/nav-selector/public_api.d.ts +2 -0
  55. package/nav-selector/utils/leaf.utils.d.ts +5 -0
  56. package/nav-selector/utils/nav-selector.accessibility.d.ts +52 -0
  57. package/nav-selector/utils/nav-selector.builder.d.ts +32 -0
  58. package/nav-selector/utils/nav-selector.filter.d.ts +30 -0
  59. package/nav-selector/utils/nav-selector.folding.d.ts +47 -0
  60. package/nav-selector/utils/nav-selector.minifying.d.ts +27 -0
  61. package/nav-selector/utils/nav-selector.multi-select.d.ts +54 -0
  62. package/nav-selector/utils/nav-selector.single-select.d.ts +15 -0
  63. package/nav-selector/utils/nav-selector.view-more.d.ts +30 -0
  64. package/package.json +13 -7
  65. package/agorapulse-ui-components-18.0.9.tgz +0 -0
package/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export { SelectComponent } from '@agorapulse/ui-components/legacy/select';
22
22
  export { TextareaComponent } from '@agorapulse/ui-components/legacy/textarea';
23
23
  export { MediaDisplayOverlayDialogComponent } from '@agorapulse/ui-components/media-display-overlay';
24
24
  export { ModalComponent, ModalConfig } from '@agorapulse/ui-components/modal';
25
+ export { NavSelectorComponent } from '@agorapulse/ui-components/nav-selector';
25
26
  export { DayDisabledPipe, NeoDatePickerLocale, NeoDatePickerMode, NeoDatePickerStartsOn, NeoDatepickerComponent, } from '@agorapulse/ui-components/neo-datepicker';
26
27
  export { NotificationComponent } from '@agorapulse/ui-components/notification';
27
28
  export { PaginatorButtonComponent, PaginatorComponent } from '@agorapulse/ui-components/paginator';
@@ -23,7 +23,7 @@ export declare class InputSearchComponent implements ControlValueAccessor {
23
23
  focusInput(): void;
24
24
  writeValue(value: string | null): void;
25
25
  setDisabledState(isDisabled: boolean): void;
26
- onClear(): void;
26
+ onClear($event: Event): void;
27
27
  onFocusHandle($event: FocusEvent): void;
28
28
  onBlurHandle($event: FocusEvent): void;
29
29
  onKeyup($event: KeyboardEvent): void;
@@ -0,0 +1,9 @@
1
+ import { ElementRef, Renderer2 } from '@angular/core';
2
+ import { InternalNavSelectorEntry } from '../nav-selector';
3
+ import * as i0 from "@angular/core";
4
+ export declare class TreeNodeAccessibilityDirective {
5
+ apTreeNodeAccessibility: import("@angular/core").InputSignal<InternalNavSelectorEntry>;
6
+ constructor(el: ElementRef, renderer: Renderer2);
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<TreeNodeAccessibilityDirective, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TreeNodeAccessibilityDirective, "[apTreeNodeAccessibility]", never, { "apTreeNodeAccessibility": { "alias": "apTreeNodeAccessibility"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
9
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@agorapulse/ui-components/nav-selector" />
5
+ export * from './public_api';
@@ -0,0 +1,16 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { InternalNavSelectorCategory } from '../nav-selector';
3
+ import { NavSelectorCategoryPresenter } from './nav-selector-category.presenter';
4
+ import * as i0 from "@angular/core";
5
+ export declare class NavSelectorCategoryComponent {
6
+ private el;
7
+ navSelectorCategoryPresenter: NavSelectorCategoryPresenter;
8
+ category: import("@angular/core").InputSignal<InternalNavSelectorCategory>;
9
+ foldSymbol: import("@angular/core").Signal<"chevron-down" | "chevron-up">;
10
+ foldedWithDelay: import("@angular/core").WritableSignal<boolean>;
11
+ animationState: import("@angular/core").Signal<"collapsed" | "expanded">;
12
+ constructor(el: ElementRef, navSelectorCategoryPresenter: NavSelectorCategoryPresenter);
13
+ maxHeight: import("@angular/core").WritableSignal<string>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorCategoryComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavSelectorCategoryComponent, "ap-nav-selector-category", never, { "category": { "alias": "category"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
16
+ }
@@ -0,0 +1,14 @@
1
+ import { InternalNavSelectorCategory } from '../nav-selector';
2
+ import { NavSelectorState } from '../nav-selector.state';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NavSelectorCategoryPresenter {
5
+ private navSelectorState;
6
+ expanded: import("@angular/core").Signal<boolean>;
7
+ expandedAfterDelay: import("@angular/core").Signal<boolean>;
8
+ constructor(navSelectorState: NavSelectorState);
9
+ toggleFolding(event: Event, category: InternalNavSelectorCategory): void;
10
+ fold(event: Event, category: InternalNavSelectorCategory): void;
11
+ unfold(event: Event, category: InternalNavSelectorCategory): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorCategoryPresenter, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<NavSelectorCategoryPresenter>;
14
+ }
@@ -0,0 +1,29 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { InternalNavSelectorGroup } from '../nav-selector';
3
+ import { NavSelectorGroupPresenter } from './nav-selector-group.presenter';
4
+ import * as i0 from "@angular/core";
5
+ export declare class NavSelectorGroupComponent {
6
+ private el;
7
+ navSelectorGroupPresenter: NavSelectorGroupPresenter;
8
+ group: import("@angular/core").InputSignal<InternalNavSelectorGroup>;
9
+ foldSymbol: import("@angular/core").Signal<"chevron-down" | "chevron-up">;
10
+ aliasEl: import("@angular/core").Signal<ElementRef<any> | undefined>;
11
+ aliasBoundedClientRect: import("@angular/core").WritableSignal<{
12
+ offsetWidth: number;
13
+ offsetHeight: number;
14
+ scrollWidth: number;
15
+ scrollHeight: number;
16
+ }>;
17
+ tooltipContent: import("@angular/core").Signal<string>;
18
+ tooltipDisabled: import("@angular/core").Signal<boolean>;
19
+ foldedWithDelay: import("@angular/core").WritableSignal<boolean>;
20
+ animationState: import("@angular/core").Signal<"collapsed" | "expanded">;
21
+ constructor(el: ElementRef, navSelectorGroupPresenter: NavSelectorGroupPresenter);
22
+ maxHeight: import("@angular/core").WritableSignal<string>;
23
+ onKeydownSpaceOrEnter($event: Event): void;
24
+ toggleFolding(event: Event): void;
25
+ fold(event: Event): void;
26
+ unfold(event: Event): void;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorGroupComponent, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavSelectorGroupComponent, "ap-nav-selector-group", never, { "group": { "alias": "group"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
29
+ }
@@ -0,0 +1,17 @@
1
+ import { InternalNavSelectorGroup } from '../nav-selector';
2
+ import { NavSelectorState } from '../nav-selector.state';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NavSelectorGroupPresenter {
5
+ private navSelectorState;
6
+ expanded: import("@angular/core").Signal<boolean>;
7
+ texts: import("@angular/core").Signal<import("../nav-selector").NavSelectorTranslatedTexts>;
8
+ isMultipleModeEnabled: import("@angular/core").Signal<boolean>;
9
+ expandedAfterDelay: import("@angular/core").Signal<boolean>;
10
+ constructor(navSelectorState: NavSelectorState);
11
+ onGroupSelected(group: InternalNavSelectorGroup): void;
12
+ onGroupToggleFolding(group: InternalNavSelectorGroup): void;
13
+ fold(group: InternalNavSelectorGroup): void;
14
+ unfold(group: InternalNavSelectorGroup): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorGroupPresenter, never>;
16
+ static ɵprov: i0.ɵɵInjectableDeclaration<NavSelectorGroupPresenter>;
17
+ }
@@ -0,0 +1,51 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { MatMenuTrigger } from '@angular/material/menu';
3
+ import { InternalNavSelectorLeaf } from '../nav-selector';
4
+ import { NavSelectorLeafPresenter } from './nav-selector-leaf.presenter';
5
+ import * as i0 from "@angular/core";
6
+ export declare class NavSelectorLeafComponent {
7
+ private el;
8
+ navSelectorLeafPresenter: NavSelectorLeafPresenter;
9
+ leaf: import("@angular/core").InputSignal<InternalNavSelectorLeaf>;
10
+ initial: import("@angular/core").Signal<string>;
11
+ foldSymbol: import("@angular/core").Signal<"chevron-down" | "chevron-up">;
12
+ hovering: import("@angular/core").WritableSignal<boolean>;
13
+ hoveringMenu: import("@angular/core").WritableSignal<boolean>;
14
+ onlyButtonDisplayed: import("@angular/core").Signal<boolean>;
15
+ aliasEl: import("@angular/core").Signal<ElementRef<any> | undefined>;
16
+ aliasBoundedClientRect: import("@angular/core").WritableSignal<{
17
+ offsetWidth: number;
18
+ offsetHeight: number;
19
+ scrollWidth: number;
20
+ scrollHeight: number;
21
+ }>;
22
+ tooltipContent: import("@angular/core").Signal<string>;
23
+ tooltipDisabled: import("@angular/core").Signal<boolean>;
24
+ minifiedEl: import("@angular/core").Signal<ElementRef<any> | undefined>;
25
+ menuEl: import("@angular/core").Signal<ElementRef<any> | undefined>;
26
+ menuTriggerEl: import("@angular/core").Signal<MatMenuTrigger | undefined>;
27
+ actionMenuTriggerEl: import("@angular/core").Signal<MatMenuTrigger | undefined>;
28
+ foldedWithDelay: import("@angular/core").WritableSignal<boolean>;
29
+ network: import("@angular/core").Signal<"bluesky" | "facebook" | "instagram" | "linkedin" | "twitter" | "youtube" | "meta" | "google" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | null | undefined>;
30
+ constructor(el: ElementRef, navSelectorLeafPresenter: NavSelectorLeafPresenter);
31
+ animationState: import("@angular/core").Signal<"collapsed" | "expanded">;
32
+ maxHeight: import("@angular/core").WritableSignal<string>;
33
+ onClick($event: Event): void;
34
+ toggleFolding(event: Event): void;
35
+ mouseEntered(): void;
36
+ mouseLeft($event: MouseEvent): void;
37
+ mouseEnteredMenu(): void;
38
+ mouseLeftMenu(menuTrigger: MatMenuTrigger, $event: MouseEvent): void;
39
+ menuOpened(): void;
40
+ onActionButtonClick($event: Event): void;
41
+ onActionButtonKeyDownSpaceOrEnter($event: Event): void;
42
+ selectOnly(event: Event): void;
43
+ onCheckboxToggle(): void;
44
+ onSpaceOrEnterPressed($event: Event): void;
45
+ fold(event: Event): void;
46
+ unfold(event: Event): void;
47
+ private tryCloseMenu;
48
+ private mouseIsHovering;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorLeafComponent, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavSelectorLeafComponent, "ap-nav-selector-leaf", never, { "leaf": { "alias": "leaf"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
51
+ }
@@ -0,0 +1,19 @@
1
+ import { InternalNavSelectorLeaf } from '../nav-selector';
2
+ import { NavSelectorState } from '../nav-selector.state';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NavSelectorLeafPresenter {
5
+ private navSelectorState;
6
+ expanded: import("@angular/core").Signal<boolean>;
7
+ texts: import("@angular/core").Signal<import("../nav-selector").NavSelectorTranslatedTexts>;
8
+ isMultipleModeEnabled: import("@angular/core").Signal<boolean>;
9
+ leafActionProjection: import("@angular/core").Signal<readonly import("@angular/core").TemplateRef<unknown>[] | undefined>;
10
+ expandedAfterDelay: import("@angular/core").Signal<boolean>;
11
+ constructor(navSelectorState: NavSelectorState);
12
+ onLeafClicked(leaf: InternalNavSelectorLeaf): void;
13
+ onLeafToggleFolding(leaf: InternalNavSelectorLeaf): void;
14
+ selectOnlyLeaf(leaf: InternalNavSelectorLeaf): void;
15
+ fold(leaf: InternalNavSelectorLeaf): void;
16
+ unfold(leaf: InternalNavSelectorLeaf): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorLeafPresenter, never>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<NavSelectorLeafPresenter>;
19
+ }
@@ -0,0 +1,13 @@
1
+ import { InternalNavSelectorLeafDetails } from '../nav-selector';
2
+ import { NavSelectorLeafDetailPresenter } from './nav-selector-leaf-detail.presenter';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../directives/tree-node-accessibility.directive";
5
+ export declare class NavSelectorLeafDetailComponent {
6
+ navSelectorLeafDetailPresenter: NavSelectorLeafDetailPresenter;
7
+ detail: import("@angular/core").InputSignal<InternalNavSelectorLeafDetails>;
8
+ embedded: import("@angular/core").InputSignal<boolean>;
9
+ constructor(navSelectorLeafDetailPresenter: NavSelectorLeafDetailPresenter);
10
+ onClick($event: Event): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorLeafDetailComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavSelectorLeafDetailComponent, "ap-nav-selector-leaf-detail", never, { "detail": { "alias": "detail"; "required": true; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.TreeNodeAccessibilityDirective; inputs: { "apTreeNodeAccessibility": "detail"; }; outputs: {}; }]>;
13
+ }
@@ -0,0 +1,10 @@
1
+ import { InternalNavSelectorLeafDetails } from '../nav-selector';
2
+ import { NavSelectorState } from '../nav-selector.state';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NavSelectorLeafDetailPresenter {
5
+ private navSelectorState;
6
+ constructor(navSelectorState: NavSelectorState);
7
+ onLeafDetailClicked(detail: InternalNavSelectorLeafDetails): void;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorLeafDetailPresenter, never>;
9
+ static ɵprov: i0.ɵɵInjectableDeclaration<NavSelectorLeafDetailPresenter>;
10
+ }
@@ -0,0 +1,24 @@
1
+ import { AfterViewInit, ElementRef } from '@angular/core';
2
+ import { InternalNavSelectorLeaf, InternalNavSelectorLeafDetails } from '../nav-selector';
3
+ import { NavSelectorLeafDetailsPresenter } from '../nav-selector-leaf-details/nav-selector-leaf-details.presenter';
4
+ import * as i0 from "@angular/core";
5
+ export declare class NavSelectorLeafDetailsComponent implements AfterViewInit {
6
+ private el;
7
+ navSelectorLeafDetailsPresenter: NavSelectorLeafDetailsPresenter;
8
+ leaf: import("@angular/core").InputSignal<InternalNavSelectorLeaf>;
9
+ details: import("@angular/core").InputSignal<InternalNavSelectorLeafDetails[]>;
10
+ firstDetails: import("@angular/core").Signal<InternalNavSelectorLeafDetails[]>;
11
+ lastDetails: import("@angular/core").Signal<InternalNavSelectorLeafDetails[]>;
12
+ viewMoreDelay: import("@angular/core").WritableSignal<boolean>;
13
+ animationState: import("@angular/core").Signal<"collapsed" | "expanded">;
14
+ /**
15
+ * The height when details are all displayed
16
+ */
17
+ maxHeight: import("@angular/core").WritableSignal<string>;
18
+ constructor(el: ElementRef, navSelectorLeafDetailsPresenter: NavSelectorLeafDetailsPresenter);
19
+ ngAfterViewInit(): void;
20
+ toggleViewMore(): void;
21
+ onSpaceOrEnter(event: Event): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorLeafDetailsComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavSelectorLeafDetailsComponent, "ap-nav-selector-leaf-details", never, { "leaf": { "alias": "leaf"; "required": true; "isSignal": true; }; "details": { "alias": "details"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
24
+ }
@@ -0,0 +1,14 @@
1
+ import { InternalNavSelectorLeaf } from '../nav-selector';
2
+ import { NavSelectorState } from '../nav-selector.state';
3
+ import * as i0 from "@angular/core";
4
+ export declare class NavSelectorLeafDetailsPresenter {
5
+ private navSelectorState;
6
+ viewMoreText: import("@angular/core").Signal<string>;
7
+ viewLessText: import("@angular/core").Signal<string>;
8
+ constructor(navSelectorState: NavSelectorState);
9
+ toggleViewMore(leaf: InternalNavSelectorLeaf): void;
10
+ viewMore(leaf: InternalNavSelectorLeaf): void;
11
+ viewLess(leaf: InternalNavSelectorLeaf): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorLeafDetailsPresenter, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<NavSelectorLeafDetailsPresenter>;
14
+ }
@@ -0,0 +1,29 @@
1
+ import { ElementRef, TemplateRef } from '@angular/core';
2
+ import { NavSelectorEntry, NavSelectorTranslatedTexts } from './nav-selector';
3
+ import { NavSelectorState } from './nav-selector.state';
4
+ import * as i0 from "@angular/core";
5
+ export declare class NavSelectorComponent {
6
+ navSelectorState: NavSelectorState;
7
+ private el;
8
+ navSelectorEntries: import("@angular/core").InputSignal<NavSelectorEntry[]>;
9
+ translatedTexts: import("@angular/core").InputSignal<NavSelectorTranslatedTexts>;
10
+ multipleModeEnabled: import("@angular/core").InputSignal<boolean>;
11
+ detailsDisplayedLimit: import("@angular/core").InputSignal<number>;
12
+ /**
13
+ * If true, the nav selector will be expanded by default. Even if the width of the screen is smaller than 1280px.
14
+ */
15
+ forceExpanded: import("@angular/core").InputSignal<boolean>;
16
+ selectedEntryUids: import("@angular/core").ModelSignal<string[]>;
17
+ headerProjection: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
18
+ footerProjection: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
19
+ displayFooter: import("@angular/core").Signal<boolean>;
20
+ leafActionProjection: import("@angular/core").Signal<readonly TemplateRef<unknown>[]>;
21
+ expansionState: import("@angular/core").Signal<"expanded" | "minified">;
22
+ componentUid: string;
23
+ constructor(navSelectorState: NavSelectorState, el: ElementRef);
24
+ onArrowDown($event: Event): void;
25
+ onArrowUp($event: Event): void;
26
+ protected readonly TemplateRef: typeof TemplateRef;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorComponent, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavSelectorComponent, "ap-nav-selector", never, { "navSelectorEntries": { "alias": "navSelectorEntries"; "required": true; "isSignal": true; }; "translatedTexts": { "alias": "translatedTexts"; "required": true; "isSignal": true; }; "multipleModeEnabled": { "alias": "multipleModeEnabled"; "required": false; "isSignal": true; }; "detailsDisplayedLimit": { "alias": "detailsDisplayedLimit"; "required": false; "isSignal": true; }; "forceExpanded": { "alias": "forceExpanded"; "required": false; "isSignal": true; }; "selectedEntryUids": { "alias": "selectedEntryUids"; "required": true; "isSignal": true; }; }, { "selectedEntryUids": "selectedEntryUidsChange"; }, ["headerProjection", "footerProjection", "leafActionProjection"], never, true, never>;
29
+ }
@@ -0,0 +1,220 @@
1
+ import { AvatarNetwork } from '@agorapulse/ui-components/avatar';
2
+ /**
3
+ * As translation is not available in the DS, this all translations needed
4
+ */
5
+ export interface NavSelectorTranslatedTexts {
6
+ /** Title of the nav selector */
7
+ title: string;
8
+ /** Only text in multi select mode */
9
+ only: string;
10
+ /** Toolip displaying that token is invalid */
11
+ tokenInvalid: string;
12
+ /** Toolip displaying that feature is locked */
13
+ featureLocked: string;
14
+ /** placeholder for the search input */
15
+ searchPlaceholder: string;
16
+ /** Text displayed when the search return no results */
17
+ noResults: string;
18
+ /** Text of the button to show more details, it’s used when we limit the number of details displayed */
19
+ viewMore: string;
20
+ /** Text of the button to show less details, it’s used when we limit the number of details displayed */
21
+ viewLess: string;
22
+ }
23
+ /**
24
+ * Common interface for the NavSelector
25
+ */
26
+ export type NavSelectorBaseNode = {
27
+ /** Unique identifier of the node */
28
+ uid: string;
29
+ /** Displayed name of the node */
30
+ alias: string;
31
+ };
32
+ /**
33
+ * Represent final entry of the nav selector
34
+ */
35
+ export type NavSelectorLeaf = {
36
+ pictureUrl: string | null;
37
+ /** Counter to display on the entry, to ignore if the leaf has details */
38
+ counter: number | null;
39
+ /** When true, the leaf will be hidden */
40
+ missingPermission: boolean;
41
+ /** For social profiles or ad accounts the corresponding network */
42
+ network: AvatarNetwork | null;
43
+ /** Translated text when the entry is disabled */
44
+ disableReason: string | null;
45
+ /** Indicates if entry has its token invalid */
46
+ tokenInvalid: boolean;
47
+ /** Indicates if entry is locked */
48
+ featureLocked: boolean;
49
+ /** Sub elements of the leaf, they are optional */
50
+ details: NavSelectorLeafDetails[];
51
+ type: 'LEAF';
52
+ } & NavSelectorBaseNode;
53
+ /**
54
+ * Represent a group of entries which has been created by the user (ex: menuGroup)
55
+ */
56
+ export type NavSelectorGroup = {
57
+ /** A group can only have leaves as children */
58
+ children: NavSelectorLeaf[];
59
+ /** Indicates if the group should be folded or expanded when generating the nav selector */
60
+ folded: boolean;
61
+ type: 'GROUP';
62
+ } & NavSelectorBaseNode;
63
+ /**
64
+ * Represent a category of entries which has been created by the product to separate different kind of entries (ex: social profiles, reports, ad accounts…)
65
+ */
66
+ export type NavSelectorCategory = {
67
+ /** A Category can have leaves or groups as children, you can have leaves alongside with groups */
68
+ children: (NavSelectorLeaf | NavSelectorGroup)[];
69
+ /** Indicates if the group should be folded or expanded when generating the nav selector */
70
+ folded: boolean;
71
+ type: 'CATEGORY';
72
+ } & NavSelectorBaseNode;
73
+ export type NavSelectorEntry = NavSelectorLeaf | NavSelectorGroup | NavSelectorCategory;
74
+ /**
75
+ * Represent details of a leaf, they are used to allow to display more specific information about the leaf
76
+ */
77
+ export interface NavSelectorLeafDetails {
78
+ /** Unique identifier of the node */
79
+ uid: string;
80
+ /** Counter to display on the entry */
81
+ counter: number | null;
82
+ /** Displayed name of the node */
83
+ name: string;
84
+ /** Translation of the error on the leaf */
85
+ errorReason: string | null;
86
+ }
87
+ export declare const isNavSelectorEntryALeaf: (entry: NavSelectorEntry) => entry is NavSelectorLeaf;
88
+ export declare const isNavSelectorEntryAGroup: (entry: NavSelectorEntry) => entry is NavSelectorGroup;
89
+ export declare const isNavSelectorEntryACategory: (entry: NavSelectorEntry) => entry is NavSelectorCategory;
90
+ /**
91
+ * Represent the accessibility on a node
92
+ */
93
+ export type NodeAccessibility = {
94
+ /** Number of sibling elements, itself included. Ex: there are 7 social profiles display in the group */
95
+ ariaSetsize: number;
96
+ /** Index starting from 1 of the element alongside its sibling */
97
+ ariaPosinset: number;
98
+ /** 0 to be focusable by Tab key and -1 to be focusable by keyboard with JS */
99
+ tabIndex: number;
100
+ /** In a tree, the deep level, starting from 1 */
101
+ ariaLevel: number;
102
+ };
103
+ /**
104
+ * Represent a node
105
+ */
106
+ export type InternalNavSelectorBaseNode = {
107
+ /** Unique identifier of the entry */
108
+ uid: string;
109
+ /** Displayed name of the entry */
110
+ alias: string;
111
+ accessibility: NodeAccessibility;
112
+ /** When hidden, the entry is not displayed, used when searching an element */
113
+ hidden: boolean;
114
+ /** When true, you can navigate with arrow keys on this entry */
115
+ focusable: boolean;
116
+ };
117
+ /**
118
+ * Represent a group of entries which has been created by the user (ex: menuGroup)
119
+ */
120
+ export type InternalNavSelectorGroup = {
121
+ /** A group can only have leaves as children */
122
+ children: InternalNavSelectorLeaf[];
123
+ /** Picture url of the group, used when the nav selector is minified */
124
+ childrenPictureUrlSample: {
125
+ url: string | null;
126
+ initial: string;
127
+ }[];
128
+ /** Indicates whenever the group is folded or not */
129
+ folded: boolean;
130
+ /** Indicates the counter value to display when the group is folded */
131
+ counter: number;
132
+ /** Indicates if the counter should be display when the group is folded */
133
+ displayCounter: boolean;
134
+ /** Indicates if the token invalid icon should be display when the group is folded */
135
+ displayTokenInvalid: boolean;
136
+ /** Indicates in multi select mode if the group has some children selected */
137
+ undeterminedSelection: boolean;
138
+ /** Indicates if the group is selected */
139
+ selected: boolean;
140
+ /** Indicates if the group is selectable */
141
+ selectable: boolean;
142
+ type: 'GROUP';
143
+ } & InternalNavSelectorBaseNode;
144
+ /**
145
+ * Represent a category of entries which has been created by the product to separate different kind of entries (ex: social profiles, reports, ad accounts…)
146
+ */
147
+ export type InternalNavSelectorCategory = {
148
+ /** A Category can have leaves or groups as children, you can have leaves alongside with groups */
149
+ children: (InternalNavSelectorGroup | InternalNavSelectorLeaf)[];
150
+ /** Indicates whenever the category is folded or not */
151
+ folded: boolean;
152
+ type: 'CATEGORY';
153
+ } & InternalNavSelectorBaseNode;
154
+ /**
155
+ * Represent final entry of the nav selector
156
+ */
157
+ export type InternalNavSelectorLeaf = {
158
+ pictureUrl: string | null;
159
+ /** Indicates if the counter could be display. The leaf should not be disabled, feature locked or has token invalid */
160
+ counterDisplayable: boolean;
161
+ /** Indicates if the token invalid icon should be display. So when displayable when no details or folded */
162
+ displayCounter: boolean;
163
+ /** Counter value to display */
164
+ counter: number;
165
+ /** Indicates if the token invalid icon should be display */
166
+ displayTokenInvalid: boolean;
167
+ /** Indicates if the feature is locked */
168
+ displayFeatureLocked: boolean;
169
+ /** Indicates if the leaf is disabled */
170
+ disabled: boolean;
171
+ /** The disabled reason to display in tooltip */
172
+ disableReason: string | null;
173
+ /** Indicates if the leaf is selected */
174
+ selected: boolean;
175
+ /** Indicates if the leaf is selectable */
176
+ selectable: boolean;
177
+ /** For social profiles or ad accounts, the corresponding network */
178
+ network: AvatarNetwork | null;
179
+ /** Indicates if the leaf foldable. So when it has details and no error status */
180
+ foldable: boolean;
181
+ /** Indicates if the leaf is folded */
182
+ folded: boolean;
183
+ /** Indicates if the leaf has details and they are displayable. So no error status */
184
+ detailsDisplayable: boolean;
185
+ /** Details of the leaf */
186
+ details: InternalNavSelectorLeafDetails[];
187
+ type: 'LEAF';
188
+ /** Indicates if the view more section should be display for details */
189
+ viewMoreDisplayable: boolean;
190
+ /** Indicates if the view more or view less button is displayed */
191
+ viewMoreDisplayed: boolean;
192
+ /** Number of details to display when the view more is not clicked */
193
+ viewMoreDetailsDisplayedLimit: number;
194
+ } & InternalNavSelectorBaseNode;
195
+ /**
196
+ * Represent details of a leaf, they are used to allow to display more specific information about the leaf
197
+ */
198
+ export type InternalNavSelectorLeafDetails = {
199
+ /** Unique identifier of the node */
200
+ uid: string;
201
+ /** Counter to display on the detail */
202
+ counter: number;
203
+ /** Indicates if the counter should be display. So no error on the detail */
204
+ displayCounter: boolean;
205
+ /** Displayed name of the node */
206
+ alias: string;
207
+ /** Indicates if the detail is selected */
208
+ selected: boolean;
209
+ /** Indicates if we should display an error icon */
210
+ displayError: boolean;
211
+ /** Translated text to display in the tooltip */
212
+ errorReason: string | null;
213
+ type: 'LEAF_DETAILS';
214
+ } & InternalNavSelectorBaseNode;
215
+ export type InternalNavSelectorEntry = InternalNavSelectorLeaf | InternalNavSelectorGroup | InternalNavSelectorCategory | InternalNavSelectorLeafDetails;
216
+ export declare const isInternalNavSelectorEntryALeaf: (entry: InternalNavSelectorEntry) => entry is InternalNavSelectorLeaf;
217
+ export declare const isInternalNavSelectorEntryANode: (entry: InternalNavSelectorEntry) => entry is InternalNavSelectorCategory | InternalNavSelectorGroup;
218
+ export declare const isInternalNavSelectorEntryACategory: (entry: InternalNavSelectorEntry) => entry is InternalNavSelectorCategory;
219
+ export declare const isInternalNavSelectorEntryAGroup: (entry: InternalNavSelectorEntry) => entry is InternalNavSelectorGroup;
220
+ export declare const isInternalNavSelectorEntryALeafDetails: (entry: InternalNavSelectorEntry) => entry is InternalNavSelectorLeafDetails;
@@ -0,0 +1,47 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { InternalNavSelectorEntry, InternalNavSelectorLeaf, InternalNavSelectorLeafDetails, NavSelectorEntry, NavSelectorTranslatedTexts } from './nav-selector';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * NavSelectorState is a service that manages the state of the nav selector.
6
+ *
7
+ * It should be provided by the component to ensure that if many nav selectors are used in the same page, they don't share the same state.
8
+ */
9
+ export declare class NavSelectorState {
10
+ private entries;
11
+ private multipleModeEnabled;
12
+ private _texts;
13
+ private lastSelectedUids;
14
+ isMultipleModeEnabled: import("@angular/core").WritableSignal<boolean>;
15
+ search: import("@angular/core").WritableSignal<string>;
16
+ filteredEntries: import("@angular/core").Signal<InternalNavSelectorEntry[]>;
17
+ noResults: import("@angular/core").Signal<boolean>;
18
+ texts: import("@angular/core").Signal<NavSelectorTranslatedTexts>;
19
+ leafActionProjection: import("@angular/core").WritableSignal<readonly TemplateRef<unknown>[] | undefined>;
20
+ expanded: import("@angular/core").WritableSignal<boolean>;
21
+ expandedAfterDelay: import("@angular/core").WritableSignal<boolean>;
22
+ selectedUidsChangeCallback: ((selectedUids: string[]) => void) | null;
23
+ constructor();
24
+ updateMultiModeEnabled(enabled: boolean): void;
25
+ updateEntries(entries: NavSelectorEntry[], initialSelectedEntryUids: string[], detailsDisplayedLimit: number): void;
26
+ onGroupToggleFolding(group: InternalNavSelectorEntry): void;
27
+ onNodeSelect(node: InternalNavSelectorEntry): void;
28
+ onLeafClicked(leaf: InternalNavSelectorLeaf): void;
29
+ onLeafToggleFolding(leaf: InternalNavSelectorEntry): void;
30
+ onLeafDetailClicked(leafDetail: InternalNavSelectorLeafDetails): void;
31
+ updateTexts(texts: NavSelectorTranslatedTexts): void;
32
+ selectOnlyLeaf(leaf: InternalNavSelectorLeaf): void;
33
+ toggleExpanded(): void;
34
+ onSelectionChange(uids: string[]): void;
35
+ registerOnSelectedUidsChange(callback: (selectedUids: string[]) => void): void;
36
+ onArrowDown(): void;
37
+ onArrowUp(): void;
38
+ private collectSelectedUids;
39
+ updateLeafAction(leafActionProjection: ReadonlyArray<TemplateRef<unknown>>): void;
40
+ fold(entry: InternalNavSelectorEntry): void;
41
+ unfold(entry: InternalNavSelectorEntry): void;
42
+ updateDetailsDisplayedLimit(detailsDisplayedLimit: number): void;
43
+ viewMore(leaf: InternalNavSelectorLeaf): void;
44
+ viewLess(leaf: InternalNavSelectorLeaf): void;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavSelectorState, never>;
46
+ static ɵprov: i0.ɵɵInjectableDeclaration<NavSelectorState>;
47
+ }
@@ -0,0 +1,2 @@
1
+ export { NavSelectorCategory, NavSelectorGroup, NavSelectorLeaf, NavSelectorLeafDetails, NavSelectorTranslatedTexts, NodeAccessibility, } from './nav-selector';
2
+ export * from './nav-selector.component';
@@ -0,0 +1,5 @@
1
+ import { InternalNavSelectorLeaf } from '../nav-selector';
2
+ export declare const isInternalNavSelectorEntryALeafFocusable: (leaf: InternalNavSelectorLeaf, { parentFolded, minified }: {
3
+ parentFolded: boolean;
4
+ minified: boolean;
5
+ }) => boolean;
@@ -0,0 +1,52 @@
1
+ import { InternalNavSelectorEntry } from '../nav-selector';
2
+ /**
3
+ * NavSelectorAccessibility is a utility class that provides methods to manage the accessibility and the focusability of nav selector entries.
4
+ */
5
+ export declare class NavSelectorAccessibility {
6
+ /**
7
+ * Set tabIndex to 0 for the first focusable entry and -1 for all other entries
8
+ * @param entries nav selector entries
9
+ */
10
+ static resetFocus(entries: InternalNavSelectorEntry[]): InternalNavSelectorEntry[];
11
+ /**
12
+ * Focus the given entry and set tabIndex to 0 for the given uid and -1 for all other entries
13
+ * @param entries nav selector entries
14
+ * @param uid the uid of the entry to focus
15
+ */
16
+ static focus<T extends InternalNavSelectorEntry>(entries: T[], uid: string): InternalNavSelectorEntry[];
17
+ /**
18
+ * Unfocus the given entry and set tabIndex to -1 for the given uid and 0 for all other entries
19
+ * @param entries nav selector entries
20
+ * @param uid the uid of the entry to unfocus
21
+ */
22
+ static unfocus(entries: InternalNavSelectorEntry[], uid: string): InternalNavSelectorEntry[];
23
+ /**
24
+ * Focus the previous entry focusable and set tabIndex to 0 for the previous focusable entry and -1 for all other entries
25
+ *
26
+ * If not previous entries are focusable, entries will not be modified
27
+ *
28
+ * @param entries nav selector entries
29
+ */
30
+ static focusPrevious<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[];
31
+ /**
32
+ * Focus the next entry focusable and set tabIndex to 0 for the next focusable entry and -1 for all other entries
33
+ *
34
+ * If not next entries are focusable, entries will not be modified
35
+ *
36
+ * @param entries nav selector entries
37
+ */
38
+ static focusNext<T extends InternalNavSelectorEntry>(entries: T[]): InternalNavSelectorEntry[];
39
+ private static previousEntryIsFirstAndNotFocusable;
40
+ private static focusAnEntry;
41
+ private static unfocusAnEntry;
42
+ /**
43
+ * Flatten the nav selector entries. It is easier to work with flat entries for the focus management as we need to know which is the previous or the next entry
44
+ * @param entries nav selector entries
45
+ */
46
+ private static flatten;
47
+ /**
48
+ * Unflatten the nav selector entries
49
+ * @param entries nav selector entries
50
+ */
51
+ private static unflatten;
52
+ }