@ngneers/controls 0.0.1-pre1 → 0.0.1-pre3
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/LICENSE +21 -0
- package/fesm2022/ngneers-controls-accordion.mjs +194 -0
- package/fesm2022/ngneers-controls-accordion.mjs.map +1 -0
- package/fesm2022/ngneers-controls-api-ng.mjs +668 -0
- package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -0
- package/fesm2022/ngneers-controls-api.mjs +256 -227
- package/fesm2022/ngneers-controls-api.mjs.map +1 -1
- package/fesm2022/ngneers-controls-avatar.mjs +70 -0
- package/fesm2022/ngneers-controls-avatar.mjs.map +1 -0
- package/fesm2022/ngneers-controls-base.mjs +397 -0
- package/fesm2022/ngneers-controls-base.mjs.map +1 -0
- package/fesm2022/ngneers-controls-breadcrumb.mjs +74 -0
- package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -0
- package/fesm2022/ngneers-controls-button-group.mjs +51 -0
- package/fesm2022/ngneers-controls-button-group.mjs.map +1 -0
- package/fesm2022/ngneers-controls-button.mjs +62 -0
- package/fesm2022/ngneers-controls-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-calendar-time-C7UnIFzU.mjs +63 -0
- package/fesm2022/ngneers-controls-calendar-time-C7UnIFzU.mjs.map +1 -0
- package/fesm2022/ngneers-controls-calendar.mjs +468 -0
- package/fesm2022/ngneers-controls-calendar.mjs.map +1 -0
- package/fesm2022/ngneers-controls-checkbox.mjs +58 -0
- package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -0
- package/fesm2022/ngneers-controls-chip.mjs +52 -0
- package/fesm2022/ngneers-controls-chip.mjs.map +1 -0
- package/fesm2022/ngneers-controls-defer.mjs +43 -0
- package/fesm2022/ngneers-controls-defer.mjs.map +1 -0
- package/fesm2022/ngneers-controls-dialog.mjs +329 -33
- package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
- package/fesm2022/ngneers-controls-directives.mjs +443 -0
- package/fesm2022/ngneers-controls-directives.mjs.map +1 -0
- package/fesm2022/ngneers-controls-drawer.mjs +232 -0
- package/fesm2022/ngneers-controls-drawer.mjs.map +1 -0
- package/fesm2022/ngneers-controls-edit-inplace.mjs +120 -0
- package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -0
- package/fesm2022/ngneers-controls-filter.mjs +516 -0
- package/fesm2022/ngneers-controls-filter.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs +87 -0
- package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs +87 -0
- package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n.mjs +57 -0
- package/fesm2022/ngneers-controls-i18n.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon.mjs +60 -18
- package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
- package/fesm2022/ngneers-controls-inplace.mjs +107 -0
- package/fesm2022/ngneers-controls-inplace.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input-field.mjs +141 -0
- package/fesm2022/ngneers-controls-input-field.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input-mask.mjs +282 -0
- package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input.mjs +69 -0
- package/fesm2022/ngneers-controls-input.mjs.map +1 -0
- package/fesm2022/ngneers-controls-item-view.mjs +441 -0
- package/fesm2022/ngneers-controls-item-view.mjs.map +1 -0
- package/fesm2022/ngneers-controls-list-box.mjs +157 -53
- package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
- package/fesm2022/ngneers-controls-menu.mjs +332 -0
- package/fesm2022/ngneers-controls-menu.mjs.map +1 -0
- package/fesm2022/ngneers-controls-message.mjs +29 -0
- package/fesm2022/ngneers-controls-message.mjs.map +1 -0
- package/fesm2022/ngneers-controls-paginator.mjs +111 -0
- package/fesm2022/ngneers-controls-paginator.mjs.map +1 -0
- package/fesm2022/ngneers-controls-popover.mjs +129 -40
- package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
- package/fesm2022/ngneers-controls-progress.mjs +82 -0
- package/fesm2022/ngneers-controls-progress.mjs.map +1 -0
- package/fesm2022/ngneers-controls-scroller.mjs +162 -78
- package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select-button.mjs +55 -0
- package/fesm2022/ngneers-controls-select-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-select.mjs +313 -103
- package/fesm2022/ngneers-controls-select.mjs.map +1 -1
- package/fesm2022/ngneers-controls-slider.mjs +155 -0
- package/fesm2022/ngneers-controls-slider.mjs.map +1 -0
- package/fesm2022/ngneers-controls-spinner.mjs +169 -0
- package/fesm2022/ngneers-controls-spinner.mjs.map +1 -0
- package/fesm2022/ngneers-controls-splitter.mjs +717 -0
- package/fesm2022/ngneers-controls-splitter.mjs.map +1 -0
- package/fesm2022/ngneers-controls-switch.mjs +39 -0
- package/fesm2022/ngneers-controls-switch.mjs.map +1 -0
- package/fesm2022/ngneers-controls-table.mjs +379 -0
- package/fesm2022/ngneers-controls-table.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tabs.mjs +287 -0
- package/fesm2022/ngneers-controls-tabs.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tag.mjs +29 -0
- package/fesm2022/ngneers-controls-tag.mjs.map +1 -0
- package/fesm2022/ngneers-controls-toast.mjs +184 -0
- package/fesm2022/ngneers-controls-toast.mjs.map +1 -0
- package/fesm2022/ngneers-controls-toggle-button.mjs +65 -0
- package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tooltip.mjs +454 -0
- package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -0
- package/fesm2022/ngneers-controls-utils-ng.mjs +227 -0
- package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -0
- package/fesm2022/ngneers-controls-utils.mjs +217 -60
- package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
- package/fesm2022/ngneers-controls.mjs.map +1 -1
- package/package.json +167 -32
- package/types/ngneers-controls-accordion.d.ts +114 -0
- package/types/ngneers-controls-api-ng.d.ts +291 -0
- package/types/ngneers-controls-api.d.ts +99 -0
- package/types/ngneers-controls-avatar.d.ts +50 -0
- package/types/ngneers-controls-base.d.ts +166 -0
- package/types/ngneers-controls-breadcrumb.d.ts +86 -0
- package/types/ngneers-controls-button-group.d.ts +30 -0
- package/types/ngneers-controls-button.d.ts +34 -0
- package/types/ngneers-controls-calendar.d.ts +275 -0
- package/types/ngneers-controls-checkbox.d.ts +38 -0
- package/types/ngneers-controls-chip.d.ts +37 -0
- package/types/ngneers-controls-defer.d.ts +22 -0
- package/types/ngneers-controls-dialog.d.ts +218 -0
- package/types/ngneers-controls-directives.d.ts +146 -0
- package/types/ngneers-controls-drawer.d.ts +220 -0
- package/types/ngneers-controls-edit-inplace.d.ts +182 -0
- package/types/ngneers-controls-filter.d.ts +304 -0
- package/types/ngneers-controls-i18n.d.ts +108 -0
- package/types/ngneers-controls-icon.d.ts +74 -0
- package/types/ngneers-controls-inplace.d.ts +95 -0
- package/types/ngneers-controls-input-field.d.ts +159 -0
- package/types/ngneers-controls-input-mask.d.ts +83 -0
- package/types/ngneers-controls-input.d.ts +27 -0
- package/types/ngneers-controls-item-view.d.ts +211 -0
- package/types/ngneers-controls-list-box.d.ts +216 -0
- package/types/ngneers-controls-menu.d.ts +178 -0
- package/types/ngneers-controls-message.d.ts +19 -0
- package/types/ngneers-controls-paginator.d.ts +162 -0
- package/types/ngneers-controls-popover.d.ts +101 -0
- package/types/ngneers-controls-progress.d.ts +44 -0
- package/types/ngneers-controls-scroller.d.ts +137 -0
- package/types/ngneers-controls-select-button.d.ts +37 -0
- package/types/ngneers-controls-select.d.ts +314 -0
- package/types/ngneers-controls-slider.d.ts +53 -0
- package/types/ngneers-controls-spinner.d.ts +105 -0
- package/types/ngneers-controls-splitter.d.ts +391 -0
- package/types/ngneers-controls-switch.d.ts +18 -0
- package/types/ngneers-controls-table.d.ts +157 -0
- package/types/ngneers-controls-tabs.d.ts +106 -0
- package/types/ngneers-controls-tag.d.ts +19 -0
- package/types/ngneers-controls-toast.d.ts +70 -0
- package/types/ngneers-controls-toggle-button.d.ts +46 -0
- package/types/ngneers-controls-tooltip.d.ts +188 -0
- package/types/ngneers-controls-utils-ng.d.ts +57 -0
- package/types/ngneers-controls-utils.d.ts +130 -0
- package/api/index.d.ts +0 -134
- package/custom-types/index.d.ts +0 -7
- package/dialog/index.d.ts +0 -43
- package/fesm2022/ngneers-controls-custom-types.mjs +0 -4
- package/fesm2022/ngneers-controls-custom-types.mjs.map +0 -1
- package/fesm2022/ngneers-controls-form-field.mjs +0 -33
- package/fesm2022/ngneers-controls-form-field.mjs.map +0 -1
- package/fesm2022/ngneers-controls-lazy-cacher.mjs +0 -30
- package/fesm2022/ngneers-controls-lazy-cacher.mjs.map +0 -1
- package/fesm2022/ngneers-controls-text-field.mjs +0 -23
- package/fesm2022/ngneers-controls-text-field.mjs.map +0 -1
- package/form-field/index.d.ts +0 -19
- package/icon/index.d.ts +0 -30
- package/lazy-cacher/index.d.ts +0 -14
- package/list-box/index.d.ts +0 -58
- package/popover/index.d.ts +0 -41
- package/scroller/index.d.ts +0 -95
- package/select/index.d.ts +0 -86
- package/text-field/index.d.ts +0 -10
- package/utils/index.d.ts +0 -36
- /package/{index.d.ts → types/ngneers-controls.d.ts} +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 NGneers
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, input, booleanAttribute, model, ChangeDetectionStrategy, Component, viewChild, contentChild, computed, Directive, inject, signal, afterRenderEffect } from '@angular/core';
|
|
3
|
+
import { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';
|
|
4
|
+
import { accordionControlTemplate } from '@ngneers/controls-themes/templates/accordion';
|
|
5
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
6
|
+
import { templateTypesFn, NgnTemplate } from '@ngneers/controls/api/ng';
|
|
7
|
+
import { NgnDefer } from '@ngneers/controls/defer';
|
|
8
|
+
import { NgnIcon } from '@ngneers/controls/icon';
|
|
9
|
+
import { generateElementId } from '@ngneers/controls/utils-ng';
|
|
10
|
+
import { accordionPanelControlTemplate } from '@ngneers/controls-themes/templates/accordion-panel';
|
|
11
|
+
|
|
12
|
+
const ACCORDION_CONTROL = new InjectionToken('AccordionControl');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @category control
|
|
16
|
+
*/
|
|
17
|
+
class NgnAccordion extends NgnBase {
|
|
18
|
+
theme = this.injectThemeTemplate(accordionControlTemplate, 'root');
|
|
19
|
+
cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : {}), transform: booleanAttribute });
|
|
20
|
+
lazy = input(false, { ...(ngDevMode ? { debugName: "lazy" } : {}), transform: booleanAttribute });
|
|
21
|
+
/**
|
|
22
|
+
* Whether multiple panels can be expanded at once.
|
|
23
|
+
*/
|
|
24
|
+
iconExpanded = input(...(ngDevMode ? [undefined, { debugName: "iconExpanded" }] : []));
|
|
25
|
+
iconCollapsed = input(...(ngDevMode ? [undefined, { debugName: "iconCollapsed" }] : []));
|
|
26
|
+
multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : {}), transform: booleanAttribute });
|
|
27
|
+
expandedPanels = model([], ...(ngDevMode ? [{ debugName: "expandedPanels" }] : []));
|
|
28
|
+
togglePanel(panelId) {
|
|
29
|
+
if (!this.multiple()) {
|
|
30
|
+
if (this.expandedPanels().includes(panelId)) {
|
|
31
|
+
this.expandedPanels.set([]);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.expandedPanels.set([panelId]);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (this.expandedPanels().includes(panelId)) {
|
|
38
|
+
this.expandedPanels.update(panels => panels.filter(id => id !== panelId));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.expandedPanels.update(panels => [...panels, panelId]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
constructor() {
|
|
45
|
+
super();
|
|
46
|
+
}
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordion, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.0", type: NgnAccordion, isStandalone: true, selector: "ngn-accordion", inputs: { cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, iconExpanded: { classPropertyName: "iconExpanded", publicName: "iconExpanded", isSignal: true, isRequired: false, transformFunction: null }, iconCollapsed: { classPropertyName: "iconCollapsed", publicName: "iconCollapsed", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, expandedPanels: { classPropertyName: "expandedPanels", publicName: "expandedPanels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expandedPanels: "expandedPanelsChange" }, providers: [
|
|
49
|
+
provideSelf(NgnAccordion),
|
|
50
|
+
{
|
|
51
|
+
provide: ACCORDION_CONTROL,
|
|
52
|
+
deps: [NgnAccordion],
|
|
53
|
+
useFactory: (accordion) => ({
|
|
54
|
+
expandedPanels: accordion.expandedPanels,
|
|
55
|
+
togglePanel: accordion.togglePanel.bind(accordion),
|
|
56
|
+
lazy: accordion.lazy,
|
|
57
|
+
cache: accordion.cache,
|
|
58
|
+
iconExpanded: accordion.iconExpanded,
|
|
59
|
+
iconCollapsed: accordion.iconCollapsed,
|
|
60
|
+
}),
|
|
61
|
+
},
|
|
62
|
+
], usesInheritance: true, ngImport: i0, template: "<ng-content />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordion, decorators: [{
|
|
65
|
+
type: Component,
|
|
66
|
+
args: [{ selector: 'ngn-accordion', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
67
|
+
provideSelf(NgnAccordion),
|
|
68
|
+
{
|
|
69
|
+
provide: ACCORDION_CONTROL,
|
|
70
|
+
deps: [NgnAccordion],
|
|
71
|
+
useFactory: (accordion) => ({
|
|
72
|
+
expandedPanels: accordion.expandedPanels,
|
|
73
|
+
togglePanel: accordion.togglePanel.bind(accordion),
|
|
74
|
+
lazy: accordion.lazy,
|
|
75
|
+
cache: accordion.cache,
|
|
76
|
+
iconExpanded: accordion.iconExpanded,
|
|
77
|
+
iconCollapsed: accordion.iconCollapsed,
|
|
78
|
+
}),
|
|
79
|
+
},
|
|
80
|
+
], template: "<ng-content />\n" }]
|
|
81
|
+
}], ctorParameters: () => [], propDecorators: { cache: [{ type: i0.Input, args: [{ isSignal: true, alias: "cache", required: false }] }], lazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazy", required: false }] }], iconExpanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconExpanded", required: false }] }], iconCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconCollapsed", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], expandedPanels: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedPanels", required: false }] }, { type: i0.Output, args: ["expandedPanelsChange"] }] } });
|
|
82
|
+
|
|
83
|
+
class AccordionTemplates extends NgnBase {
|
|
84
|
+
_defaultHeaderTemplate = viewChild.required('defaultHeaderTemplate');
|
|
85
|
+
_userHeaderTemplate = contentChild('header', ...(ngDevMode ? [{ debugName: "_userHeaderTemplate" }] : []));
|
|
86
|
+
/**
|
|
87
|
+
* Set a custom template for the header of the accordion panel.
|
|
88
|
+
* Can also be set using an `<ng-template>` element with `#header` template reference variable.
|
|
89
|
+
*/
|
|
90
|
+
templateHeader = input(null, ...(ngDevMode ? [{ debugName: "templateHeader" }] : []));
|
|
91
|
+
headerTemplate = computed(() => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate(), ...(ngDevMode ? [{ debugName: "headerTemplate" }] : []));
|
|
92
|
+
_userContentTemplate = contentChild('content', ...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : []));
|
|
93
|
+
/**
|
|
94
|
+
* The required template for the content of the accordion panel.
|
|
95
|
+
* Can also be set using an `<ng-template>` element with `#content` template reference variable.
|
|
96
|
+
*/
|
|
97
|
+
templateContent = input(null, ...(ngDevMode ? [{ debugName: "templateContent" }] : []));
|
|
98
|
+
contentTemplate = computed(() => this._userContentTemplate() ?? this.templateContent(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : []));
|
|
99
|
+
/**
|
|
100
|
+
* Types for the dialog templates.
|
|
101
|
+
*/
|
|
102
|
+
templateTypes = templateTypesFn();
|
|
103
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AccordionTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
104
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: AccordionTemplates, isStandalone: true, inputs: { templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateContent: { classPropertyName: "templateContent", publicName: "templateContent", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
|
|
105
|
+
}
|
|
106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AccordionTemplates, decorators: [{
|
|
107
|
+
type: Directive
|
|
108
|
+
}], propDecorators: { _defaultHeaderTemplate: [{ type: i0.ViewChild, args: ['defaultHeaderTemplate', { isSignal: true }] }], _userHeaderTemplate: [{ type: i0.ContentChild, args: ['header', { isSignal: true }] }], templateHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateHeader", required: false }] }], _userContentTemplate: [{ type: i0.ContentChild, args: ['content', { isSignal: true }] }], templateContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateContent", required: false }] }] } });
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @category control
|
|
112
|
+
*/
|
|
113
|
+
class NgnAccordionPanel extends AccordionTemplates {
|
|
114
|
+
theme = this.injectThemeTemplate(accordionPanelControlTemplate, 'root');
|
|
115
|
+
_accordionControl = inject(ACCORDION_CONTROL);
|
|
116
|
+
/**
|
|
117
|
+
* The unique identifier for the accordion panel.
|
|
118
|
+
* @default generateElementId()
|
|
119
|
+
*/
|
|
120
|
+
panelId = input(generateElementId(), ...(ngDevMode ? [{ debugName: "panelId" }] : []));
|
|
121
|
+
/**
|
|
122
|
+
* Whether to lazily load the content of the panel when expanded.
|
|
123
|
+
* @default false
|
|
124
|
+
*/
|
|
125
|
+
lazy = input(null, { ...(ngDevMode ? { debugName: "lazy" } : {}), transform: booleanAttribute });
|
|
126
|
+
/**
|
|
127
|
+
* Whether to cache the content of the panel when {@link lazy} is enabled and the panel is closed.
|
|
128
|
+
* @default false
|
|
129
|
+
*/
|
|
130
|
+
cache = input(null, { ...(ngDevMode ? { debugName: "cache" } : {}), transform: booleanAttribute });
|
|
131
|
+
/**
|
|
132
|
+
* The header text for the accordion panel.
|
|
133
|
+
*/
|
|
134
|
+
header = input(...(ngDevMode ? [undefined, { debugName: "header" }] : []));
|
|
135
|
+
/**
|
|
136
|
+
* Whether the accordion panel is disabled. Disabling will prevent user interaction,
|
|
137
|
+
* but not automatically close the panel if it was already expanded, or is expanded programatically.
|
|
138
|
+
* @default false
|
|
139
|
+
*/
|
|
140
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
|
|
141
|
+
iconExpanded = this._accordionControl.iconExpanded;
|
|
142
|
+
iconCollapsed = this._accordionControl.iconCollapsed;
|
|
143
|
+
_contentViewChild = viewChild.required('content');
|
|
144
|
+
expanded = computed(() => this._accordionControl.expandedPanels().includes(this.panelId()), ...(ngDevMode ? [{ debugName: "expanded" }] : []));
|
|
145
|
+
headerId = computed(() => `${this.panelId()}-accordionpanel-header`, ...(ngDevMode ? [{ debugName: "headerId" }] : []));
|
|
146
|
+
contentId = computed(() => `${this.panelId()}-accordionpanel-content`, ...(ngDevMode ? [{ debugName: "contentId" }] : []));
|
|
147
|
+
afterTransitionExpanded = signal(false, ...(ngDevMode ? [{ debugName: "afterTransitionExpanded" }] : []));
|
|
148
|
+
lazyInt = computed(() => this.lazy() ?? this._accordionControl.lazy(), ...(ngDevMode ? [{ debugName: "lazyInt" }] : []));
|
|
149
|
+
cacheInt = computed(() => this.cache() ?? this._accordionControl.cache(), ...(ngDevMode ? [{ debugName: "cacheInt" }] : []));
|
|
150
|
+
constructor() {
|
|
151
|
+
super();
|
|
152
|
+
afterRenderEffect(() => {
|
|
153
|
+
if (!this.lazyInt() || this.cacheInt()) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (this.expanded()) {
|
|
157
|
+
this.afterTransitionExpanded.set(true);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
requestAnimationFrame(() => {
|
|
161
|
+
const allAnimationsDone = Promise.all(this._contentViewChild()
|
|
162
|
+
.nativeElement.getAnimations()
|
|
163
|
+
.map(x => x.finished));
|
|
164
|
+
allAnimationsDone
|
|
165
|
+
.then(() => {
|
|
166
|
+
this.afterTransitionExpanded.set(false);
|
|
167
|
+
})
|
|
168
|
+
.catch(() => {
|
|
169
|
+
// ignore cancelled animation
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Toggles the expanded state of the accordion panel.
|
|
177
|
+
*/
|
|
178
|
+
toggle() {
|
|
179
|
+
this._accordionControl.togglePanel(this.panelId());
|
|
180
|
+
}
|
|
181
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordionPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
182
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnAccordionPanel, isStandalone: true, selector: "ngn-accordion-panel", inputs: { panelId: { classPropertyName: "panelId", publicName: "panelId", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnAccordionPanel)], viewQueries: [{ propertyName: "_contentViewChild", first: true, predicate: ["content"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'chevron_up' : 'chevron_down'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
183
|
+
}
|
|
184
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAccordionPanel, decorators: [{
|
|
185
|
+
type: Component,
|
|
186
|
+
args: [{ selector: 'ngn-accordion-panel', imports: [NgTemplateOutlet, NgnPt, NgnDefer, NgnTemplate, NgnIcon], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideSelf(NgnAccordionPanel)], template: "<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'chevron_up' : 'chevron_down'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n" }]
|
|
187
|
+
}], ctorParameters: () => [], propDecorators: { panelId: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelId", required: false }] }], lazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazy", required: false }] }], cache: [{ type: i0.Input, args: [{ isSignal: true, alias: "cache", required: false }] }], header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], _contentViewChild: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Generated bundle index. Do not edit.
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
export { NgnAccordion, NgnAccordionPanel };
|
|
194
|
+
//# sourceMappingURL=ngneers-controls-accordion.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngneers-controls-accordion.mjs","sources":["../../src/accordion/types.ts","../../src/accordion/accordion.ts","../../src/accordion/accordion.html","../../src/accordion/accordion-templates.ts","../../src/accordion/accordion-panel.ts","../../src/accordion/accordion-panel.html","../../src/accordion/ngneers-controls-accordion.ts"],"sourcesContent":["import { InjectionToken, type Signal } from '@angular/core';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\nexport type HeaderTemplateType = {\r\n $implicit: {\r\n panelId: string;\r\n text?: string;\r\n expanded: boolean;\r\n };\r\n};\r\nexport type AccordionControl = {\r\n expandedPanels: Signal<string[]>;\r\n togglePanel: (panelId: string) => void;\r\n lazy: Signal<boolean>;\r\n cache: Signal<boolean>;\r\n iconExpanded: Signal<IconType>;\r\n iconCollapsed: Signal<IconType>;\r\n};\r\n\r\nexport const ACCORDION_CONTROL = new InjectionToken<AccordionControl>('AccordionControl');\r\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\nimport { accordionControlTemplate } from '@ngneers/controls-themes/templates/accordion';\r\n\r\nimport { ACCORDION_CONTROL, type AccordionControl } from './types';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-accordion',\r\n imports: [],\r\n templateUrl: './accordion.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n provideSelf(NgnAccordion),\r\n {\r\n provide: ACCORDION_CONTROL,\r\n deps: [NgnAccordion],\r\n useFactory: (accordion: NgnAccordion) =>\r\n <AccordionControl>{\r\n expandedPanels: accordion.expandedPanels,\r\n togglePanel: accordion.togglePanel.bind(accordion),\r\n lazy: accordion.lazy,\r\n cache: accordion.cache,\r\n iconExpanded: accordion.iconExpanded,\r\n iconCollapsed: accordion.iconCollapsed,\r\n },\r\n },\r\n ],\r\n})\r\nexport class NgnAccordion extends NgnBase<'accordion'> {\r\n protected readonly theme = this.injectThemeTemplate(accordionControlTemplate, 'root');\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Whether multiple panels can be expanded at once.\r\n */\r\n public readonly iconExpanded = input<IconType>();\r\n public readonly iconCollapsed = input<IconType>();\r\n public readonly multiple = input(false, { transform: booleanAttribute });\r\n public readonly expandedPanels = model<string[]>([]);\r\n\r\n public togglePanel(panelId: string) {\r\n if (!this.multiple()) {\r\n if (this.expandedPanels().includes(panelId)) {\r\n this.expandedPanels.set([]);\r\n return;\r\n }\r\n this.expandedPanels.set([panelId]);\r\n return;\r\n }\r\n if (this.expandedPanels().includes(panelId)) {\r\n this.expandedPanels.update(panels => panels.filter(id => id !== panelId));\r\n } else {\r\n this.expandedPanels.update(panels => [...panels, panelId]);\r\n }\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<ng-content />\n","import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\nimport type { HeaderTemplateType } from './types';\r\n\r\n@Directive()\r\nexport abstract class AccordionTemplates extends NgnBase<'accordionPanel'> {\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<HeaderTemplateType>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<HeaderTemplateType>>('header');\r\n /**\r\n * Set a custom template for the header of the accordion panel.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<HeaderTemplateType> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The required template for the content of the accordion panel.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly templateContent = input<TemplateRef<unknown> | null>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.templateContent()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: HeaderTemplateType;\r\n }>();\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { accordionPanelControlTemplate } from '@ngneers/controls-themes/templates/accordion-panel';\r\n\r\nimport { AccordionTemplates } from './accordion-templates';\r\nimport { ACCORDION_CONTROL } from './types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-accordion-panel',\r\n imports: [NgTemplateOutlet, NgnPt, NgnDefer, NgnTemplate, NgnIcon],\r\n templateUrl: './accordion-panel.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnAccordionPanel)],\r\n})\r\nexport class NgnAccordionPanel extends AccordionTemplates {\r\n protected readonly theme = this.injectThemeTemplate(accordionPanelControlTemplate, 'root');\r\n\r\n private readonly _accordionControl = inject(ACCORDION_CONTROL);\r\n\r\n /**\r\n * The unique identifier for the accordion panel.\r\n * @default generateElementId()\r\n */\r\n public readonly panelId = input<string>(generateElementId());\r\n /**\r\n * Whether to lazily load the content of the panel when expanded.\r\n * @default false\r\n */\r\n public readonly lazy = input(null, { transform: booleanAttribute });\r\n /**\r\n * Whether to cache the content of the panel when {@link lazy} is enabled and the panel is closed.\r\n * @default false\r\n */\r\n public readonly cache = input(null, { transform: booleanAttribute });\r\n /**\r\n * The header text for the accordion panel.\r\n */\r\n public readonly header = input<string>();\r\n /**\r\n * Whether the accordion panel is disabled. Disabling will prevent user interaction,\r\n * but not automatically close the panel if it was already expanded, or is expanded programatically.\r\n * @default false\r\n */\r\n public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly iconExpanded = this._accordionControl.iconExpanded;\r\n protected readonly iconCollapsed = this._accordionControl.iconCollapsed;\r\n protected readonly _contentViewChild = viewChild.required<ElementRef<HTMLElement>>('content');\r\n\r\n protected readonly expanded = computed(() =>\r\n this._accordionControl.expandedPanels().includes(this.panelId())\r\n );\r\n\r\n protected readonly headerId = computed(() => `${this.panelId()}-accordionpanel-header`);\r\n protected readonly contentId = computed(() => `${this.panelId()}-accordionpanel-content`);\r\n\r\n protected readonly afterTransitionExpanded = signal<boolean>(false);\r\n\r\n protected readonly lazyInt = computed(() => this.lazy() ?? this._accordionControl.lazy());\r\n protected readonly cacheInt = computed(() => this.cache() ?? this._accordionControl.cache());\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (!this.lazyInt() || this.cacheInt()) {\r\n return;\r\n }\r\n if (this.expanded()) {\r\n this.afterTransitionExpanded.set(true);\r\n } else {\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this._contentViewChild()\r\n .nativeElement.getAnimations()\r\n .map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.afterTransitionExpanded.set(false);\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the expanded state of the accordion panel.\r\n */\r\n public toggle() {\r\n this._accordionControl.togglePanel(this.panelId());\r\n }\r\n}\r\n","<header>\r\n <button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n header: true,\r\n 'header-disabled': disabled(),\r\n }\"\r\n [id]=\"headerId()\"\r\n [disabled]=\"disabled()\"\r\n [aria-expanded]=\"expanded()\"\r\n (click)=\"toggle()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { panelId: panelId(), text: header(), expanded: expanded() } }\r\n \"\r\n ></ng-container>\r\n }\r\n <ngn-icon\r\n [defaultIcon]=\"expanded() ? 'chevron_up' : 'chevron_down'\"\r\n [icon]=\"expanded() ? iconExpanded() : iconCollapsed()\"\r\n />\r\n </button>\r\n</header>\r\n\r\n<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'content-expander': true,\r\n 'content-expander-collapsed': !expanded(),\r\n }\"\r\n #content\r\n>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n [id]=\"contentId()\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [aria-hidden]=\"!expanded()\"\r\n role=\"region\"\r\n >\r\n <ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"lazyInt() && !cacheInt() ? afterTransitionExpanded() : expanded()\"\r\n [hiddenOnClosed]=\"false\"\r\n [cache]=\"cacheInt()\"\r\n [lazy]=\"lazyInt()\"\r\n >\r\n <ng-content />\r\n </ngn-defer>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultHeaderTemplate let-header [ngnTemplate]=\"templateTypes.header\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'header-text'\">\r\n {{ header.text }}\r\n </span>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|