@agorapulse/ui-components 20.1.8 → 20.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agorapulse-ui-components-20.1.10.tgz +0 -0
- package/fesm2022/agorapulse-ui-components-autocomplete.mjs +4 -2
- package/fesm2022/agorapulse-ui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs +76 -58
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-social-button.mjs +5 -6
- package/fesm2022/agorapulse-ui-components-social-button.mjs.map +1 -1
- package/nav-selector/index.d.ts +13 -6
- package/package.json +2 -1
- package/social-button/index.d.ts +6 -4
- package/agorapulse-ui-components-20.1.8.tgz +0 -0
|
@@ -2,13 +2,14 @@ import * as i1 from '@agorapulse/ui-components/directives';
|
|
|
2
2
|
import { BaseButtonDirective } from '@agorapulse/ui-components/directives';
|
|
3
3
|
import { SymbolComponent, withSymbols, apFeatureLock, apErrorFill, SymbolRegistry, apChevronDown, apChevronUp, apFolder, apArrowExpand, apArrowReduce, apSearch } from '@agorapulse/ui-symbol';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { input, inject, Component, afterEveryRender, Directive, effect, untracked, signal, computed, Injectable, ChangeDetectionStrategy, contentChildren, output, viewChild, model, contentChild, afterNextRender } from '@angular/core';
|
|
5
|
+
import { input, inject, Component, afterEveryRender, Directive, effect, untracked, signal, computed, Injectable, ChangeDetectionStrategy, contentChildren, output, viewChild, model, contentChild, ElementRef, afterNextRender } from '@angular/core';
|
|
6
6
|
import { IconButtonComponent } from '@agorapulse/ui-components/icon-button';
|
|
7
7
|
import { InputSearchComponent } from '@agorapulse/ui-components/input-search';
|
|
8
8
|
import { trigger, state, transition, style, animate, keyframes } from '@angular/animations';
|
|
9
9
|
import { NgTemplateOutlet } from '@angular/common';
|
|
10
|
-
import * as
|
|
10
|
+
import * as i1$1 from '@angular/forms';
|
|
11
11
|
import { FormsModule } from '@angular/forms';
|
|
12
|
+
import { isEqual } from 'es-toolkit';
|
|
12
13
|
import { TooltipDirective } from '@agorapulse/ui-components/tooltip';
|
|
13
14
|
import { AvatarComponent } from '@agorapulse/ui-components/avatar';
|
|
14
15
|
import { CheckboxComponent } from '@agorapulse/ui-components/checkbox';
|
|
@@ -1659,7 +1660,8 @@ class NavSelectorViewMore {
|
|
|
1659
1660
|
* 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.
|
|
1660
1661
|
*/
|
|
1661
1662
|
class NavSelectorState {
|
|
1662
|
-
|
|
1663
|
+
_entries = signal([], ...(ngDevMode ? [{ debugName: "_entries" }] : []));
|
|
1664
|
+
entries = this._entries.asReadonly();
|
|
1663
1665
|
multipleModeEnabled = signal(false, ...(ngDevMode ? [{ debugName: "multipleModeEnabled" }] : []));
|
|
1664
1666
|
_texts = signal({
|
|
1665
1667
|
title: '',
|
|
@@ -1674,25 +1676,26 @@ class NavSelectorState {
|
|
|
1674
1676
|
}, ...(ngDevMode ? [{ debugName: "_texts" }] : []));
|
|
1675
1677
|
isMultipleModeEnabled = this.multipleModeEnabled;
|
|
1676
1678
|
search = signal('', ...(ngDevMode ? [{ debugName: "search" }] : []));
|
|
1677
|
-
noResults = computed(() => this.
|
|
1679
|
+
noResults = computed(() => this._entries().every(({ hidden }) => hidden), ...(ngDevMode ? [{ debugName: "noResults" }] : []));
|
|
1678
1680
|
texts = this._texts.asReadonly();
|
|
1679
1681
|
expanded = signal(true, ...(ngDevMode ? [{ debugName: "expanded" }] : []));
|
|
1680
1682
|
previousSelectedUids = [];
|
|
1681
1683
|
selectedUidsChangeCallback = null;
|
|
1684
|
+
newSelectedUids = computed(() => this.collectSelectedUids(this._entries()), ...(ngDevMode ? [{ debugName: "newSelectedUids", equal: isEqual }] : [{ equal: isEqual }]));
|
|
1682
1685
|
constructor() {
|
|
1683
1686
|
effect(() => {
|
|
1684
|
-
const
|
|
1687
|
+
const uids = this.newSelectedUids();
|
|
1685
1688
|
untracked(() => {
|
|
1686
|
-
if (this.selectedUidsChangeCallback &&
|
|
1687
|
-
this.selectedUidsChangeCallback(
|
|
1688
|
-
this.previousSelectedUids =
|
|
1689
|
+
if (this.selectedUidsChangeCallback && !isEqual(this.previousSelectedUids, uids)) {
|
|
1690
|
+
this.selectedUidsChangeCallback(uids);
|
|
1691
|
+
this.previousSelectedUids = uids;
|
|
1689
1692
|
}
|
|
1690
1693
|
});
|
|
1691
1694
|
});
|
|
1692
1695
|
effect(() => {
|
|
1693
1696
|
const search = this.search();
|
|
1694
1697
|
untracked(() => {
|
|
1695
|
-
this.
|
|
1698
|
+
this._entries.update(entries => NavSelectorFilter.filter(entries, search, this.multipleModeEnabled()));
|
|
1696
1699
|
});
|
|
1697
1700
|
});
|
|
1698
1701
|
}
|
|
@@ -1701,10 +1704,10 @@ class NavSelectorState {
|
|
|
1701
1704
|
}
|
|
1702
1705
|
initEntries(entries, initialSelectedEntryUids, detailsDisplayedLimit) {
|
|
1703
1706
|
if (this.multipleModeEnabled()) {
|
|
1704
|
-
this.
|
|
1707
|
+
this._entries.set(NavSelectorBuilder.buildInMultipleMode(entries, initialSelectedEntryUids, detailsDisplayedLimit));
|
|
1705
1708
|
}
|
|
1706
1709
|
else {
|
|
1707
|
-
this.
|
|
1710
|
+
this._entries.set(NavSelectorBuilder.build(entries, initialSelectedEntryUids?.[0] ?? null, detailsDisplayedLimit));
|
|
1708
1711
|
}
|
|
1709
1712
|
}
|
|
1710
1713
|
updateEntries(entries, initialSelectedEntryUids, detailsDisplayedLimit) {
|
|
@@ -1715,22 +1718,22 @@ class NavSelectorState {
|
|
|
1715
1718
|
else {
|
|
1716
1719
|
newEntries = NavSelectorBuilder.build(entries, initialSelectedEntryUids?.[0] ?? null, detailsDisplayedLimit);
|
|
1717
1720
|
}
|
|
1718
|
-
this.
|
|
1721
|
+
this._entries.update(oldEntries => {
|
|
1719
1722
|
const mergeEntries = NavSelectorMerger.mergeInternalNavSelectorEntries(newEntries, oldEntries);
|
|
1720
1723
|
return NavSelectorFilter.filter(mergeEntries, this.search(), this.multipleModeEnabled());
|
|
1721
1724
|
});
|
|
1722
1725
|
}
|
|
1723
1726
|
onGroupToggleFolding(group) {
|
|
1724
|
-
this.
|
|
1727
|
+
this._entries.update(entries => NavSelectorFolding.toggleFolding(entries, group.uid, this.getFoldingOptions()));
|
|
1725
1728
|
}
|
|
1726
1729
|
onNodeSelect(node) {
|
|
1727
|
-
this.
|
|
1730
|
+
this._entries.update(entries => NavSelectorMultiSelect.selectInMultipleMode(entries, node.uid));
|
|
1728
1731
|
}
|
|
1729
1732
|
onLeafClicked(leaf) {
|
|
1730
1733
|
if (!leaf.selectable) {
|
|
1731
1734
|
return;
|
|
1732
1735
|
}
|
|
1733
|
-
this.
|
|
1736
|
+
this._entries.update(entries => {
|
|
1734
1737
|
let updatedEntries = entries;
|
|
1735
1738
|
if (leaf.foldable) {
|
|
1736
1739
|
const options = this.getFoldingOptions();
|
|
@@ -1748,7 +1751,7 @@ class NavSelectorState {
|
|
|
1748
1751
|
});
|
|
1749
1752
|
}
|
|
1750
1753
|
onLeafToggleFolding(leaf) {
|
|
1751
|
-
this.
|
|
1754
|
+
this._entries.update(entries => {
|
|
1752
1755
|
const options = this.getFoldingOptions();
|
|
1753
1756
|
// Find all unfolded leaves except the clicked one and fold them first
|
|
1754
1757
|
let updatedEntries = entries;
|
|
@@ -1773,17 +1776,17 @@ class NavSelectorState {
|
|
|
1773
1776
|
return unfoldedUids;
|
|
1774
1777
|
}
|
|
1775
1778
|
onLeafDetailClicked(leafDetail) {
|
|
1776
|
-
this.
|
|
1779
|
+
this._entries.update(entries => NavSelectorSingleSelect.select(entries, leafDetail.uid));
|
|
1777
1780
|
}
|
|
1778
1781
|
updateTexts(texts) {
|
|
1779
1782
|
this._texts.set(texts);
|
|
1780
1783
|
}
|
|
1781
1784
|
selectOnlyLeaf(leaf) {
|
|
1782
|
-
this.
|
|
1785
|
+
this._entries.update(entries => NavSelectorMultiSelect.selectOnlyALeafInMultipleMode(entries, leaf.uid));
|
|
1783
1786
|
}
|
|
1784
1787
|
toggleExpanded() {
|
|
1785
1788
|
this.expanded.update(expanded => !expanded);
|
|
1786
|
-
this.
|
|
1789
|
+
this._entries.update(entries => {
|
|
1787
1790
|
if (this.expanded()) {
|
|
1788
1791
|
return NavSelectorMinifying.expand(entries, this.multipleModeEnabled());
|
|
1789
1792
|
}
|
|
@@ -1797,24 +1800,24 @@ class NavSelectorState {
|
|
|
1797
1800
|
}
|
|
1798
1801
|
forceMinify() {
|
|
1799
1802
|
this.expanded.set(false);
|
|
1800
|
-
this.
|
|
1803
|
+
this._entries.update(entries => NavSelectorAccessibility.resetFocus(NavSelectorMinifying.minify(entries, this.multipleModeEnabled())));
|
|
1801
1804
|
}
|
|
1802
1805
|
forceExpand() {
|
|
1803
1806
|
this.expanded.set(true);
|
|
1804
|
-
this.
|
|
1807
|
+
this._entries.update(entries => NavSelectorAccessibility.resetFocus(NavSelectorMinifying.expand(entries, this.multipleModeEnabled())));
|
|
1805
1808
|
}
|
|
1806
1809
|
onSelectionChange(uids) {
|
|
1807
1810
|
// Avoid infinite loop if you put unexisting uids as select will generate the same entries but with different reference
|
|
1808
|
-
if (
|
|
1811
|
+
if (isEqual(uids, this.previousSelectedUids)) {
|
|
1809
1812
|
return;
|
|
1810
1813
|
}
|
|
1811
|
-
const selectedUids = this.
|
|
1814
|
+
const selectedUids = this.newSelectedUids();
|
|
1812
1815
|
const uidToSelect = uids.filter(uid => !selectedUids.includes(uid));
|
|
1813
1816
|
const uidToUnselect = selectedUids.filter(uid => !uids.includes(uid));
|
|
1814
1817
|
if (!uidToSelect.length && !uidToUnselect.length) {
|
|
1815
1818
|
return;
|
|
1816
1819
|
}
|
|
1817
|
-
let entries = this.
|
|
1820
|
+
let entries = this._entries();
|
|
1818
1821
|
if (this.multipleModeEnabled()) {
|
|
1819
1822
|
for (const uid of [...uidToSelect, ...uidToUnselect]) {
|
|
1820
1823
|
entries = NavSelectorMultiSelect.selectInMultipleMode(entries, uid);
|
|
@@ -1833,16 +1836,16 @@ class NavSelectorState {
|
|
|
1833
1836
|
minified: !this.expanded(),
|
|
1834
1837
|
});
|
|
1835
1838
|
}
|
|
1836
|
-
this.
|
|
1839
|
+
this._entries.set(entries);
|
|
1837
1840
|
}
|
|
1838
1841
|
registerOnSelectedUidsChange(callback) {
|
|
1839
1842
|
this.selectedUidsChangeCallback = callback;
|
|
1840
1843
|
}
|
|
1841
1844
|
onArrowDown() {
|
|
1842
|
-
this.
|
|
1845
|
+
this._entries.update(entries => NavSelectorAccessibility.focusNext(entries));
|
|
1843
1846
|
}
|
|
1844
1847
|
onArrowUp() {
|
|
1845
|
-
this.
|
|
1848
|
+
this._entries.update(entries => NavSelectorAccessibility.focusPrevious(entries));
|
|
1846
1849
|
}
|
|
1847
1850
|
collectSelectedUids(entries) {
|
|
1848
1851
|
return entries.flatMap(entry => {
|
|
@@ -1865,19 +1868,22 @@ class NavSelectorState {
|
|
|
1865
1868
|
};
|
|
1866
1869
|
}
|
|
1867
1870
|
fold(entry) {
|
|
1868
|
-
this.
|
|
1871
|
+
this._entries.update(entries => NavSelectorFolding.fold(entries, entry.uid, this.getFoldingOptions()));
|
|
1869
1872
|
}
|
|
1870
1873
|
unfold(entry) {
|
|
1871
|
-
this.
|
|
1874
|
+
this._entries.update(entries => NavSelectorFolding.unfold(entries, entry.uid, this.getFoldingOptions()));
|
|
1872
1875
|
}
|
|
1873
1876
|
updateDetailsDisplayedLimit(detailsDisplayedLimit) {
|
|
1874
|
-
this.
|
|
1877
|
+
this._entries.update(entries => NavSelectorViewMore.changeViewMoreDetailsDisplayedLimit(entries, detailsDisplayedLimit));
|
|
1875
1878
|
}
|
|
1876
1879
|
viewMore(leaf) {
|
|
1877
|
-
this.
|
|
1880
|
+
this._entries.update(entries => NavSelectorViewMore.viewMore(entries, leaf.uid));
|
|
1878
1881
|
}
|
|
1879
1882
|
viewLess(leaf) {
|
|
1880
|
-
this.
|
|
1883
|
+
this._entries.update(entries => NavSelectorViewMore.viewLess(entries, leaf.uid));
|
|
1884
|
+
}
|
|
1885
|
+
resetFocus() {
|
|
1886
|
+
this._entries.update(entries => NavSelectorAccessibility.resetFocus(entries));
|
|
1881
1887
|
}
|
|
1882
1888
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: NavSelectorState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1883
1889
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: NavSelectorState });
|
|
@@ -2776,8 +2782,6 @@ const EXPANDED_STATE_WIDTH = '224px';
|
|
|
2776
2782
|
const MINIFIED_STATE_WIDTH = '64px';
|
|
2777
2783
|
let nextUniqueId = 0;
|
|
2778
2784
|
class NavSelectorComponent {
|
|
2779
|
-
navSelectorState;
|
|
2780
|
-
el;
|
|
2781
2785
|
navSelectorEntries = input.required(...(ngDevMode ? [{ debugName: "navSelectorEntries" }] : []));
|
|
2782
2786
|
translatedTexts = input.required(...(ngDevMode ? [{ debugName: "translatedTexts" }] : []));
|
|
2783
2787
|
multipleModeEnabled = input(false, ...(ngDevMode ? [{ debugName: "multipleModeEnabled" }] : []));
|
|
@@ -2794,33 +2798,43 @@ class NavSelectorComponent {
|
|
|
2794
2798
|
contentHeaderProjection = contentChild('contentHeader', ...(ngDevMode ? [{ debugName: "contentHeaderProjection" }] : []));
|
|
2795
2799
|
footerProjection = contentChild('footer', ...(ngDevMode ? [{ debugName: "footerProjection" }] : []));
|
|
2796
2800
|
displayFooter = computed(() => this.footerProjection() !== undefined, ...(ngDevMode ? [{ debugName: "displayFooter" }] : []));
|
|
2797
|
-
expansionState = computed(() => (this.
|
|
2801
|
+
expansionState = computed(() => (this.expanded() ? 'expanded' : 'minified'), ...(ngDevMode ? [{ debugName: "expansionState" }] : []));
|
|
2798
2802
|
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
2799
2803
|
onExpansionStateChange = output();
|
|
2804
|
+
navSelectorState = inject(NavSelectorState);
|
|
2805
|
+
el = inject(ElementRef);
|
|
2800
2806
|
componentUid = `nav-selector-${nextUniqueId++}`;
|
|
2801
2807
|
ready = signal(false, ...(ngDevMode ? [{ debugName: "ready" }] : []));
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2808
|
+
expanded = this.navSelectorState.expanded.asReadonly();
|
|
2809
|
+
entries = computed(() => this.navSelectorState.entries(), ...(ngDevMode ? [{ debugName: "entries", equal: isEqual }] : [{ equal: isEqual }]));
|
|
2810
|
+
selectableEntryUids = computed(() => computeSelectableUids(this.entries()), ...(ngDevMode ? [{ debugName: "selectableEntryUids", equal: isEqual }] : [{ equal: isEqual }]));
|
|
2811
|
+
existingSelectableUids = computed(() => this.selectedEntryUids().filter(uid => this.selectableEntryUids().includes(uid)), ...(ngDevMode ? [{ debugName: "existingSelectableUids" }] : []));
|
|
2812
|
+
constructor() {
|
|
2813
|
+
this.navSelectorState.registerOnSelectedUidsChange(selectedUids => {
|
|
2814
|
+
const isInit = !!this.entries().length;
|
|
2807
2815
|
if (isInit) {
|
|
2808
|
-
this.selectedEntryUids.
|
|
2816
|
+
this.selectedEntryUids.update(state => {
|
|
2817
|
+
if (isEqual(state, selectedUids)) {
|
|
2818
|
+
return state;
|
|
2819
|
+
}
|
|
2820
|
+
return selectedUids;
|
|
2821
|
+
});
|
|
2809
2822
|
}
|
|
2810
2823
|
});
|
|
2811
2824
|
afterNextRender(() => {
|
|
2812
2825
|
this.ready.set(true);
|
|
2813
2826
|
});
|
|
2814
2827
|
effect(() => {
|
|
2815
|
-
const expanded = this.
|
|
2816
|
-
this.onExpansionStateChange.emit({ expanded });
|
|
2828
|
+
const expanded = this.expanded();
|
|
2829
|
+
untracked(() => this.onExpansionStateChange.emit({ expanded }));
|
|
2817
2830
|
});
|
|
2818
2831
|
effect(() => {
|
|
2832
|
+
// When AS inputs changes, rebuild AS with current initial selected uids
|
|
2819
2833
|
const multipleModeEnabled = this.multipleModeEnabled();
|
|
2820
|
-
const newEntries = this.navSelectorEntries();
|
|
2834
|
+
const newEntries = this.navSelectorEntries(); // FIXME: Check if it's needed to add a guard on this value
|
|
2821
2835
|
untracked(() => {
|
|
2822
2836
|
this.navSelectorState.updateMultiModeEnabled(multipleModeEnabled);
|
|
2823
|
-
if (!this.
|
|
2837
|
+
if (!this.entries().length) {
|
|
2824
2838
|
this.navSelectorState.initEntries(newEntries, this.selectedEntryUids(), this.detailsDisplayedLimit());
|
|
2825
2839
|
}
|
|
2826
2840
|
else {
|
|
@@ -2833,10 +2847,14 @@ class NavSelectorComponent {
|
|
|
2833
2847
|
untracked(() => this.navSelectorState.updateDetailsDisplayedLimit(detailsDisplayedLimit));
|
|
2834
2848
|
});
|
|
2835
2849
|
effect(() => {
|
|
2836
|
-
const isInit = !!this.
|
|
2837
|
-
const
|
|
2838
|
-
|
|
2839
|
-
|
|
2850
|
+
const isInit = !!this.entries().length;
|
|
2851
|
+
const existingSelectableUids = this.existingSelectableUids();
|
|
2852
|
+
untracked(() => {
|
|
2853
|
+
if (isInit) {
|
|
2854
|
+
// Trigger selection change when initial selectedEntryUids model changes
|
|
2855
|
+
this.navSelectorState.onSelectionChange(existingSelectableUids);
|
|
2856
|
+
}
|
|
2857
|
+
});
|
|
2840
2858
|
});
|
|
2841
2859
|
effect(() => {
|
|
2842
2860
|
const translatedTexts = this.translatedTexts();
|
|
@@ -2863,7 +2881,7 @@ class NavSelectorComponent {
|
|
|
2863
2881
|
// Force reset in this case by rebuilding the entries and resetting the focus.
|
|
2864
2882
|
console.error('[Nav selector] Failed to focus the next entry, resetting...', e);
|
|
2865
2883
|
this.navSelectorState.updateEntries(this.navSelectorEntries(), this.selectedEntryUids(), this.detailsDisplayedLimit());
|
|
2866
|
-
this.navSelectorState.
|
|
2884
|
+
this.navSelectorState.resetFocus();
|
|
2867
2885
|
}
|
|
2868
2886
|
});
|
|
2869
2887
|
}
|
|
@@ -2881,17 +2899,17 @@ class NavSelectorComponent {
|
|
|
2881
2899
|
// Force reset in this case by rebuilding the entries and resetting the focus.
|
|
2882
2900
|
console.error('[Nav selector] Failed to focus the previous entry, resetting...', e);
|
|
2883
2901
|
this.navSelectorState.updateEntries(this.navSelectorEntries(), this.selectedEntryUids(), this.detailsDisplayedLimit());
|
|
2884
|
-
this.navSelectorState.
|
|
2902
|
+
this.navSelectorState.resetFocus();
|
|
2885
2903
|
}
|
|
2886
2904
|
});
|
|
2887
2905
|
}
|
|
2888
2906
|
}
|
|
2889
2907
|
onWindowResize() {
|
|
2890
2908
|
if (!this.embedded() && !this.forceExpanded()) {
|
|
2891
|
-
if (this.
|
|
2909
|
+
if (this.expanded() && window.innerWidth < AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT) {
|
|
2892
2910
|
this.navSelectorState.forceMinify();
|
|
2893
2911
|
}
|
|
2894
|
-
else if (!this.
|
|
2912
|
+
else if (!this.expanded() && window.innerWidth >= AUTO_MINIFIED_STATE_WIDTH_BREAKPOINT) {
|
|
2895
2913
|
const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();
|
|
2896
2914
|
if (!expandedStateLocalStorageKey || !localStorage.getItem(expandedStateLocalStorageKey)) {
|
|
2897
2915
|
this.navSelectorState.forceExpand();
|
|
@@ -2920,11 +2938,11 @@ class NavSelectorComponent {
|
|
|
2920
2938
|
this.navSelectorState.toggleExpanded();
|
|
2921
2939
|
const expandedStateLocalStorageKey = this.expandedStateLocalStorageKey();
|
|
2922
2940
|
if (expandedStateLocalStorageKey) {
|
|
2923
|
-
localStorage.setItem(expandedStateLocalStorageKey, this.
|
|
2941
|
+
localStorage.setItem(expandedStateLocalStorageKey, this.expanded().toString());
|
|
2924
2942
|
}
|
|
2925
2943
|
}
|
|
2926
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: NavSelectorComponent, deps: [
|
|
2927
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: NavSelectorComponent, isStandalone: true, selector: "ap-nav-selector", inputs: { navSelectorEntries: { classPropertyName: "navSelectorEntries", publicName: "navSelectorEntries", isSignal: true, isRequired: true, transformFunction: null }, translatedTexts: { classPropertyName: "translatedTexts", publicName: "translatedTexts", isSignal: true, isRequired: true, transformFunction: null }, multipleModeEnabled: { classPropertyName: "multipleModeEnabled", publicName: "multipleModeEnabled", isSignal: true, isRequired: false, transformFunction: null }, detailsDisplayedLimit: { classPropertyName: "detailsDisplayedLimit", publicName: "detailsDisplayedLimit", isSignal: true, isRequired: false, transformFunction: null }, embedded: { classPropertyName: "embedded", publicName: "embedded", isSignal: true, isRequired: false, transformFunction: null }, forceExpanded: { classPropertyName: "forceExpanded", publicName: "forceExpanded", isSignal: true, isRequired: false, transformFunction: null }, expandedStateLocalStorageKey: { classPropertyName: "expandedStateLocalStorageKey", publicName: "expandedStateLocalStorageKey", isSignal: true, isRequired: false, transformFunction: null }, selectedEntryUids: { classPropertyName: "selectedEntryUids", publicName: "selectedEntryUids", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectedEntryUids: "selectedEntryUidsChange", actionClicked: "actionClicked", onExpansionStateChange: "onExpansionStateChange" }, host: { attributes: { "role": "tree" }, listeners: { "keydown.arrowDown": "onArrowDown($event)", "keydown.arrowUp": "onArrowUp($event)", "window:resize": "onWindowResize()" }, properties: { "class.minified": "!navSelectorState.expanded()", "class.embedded": "embedded()", "@expand": "expansionState()" } }, providers: [NavSelectorState, withSymbols(apArrowExpand, apArrowReduce, apSearch)], queries: [{ propertyName: "headerProjection", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "contentHeaderProjection", first: true, predicate: ["contentHeader"], descendants: true, isSignal: true }, { propertyName: "footerProjection", first: true, predicate: ["footer"], descendants: true, isSignal: true }], ngImport: i0, template: "<nav [class.embedded]=\"embedded()\">\n @let headerProjectionNotNull = headerProjection();\n @let contentHeaderProjectionNotNull = contentHeaderProjection();\n @let footerProjectionNotNull = footerProjection();\n\n <div class=\"nav-selector__header\">\n @if (!embedded()) {\n @if (navSelectorState.expanded()) {\n <span class=\"h3\">{{ translatedTexts().title }}</span>\n }\n\n <button\n type=\"button\"\n class=\"expand-button\"\n [class.expanded]=\"navSelectorState.expanded()\"\n (click)=\"clickExpandButton()\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"navSelectorState.expanded() ? 'arrow-reduce' : 'arrow-expand'\" />\n </button>\n }\n\n @if (headerProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"headerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n\n @if (navSelectorState.expanded()) {\n <ap-input-search\n [id]=\"componentUid + '_search'\"\n [placeholder]=\"translatedTexts().searchPlaceholder\"\n [ngModel]=\"navSelectorState.search()\"\n (ngModelChange)=\"navSelectorState.search.set($event ?? '')\" />\n } @else {\n <ap-icon-button\n (onClick)=\"onMinifiedSearchClicked()\"\n type=\"stroked\"\n role=\"search\">\n <ap-symbol symbolId=\"search\" />\n </ap-icon-button>\n }\n\n @if (contentHeaderProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"contentHeaderProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n </div>\n\n <div\n class=\"nav-selector__content\"\n [attr.aria-multiselectable]=\"navSelectorState.isMultipleModeEnabled()\"\n role=\"tree\">\n @for (entry of navSelectorState.entries(); track entry.uid) {\n @if (!entry.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"entry.type === 'GROUP' || entry.type === 'CATEGORY'\">\n @if (entry.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'CATEGORY') {\n <ap-nav-selector-category\n [category]=\"$any(entry)\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n @if (navSelectorState.expanded() && navSelectorState.noResults()) {\n <div class=\"no-result\">{{ translatedTexts().noResults }}</div>\n }\n </div>\n\n @if (displayFooter() && footerProjectionNotNull) {\n <div class=\"nav-selector__footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n </div>\n }\n</nav>\n", styles: [":host,nav{width:224px}@media only screen and (min-width: 1400px){:host:not(.embedded),nav:not(.embedded){width:250px}:host:not(.embedded) .nav-selector__content,nav:not(.embedded) .nav-selector__content{width:250px}}:host{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0;flex-grow:1}:host :hover .expand-button.expanded{animation-name:translateExpandButton}:host nav{display:flex;height:100%;flex-grow:1;flex-direction:column;align-items:flex-start;flex-shrink:0;overflow:hidden;background:var(--ref-color-white);transition:width .25s cubic-bezier(.4,0,.3,1)}:host nav:not(.embedded){border-right:1px solid var(--ref-color-grey-10)}:host .nav-selector__header{position:relative;display:flex;padding:var(--ref-spacing-xs) var(--ref-spacing-sm);flex-direction:column;align-items:flex-start;gap:var(--ref-spacing-xxs);align-self:stretch;white-space:nowrap;border-bottom:1px solid var(--ref-color-grey-10);background:var(--ref-color-white)}:host .nav-selector__header .h3{color:var(--ref-color-grey-100);font-family:Averta;font-size:var(--sys-text-style-h3-size);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-lg)}:host .nav-selector__header .expand-button-container{position:absolute;right:0;top:var(--ref-spacing-xs)}:host .nav-selector__header .expand-button{animation-duration:70ms;animation-timing-function:cubic-bezier(0,0,.2,1);animation-fill-mode:forwards;animation-name:translateHideButton;display:flex;width:24px;height:24px;justify-content:center;align-items:center;background:var(--ref-color-grey-bg);border-top:1px solid var(--ref-color-grey-20);border-right:none;border-bottom:1px solid var(--ref-color-grey-20);border-left:1px solid var(--ref-color-grey-20);border-top-left-radius:var(--ref-border-radius-sm);border-bottom-left-radius:var(--ref-border-radius-sm);cursor:pointer}@keyframes translateHideButton{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes translateExpandButton{0%{transform:translate(100%)}to{transform:translate(0)}}:host .nav-selector__header .expand-button.expanded{position:absolute;right:0;top:12px;transform:translate(100%)}:host .nav-selector__header .expand-button ap-symbol[symbol-id=arrow-reduce],:host .nav-selector__header .expand-button ap-symbol[symbol-id=arrow-expand]{color:var(--ref-color-grey-80)}:host .nav-selector__header .expand-button:focus-visible{border-radius:var(--ref-border-radius-sm) 0px 0px var(--ref-border-radius-sm);border-top:1px solid var(--ref-color-grey-20);border-bottom:1px solid var(--ref-color-grey-20);border-left:1px solid var(--ref-color-grey-20);background:var(--ref-color-grey-10);box-shadow:0 0 0 1px #fff,0 0 0 3px #178dfe}:host .nav-selector__header .expand-button:focus-visible.expanded{animation-name:translateExpandButton}:host .nav-selector__header .expand-button:hover{background-color:var(--ref-color-grey-10)}:host .nav-selector__header .expand-button:active{background-color:var(--ref-color-grey-20)}:host .nav-selector__content{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;width:224px;overflow-y:scroll;overflow-x:hidden;transition:width .25s cubic-bezier(.4,0,.3,1)}:host .nav-selector__content .entry{align-self:stretch;display:flex;flex-direction:column}:host .nav-selector__content .entry.folder{padding:var(--ref-spacing-xxs);border-bottom:1px solid var(--sys-border-color-default)}:host .nav-selector__content .entry.folder+.entry:not(.folder){padding-top:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder){padding-left:var(--ref-spacing-xxs);padding-right:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):first-child{padding-top:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):last-child{padding-bottom:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):has(+.entry.folder){padding-bottom:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder)+.entry.folder{border-top:1px solid var(--sys-border-color-default)}:host .nav-selector__content .no-result{display:flex;padding:var(--ref-spacing-sm);flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;color:var(--ref-color-grey-80);font-family:Averta;font-size:var(--ref-font-size-sm);font-style:italic;font-weight:400;line-height:var(--ref-font-line-height-sm)}:host .nav-selector__footer{display:flex;padding:var(--ref-spacing-xs);flex-direction:column;align-items:flex-start;gap:var(--ref-spacing-xxs);align-self:stretch;border-top:1px solid var(--sys-border-color-default);background:var(--ref-color-white)}:host.minified{width:64px}:host.minified nav{width:64px}:host.minified nav .nav-selector__header{align-items:center}:host.minified nav .nav-selector__header .expand-button{animation-name:none;border-radius:var(--ref-border-radius-sm);border:1px solid var(--ref-color-grey-20);background:var(--ref-color-grey-bg)}:host.minified nav .nav-selector__content{width:64px}:host.minified nav .nav-selector__content .entry{padding:var(--ref-spacing-xxxs)}:host.minified nav .nav-selector__footer{padding:var(--ref-spacing-xs) var(--ref-spacing-xxxs)}\n"], dependencies: [{ kind: "component", type: NavSelectorLeafComponent, selector: "ap-nav-selector-leaf", inputs: ["leaf"], outputs: ["actionClicked"] }, { kind: "component", type: NavSelectorGroupComponent, selector: "ap-nav-selector-group", inputs: ["group"], outputs: ["actionClicked"] }, { kind: "component", type: NavSelectorCategoryComponent, selector: "ap-nav-selector-category", inputs: ["category"], outputs: ["actionClicked"] }, { kind: "component", type: InputSearchComponent, selector: "ap-input-search", inputs: ["id", "placeholder", "clearable"], outputs: ["focus", "blur", "keyup"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "component", type: IconButtonComponent, selector: "ap-icon-button", inputs: ["ariaLabel", "name", "color", "disabled", "menuTrigger", "symbolId", "locked", "loading", "type"], outputs: ["onClick", "onFocus", "onBlur", "menuOpened", "menuClosed"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
2944
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: NavSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2945
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: NavSelectorComponent, isStandalone: true, selector: "ap-nav-selector", inputs: { navSelectorEntries: { classPropertyName: "navSelectorEntries", publicName: "navSelectorEntries", isSignal: true, isRequired: true, transformFunction: null }, translatedTexts: { classPropertyName: "translatedTexts", publicName: "translatedTexts", isSignal: true, isRequired: true, transformFunction: null }, multipleModeEnabled: { classPropertyName: "multipleModeEnabled", publicName: "multipleModeEnabled", isSignal: true, isRequired: false, transformFunction: null }, detailsDisplayedLimit: { classPropertyName: "detailsDisplayedLimit", publicName: "detailsDisplayedLimit", isSignal: true, isRequired: false, transformFunction: null }, embedded: { classPropertyName: "embedded", publicName: "embedded", isSignal: true, isRequired: false, transformFunction: null }, forceExpanded: { classPropertyName: "forceExpanded", publicName: "forceExpanded", isSignal: true, isRequired: false, transformFunction: null }, expandedStateLocalStorageKey: { classPropertyName: "expandedStateLocalStorageKey", publicName: "expandedStateLocalStorageKey", isSignal: true, isRequired: false, transformFunction: null }, selectedEntryUids: { classPropertyName: "selectedEntryUids", publicName: "selectedEntryUids", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectedEntryUids: "selectedEntryUidsChange", actionClicked: "actionClicked", onExpansionStateChange: "onExpansionStateChange" }, host: { attributes: { "role": "tree" }, listeners: { "keydown.arrowDown": "onArrowDown($event)", "keydown.arrowUp": "onArrowUp($event)", "window:resize": "onWindowResize()" }, properties: { "class.minified": "!navSelectorState.expanded()", "class.embedded": "embedded()", "@expand": "expansionState()" } }, providers: [NavSelectorState, withSymbols(apArrowExpand, apArrowReduce, apSearch)], queries: [{ propertyName: "headerProjection", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "contentHeaderProjection", first: true, predicate: ["contentHeader"], descendants: true, isSignal: true }, { propertyName: "footerProjection", first: true, predicate: ["footer"], descendants: true, isSignal: true }], ngImport: i0, template: "<nav [class.embedded]=\"embedded()\">\n @let headerProjectionNotNull = headerProjection();\n @let contentHeaderProjectionNotNull = contentHeaderProjection();\n @let footerProjectionNotNull = footerProjection();\n\n <div class=\"nav-selector__header\">\n @if (!embedded()) {\n @if (navSelectorState.expanded()) {\n <span class=\"h3\">{{ translatedTexts().title }}</span>\n }\n\n <button\n type=\"button\"\n class=\"expand-button\"\n [class.expanded]=\"navSelectorState.expanded()\"\n (click)=\"clickExpandButton()\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"navSelectorState.expanded() ? 'arrow-reduce' : 'arrow-expand'\" />\n </button>\n }\n\n @if (headerProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"headerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n\n @if (navSelectorState.expanded()) {\n <ap-input-search\n [id]=\"componentUid + '_search'\"\n [placeholder]=\"translatedTexts().searchPlaceholder\"\n [ngModel]=\"navSelectorState.search()\"\n (ngModelChange)=\"navSelectorState.search.set($event ?? '')\" />\n } @else {\n <ap-icon-button\n (onClick)=\"onMinifiedSearchClicked()\"\n type=\"stroked\"\n role=\"search\">\n <ap-symbol symbolId=\"search\" />\n </ap-icon-button>\n }\n\n @if (contentHeaderProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"contentHeaderProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n </div>\n\n <div\n class=\"nav-selector__content\"\n role=\"tree\"\n [attr.aria-multiselectable]=\"navSelectorState.isMultipleModeEnabled()\">\n @for (entry of navSelectorState.entries(); track entry.uid) {\n @if (!entry.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"entry.type === 'GROUP' || entry.type === 'CATEGORY'\">\n @if (entry.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'CATEGORY') {\n <ap-nav-selector-category\n [category]=\"$any(entry)\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n @if (navSelectorState.expanded() && navSelectorState.noResults()) {\n <div class=\"no-result\">{{ translatedTexts().noResults }}</div>\n }\n </div>\n\n @if (displayFooter() && footerProjectionNotNull) {\n <div class=\"nav-selector__footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n </div>\n }\n</nav>\n", styles: [":host,nav{width:224px}@media only screen and (min-width: 1400px){:host:not(.embedded),nav:not(.embedded){width:250px}:host:not(.embedded) .nav-selector__content,nav:not(.embedded) .nav-selector__content{width:250px}}:host{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0;flex-grow:1}:host :hover .expand-button.expanded{animation-name:translateExpandButton}:host nav{display:flex;height:100%;flex-grow:1;flex-direction:column;align-items:flex-start;flex-shrink:0;overflow:hidden;background:var(--ref-color-white);transition:width .25s cubic-bezier(.4,0,.3,1)}:host nav:not(.embedded){border-right:1px solid var(--ref-color-grey-10)}:host .nav-selector__header{position:relative;display:flex;padding:var(--ref-spacing-xs) var(--ref-spacing-sm);flex-direction:column;align-items:flex-start;gap:var(--ref-spacing-xxs);align-self:stretch;white-space:nowrap;border-bottom:1px solid var(--ref-color-grey-10);background:var(--ref-color-white)}:host .nav-selector__header .h3{color:var(--ref-color-grey-100);font-family:Averta;font-size:var(--sys-text-style-h3-size);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-lg)}:host .nav-selector__header .expand-button-container{position:absolute;right:0;top:var(--ref-spacing-xs)}:host .nav-selector__header .expand-button{animation-duration:70ms;animation-timing-function:cubic-bezier(0,0,.2,1);animation-fill-mode:forwards;animation-name:translateHideButton;display:flex;width:24px;height:24px;justify-content:center;align-items:center;background:var(--ref-color-grey-bg);border-top:1px solid var(--ref-color-grey-20);border-right:none;border-bottom:1px solid var(--ref-color-grey-20);border-left:1px solid var(--ref-color-grey-20);border-top-left-radius:var(--ref-border-radius-sm);border-bottom-left-radius:var(--ref-border-radius-sm);cursor:pointer}@keyframes translateHideButton{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes translateExpandButton{0%{transform:translate(100%)}to{transform:translate(0)}}:host .nav-selector__header .expand-button.expanded{position:absolute;right:0;top:12px;transform:translate(100%)}:host .nav-selector__header .expand-button ap-symbol[symbol-id=arrow-reduce],:host .nav-selector__header .expand-button ap-symbol[symbol-id=arrow-expand]{color:var(--ref-color-grey-80)}:host .nav-selector__header .expand-button:focus-visible{border-radius:var(--ref-border-radius-sm) 0px 0px var(--ref-border-radius-sm);border-top:1px solid var(--ref-color-grey-20);border-bottom:1px solid var(--ref-color-grey-20);border-left:1px solid var(--ref-color-grey-20);background:var(--ref-color-grey-10);box-shadow:0 0 0 1px #fff,0 0 0 3px #178dfe}:host .nav-selector__header .expand-button:focus-visible.expanded{animation-name:translateExpandButton}:host .nav-selector__header .expand-button:hover{background-color:var(--ref-color-grey-10)}:host .nav-selector__header .expand-button:active{background-color:var(--ref-color-grey-20)}:host .nav-selector__content{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;width:224px;overflow-y:scroll;overflow-x:hidden;transition:width .25s cubic-bezier(.4,0,.3,1)}:host .nav-selector__content .entry{align-self:stretch;display:flex;flex-direction:column}:host .nav-selector__content .entry.folder{padding:var(--ref-spacing-xxs);border-bottom:1px solid var(--sys-border-color-default)}:host .nav-selector__content .entry.folder+.entry:not(.folder){padding-top:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder){padding-left:var(--ref-spacing-xxs);padding-right:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):first-child{padding-top:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):last-child{padding-bottom:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):has(+.entry.folder){padding-bottom:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder)+.entry.folder{border-top:1px solid var(--sys-border-color-default)}:host .nav-selector__content .no-result{display:flex;padding:var(--ref-spacing-sm);flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;color:var(--ref-color-grey-80);font-family:Averta;font-size:var(--ref-font-size-sm);font-style:italic;font-weight:400;line-height:var(--ref-font-line-height-sm)}:host .nav-selector__footer{display:flex;padding:var(--ref-spacing-xs);flex-direction:column;align-items:flex-start;gap:var(--ref-spacing-xxs);align-self:stretch;border-top:1px solid var(--sys-border-color-default);background:var(--ref-color-white)}:host.minified{width:64px}:host.minified nav{width:64px}:host.minified nav .nav-selector__header{align-items:center}:host.minified nav .nav-selector__header .expand-button{animation-name:none;border-radius:var(--ref-border-radius-sm);border:1px solid var(--ref-color-grey-20);background:var(--ref-color-grey-bg)}:host.minified nav .nav-selector__content{width:64px}:host.minified nav .nav-selector__content .entry{padding:var(--ref-spacing-xxxs)}:host.minified nav .nav-selector__footer{padding:var(--ref-spacing-xs) var(--ref-spacing-xxxs)}\n"], dependencies: [{ kind: "component", type: NavSelectorLeafComponent, selector: "ap-nav-selector-leaf", inputs: ["leaf"], outputs: ["actionClicked"] }, { kind: "component", type: NavSelectorGroupComponent, selector: "ap-nav-selector-group", inputs: ["group"], outputs: ["actionClicked"] }, { kind: "component", type: NavSelectorCategoryComponent, selector: "ap-nav-selector-category", inputs: ["category"], outputs: ["actionClicked"] }, { kind: "component", type: InputSearchComponent, selector: "ap-input-search", inputs: ["id", "placeholder", "clearable"], outputs: ["focus", "blur", "keyup"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }, { kind: "component", type: IconButtonComponent, selector: "ap-icon-button", inputs: ["ariaLabel", "name", "color", "disabled", "menuTrigger", "symbolId", "locked", "loading", "type"], outputs: ["onClick", "onFocus", "onBlur", "menuOpened", "menuClosed"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
2928
2946
|
trigger('expand', [
|
|
2929
2947
|
transition('expanded => minified', animate(EXPAND_ANIMATION_TIMINGS, keyframes([style({ width: EXPANDED_STATE_WIDTH }), style({ width: '100px' }), style({ width: MINIFIED_STATE_WIDTH })]))),
|
|
2930
2948
|
transition('minified => expanded', animate(EXPAND_ANIMATION_TIMINGS, keyframes([style({ width: MINIFIED_STATE_WIDTH }), style({ width: '50%' }), style({ width: '100%' })]))),
|
|
@@ -2955,8 +2973,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
2955
2973
|
transition('expanded => minified', animate(EXPAND_ANIMATION_TIMINGS, keyframes([style({ width: EXPANDED_STATE_WIDTH }), style({ width: '100px' }), style({ width: MINIFIED_STATE_WIDTH })]))),
|
|
2956
2974
|
transition('minified => expanded', animate(EXPAND_ANIMATION_TIMINGS, keyframes([style({ width: MINIFIED_STATE_WIDTH }), style({ width: '50%' }), style({ width: '100%' })]))),
|
|
2957
2975
|
]),
|
|
2958
|
-
], template: "<nav [class.embedded]=\"embedded()\">\n @let headerProjectionNotNull = headerProjection();\n @let contentHeaderProjectionNotNull = contentHeaderProjection();\n @let footerProjectionNotNull = footerProjection();\n\n <div class=\"nav-selector__header\">\n @if (!embedded()) {\n @if (navSelectorState.expanded()) {\n <span class=\"h3\">{{ translatedTexts().title }}</span>\n }\n\n <button\n type=\"button\"\n class=\"expand-button\"\n [class.expanded]=\"navSelectorState.expanded()\"\n (click)=\"clickExpandButton()\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"navSelectorState.expanded() ? 'arrow-reduce' : 'arrow-expand'\" />\n </button>\n }\n\n @if (headerProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"headerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n\n @if (navSelectorState.expanded()) {\n <ap-input-search\n [id]=\"componentUid + '_search'\"\n [placeholder]=\"translatedTexts().searchPlaceholder\"\n [ngModel]=\"navSelectorState.search()\"\n (ngModelChange)=\"navSelectorState.search.set($event ?? '')\" />\n } @else {\n <ap-icon-button\n (onClick)=\"onMinifiedSearchClicked()\"\n type=\"stroked\"\n role=\"search\">\n <ap-symbol symbolId=\"search\" />\n </ap-icon-button>\n }\n\n @if (contentHeaderProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"contentHeaderProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n </div>\n\n <div\n class=\"nav-selector__content\"\n [attr.aria-multiselectable]=\"navSelectorState.isMultipleModeEnabled()\"
|
|
2959
|
-
}], ctorParameters: () => [
|
|
2976
|
+
], template: "<nav [class.embedded]=\"embedded()\">\n @let headerProjectionNotNull = headerProjection();\n @let contentHeaderProjectionNotNull = contentHeaderProjection();\n @let footerProjectionNotNull = footerProjection();\n\n <div class=\"nav-selector__header\">\n @if (!embedded()) {\n @if (navSelectorState.expanded()) {\n <span class=\"h3\">{{ translatedTexts().title }}</span>\n }\n\n <button\n type=\"button\"\n class=\"expand-button\"\n [class.expanded]=\"navSelectorState.expanded()\"\n (click)=\"clickExpandButton()\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"navSelectorState.expanded() ? 'arrow-reduce' : 'arrow-expand'\" />\n </button>\n }\n\n @if (headerProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"headerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n\n @if (navSelectorState.expanded()) {\n <ap-input-search\n [id]=\"componentUid + '_search'\"\n [placeholder]=\"translatedTexts().searchPlaceholder\"\n [ngModel]=\"navSelectorState.search()\"\n (ngModelChange)=\"navSelectorState.search.set($event ?? '')\" />\n } @else {\n <ap-icon-button\n (onClick)=\"onMinifiedSearchClicked()\"\n type=\"stroked\"\n role=\"search\">\n <ap-symbol symbolId=\"search\" />\n </ap-icon-button>\n }\n\n @if (contentHeaderProjectionNotNull) {\n <ng-container\n [ngTemplateOutlet]=\"contentHeaderProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n }\n </div>\n\n <div\n class=\"nav-selector__content\"\n role=\"tree\"\n [attr.aria-multiselectable]=\"navSelectorState.isMultipleModeEnabled()\">\n @for (entry of navSelectorState.entries(); track entry.uid) {\n @if (!entry.hidden) {\n <div\n class=\"entry\"\n [class.folder]=\"entry.type === 'GROUP' || entry.type === 'CATEGORY'\">\n @if (entry.type === 'LEAF') {\n <ap-nav-selector-leaf\n [leaf]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'GROUP') {\n <ap-nav-selector-group\n [group]=\"entry\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n } @else if (entry.type === 'CATEGORY') {\n <ap-nav-selector-category\n [category]=\"$any(entry)\"\n (actionClicked)=\"actionClicked.emit($event)\" />\n }\n </div>\n }\n }\n @if (navSelectorState.expanded() && navSelectorState.noResults()) {\n <div class=\"no-result\">{{ translatedTexts().noResults }}</div>\n }\n </div>\n\n @if (displayFooter() && footerProjectionNotNull) {\n <div class=\"nav-selector__footer\">\n <ng-container\n [ngTemplateOutlet]=\"footerProjectionNotNull\"\n [ngTemplateOutletContext]=\"{\n expanded: navSelectorState.expanded(),\n }\" />\n </div>\n }\n</nav>\n", styles: [":host,nav{width:224px}@media only screen and (min-width: 1400px){:host:not(.embedded),nav:not(.embedded){width:250px}:host:not(.embedded) .nav-selector__content,nav:not(.embedded) .nav-selector__content{width:250px}}:host{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0;flex-grow:1}:host :hover .expand-button.expanded{animation-name:translateExpandButton}:host nav{display:flex;height:100%;flex-grow:1;flex-direction:column;align-items:flex-start;flex-shrink:0;overflow:hidden;background:var(--ref-color-white);transition:width .25s cubic-bezier(.4,0,.3,1)}:host nav:not(.embedded){border-right:1px solid var(--ref-color-grey-10)}:host .nav-selector__header{position:relative;display:flex;padding:var(--ref-spacing-xs) var(--ref-spacing-sm);flex-direction:column;align-items:flex-start;gap:var(--ref-spacing-xxs);align-self:stretch;white-space:nowrap;border-bottom:1px solid var(--ref-color-grey-10);background:var(--ref-color-white)}:host .nav-selector__header .h3{color:var(--ref-color-grey-100);font-family:Averta;font-size:var(--sys-text-style-h3-size);font-style:normal;font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-lg)}:host .nav-selector__header .expand-button-container{position:absolute;right:0;top:var(--ref-spacing-xs)}:host .nav-selector__header .expand-button{animation-duration:70ms;animation-timing-function:cubic-bezier(0,0,.2,1);animation-fill-mode:forwards;animation-name:translateHideButton;display:flex;width:24px;height:24px;justify-content:center;align-items:center;background:var(--ref-color-grey-bg);border-top:1px solid var(--ref-color-grey-20);border-right:none;border-bottom:1px solid var(--ref-color-grey-20);border-left:1px solid var(--ref-color-grey-20);border-top-left-radius:var(--ref-border-radius-sm);border-bottom-left-radius:var(--ref-border-radius-sm);cursor:pointer}@keyframes translateHideButton{0%{transform:translate(0)}to{transform:translate(100%)}}@keyframes translateExpandButton{0%{transform:translate(100%)}to{transform:translate(0)}}:host .nav-selector__header .expand-button.expanded{position:absolute;right:0;top:12px;transform:translate(100%)}:host .nav-selector__header .expand-button ap-symbol[symbol-id=arrow-reduce],:host .nav-selector__header .expand-button ap-symbol[symbol-id=arrow-expand]{color:var(--ref-color-grey-80)}:host .nav-selector__header .expand-button:focus-visible{border-radius:var(--ref-border-radius-sm) 0px 0px var(--ref-border-radius-sm);border-top:1px solid var(--ref-color-grey-20);border-bottom:1px solid var(--ref-color-grey-20);border-left:1px solid var(--ref-color-grey-20);background:var(--ref-color-grey-10);box-shadow:0 0 0 1px #fff,0 0 0 3px #178dfe}:host .nav-selector__header .expand-button:focus-visible.expanded{animation-name:translateExpandButton}:host .nav-selector__header .expand-button:hover{background-color:var(--ref-color-grey-10)}:host .nav-selector__header .expand-button:active{background-color:var(--ref-color-grey-20)}:host .nav-selector__content{display:flex;flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;width:224px;overflow-y:scroll;overflow-x:hidden;transition:width .25s cubic-bezier(.4,0,.3,1)}:host .nav-selector__content .entry{align-self:stretch;display:flex;flex-direction:column}:host .nav-selector__content .entry.folder{padding:var(--ref-spacing-xxs);border-bottom:1px solid var(--sys-border-color-default)}:host .nav-selector__content .entry.folder+.entry:not(.folder){padding-top:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder){padding-left:var(--ref-spacing-xxs);padding-right:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):first-child{padding-top:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):last-child{padding-bottom:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder):has(+.entry.folder){padding-bottom:var(--ref-spacing-xxs)}:host .nav-selector__content .entry:not(.folder)+.entry.folder{border-top:1px solid var(--sys-border-color-default)}:host .nav-selector__content .no-result{display:flex;padding:var(--ref-spacing-sm);flex-direction:column;align-items:flex-start;flex:1 0 0;align-self:stretch;color:var(--ref-color-grey-80);font-family:Averta;font-size:var(--ref-font-size-sm);font-style:italic;font-weight:400;line-height:var(--ref-font-line-height-sm)}:host .nav-selector__footer{display:flex;padding:var(--ref-spacing-xs);flex-direction:column;align-items:flex-start;gap:var(--ref-spacing-xxs);align-self:stretch;border-top:1px solid var(--sys-border-color-default);background:var(--ref-color-white)}:host.minified{width:64px}:host.minified nav{width:64px}:host.minified nav .nav-selector__header{align-items:center}:host.minified nav .nav-selector__header .expand-button{animation-name:none;border-radius:var(--ref-border-radius-sm);border:1px solid var(--ref-color-grey-20);background:var(--ref-color-grey-bg)}:host.minified nav .nav-selector__content{width:64px}:host.minified nav .nav-selector__content .entry{padding:var(--ref-spacing-xxxs)}:host.minified nav .nav-selector__footer{padding:var(--ref-spacing-xs) var(--ref-spacing-xxxs)}\n"] }]
|
|
2977
|
+
}], ctorParameters: () => [] });
|
|
2960
2978
|
|
|
2961
2979
|
/**
|
|
2962
2980
|
* Generated bundle index. Do not edit.
|