@cute-widgets/base 20.0.1
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/CHANGELOG.md +1 -0
- package/LICENSE.md +191 -0
- package/README.md +190 -0
- package/abstract/index.d.ts +327 -0
- package/alert/index.d.ts +68 -0
- package/autocomplete/index.d.ts +442 -0
- package/badge/index.d.ts +26 -0
- package/bottom-sheet/index.d.ts +231 -0
- package/button/index.d.ts +182 -0
- package/button-toggle/index.d.ts +225 -0
- package/card/index.d.ts +163 -0
- package/checkbox/index.d.ts +174 -0
- package/chips/index.d.ts +963 -0
- package/collapse/index.d.ts +97 -0
- package/core/animation/index.d.ts +43 -0
- package/core/datetime/index.d.ts +404 -0
- package/core/directives/index.d.ts +168 -0
- package/core/error/index.d.ts +74 -0
- package/core/index.d.ts +1039 -0
- package/core/interfaces/index.d.ts +114 -0
- package/core/layout/index.d.ts +53 -0
- package/core/line/index.d.ts +37 -0
- package/core/nav/index.d.ts +321 -0
- package/core/observers/index.d.ts +124 -0
- package/core/option/index.d.ts +185 -0
- package/core/pipes/index.d.ts +53 -0
- package/core/ripple/index.d.ts +66 -0
- package/core/testing/index.d.ts +154 -0
- package/core/theming/index.d.ts +118 -0
- package/core/types/index.d.ts +53 -0
- package/core/utils/index.d.ts +129 -0
- package/cute-widgets-base-20.0.1.tgz +0 -0
- package/datepicker/index.d.ts +1817 -0
- package/dialog/index.d.ts +484 -0
- package/divider/index.d.ts +24 -0
- package/expansion/README.md +8 -0
- package/expansion/index.d.ts +308 -0
- package/fesm2022/cute-widgets-base-abstract.mjs +547 -0
- package/fesm2022/cute-widgets-base-abstract.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-alert.mjs +198 -0
- package/fesm2022/cute-widgets-base-alert.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-autocomplete.mjs +1217 -0
- package/fesm2022/cute-widgets-base-autocomplete.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-badge.mjs +75 -0
- package/fesm2022/cute-widgets-base-badge.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-bottom-sheet.mjs +416 -0
- package/fesm2022/cute-widgets-base-bottom-sheet.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-button-toggle.mjs +640 -0
- package/fesm2022/cute-widgets-base-button-toggle.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-button.mjs +546 -0
- package/fesm2022/cute-widgets-base-button.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-card.mjs +471 -0
- package/fesm2022/cute-widgets-base-card.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-checkbox.mjs +390 -0
- package/fesm2022/cute-widgets-base-checkbox.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-chips.mjs +2360 -0
- package/fesm2022/cute-widgets-base-chips.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-collapse.mjs +259 -0
- package/fesm2022/cute-widgets-base-collapse.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-animation.mjs +53 -0
- package/fesm2022/cute-widgets-base-core-animation.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-datetime.mjs +568 -0
- package/fesm2022/cute-widgets-base-core-datetime.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-directives.mjs +404 -0
- package/fesm2022/cute-widgets-base-core-directives.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-error.mjs +105 -0
- package/fesm2022/cute-widgets-base-core-error.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-interfaces.mjs +22 -0
- package/fesm2022/cute-widgets-base-core-interfaces.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-layout.mjs +74 -0
- package/fesm2022/cute-widgets-base-core-layout.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-line.mjs +87 -0
- package/fesm2022/cute-widgets-base-core-line.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-nav.mjs +863 -0
- package/fesm2022/cute-widgets-base-core-nav.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-observers.mjs +304 -0
- package/fesm2022/cute-widgets-base-core-observers.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-option.mjs +373 -0
- package/fesm2022/cute-widgets-base-core-option.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-pipes.mjs +97 -0
- package/fesm2022/cute-widgets-base-core-pipes.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-ripple.mjs +172 -0
- package/fesm2022/cute-widgets-base-core-ripple.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-testing.mjs +210 -0
- package/fesm2022/cute-widgets-base-core-testing.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-theming.mjs +314 -0
- package/fesm2022/cute-widgets-base-core-theming.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-types.mjs +22 -0
- package/fesm2022/cute-widgets-base-core-types.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core-utils.mjs +257 -0
- package/fesm2022/cute-widgets-base-core-utils.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-core.mjs +1600 -0
- package/fesm2022/cute-widgets-base-core.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-datepicker.mjs +4827 -0
- package/fesm2022/cute-widgets-base-datepicker.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-dialog.mjs +1046 -0
- package/fesm2022/cute-widgets-base-dialog.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-divider.mjs +86 -0
- package/fesm2022/cute-widgets-base-divider.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-expansion.mjs +623 -0
- package/fesm2022/cute-widgets-base-expansion.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-form-field.mjs +969 -0
- package/fesm2022/cute-widgets-base-form-field.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-grid-list.mjs +715 -0
- package/fesm2022/cute-widgets-base-grid-list.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-icon.mjs +1105 -0
- package/fesm2022/cute-widgets-base-icon.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-input.mjs +726 -0
- package/fesm2022/cute-widgets-base-input.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-layout-container.mjs +95 -0
- package/fesm2022/cute-widgets-base-layout-container.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-layout-stack.mjs +166 -0
- package/fesm2022/cute-widgets-base-layout-stack.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-layout.mjs +250 -0
- package/fesm2022/cute-widgets-base-layout.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-list.mjs +1557 -0
- package/fesm2022/cute-widgets-base-list.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-menu.mjs +1283 -0
- package/fesm2022/cute-widgets-base-menu.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-navbar.mjs +359 -0
- package/fesm2022/cute-widgets-base-navbar.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-paginator.mjs +485 -0
- package/fesm2022/cute-widgets-base-paginator.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-progress.mjs +321 -0
- package/fesm2022/cute-widgets-base-progress.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-radio.mjs +637 -0
- package/fesm2022/cute-widgets-base-radio.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-select.mjs +1208 -0
- package/fesm2022/cute-widgets-base-select.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-sidenav.mjs +1095 -0
- package/fesm2022/cute-widgets-base-sidenav.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-slider.mjs +99 -0
- package/fesm2022/cute-widgets-base-slider.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-snack-bar.mjs +897 -0
- package/fesm2022/cute-widgets-base-snack-bar.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-sort.mjs +639 -0
- package/fesm2022/cute-widgets-base-sort.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-spinner.mjs +154 -0
- package/fesm2022/cute-widgets-base-spinner.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-stepper.mjs +673 -0
- package/fesm2022/cute-widgets-base-stepper.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-table.mjs +1023 -0
- package/fesm2022/cute-widgets-base-table.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-tabs.mjs +729 -0
- package/fesm2022/cute-widgets-base-tabs.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-timepicker.mjs +965 -0
- package/fesm2022/cute-widgets-base-timepicker.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-toolbar.mjs +120 -0
- package/fesm2022/cute-widgets-base-toolbar.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-tooltip.mjs +947 -0
- package/fesm2022/cute-widgets-base-tooltip.mjs.map +1 -0
- package/fesm2022/cute-widgets-base-tree.mjs +598 -0
- package/fesm2022/cute-widgets-base-tree.mjs.map +1 -0
- package/fesm2022/cute-widgets-base.mjs +68 -0
- package/fesm2022/cute-widgets-base.mjs.map +1 -0
- package/form-field/index.d.ts +401 -0
- package/grid-list/index.d.ts +361 -0
- package/icon/index.d.ts +477 -0
- package/index.d.ts +3 -0
- package/input/index.d.ts +256 -0
- package/layout/container/index.d.ts +31 -0
- package/layout/index.d.ts +78 -0
- package/layout/stack/index.d.ts +52 -0
- package/list/index.d.ts +659 -0
- package/menu/index.d.ts +497 -0
- package/navbar/index.d.ts +91 -0
- package/package.json +279 -0
- package/paginator/index.d.ts +216 -0
- package/progress/index.d.ts +130 -0
- package/radio/index.d.ts +259 -0
- package/select/index.d.ts +426 -0
- package/sidenav/index.d.ts +369 -0
- package/slider/index.d.ts +48 -0
- package/snack-bar/index.d.ts +374 -0
- package/sort/index.d.ts +334 -0
- package/spinner/index.d.ts +70 -0
- package/stepper/index.d.ts +295 -0
- package/table/index.d.ts +395 -0
- package/tabs/index.d.ts +307 -0
- package/timepicker/index.d.ts +350 -0
- package/toolbar/index.d.ts +36 -0
- package/tooltip/index.d.ts +299 -0
- package/tree/index.d.ts +314 -0
|
@@ -0,0 +1,623 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, TemplateRef, Directive, ViewContainerRef, DOCUMENT, NgZone, ElementRef, Renderer2, EventEmitter, ViewChild, ContentChild, Output, Input, ChangeDetectionStrategy, ViewEncapsulation, Component, ChangeDetectorRef, HostAttributeToken, numberAttribute, QueryList, booleanAttribute, ContentChildren, NgModule } from '@angular/core';
|
|
3
|
+
import { CdkAccordionItem, CdkAccordion } from '@angular/cdk/accordion';
|
|
4
|
+
import { FocusMonitor, FocusKeyManager } from '@angular/cdk/a11y';
|
|
5
|
+
import { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';
|
|
6
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
7
|
+
import { TemplatePortal, CdkPortalOutlet } from '@angular/cdk/portal';
|
|
8
|
+
import { UniqueSelectionDispatcher } from '@angular/cdk/collections';
|
|
9
|
+
import { Subject, startWith, filter, take, Subscription, EMPTY, merge } from 'rxjs';
|
|
10
|
+
import { _animationsDisabled } from '@cute-widgets/base/core';
|
|
11
|
+
import { CommonModule } from '@angular/common';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @license Apache-2.0
|
|
15
|
+
*
|
|
16
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
17
|
+
*
|
|
18
|
+
* You may not use this file except in compliance with the License
|
|
19
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
20
|
+
*
|
|
21
|
+
* This code is a modification of the `@angular/material` original
|
|
22
|
+
* code licensed under MIT-style License (https://angular.dev/license).
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Token used to provide a `CuteAccordion` to `CuteExpansionPanel`.
|
|
26
|
+
* Used primarily to avoid circular imports between `CuteAccordion` and `CuteExpansionPanel`.
|
|
27
|
+
*/
|
|
28
|
+
const CUTE_ACCORDION = new InjectionToken('CUTE_ACCORDION');
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @license Apache-2.0
|
|
32
|
+
*
|
|
33
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
34
|
+
*
|
|
35
|
+
* You may not use this file except in compliance with the License
|
|
36
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
37
|
+
*
|
|
38
|
+
* This code is a modification of the `@angular/material` original
|
|
39
|
+
* code licensed under MIT-style License (https://angular.dev/license).
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* Token used to provide a `CuteExpansionPanel` to `CuteExpansionPanelContent`.
|
|
43
|
+
* Used to avoid circular imports between `CuteExpansionPanel` and `CuteExpansionPanelContent`.
|
|
44
|
+
*/
|
|
45
|
+
const CUTE_EXPANSION_PANEL = new InjectionToken('CUTE_EXPANSION_PANEL');
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @license Apache-2.0
|
|
49
|
+
*
|
|
50
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
51
|
+
*
|
|
52
|
+
* You may not use this file except in compliance with the License
|
|
53
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
54
|
+
*
|
|
55
|
+
* This code is a modification of the `@angular/material` original
|
|
56
|
+
* code licensed under MIT-style License (https://angular.dev/license).
|
|
57
|
+
*/
|
|
58
|
+
/**
|
|
59
|
+
* Expansion panel content that will be rendered lazily
|
|
60
|
+
* after the panel is opened for the first time.
|
|
61
|
+
*/
|
|
62
|
+
class CuteExpansionPanelContent {
|
|
63
|
+
constructor() {
|
|
64
|
+
this._template = inject(TemplateRef);
|
|
65
|
+
this._expansionPanel = inject(CUTE_EXPANSION_PANEL, { optional: true });
|
|
66
|
+
}
|
|
67
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
68
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteExpansionPanelContent, isStandalone: true, selector: "ng-template[cuteExpansionPanelContent]", ngImport: i0 }); }
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelContent, decorators: [{
|
|
71
|
+
type: Directive,
|
|
72
|
+
args: [{
|
|
73
|
+
selector: 'ng-template[cuteExpansionPanelContent]',
|
|
74
|
+
standalone: true,
|
|
75
|
+
}]
|
|
76
|
+
}], ctorParameters: () => [] });
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @license Apache-2.0
|
|
80
|
+
*
|
|
81
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
82
|
+
*
|
|
83
|
+
* You may not use this file except in compliance with the License
|
|
84
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
85
|
+
*
|
|
86
|
+
* This code is a modification of the `@angular/material` original
|
|
87
|
+
* code licensed under MIT-style License (https://angular.dev/license).
|
|
88
|
+
*/
|
|
89
|
+
/** Counter for generating unique element ids. */
|
|
90
|
+
let uniqueId = 0;
|
|
91
|
+
/**
|
|
92
|
+
* Injection token that can be used to configure the default
|
|
93
|
+
* options for the expansion panel component.
|
|
94
|
+
*/
|
|
95
|
+
const CUTE_EXPANSION_PANEL_DEFAULT_OPTIONS = new InjectionToken('CUTE_EXPANSION_PANEL_DEFAULT_OPTIONS');
|
|
96
|
+
/**
|
|
97
|
+
* This component can be used as a single element to show expandable content, or as one of
|
|
98
|
+
* multiple children of an element with the CuteAccordion directive attached.
|
|
99
|
+
*/
|
|
100
|
+
class CuteExpansionPanel extends CdkAccordionItem {
|
|
101
|
+
/** Whether the toggle indicator should be hidden. */
|
|
102
|
+
get hideToggle() { return this._hideToggle || (this.accordion && this.accordion.hideToggle); }
|
|
103
|
+
set hideToggle(value) {
|
|
104
|
+
this._hideToggle = coerceBooleanProperty(value);
|
|
105
|
+
}
|
|
106
|
+
/** The position of the expansion indicator. */
|
|
107
|
+
get togglePosition() {
|
|
108
|
+
return this._togglePosition || (this.accordion && this.accordion.togglePosition);
|
|
109
|
+
}
|
|
110
|
+
set togglePosition(value) {
|
|
111
|
+
this._togglePosition = value;
|
|
112
|
+
}
|
|
113
|
+
constructor() {
|
|
114
|
+
super();
|
|
115
|
+
this._viewContainerRef = inject(ViewContainerRef);
|
|
116
|
+
this._animationsDisabled = _animationsDisabled();
|
|
117
|
+
this._document = inject(DOCUMENT);
|
|
118
|
+
this._ngZone = inject(NgZone);
|
|
119
|
+
this._elementRef = inject(ElementRef);
|
|
120
|
+
this._renderer = inject(Renderer2);
|
|
121
|
+
this._hideToggle = false;
|
|
122
|
+
/** An event emitted after the body's expansion animation happens. */
|
|
123
|
+
this.afterExpand = new EventEmitter();
|
|
124
|
+
/** An event emitted after the body's collapse animation happens. */
|
|
125
|
+
this.afterCollapse = new EventEmitter();
|
|
126
|
+
/** Stream that emits for changes in `@Input` properties. */
|
|
127
|
+
this._inputChanges = new Subject();
|
|
128
|
+
/** Optionally defined accordion the expansion panel belongs to. */
|
|
129
|
+
this.accordion = inject(CUTE_ACCORDION, { optional: true, skipSelf: true });
|
|
130
|
+
/** Portal holding the user's content. */
|
|
131
|
+
this._portal = null;
|
|
132
|
+
/** ID for the associated header element. Used for a11y labelling. */
|
|
133
|
+
this._headerId = `cute-expansion-panel-header-${uniqueId++}`;
|
|
134
|
+
this._contentId = this._headerId.replace("header", "content");
|
|
135
|
+
//private _transitionEndListener = ({target, propertyName}: TransitionEvent) => {
|
|
136
|
+
this._transitionEndListener = (event) => {
|
|
137
|
+
// CWT: we change `_bodyWrapper` to `_body` since our template's markup differs from original
|
|
138
|
+
if (event.target === this._body?.nativeElement && event.propertyName === 'grid-template-rows') {
|
|
139
|
+
// if (event.propertyName==="transform" && event.pseudoElement==="::after") {
|
|
140
|
+
this._ngZone.run(() => {
|
|
141
|
+
if (this.expanded) {
|
|
142
|
+
this.afterExpand.emit();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this.afterCollapse.emit();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const defaultOptions = inject(CUTE_EXPANSION_PANEL_DEFAULT_OPTIONS, { optional: true });
|
|
151
|
+
this._expansionDispatcher = inject(UniqueSelectionDispatcher);
|
|
152
|
+
if (defaultOptions) {
|
|
153
|
+
this.hideToggle = defaultOptions.hideToggle;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** Determines whether the expansion panel should have spacing between it and its siblings. */
|
|
157
|
+
_hasSpacing() {
|
|
158
|
+
if (this.accordion) {
|
|
159
|
+
return this.expanded && this.accordion.displayMode === 'default';
|
|
160
|
+
}
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
/** Gets the expanded state string. */
|
|
164
|
+
_getExpandedState() {
|
|
165
|
+
return this.expanded ? 'expanded' : 'collapsed';
|
|
166
|
+
}
|
|
167
|
+
/** Toggles the expanded state of the expansion panel. */
|
|
168
|
+
toggle() {
|
|
169
|
+
this.expanded = !this.expanded;
|
|
170
|
+
}
|
|
171
|
+
/** Sets the expanded state of the expansion panel to false. */
|
|
172
|
+
close() {
|
|
173
|
+
this.expanded = false;
|
|
174
|
+
}
|
|
175
|
+
/** Sets the expanded state of the expansion panel to true. */
|
|
176
|
+
open() {
|
|
177
|
+
this.expanded = true;
|
|
178
|
+
}
|
|
179
|
+
ngAfterContentInit() {
|
|
180
|
+
if (this._lazyContent && this._lazyContent._expansionPanel === this) {
|
|
181
|
+
// Render the content as soon as the panel becomes open.
|
|
182
|
+
this.opened
|
|
183
|
+
.pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1))
|
|
184
|
+
.subscribe(() => {
|
|
185
|
+
this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
this._setupAnimationEvents();
|
|
189
|
+
}
|
|
190
|
+
ngOnChanges(changes) {
|
|
191
|
+
this._inputChanges.next(changes);
|
|
192
|
+
}
|
|
193
|
+
ngOnDestroy() {
|
|
194
|
+
super.ngOnDestroy();
|
|
195
|
+
this._cleanupTransitionEnd?.();
|
|
196
|
+
this._inputChanges.complete();
|
|
197
|
+
}
|
|
198
|
+
/** Checks whether the expansion panel's content contains the currently focused element. */
|
|
199
|
+
_containsFocus() {
|
|
200
|
+
if (this._body) {
|
|
201
|
+
const focusedElement = this._document.activeElement;
|
|
202
|
+
const bodyElement = this._body.nativeElement;
|
|
203
|
+
return focusedElement === bodyElement || bodyElement.contains(focusedElement);
|
|
204
|
+
}
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
_setupAnimationEvents() {
|
|
208
|
+
// This method is defined separately, because we need to
|
|
209
|
+
// disable this logic in some internal components.
|
|
210
|
+
this._ngZone.runOutsideAngular(() => {
|
|
211
|
+
if (this._animationsDisabled) {
|
|
212
|
+
this.opened.subscribe(() => this._ngZone.run(() => this.afterExpand.emit()));
|
|
213
|
+
this.closed.subscribe(() => this._ngZone.run(() => this.afterCollapse.emit()));
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
setTimeout(() => {
|
|
217
|
+
const element = this._elementRef.nativeElement;
|
|
218
|
+
this._cleanupTransitionEnd = this._renderer.listen(element, 'transitionend', this._transitionEndListener);
|
|
219
|
+
element.classList.add('cute-expansion-panel-animations-enabled');
|
|
220
|
+
}, 200);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
225
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CuteExpansionPanel, isStandalone: true, selector: "cute-expansion-panel", inputs: { hideToggle: "hideToggle", togglePosition: "togglePosition" }, outputs: { afterExpand: "afterExpand", afterCollapse: "afterCollapse" }, host: { properties: { "class.accordion-item": "accordion", "class.accordion": "!accordion", "class.cute-expanded": "expanded" }, classAttribute: "cute-expansion-panel" }, providers: [
|
|
226
|
+
// Provide CuteAccordion as undefined to prevent nested expansion panels from registering
|
|
227
|
+
// to the same accordion.
|
|
228
|
+
{ provide: CUTE_ACCORDION, useValue: undefined },
|
|
229
|
+
{ provide: CUTE_EXPANSION_PANEL, useExisting: CuteExpansionPanel },
|
|
230
|
+
], queries: [{ propertyName: "_lazyContent", first: true, predicate: CuteExpansionPanelContent, descendants: true }], viewQueries: [{ propertyName: "_body", first: true, predicate: ["body"], descendants: true }, { propertyName: "_bodyWrapper", first: true, predicate: ["bodyWrapper"], descendants: true }], exportAs: ["cuteExpansionPanel"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cute-expansion-panel-content-wrapper\"\r\n [class.accordion-item]=\"!accordion\"\r\n [class.accordion-header]=\"accordion\"\r\n #bodyWrapper>\r\n\r\n <ng-content select=\"cute-expansion-panel-header\"></ng-content>\r\n <div class=\"cute-expansion-panel-content accordion-collapse\"\r\n [class]=\"expanded ? 'expanded' : 'collapsed'\"\r\n [attr.aria-expanded]=\"expanded\"\r\n [attr.aria-labelledby]=\"_headerId\"\r\n role=\"region\"\r\n [attr.id]=\"_contentId\"\r\n #body>\r\n <div class=\"cute-expansion-panel-body accordion-body\">\r\n <ng-content></ng-content>\r\n <ng-template [cdkPortalOutlet]=\"_portal\"></ng-template>\r\n </div>\r\n <ng-content select=\"cute-action-row\"></ng-content>\r\n </div>\r\n\r\n</div>\r\n", styles: [".cute-expansion-panel{display:block;box-sizing:content-box;margin:0;position:relative}.cute-expansion-panel .cute-expansion-panel-content{display:grid;grid-template-rows:0fr;overflow:hidden}.cute-expansion-panel .cute-expansion-panel-content .cute-expansion-panel-body{min-height:0;overflow:hidden;transition:display .1s;transition-timing-function:ease-in-out;transition-behavior:allow-discrete;display:none}.cute-expansion-panel .cute-expansion-panel-content.expanded{grid-template-rows:1fr}.cute-expansion-panel .cute-expansion-panel-content.expanded .cute-expansion-panel-body{display:block}.cute-expansion-panel .cute-expansion-panel-content.collapsed{grid-template-rows:0fr}.cute-expansion-panel .cute-expansion-panel-content.collapsed .cute-expansion-panel-body{display:none}.cute-expansion-panel.cute-expansion-panel-animations-enabled .cute-expansion-panel-content{transition:grid-template-rows .2s}.cute-expansion-panel.accordion.cute-expansion-panel-separated,.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-item{border:0}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-button{border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);border-radius:var(--bs-accordion-border-radius)}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-button:not(:focus):not(.collapsed){box-shadow:none}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-collapse{margin-top:4px;border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);border-radius:var(--bs-accordion-border-radius)}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-collapse.collapsed{margin-top:0;border:0}@media (forced-colors: active){.cute-accordion .cute-expansion-panel{outline:solid 1px}}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
231
|
+
}
|
|
232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanel, decorators: [{
|
|
233
|
+
type: Component,
|
|
234
|
+
args: [{ selector: 'cute-expansion-panel', exportAs: 'cuteExpansionPanel', host: {
|
|
235
|
+
'class': 'cute-expansion-panel',
|
|
236
|
+
'[class.accordion-item]': 'accordion',
|
|
237
|
+
'[class.accordion]': '!accordion',
|
|
238
|
+
'[class.cute-expanded]': 'expanded',
|
|
239
|
+
}, imports: [CdkPortalOutlet], providers: [
|
|
240
|
+
// Provide CuteAccordion as undefined to prevent nested expansion panels from registering
|
|
241
|
+
// to the same accordion.
|
|
242
|
+
{ provide: CUTE_ACCORDION, useValue: undefined },
|
|
243
|
+
{ provide: CUTE_EXPANSION_PANEL, useExisting: CuteExpansionPanel },
|
|
244
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cute-expansion-panel-content-wrapper\"\r\n [class.accordion-item]=\"!accordion\"\r\n [class.accordion-header]=\"accordion\"\r\n #bodyWrapper>\r\n\r\n <ng-content select=\"cute-expansion-panel-header\"></ng-content>\r\n <div class=\"cute-expansion-panel-content accordion-collapse\"\r\n [class]=\"expanded ? 'expanded' : 'collapsed'\"\r\n [attr.aria-expanded]=\"expanded\"\r\n [attr.aria-labelledby]=\"_headerId\"\r\n role=\"region\"\r\n [attr.id]=\"_contentId\"\r\n #body>\r\n <div class=\"cute-expansion-panel-body accordion-body\">\r\n <ng-content></ng-content>\r\n <ng-template [cdkPortalOutlet]=\"_portal\"></ng-template>\r\n </div>\r\n <ng-content select=\"cute-action-row\"></ng-content>\r\n </div>\r\n\r\n</div>\r\n", styles: [".cute-expansion-panel{display:block;box-sizing:content-box;margin:0;position:relative}.cute-expansion-panel .cute-expansion-panel-content{display:grid;grid-template-rows:0fr;overflow:hidden}.cute-expansion-panel .cute-expansion-panel-content .cute-expansion-panel-body{min-height:0;overflow:hidden;transition:display .1s;transition-timing-function:ease-in-out;transition-behavior:allow-discrete;display:none}.cute-expansion-panel .cute-expansion-panel-content.expanded{grid-template-rows:1fr}.cute-expansion-panel .cute-expansion-panel-content.expanded .cute-expansion-panel-body{display:block}.cute-expansion-panel .cute-expansion-panel-content.collapsed{grid-template-rows:0fr}.cute-expansion-panel .cute-expansion-panel-content.collapsed .cute-expansion-panel-body{display:none}.cute-expansion-panel.cute-expansion-panel-animations-enabled .cute-expansion-panel-content{transition:grid-template-rows .2s}.cute-expansion-panel.accordion.cute-expansion-panel-separated,.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-item{border:0}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-button{border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);border-radius:var(--bs-accordion-border-radius)}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-button:not(:focus):not(.collapsed){box-shadow:none}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-collapse{margin-top:4px;border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);border-radius:var(--bs-accordion-border-radius)}.cute-expansion-panel.accordion.cute-expansion-panel-separated .accordion-collapse.collapsed{margin-top:0;border:0}@media (forced-colors: active){.cute-accordion .cute-expansion-panel{outline:solid 1px}}\n"] }]
|
|
245
|
+
}], ctorParameters: () => [], propDecorators: { hideToggle: [{
|
|
246
|
+
type: Input
|
|
247
|
+
}], togglePosition: [{
|
|
248
|
+
type: Input
|
|
249
|
+
}], afterExpand: [{
|
|
250
|
+
type: Output
|
|
251
|
+
}], afterCollapse: [{
|
|
252
|
+
type: Output
|
|
253
|
+
}], _lazyContent: [{
|
|
254
|
+
type: ContentChild,
|
|
255
|
+
args: [CuteExpansionPanelContent]
|
|
256
|
+
}], _body: [{
|
|
257
|
+
type: ViewChild,
|
|
258
|
+
args: ['body']
|
|
259
|
+
}], _bodyWrapper: [{
|
|
260
|
+
type: ViewChild,
|
|
261
|
+
args: ['bodyWrapper']
|
|
262
|
+
}] } });
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* @license Apache-2.0
|
|
266
|
+
*
|
|
267
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
268
|
+
*
|
|
269
|
+
* You may not use this file except in compliance with the License
|
|
270
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
271
|
+
*
|
|
272
|
+
* This code is a modification of the `@angular/material` original
|
|
273
|
+
* code licensed under MIT-style License (https://angular.dev/license).
|
|
274
|
+
*/
|
|
275
|
+
class CuteExpansionPanelHeader {
|
|
276
|
+
constructor() {
|
|
277
|
+
this.panel = inject(CuteExpansionPanel, { host: true });
|
|
278
|
+
this._element = inject(ElementRef);
|
|
279
|
+
this._focusMonitor = inject(FocusMonitor);
|
|
280
|
+
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
281
|
+
this._parentChangeSubscription = Subscription.EMPTY;
|
|
282
|
+
/** Tab index of the header. */
|
|
283
|
+
this.tabIndex = 0;
|
|
284
|
+
const panel = this.panel;
|
|
285
|
+
const defaultOptions = inject(CUTE_EXPANSION_PANEL_DEFAULT_OPTIONS, { optional: true });
|
|
286
|
+
const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });
|
|
287
|
+
const accordionHideToggleChange = panel.accordion
|
|
288
|
+
? panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition'])))
|
|
289
|
+
: EMPTY;
|
|
290
|
+
this.tabIndex = parseInt(tabIndex || '') || 0;
|
|
291
|
+
// Since the toggle state depends on an @Input on the panel, we
|
|
292
|
+
// need to subscribe and trigger change detection manually.
|
|
293
|
+
this._parentChangeSubscription = merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => {
|
|
294
|
+
return !!(changes['hideToggle'] || changes['disabled'] || changes['togglePosition']);
|
|
295
|
+
}))).subscribe(() => this._changeDetectorRef.markForCheck());
|
|
296
|
+
// Avoids focus being lost if the panel contained the focused element and was closed.
|
|
297
|
+
panel.closed
|
|
298
|
+
.pipe(filter(() => panel._containsFocus()))
|
|
299
|
+
.subscribe(() => this._focusMonitor.focusVia(this._element, 'program'));
|
|
300
|
+
if (defaultOptions) {
|
|
301
|
+
this.expandedHeight = defaultOptions.expandedHeight;
|
|
302
|
+
this.collapsedHeight = defaultOptions.collapsedHeight;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/** Whether the associated panel is disabled. Implemented as a part of `FocusableOption`. */
|
|
306
|
+
get disabled() {
|
|
307
|
+
return this.panel.disabled;
|
|
308
|
+
}
|
|
309
|
+
/** Toggles the expanded state of the panel. */
|
|
310
|
+
_toggle() {
|
|
311
|
+
if (!this.disabled) {
|
|
312
|
+
this.panel.toggle();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/** Gets whether the panel is expanded. */
|
|
316
|
+
_isExpanded() {
|
|
317
|
+
return this.panel.expanded;
|
|
318
|
+
}
|
|
319
|
+
/** Gets the expanded state string of the panel. */
|
|
320
|
+
_getExpandedState() {
|
|
321
|
+
return this.panel._getExpandedState();
|
|
322
|
+
}
|
|
323
|
+
/** Gets the panel id. */
|
|
324
|
+
_getPanelId() {
|
|
325
|
+
return this.panel.id;
|
|
326
|
+
}
|
|
327
|
+
/** Gets the toggle position for the header. */
|
|
328
|
+
_getTogglePosition() {
|
|
329
|
+
return this.panel.togglePosition;
|
|
330
|
+
}
|
|
331
|
+
/** Gets whether the expanded indicator should be shown. */
|
|
332
|
+
_showToggle() {
|
|
333
|
+
return !this.panel.hideToggle && !this.panel.disabled;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Gets the current height of the header. Null if no custom height has been
|
|
337
|
+
* specified, and if the default height from the stylesheet should be used.
|
|
338
|
+
*/
|
|
339
|
+
_getHeaderHeight() {
|
|
340
|
+
const isExpanded = this._isExpanded();
|
|
341
|
+
if (isExpanded && this.expandedHeight) {
|
|
342
|
+
return this.expandedHeight;
|
|
343
|
+
}
|
|
344
|
+
else if (!isExpanded && this.collapsedHeight) {
|
|
345
|
+
return this.collapsedHeight;
|
|
346
|
+
}
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
/** Handle keydown event calling to toggle() if appropriate. */
|
|
350
|
+
_keydown(event) {
|
|
351
|
+
switch (event.keyCode) {
|
|
352
|
+
// Toggle for space and enter keys.
|
|
353
|
+
case SPACE:
|
|
354
|
+
case ENTER:
|
|
355
|
+
if (!hasModifierKey(event)) {
|
|
356
|
+
event.preventDefault();
|
|
357
|
+
this._toggle();
|
|
358
|
+
}
|
|
359
|
+
break;
|
|
360
|
+
default:
|
|
361
|
+
if (this.panel.accordion) {
|
|
362
|
+
this.panel.accordion._handleHeaderKeydown(event);
|
|
363
|
+
}
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Focuses the panel header. Implemented as a part of `FocusableOption`.
|
|
369
|
+
* @param origin Origin of the action that triggered the focus.
|
|
370
|
+
* @param options FocusOptions
|
|
371
|
+
*/
|
|
372
|
+
focus(origin, options) {
|
|
373
|
+
if (origin) {
|
|
374
|
+
this._focusMonitor.focusVia(this._element, origin, options);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this._element.nativeElement.focus(options);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
ngAfterViewInit() {
|
|
381
|
+
this._focusMonitor.monitor(this._element).subscribe(origin => {
|
|
382
|
+
if (origin && this.panel.accordion) {
|
|
383
|
+
this.panel.accordion._handleHeaderFocus(this);
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
ngOnDestroy() {
|
|
388
|
+
this._parentChangeSubscription.unsubscribe();
|
|
389
|
+
this._focusMonitor.stopMonitoring(this._element);
|
|
390
|
+
}
|
|
391
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
392
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "20.3.15", type: CuteExpansionPanelHeader, isStandalone: true, selector: "cute-expansion-panel-header", inputs: { tabIndex: ["tabIndex", "tabIndex", (value) => (value == null ? 0 : numberAttribute(value))], expandedHeight: "expandedHeight", collapsedHeight: "collapsedHeight" }, host: { attributes: { "role": "button" }, listeners: { "click": "_toggle()", "keydown": "_keydown($event)" }, properties: { "class.accordion-header": "!panel.accordion", "class.cute-expanded": "_isExpanded()", "attr.id": "panel._headerId", "attr.tabindex": "-1", "attr.aria-expanded": "_isExpanded()", "attr.aria-disabled": "panel.disabled", "style.height": "_getHeaderHeight()" }, classAttribute: "cute-expansion-panel-header" }, exportAs: ["cuteExpansionPanelHeader"], ngImport: i0, template: "<button class=\"accordion-button\" type=\"button\"\r\n [class.accordion-button-indicator-before]=\"_getTogglePosition()=='before'\"\r\n [class.accordion-button-hide-indicator]=\"!_showToggle()\"\r\n [class.text-body-tertiary]=\"disabled\"\r\n [class.collapsed]=\"!_isExpanded()\"\r\n [attr.aria-expanded]=\"_isExpanded()\"\r\n [attr.aria-controls]=\"panel._contentId\"\r\n [disabled]=\"disabled || null\"\r\n [tabIndex]=\"disabled ? -1 : tabIndex\"\r\n>\r\n <span class=\"cute-expansion-panel-header-content\">\r\n <ng-content select=\"cute-panel-title\"></ng-content>\r\n <ng-content select=\"cute-panel-description\"></ng-content>\r\n <ng-content></ng-content>\r\n </span>\r\n</button>\r\n", styles: [".cute-expansion-panel-header{display:flex;flex-direction:row;align-items:center}.cute-expansion-panel-header .cute-expansion-panel-header-content{display:flex;flex-direction:row;flex:1;overflow:hidden;align-items:start}.cute-expansion-panel-header .cute-expansion-panel-header-title,.cute-expansion-panel-header .cute-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .cute-expansion-panel-header .cute-expansion-panel-header-title,[dir=rtl] .cute-expansion-panel-header .cute-expansion-panel-header-description{margin-right:0;margin-left:16px}.cute-expansion-panel-header .cute-expansion-panel-header-description{flex-grow:2}.cute-expansion-panel-header .accordion-button{align-items:start}.cute-expansion-panel-header .accordion-button:after{margin-top:3px}.cute-expansion-panel-header .accordion-button:disabled:after{filter:opacity(.35)}.cute-expansion-panel-header .accordion-button.accordion-button-hide-indicator:after{visibility:hidden}.cute-expansion-panel-header .accordion-button.accordion-button-indicator-before{flex-direction:row-reverse;gap:16px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
393
|
+
}
|
|
394
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelHeader, decorators: [{
|
|
395
|
+
type: Component,
|
|
396
|
+
args: [{ selector: 'cute-expansion-panel-header', exportAs: 'cuteExpansionPanelHeader', inputs: ['tabIndex'], host: {
|
|
397
|
+
'class': 'cute-expansion-panel-header',
|
|
398
|
+
'[class.accordion-header]': '!panel.accordion',
|
|
399
|
+
'[class.cute-expanded]': '_isExpanded()',
|
|
400
|
+
// '[class.cute-expansion-toggle-indicator-after]': `_getTogglePosition() === 'after'`,
|
|
401
|
+
// '[class.cute-expansion-toggle-indicator-before]': `_getTogglePosition() === 'before'`,
|
|
402
|
+
'role': 'button',
|
|
403
|
+
'[attr.id]': 'panel._headerId',
|
|
404
|
+
// CWT: we apply 'tabindex' rule on the nested '.accordion-button' element
|
|
405
|
+
'[attr.tabindex]': '-1', /*'disabled ? -1 : tabIndex',*/
|
|
406
|
+
// CWT: we apply 'aria-controls' on the nested '.accordion-button' element
|
|
407
|
+
// '[attr.aria-controls]': '_getPanelId()',
|
|
408
|
+
'[attr.aria-expanded]': '_isExpanded()',
|
|
409
|
+
'[attr.aria-disabled]': 'panel.disabled', //'disabled',
|
|
410
|
+
'[style.height]': '_getHeaderHeight()',
|
|
411
|
+
'(click)': '_toggle()',
|
|
412
|
+
'(keydown)': '_keydown($event)',
|
|
413
|
+
}, standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button class=\"accordion-button\" type=\"button\"\r\n [class.accordion-button-indicator-before]=\"_getTogglePosition()=='before'\"\r\n [class.accordion-button-hide-indicator]=\"!_showToggle()\"\r\n [class.text-body-tertiary]=\"disabled\"\r\n [class.collapsed]=\"!_isExpanded()\"\r\n [attr.aria-expanded]=\"_isExpanded()\"\r\n [attr.aria-controls]=\"panel._contentId\"\r\n [disabled]=\"disabled || null\"\r\n [tabIndex]=\"disabled ? -1 : tabIndex\"\r\n>\r\n <span class=\"cute-expansion-panel-header-content\">\r\n <ng-content select=\"cute-panel-title\"></ng-content>\r\n <ng-content select=\"cute-panel-description\"></ng-content>\r\n <ng-content></ng-content>\r\n </span>\r\n</button>\r\n", styles: [".cute-expansion-panel-header{display:flex;flex-direction:row;align-items:center}.cute-expansion-panel-header .cute-expansion-panel-header-content{display:flex;flex-direction:row;flex:1;overflow:hidden;align-items:start}.cute-expansion-panel-header .cute-expansion-panel-header-title,.cute-expansion-panel-header .cute-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .cute-expansion-panel-header .cute-expansion-panel-header-title,[dir=rtl] .cute-expansion-panel-header .cute-expansion-panel-header-description{margin-right:0;margin-left:16px}.cute-expansion-panel-header .cute-expansion-panel-header-description{flex-grow:2}.cute-expansion-panel-header .accordion-button{align-items:start}.cute-expansion-panel-header .accordion-button:after{margin-top:3px}.cute-expansion-panel-header .accordion-button:disabled:after{filter:opacity(.35)}.cute-expansion-panel-header .accordion-button.accordion-button-hide-indicator:after{visibility:hidden}.cute-expansion-panel-header .accordion-button.accordion-button-indicator-before{flex-direction:row-reverse;gap:16px}\n"] }]
|
|
414
|
+
}], ctorParameters: () => [], propDecorators: { expandedHeight: [{
|
|
415
|
+
type: Input
|
|
416
|
+
}], collapsedHeight: [{
|
|
417
|
+
type: Input
|
|
418
|
+
}], tabIndex: [{
|
|
419
|
+
type: Input,
|
|
420
|
+
args: [{
|
|
421
|
+
transform: (value) => (value == null ? 0 : numberAttribute(value)),
|
|
422
|
+
}]
|
|
423
|
+
}] } });
|
|
424
|
+
/**
|
|
425
|
+
* Description element of a `<cute-expansion-panel-header>`.
|
|
426
|
+
*/
|
|
427
|
+
class CuteExpansionPanelDescription {
|
|
428
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
429
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteExpansionPanelDescription, isStandalone: true, selector: "cute-panel-description", host: { classAttribute: "cute-expansion-panel-header-description text-secondary " }, ngImport: i0 }); }
|
|
430
|
+
}
|
|
431
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelDescription, decorators: [{
|
|
432
|
+
type: Directive,
|
|
433
|
+
args: [{
|
|
434
|
+
selector: 'cute-panel-description',
|
|
435
|
+
host: {
|
|
436
|
+
class: 'cute-expansion-panel-header-description text-secondary ',
|
|
437
|
+
},
|
|
438
|
+
standalone: true,
|
|
439
|
+
}]
|
|
440
|
+
}] });
|
|
441
|
+
/**
|
|
442
|
+
* Title element of a `<cute-expansion-panel-header>`.
|
|
443
|
+
*/
|
|
444
|
+
class CuteExpansionPanelTitle {
|
|
445
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
446
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteExpansionPanelTitle, isStandalone: true, selector: "cute-panel-title", host: { classAttribute: "cute-expansion-panel-header-title" }, ngImport: i0 }); }
|
|
447
|
+
}
|
|
448
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelTitle, decorators: [{
|
|
449
|
+
type: Directive,
|
|
450
|
+
args: [{
|
|
451
|
+
selector: 'cute-panel-title',
|
|
452
|
+
host: {
|
|
453
|
+
class: 'cute-expansion-panel-header-title',
|
|
454
|
+
},
|
|
455
|
+
standalone: true,
|
|
456
|
+
}]
|
|
457
|
+
}] });
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* @license Apache-2.0
|
|
461
|
+
*
|
|
462
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
463
|
+
*
|
|
464
|
+
* You may not use this file except in compliance with the License
|
|
465
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
466
|
+
*
|
|
467
|
+
* This code is a modification of the `@angular/material` original
|
|
468
|
+
* code licensed under MIT-style License (https://angular.dev/license).
|
|
469
|
+
*/
|
|
470
|
+
let nextId = -1;
|
|
471
|
+
class CuteAccordion extends CdkAccordion {
|
|
472
|
+
constructor() {
|
|
473
|
+
super(...arguments);
|
|
474
|
+
/** Headers belonging to this accordion. */
|
|
475
|
+
this._ownHeaders = new QueryList();
|
|
476
|
+
/** Whether the expansion indicator should be hidden. */
|
|
477
|
+
this.hideToggle = false;
|
|
478
|
+
/**
|
|
479
|
+
* Display mode used for all expansion panels in the accordion. Currently two display
|
|
480
|
+
* modes exist:
|
|
481
|
+
* default - a gutter-like spacing is placed around any expanded panel, placing the expanded
|
|
482
|
+
* panel at a different elevation from the rest of the accordion.
|
|
483
|
+
* flush - removes some borders and rounded corners to render expansion panels edge-to-edge with their parent container.
|
|
484
|
+
*/
|
|
485
|
+
this.displayMode = 'default';
|
|
486
|
+
/** The position of the expansion indicator. */
|
|
487
|
+
this.togglePosition = 'after';
|
|
488
|
+
}
|
|
489
|
+
ngAfterContentInit() {
|
|
490
|
+
this._headers?.changes
|
|
491
|
+
.pipe(startWith(this._headers))
|
|
492
|
+
.subscribe((headers) => {
|
|
493
|
+
this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this));
|
|
494
|
+
this._ownHeaders.notifyOnChanges();
|
|
495
|
+
});
|
|
496
|
+
this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap().withHomeAndEnd();
|
|
497
|
+
}
|
|
498
|
+
/** Handles keyboard events coming in from the panel headers. */
|
|
499
|
+
_handleHeaderKeydown(event) {
|
|
500
|
+
this._keyManager?.onKeydown(event);
|
|
501
|
+
}
|
|
502
|
+
_handleHeaderFocus(header) {
|
|
503
|
+
this._keyManager?.updateActiveItem(header);
|
|
504
|
+
}
|
|
505
|
+
ngOnDestroy() {
|
|
506
|
+
super.ngOnDestroy();
|
|
507
|
+
this._keyManager?.destroy();
|
|
508
|
+
this._ownHeaders.destroy();
|
|
509
|
+
}
|
|
510
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteAccordion, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
511
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteAccordion, isStandalone: true, selector: "cute-accordion", inputs: { hideToggle: ["hideToggle", "hideToggle", booleanAttribute], displayMode: "displayMode", togglePosition: "togglePosition" }, host: { properties: { "class.accordion-flush": "displayMode == \"flush\"", "id": "id" }, classAttribute: "cute-accordion accordion d-block" }, providers: [{ provide: CUTE_ACCORDION, useExisting: CuteAccordion }], queries: [{ propertyName: "_headers", predicate: CuteExpansionPanelHeader, descendants: true }], exportAs: ["cuteAccordion"], usesInheritance: true, ngImport: i0 }); }
|
|
512
|
+
}
|
|
513
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteAccordion, decorators: [{
|
|
514
|
+
type: Directive,
|
|
515
|
+
args: [{
|
|
516
|
+
selector: 'cute-accordion',
|
|
517
|
+
exportAs: 'cuteAccordion',
|
|
518
|
+
host: {
|
|
519
|
+
'class': 'cute-accordion accordion d-block',
|
|
520
|
+
'[class.accordion-flush]': 'displayMode == "flush"',
|
|
521
|
+
'[id]': 'id',
|
|
522
|
+
},
|
|
523
|
+
providers: [{ provide: CUTE_ACCORDION, useExisting: CuteAccordion }],
|
|
524
|
+
}]
|
|
525
|
+
}], propDecorators: { _headers: [{
|
|
526
|
+
type: ContentChildren,
|
|
527
|
+
args: [CuteExpansionPanelHeader, { descendants: true }]
|
|
528
|
+
}], hideToggle: [{
|
|
529
|
+
type: Input,
|
|
530
|
+
args: [{ transform: booleanAttribute }]
|
|
531
|
+
}], displayMode: [{
|
|
532
|
+
type: Input
|
|
533
|
+
}], togglePosition: [{
|
|
534
|
+
type: Input
|
|
535
|
+
}] } });
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* @license Apache-2.0
|
|
539
|
+
*
|
|
540
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
541
|
+
*
|
|
542
|
+
* You may not use this file except in compliance with the License
|
|
543
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
544
|
+
*
|
|
545
|
+
* This code is a modification of the `@angular/material` original
|
|
546
|
+
* code licensed under MIT-style License (https://angular.dev/license).
|
|
547
|
+
*/
|
|
548
|
+
/**
|
|
549
|
+
* Actions of a `<cute-expansion-panel>`.
|
|
550
|
+
*/
|
|
551
|
+
class CuteExpansionPanelActionRow {
|
|
552
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelActionRow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
553
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteExpansionPanelActionRow, isStandalone: true, selector: "cute-action-row", host: { classAttribute: "cute-action-row" }, ngImport: i0 }); }
|
|
554
|
+
}
|
|
555
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionPanelActionRow, decorators: [{
|
|
556
|
+
type: Directive,
|
|
557
|
+
args: [{
|
|
558
|
+
selector: 'cute-action-row',
|
|
559
|
+
host: {
|
|
560
|
+
class: 'cute-action-row',
|
|
561
|
+
},
|
|
562
|
+
standalone: true,
|
|
563
|
+
}]
|
|
564
|
+
}] });
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* @license Apache-2.0
|
|
568
|
+
*
|
|
569
|
+
* Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
|
|
570
|
+
*
|
|
571
|
+
* You may not use this file except in compliance with the License
|
|
572
|
+
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
573
|
+
*/
|
|
574
|
+
class CuteExpansionModule {
|
|
575
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
576
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionModule, imports: [CommonModule,
|
|
577
|
+
CuteAccordion,
|
|
578
|
+
CuteExpansionPanel,
|
|
579
|
+
CuteExpansionPanelContent,
|
|
580
|
+
CuteExpansionPanelHeader,
|
|
581
|
+
CuteExpansionPanelActionRow,
|
|
582
|
+
CuteExpansionPanelTitle,
|
|
583
|
+
CuteExpansionPanelDescription], exports: [CuteAccordion,
|
|
584
|
+
CuteExpansionPanel,
|
|
585
|
+
CuteExpansionPanelContent,
|
|
586
|
+
CuteExpansionPanelHeader,
|
|
587
|
+
CuteExpansionPanelActionRow,
|
|
588
|
+
CuteExpansionPanelTitle,
|
|
589
|
+
CuteExpansionPanelDescription] }); }
|
|
590
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionModule, imports: [CommonModule] }); }
|
|
591
|
+
}
|
|
592
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteExpansionModule, decorators: [{
|
|
593
|
+
type: NgModule,
|
|
594
|
+
args: [{
|
|
595
|
+
declarations: [],
|
|
596
|
+
imports: [
|
|
597
|
+
CommonModule,
|
|
598
|
+
CuteAccordion,
|
|
599
|
+
CuteExpansionPanel,
|
|
600
|
+
CuteExpansionPanelContent,
|
|
601
|
+
CuteExpansionPanelHeader,
|
|
602
|
+
CuteExpansionPanelActionRow,
|
|
603
|
+
CuteExpansionPanelTitle,
|
|
604
|
+
CuteExpansionPanelDescription,
|
|
605
|
+
],
|
|
606
|
+
exports: [
|
|
607
|
+
CuteAccordion,
|
|
608
|
+
CuteExpansionPanel,
|
|
609
|
+
CuteExpansionPanelContent,
|
|
610
|
+
CuteExpansionPanelHeader,
|
|
611
|
+
CuteExpansionPanelActionRow,
|
|
612
|
+
CuteExpansionPanelTitle,
|
|
613
|
+
CuteExpansionPanelDescription,
|
|
614
|
+
]
|
|
615
|
+
}]
|
|
616
|
+
}] });
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* Generated bundle index. Do not edit.
|
|
620
|
+
*/
|
|
621
|
+
|
|
622
|
+
export { CUTE_EXPANSION_PANEL_DEFAULT_OPTIONS, CuteAccordion, CuteExpansionModule, CuteExpansionPanel, CuteExpansionPanelActionRow, CuteExpansionPanelContent, CuteExpansionPanelDescription, CuteExpansionPanelHeader, CuteExpansionPanelTitle };
|
|
623
|
+
//# sourceMappingURL=cute-widgets-base-expansion.mjs.map
|