@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.
Files changed (183) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/LICENSE.md +191 -0
  3. package/README.md +190 -0
  4. package/abstract/index.d.ts +327 -0
  5. package/alert/index.d.ts +68 -0
  6. package/autocomplete/index.d.ts +442 -0
  7. package/badge/index.d.ts +26 -0
  8. package/bottom-sheet/index.d.ts +231 -0
  9. package/button/index.d.ts +182 -0
  10. package/button-toggle/index.d.ts +225 -0
  11. package/card/index.d.ts +163 -0
  12. package/checkbox/index.d.ts +174 -0
  13. package/chips/index.d.ts +963 -0
  14. package/collapse/index.d.ts +97 -0
  15. package/core/animation/index.d.ts +43 -0
  16. package/core/datetime/index.d.ts +404 -0
  17. package/core/directives/index.d.ts +168 -0
  18. package/core/error/index.d.ts +74 -0
  19. package/core/index.d.ts +1039 -0
  20. package/core/interfaces/index.d.ts +114 -0
  21. package/core/layout/index.d.ts +53 -0
  22. package/core/line/index.d.ts +37 -0
  23. package/core/nav/index.d.ts +321 -0
  24. package/core/observers/index.d.ts +124 -0
  25. package/core/option/index.d.ts +185 -0
  26. package/core/pipes/index.d.ts +53 -0
  27. package/core/ripple/index.d.ts +66 -0
  28. package/core/testing/index.d.ts +154 -0
  29. package/core/theming/index.d.ts +118 -0
  30. package/core/types/index.d.ts +53 -0
  31. package/core/utils/index.d.ts +129 -0
  32. package/cute-widgets-base-20.0.1.tgz +0 -0
  33. package/datepicker/index.d.ts +1817 -0
  34. package/dialog/index.d.ts +484 -0
  35. package/divider/index.d.ts +24 -0
  36. package/expansion/README.md +8 -0
  37. package/expansion/index.d.ts +308 -0
  38. package/fesm2022/cute-widgets-base-abstract.mjs +547 -0
  39. package/fesm2022/cute-widgets-base-abstract.mjs.map +1 -0
  40. package/fesm2022/cute-widgets-base-alert.mjs +198 -0
  41. package/fesm2022/cute-widgets-base-alert.mjs.map +1 -0
  42. package/fesm2022/cute-widgets-base-autocomplete.mjs +1217 -0
  43. package/fesm2022/cute-widgets-base-autocomplete.mjs.map +1 -0
  44. package/fesm2022/cute-widgets-base-badge.mjs +75 -0
  45. package/fesm2022/cute-widgets-base-badge.mjs.map +1 -0
  46. package/fesm2022/cute-widgets-base-bottom-sheet.mjs +416 -0
  47. package/fesm2022/cute-widgets-base-bottom-sheet.mjs.map +1 -0
  48. package/fesm2022/cute-widgets-base-button-toggle.mjs +640 -0
  49. package/fesm2022/cute-widgets-base-button-toggle.mjs.map +1 -0
  50. package/fesm2022/cute-widgets-base-button.mjs +546 -0
  51. package/fesm2022/cute-widgets-base-button.mjs.map +1 -0
  52. package/fesm2022/cute-widgets-base-card.mjs +471 -0
  53. package/fesm2022/cute-widgets-base-card.mjs.map +1 -0
  54. package/fesm2022/cute-widgets-base-checkbox.mjs +390 -0
  55. package/fesm2022/cute-widgets-base-checkbox.mjs.map +1 -0
  56. package/fesm2022/cute-widgets-base-chips.mjs +2360 -0
  57. package/fesm2022/cute-widgets-base-chips.mjs.map +1 -0
  58. package/fesm2022/cute-widgets-base-collapse.mjs +259 -0
  59. package/fesm2022/cute-widgets-base-collapse.mjs.map +1 -0
  60. package/fesm2022/cute-widgets-base-core-animation.mjs +53 -0
  61. package/fesm2022/cute-widgets-base-core-animation.mjs.map +1 -0
  62. package/fesm2022/cute-widgets-base-core-datetime.mjs +568 -0
  63. package/fesm2022/cute-widgets-base-core-datetime.mjs.map +1 -0
  64. package/fesm2022/cute-widgets-base-core-directives.mjs +404 -0
  65. package/fesm2022/cute-widgets-base-core-directives.mjs.map +1 -0
  66. package/fesm2022/cute-widgets-base-core-error.mjs +105 -0
  67. package/fesm2022/cute-widgets-base-core-error.mjs.map +1 -0
  68. package/fesm2022/cute-widgets-base-core-interfaces.mjs +22 -0
  69. package/fesm2022/cute-widgets-base-core-interfaces.mjs.map +1 -0
  70. package/fesm2022/cute-widgets-base-core-layout.mjs +74 -0
  71. package/fesm2022/cute-widgets-base-core-layout.mjs.map +1 -0
  72. package/fesm2022/cute-widgets-base-core-line.mjs +87 -0
  73. package/fesm2022/cute-widgets-base-core-line.mjs.map +1 -0
  74. package/fesm2022/cute-widgets-base-core-nav.mjs +863 -0
  75. package/fesm2022/cute-widgets-base-core-nav.mjs.map +1 -0
  76. package/fesm2022/cute-widgets-base-core-observers.mjs +304 -0
  77. package/fesm2022/cute-widgets-base-core-observers.mjs.map +1 -0
  78. package/fesm2022/cute-widgets-base-core-option.mjs +373 -0
  79. package/fesm2022/cute-widgets-base-core-option.mjs.map +1 -0
  80. package/fesm2022/cute-widgets-base-core-pipes.mjs +97 -0
  81. package/fesm2022/cute-widgets-base-core-pipes.mjs.map +1 -0
  82. package/fesm2022/cute-widgets-base-core-ripple.mjs +172 -0
  83. package/fesm2022/cute-widgets-base-core-ripple.mjs.map +1 -0
  84. package/fesm2022/cute-widgets-base-core-testing.mjs +210 -0
  85. package/fesm2022/cute-widgets-base-core-testing.mjs.map +1 -0
  86. package/fesm2022/cute-widgets-base-core-theming.mjs +314 -0
  87. package/fesm2022/cute-widgets-base-core-theming.mjs.map +1 -0
  88. package/fesm2022/cute-widgets-base-core-types.mjs +22 -0
  89. package/fesm2022/cute-widgets-base-core-types.mjs.map +1 -0
  90. package/fesm2022/cute-widgets-base-core-utils.mjs +257 -0
  91. package/fesm2022/cute-widgets-base-core-utils.mjs.map +1 -0
  92. package/fesm2022/cute-widgets-base-core.mjs +1600 -0
  93. package/fesm2022/cute-widgets-base-core.mjs.map +1 -0
  94. package/fesm2022/cute-widgets-base-datepicker.mjs +4827 -0
  95. package/fesm2022/cute-widgets-base-datepicker.mjs.map +1 -0
  96. package/fesm2022/cute-widgets-base-dialog.mjs +1046 -0
  97. package/fesm2022/cute-widgets-base-dialog.mjs.map +1 -0
  98. package/fesm2022/cute-widgets-base-divider.mjs +86 -0
  99. package/fesm2022/cute-widgets-base-divider.mjs.map +1 -0
  100. package/fesm2022/cute-widgets-base-expansion.mjs +623 -0
  101. package/fesm2022/cute-widgets-base-expansion.mjs.map +1 -0
  102. package/fesm2022/cute-widgets-base-form-field.mjs +969 -0
  103. package/fesm2022/cute-widgets-base-form-field.mjs.map +1 -0
  104. package/fesm2022/cute-widgets-base-grid-list.mjs +715 -0
  105. package/fesm2022/cute-widgets-base-grid-list.mjs.map +1 -0
  106. package/fesm2022/cute-widgets-base-icon.mjs +1105 -0
  107. package/fesm2022/cute-widgets-base-icon.mjs.map +1 -0
  108. package/fesm2022/cute-widgets-base-input.mjs +726 -0
  109. package/fesm2022/cute-widgets-base-input.mjs.map +1 -0
  110. package/fesm2022/cute-widgets-base-layout-container.mjs +95 -0
  111. package/fesm2022/cute-widgets-base-layout-container.mjs.map +1 -0
  112. package/fesm2022/cute-widgets-base-layout-stack.mjs +166 -0
  113. package/fesm2022/cute-widgets-base-layout-stack.mjs.map +1 -0
  114. package/fesm2022/cute-widgets-base-layout.mjs +250 -0
  115. package/fesm2022/cute-widgets-base-layout.mjs.map +1 -0
  116. package/fesm2022/cute-widgets-base-list.mjs +1557 -0
  117. package/fesm2022/cute-widgets-base-list.mjs.map +1 -0
  118. package/fesm2022/cute-widgets-base-menu.mjs +1283 -0
  119. package/fesm2022/cute-widgets-base-menu.mjs.map +1 -0
  120. package/fesm2022/cute-widgets-base-navbar.mjs +359 -0
  121. package/fesm2022/cute-widgets-base-navbar.mjs.map +1 -0
  122. package/fesm2022/cute-widgets-base-paginator.mjs +485 -0
  123. package/fesm2022/cute-widgets-base-paginator.mjs.map +1 -0
  124. package/fesm2022/cute-widgets-base-progress.mjs +321 -0
  125. package/fesm2022/cute-widgets-base-progress.mjs.map +1 -0
  126. package/fesm2022/cute-widgets-base-radio.mjs +637 -0
  127. package/fesm2022/cute-widgets-base-radio.mjs.map +1 -0
  128. package/fesm2022/cute-widgets-base-select.mjs +1208 -0
  129. package/fesm2022/cute-widgets-base-select.mjs.map +1 -0
  130. package/fesm2022/cute-widgets-base-sidenav.mjs +1095 -0
  131. package/fesm2022/cute-widgets-base-sidenav.mjs.map +1 -0
  132. package/fesm2022/cute-widgets-base-slider.mjs +99 -0
  133. package/fesm2022/cute-widgets-base-slider.mjs.map +1 -0
  134. package/fesm2022/cute-widgets-base-snack-bar.mjs +897 -0
  135. package/fesm2022/cute-widgets-base-snack-bar.mjs.map +1 -0
  136. package/fesm2022/cute-widgets-base-sort.mjs +639 -0
  137. package/fesm2022/cute-widgets-base-sort.mjs.map +1 -0
  138. package/fesm2022/cute-widgets-base-spinner.mjs +154 -0
  139. package/fesm2022/cute-widgets-base-spinner.mjs.map +1 -0
  140. package/fesm2022/cute-widgets-base-stepper.mjs +673 -0
  141. package/fesm2022/cute-widgets-base-stepper.mjs.map +1 -0
  142. package/fesm2022/cute-widgets-base-table.mjs +1023 -0
  143. package/fesm2022/cute-widgets-base-table.mjs.map +1 -0
  144. package/fesm2022/cute-widgets-base-tabs.mjs +729 -0
  145. package/fesm2022/cute-widgets-base-tabs.mjs.map +1 -0
  146. package/fesm2022/cute-widgets-base-timepicker.mjs +965 -0
  147. package/fesm2022/cute-widgets-base-timepicker.mjs.map +1 -0
  148. package/fesm2022/cute-widgets-base-toolbar.mjs +120 -0
  149. package/fesm2022/cute-widgets-base-toolbar.mjs.map +1 -0
  150. package/fesm2022/cute-widgets-base-tooltip.mjs +947 -0
  151. package/fesm2022/cute-widgets-base-tooltip.mjs.map +1 -0
  152. package/fesm2022/cute-widgets-base-tree.mjs +598 -0
  153. package/fesm2022/cute-widgets-base-tree.mjs.map +1 -0
  154. package/fesm2022/cute-widgets-base.mjs +68 -0
  155. package/fesm2022/cute-widgets-base.mjs.map +1 -0
  156. package/form-field/index.d.ts +401 -0
  157. package/grid-list/index.d.ts +361 -0
  158. package/icon/index.d.ts +477 -0
  159. package/index.d.ts +3 -0
  160. package/input/index.d.ts +256 -0
  161. package/layout/container/index.d.ts +31 -0
  162. package/layout/index.d.ts +78 -0
  163. package/layout/stack/index.d.ts +52 -0
  164. package/list/index.d.ts +659 -0
  165. package/menu/index.d.ts +497 -0
  166. package/navbar/index.d.ts +91 -0
  167. package/package.json +279 -0
  168. package/paginator/index.d.ts +216 -0
  169. package/progress/index.d.ts +130 -0
  170. package/radio/index.d.ts +259 -0
  171. package/select/index.d.ts +426 -0
  172. package/sidenav/index.d.ts +369 -0
  173. package/slider/index.d.ts +48 -0
  174. package/snack-bar/index.d.ts +374 -0
  175. package/sort/index.d.ts +334 -0
  176. package/spinner/index.d.ts +70 -0
  177. package/stepper/index.d.ts +295 -0
  178. package/table/index.d.ts +395 -0
  179. package/tabs/index.d.ts +307 -0
  180. package/timepicker/index.d.ts +350 -0
  181. package/toolbar/index.d.ts +36 -0
  182. package/tooltip/index.d.ts +299 -0
  183. 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