@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,598 @@
1
+ import { CdkTreeNode, CdkTreeNodeDef, CdkNestedTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodePadding, CdkTreeNodeOutlet, CdkTree, CdkTreeNodeToggle, CdkTreeModule } from '@angular/cdk/tree';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, HostAttributeToken, booleanAttribute, numberAttribute, Input, Directive, ViewContainerRef, EventEmitter, ViewChild, Output, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
4
+ import { Subject, BehaviorSubject, merge } from 'rxjs';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { DataSource } from '@angular/cdk/collections';
7
+ import { take, map } from 'rxjs/operators';
8
+
9
+ /**
10
+ * @license Apache-2.0
11
+ *
12
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
13
+ *
14
+ * You may not use this file except in compliance with the License
15
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * This code is a modification of the `@angular/material` original
18
+ * code licensed under MIT-style License (https://angular.dev/license).
19
+ */
20
+ /**
21
+ * Determine if argument TreeKeyManager is the NoopTreeKeyManager. This function is safe to use with SSR.
22
+ */
23
+ function isNoopTreeKeyManager(keyManager) {
24
+ return !!keyManager._isNoopTreeKeyManager;
25
+ }
26
+ /**
27
+ * Wrapper for the CdkTree node with CuteWidget's design styles.
28
+ */
29
+ class CuteTreeNode extends CdkTreeNode {
30
+ /**
31
+ * The tabindex of the tree node.
32
+ *
33
+ * @deprecated By default CuteTreeNode manages focus using TreeKeyManager instead of tabIndex.
34
+ * Recommend to avoid setting tabIndex directly to prevent TreeKeyManager from getting into
35
+ * an unexpected state. Tabindex to be removed in a future version.
36
+ * @breaking-change 21.0.0 Remove this attribute.
37
+ */
38
+ get tabIndexInputBinding() { return this._tabIndexInputBinding; }
39
+ set tabIndexInputBinding(value) {
40
+ // If the specified tabIndex value is null or undefined, fall back to the default value.
41
+ this._tabIndexInputBinding = value;
42
+ }
43
+ _getTabindexAttribute() {
44
+ if (isNoopTreeKeyManager(this._tree._keyManager)) {
45
+ return this.tabIndexInputBinding;
46
+ }
47
+ return this._tabindex;
48
+ }
49
+ /**
50
+ * Whether the component is disabled.
51
+ *
52
+ * @deprecated This is an alias for `isDisabled`.
53
+ * @breaking-change 21.0.0 Remove this input
54
+ */
55
+ get disabled() { return this.isDisabled; }
56
+ set disabled(value) { this.isDisabled = value; }
57
+ constructor() {
58
+ super();
59
+ this._tabIndexInputBinding = 0;
60
+ /**
61
+ * The default tabindex of the tree node.
62
+ *
63
+ * @deprecated By default CuteTreeNode manages focus using TreeKeyManager instead of tabIndex.
64
+ * Recommend to avoid setting tabIndex directly to prevent TreeKeyManager form getting into
65
+ * an unexpected state. Tabindex to be removed in a future version.
66
+ * @breaking-change 21.0.0 Remove this attribute.
67
+ */
68
+ this.defaultTabIndex = 0;
69
+ const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });
70
+ this.tabIndexInputBinding = Number(tabIndex) || this.defaultTabIndex;
71
+ }
72
+ // This is a workaround for https://github.com/angular/angular/issues/23091
73
+ // In aot mode, the lifecycle hooks from parent class are not called.
74
+ ngOnInit() {
75
+ super.ngOnInit();
76
+ }
77
+ ngOnDestroy() {
78
+ super.ngOnDestroy();
79
+ }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNode, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
81
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteTreeNode, isStandalone: true, selector: "cute-tree-node", inputs: { cdkTreeNodeTypeaheadLabel: ["cuteTreeNodeTypeaheadLabel", "cdkTreeNodeTypeaheadLabel"], tabIndexInputBinding: ["tabIndex", "tabIndexInputBinding", (value) => (value == null ? 0 : numberAttribute(value))], disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { activation: "activation", expandedChange: "expandedChange" }, host: { listeners: { "click": "_focusItem()" }, properties: { "attr.aria-expanded": "_getAriaExpanded()", "attr.aria-level": "level + 1", "attr.aria-posinset": "_getPositionInSet()", "attr.aria-setsize": "_getSetSize()", "tabindex": "_getTabindexAttribute()" }, classAttribute: "cute-tree-node" }, providers: [{ provide: CdkTreeNode, useExisting: CuteTreeNode }], exportAs: ["cuteTreeNode"], usesInheritance: true, ngImport: i0 }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNode, decorators: [{
84
+ type: Directive,
85
+ args: [{
86
+ selector: 'cute-tree-node',
87
+ exportAs: 'cuteTreeNode',
88
+ inputs: ['cdkTreeNodeTypeaheadLabel: cuteTreeNodeTypeaheadLabel'],
89
+ outputs: ['activation', 'expandedChange'],
90
+ providers: [{ provide: CdkTreeNode, useExisting: CuteTreeNode }],
91
+ host: {
92
+ 'class': 'cute-tree-node',
93
+ '[attr.aria-expanded]': '_getAriaExpanded()',
94
+ '[attr.aria-level]': 'level + 1',
95
+ '[attr.aria-posinset]': '_getPositionInSet()',
96
+ '[attr.aria-setsize]': '_getSetSize()',
97
+ '(click)': '_focusItem()',
98
+ '[tabindex]': '_getTabindexAttribute()',
99
+ },
100
+ standalone: true,
101
+ }]
102
+ }], ctorParameters: () => [], propDecorators: { tabIndexInputBinding: [{
103
+ type: Input,
104
+ args: [{
105
+ transform: (value) => (value == null ? 0 : numberAttribute(value)),
106
+ alias: 'tabIndex',
107
+ }]
108
+ }], disabled: [{
109
+ type: Input,
110
+ args: [{ transform: booleanAttribute }]
111
+ }] } });
112
+ /**
113
+ * Wrapper for the CdkTree node definition with CuteWidgets' design styles.
114
+ * Captures the node's template and a `when` predicate that describes when this node should be used.
115
+ */
116
+ class CuteTreeNodeDef extends CdkTreeNodeDef {
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodeDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
118
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteTreeNodeDef, isStandalone: true, selector: "[cuteTreeNodeDef]", inputs: { when: ["cuteTreeNodeDefWhen", "when"], data: ["cuteTreeNode", "data"] }, providers: [{ provide: CdkTreeNodeDef, useExisting: CuteTreeNodeDef }], usesInheritance: true, ngImport: i0 }); }
119
+ }
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodeDef, decorators: [{
121
+ type: Directive,
122
+ args: [{
123
+ selector: '[cuteTreeNodeDef]',
124
+ inputs: ['when: cuteTreeNodeDefWhen'],
125
+ providers: [{ provide: CdkTreeNodeDef, useExisting: CuteTreeNodeDef }],
126
+ standalone: true,
127
+ }]
128
+ }], propDecorators: { data: [{
129
+ type: Input,
130
+ args: ['cuteTreeNode']
131
+ }] } });
132
+ /**
133
+ * Wrapper for the CdkTree nested node with CuteWidgets' design styles.
134
+ */
135
+ class CuteNestedTreeNode extends CdkNestedTreeNode {
136
+ constructor() {
137
+ super(...arguments);
138
+ this._tabIndex = 0;
139
+ }
140
+ /**
141
+ * Whether the node is disabled.
142
+ *
143
+ * @deprecated This is an alias for `isDisabled`.
144
+ * @breaking-change 21.0.0 Remove this input
145
+ */
146
+ get disabled() { return this.isDisabled; }
147
+ set disabled(value) { this.isDisabled = value; }
148
+ /** Tabindex of the node. */
149
+ get tabIndex() { return this.isDisabled ? -1 : this._tabIndex; }
150
+ set tabIndex(value) {
151
+ // If the specified tabIndex value is null or undefined, fall back to the default value.
152
+ this._tabIndex = value;
153
+ }
154
+ // This is a workaround for https://github.com/angular/angular/issues/19145
155
+ // In aot mode, the lifecycle hooks from parent class are not called.
156
+ // TODO(tinayuangao): Remove when the angular issue #19145 is fixed
157
+ ngOnInit() {
158
+ super.ngOnInit();
159
+ }
160
+ ngAfterContentInit() {
161
+ super.ngAfterContentInit();
162
+ }
163
+ ngOnDestroy() {
164
+ super.ngOnDestroy();
165
+ }
166
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteNestedTreeNode, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
167
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteNestedTreeNode, isStandalone: true, selector: "cute-nested-tree-node", inputs: { node: ["cuteNestedTreeNode", "node"], disabled: ["disabled", "disabled", booleanAttribute], tabIndex: ["tabIndex", "tabIndex", (value) => (value == null ? 0 : numberAttribute(value))] }, outputs: { activation: "activation", expandedChange: "expandedChange" }, host: { classAttribute: "cute-nested-tree-node" }, providers: [
168
+ { provide: CdkNestedTreeNode, useExisting: CuteNestedTreeNode },
169
+ { provide: CdkTreeNode, useExisting: CuteNestedTreeNode },
170
+ { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CuteNestedTreeNode },
171
+ ], exportAs: ["cuteNestedTreeNode"], usesInheritance: true, ngImport: i0 }); }
172
+ }
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteNestedTreeNode, decorators: [{
174
+ type: Directive,
175
+ args: [{
176
+ selector: 'cute-nested-tree-node',
177
+ exportAs: 'cuteNestedTreeNode',
178
+ outputs: ['activation', 'expandedChange'],
179
+ providers: [
180
+ { provide: CdkNestedTreeNode, useExisting: CuteNestedTreeNode },
181
+ { provide: CdkTreeNode, useExisting: CuteNestedTreeNode },
182
+ { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CuteNestedTreeNode },
183
+ ],
184
+ host: {
185
+ 'class': 'cute-nested-tree-node',
186
+ },
187
+ standalone: true,
188
+ }]
189
+ }], propDecorators: { node: [{
190
+ type: Input,
191
+ args: ['cuteNestedTreeNode']
192
+ }], disabled: [{
193
+ type: Input,
194
+ args: [{ transform: booleanAttribute }]
195
+ }], tabIndex: [{
196
+ type: Input,
197
+ args: [{
198
+ transform: (value) => (value == null ? 0 : numberAttribute(value)),
199
+ }]
200
+ }] } });
201
+
202
+ /**
203
+ * @license Apache-2.0
204
+ *
205
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
206
+ *
207
+ * You may not use this file except in compliance with the License
208
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
209
+ *
210
+ * This code is a modification of the `@angular/material` original
211
+ * code licensed under MIT-style License (https://angular.dev/license).
212
+ */
213
+ /**
214
+ * Wrapper for the CdkTree padding with **CuteWidgets** design styles.
215
+ */
216
+ class CuteTreeNodePadding extends CdkTreeNodePadding {
217
+ /** The level of depth of the tree node. The padding will be `level * indent` pixels. */
218
+ get level() { return this._level; }
219
+ set level(value) { this._setLevelInput(value); }
220
+ /** The indent for each level. Default number 40px from material design menu submenu spec. */
221
+ get indent() { return this._indent; }
222
+ set indent(indent) { this._setIndentInput(indent); }
223
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodePadding, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
224
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteTreeNodePadding, isStandalone: true, selector: "[cuteTreeNodePadding]", inputs: { level: ["cuteTreeNodePadding", "level", numberAttribute], indent: ["cuteTreeNodePaddingIndent", "indent"] }, providers: [{ provide: CdkTreeNodePadding, useExisting: CuteTreeNodePadding }], usesInheritance: true, ngImport: i0 }); }
225
+ }
226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodePadding, decorators: [{
227
+ type: Directive,
228
+ args: [{
229
+ selector: '[cuteTreeNodePadding]',
230
+ providers: [{ provide: CdkTreeNodePadding, useExisting: CuteTreeNodePadding }],
231
+ standalone: true,
232
+ }]
233
+ }], propDecorators: { level: [{
234
+ type: Input,
235
+ args: [{ alias: 'cuteTreeNodePadding', transform: numberAttribute }]
236
+ }], indent: [{
237
+ type: Input,
238
+ args: ['cuteTreeNodePaddingIndent']
239
+ }] } });
240
+
241
+ /**
242
+ * @license Apache-2.0
243
+ *
244
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
245
+ *
246
+ * You may not use this file except in compliance with the License
247
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
248
+ *
249
+ * This code is a modification of the `@angular/material` original
250
+ * code licensed under MIT-style License (https://angular.dev/license).
251
+ */
252
+ /**
253
+ * Outlet for nested CdkNode. Put `[cuteTreeNodeOutlet]` on a tag to place children dataNodes
254
+ * inside the outlet.
255
+ */
256
+ class CuteTreeNodeOutlet {
257
+ constructor() {
258
+ this.viewContainer = inject(ViewContainerRef);
259
+ this._node = inject(CDK_TREE_NODE_OUTLET_NODE, { optional: true });
260
+ }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodeOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
262
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteTreeNodeOutlet, isStandalone: true, selector: "[cuteTreeNodeOutlet]", providers: [
263
+ {
264
+ provide: CdkTreeNodeOutlet,
265
+ useExisting: CuteTreeNodeOutlet,
266
+ },
267
+ ], ngImport: i0 }); }
268
+ }
269
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodeOutlet, decorators: [{
270
+ type: Directive,
271
+ args: [{
272
+ selector: '[cuteTreeNodeOutlet]',
273
+ providers: [
274
+ {
275
+ provide: CdkTreeNodeOutlet,
276
+ useExisting: CuteTreeNodeOutlet,
277
+ },
278
+ ],
279
+ standalone: true,
280
+ }]
281
+ }] });
282
+
283
+ /**
284
+ * @license Apache-2.0
285
+ *
286
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
287
+ *
288
+ * You may not use this file except in compliance with the License
289
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
290
+ *
291
+ * This code is a modification of the `@angular/material` original
292
+ * code licensed under MIT-style License (https://angular.dev/license).
293
+ */
294
+ /**
295
+ * Wrapper for the CdkTable with **CuteWidgets** design styles.
296
+ */
297
+ class CuteTree extends CdkTree {
298
+ constructor() {
299
+ super();
300
+ this._renderChanges = new Subject();
301
+ /** Event emitted on each change in the rendered data. */
302
+ this.renderNodesChange = new EventEmitter();
303
+ // Outlets within the tree's template where the dataNodes will be inserted.
304
+ // We need an initializer here to avoid a TS error. The value will be set in `ngAfterViewInit`.
305
+ this._nodeOutlet = undefined;
306
+ this._renderChanges
307
+ .pipe(takeUntilDestroyed())
308
+ .subscribe(nodes => this.renderNodesChange.emit(nodes));
309
+ }
310
+ renderNodeChanges(data) {
311
+ // We generate an event before calling the ancestor, otherwise
312
+ // the content of `data` array will not be correct !!!???
313
+ this._renderChanges.next(data);
314
+ super.renderNodeChanges(data);
315
+ }
316
+ ngOnDestroy() {
317
+ super.ngOnDestroy();
318
+ this._renderChanges.complete();
319
+ }
320
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTree, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
321
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CuteTree, isStandalone: true, selector: "cute-tree", outputs: { renderNodesChange: "renderNodesChange" }, host: { attributes: { "role": "tree" }, classAttribute: "cute-tree" }, providers: [{ provide: CdkTree, useExisting: CuteTree }], viewQueries: [{ propertyName: "_nodeOutlet", first: true, predicate: CuteTreeNodeOutlet, descendants: true, static: true }], exportAs: ["cuteTree"], usesInheritance: true, ngImport: i0, template: `<ng-container cuteTreeNodeOutlet></ng-container>`, isInline: true, styles: [".cute-tree{display:block}.cute-tree-node:is([cuteTreeNodeToggle]),.cute-nested-tree-node:is([cuteTreeNodeToggle]){cursor:pointer}.cute-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.cute-nested-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word;border-bottom-width:0}\n"], dependencies: [{ kind: "directive", type: CuteTreeNodeOutlet, selector: "[cuteTreeNodeOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
322
+ }
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTree, decorators: [{
324
+ type: Component,
325
+ args: [{ selector: 'cute-tree', exportAs: 'cuteTree', template: `<ng-container cuteTreeNodeOutlet></ng-container>`, host: {
326
+ 'class': 'cute-tree',
327
+ 'role': 'tree',
328
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, providers: [{ provide: CdkTree, useExisting: CuteTree }], imports: [CuteTreeNodeOutlet], styles: [".cute-tree{display:block}.cute-tree-node:is([cuteTreeNodeToggle]),.cute-nested-tree-node:is([cuteTreeNodeToggle]){cursor:pointer}.cute-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.cute-nested-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word;border-bottom-width:0}\n"] }]
329
+ }], ctorParameters: () => [], propDecorators: { renderNodesChange: [{
330
+ type: Output
331
+ }], _nodeOutlet: [{
332
+ type: ViewChild,
333
+ args: [CuteTreeNodeOutlet, { static: true }]
334
+ }] } });
335
+
336
+ /**
337
+ * @license Apache-2.0
338
+ *
339
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
340
+ *
341
+ * You may not use this file except in compliance with the License
342
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
343
+ *
344
+ * This code is a modification of the `@angular/material` original
345
+ * code licensed under MIT-style License (https://angular.dev/license).
346
+ */
347
+ /**
348
+ * Wrapper for the CdkTree's toggle with **CuteWidgets** design styles.
349
+ */
350
+ class CuteTreeNodeToggle extends CdkTreeNodeToggle {
351
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodeToggle, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
352
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteTreeNodeToggle, isStandalone: true, selector: "[cuteTreeNodeToggle]", inputs: { recursive: ["cuteTreeNodeToggleRecursive", "recursive"] }, providers: [{ provide: CdkTreeNodeToggle, useExisting: CuteTreeNodeToggle }], usesInheritance: true, ngImport: i0 }); }
353
+ }
354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeNodeToggle, decorators: [{
355
+ type: Directive,
356
+ args: [{
357
+ selector: '[cuteTreeNodeToggle]',
358
+ providers: [{ provide: CdkTreeNodeToggle, useExisting: CuteTreeNodeToggle }],
359
+ inputs: ['recursive: cuteTreeNodeToggleRecursive'],
360
+ standalone: true,
361
+ }]
362
+ }] });
363
+
364
+ /**
365
+ * @license Apache-2.0
366
+ *
367
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
368
+ *
369
+ * You may not use this file except in compliance with the License
370
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
371
+ *
372
+ * This code is a modification of the `@angular/material` original
373
+ * code licensed under MIT-style License (https://angular.dev/license).
374
+ */
375
+ /**
376
+ * Tree flattener to convert a normal type of node to node with children & level information.
377
+ * Transform nested nodes of type `T` to flattened nodes of type `F`.
378
+ *
379
+ * For example, the input data of type `T` is nested, and contains its children data:
380
+ * SomeNode: {
381
+ * key: 'Fruits',
382
+ * children: [
383
+ * NodeOne: {
384
+ * key: 'Apple',
385
+ * },
386
+ * NodeTwo: {
387
+ * key: 'Pear',
388
+ * }
389
+ * ]
390
+ * }
391
+ * After flattener flatten the tree, the structure will become
392
+ * SomeNode: {
393
+ * key: 'Fruits',
394
+ * expandable: true,
395
+ * level: 1
396
+ * },
397
+ * NodeOne: {
398
+ * key: 'Apple',
399
+ * expandable: false,
400
+ * level: 2
401
+ * },
402
+ * NodeTwo: {
403
+ * key: 'Pear',
404
+ * expandable: false,
405
+ * level: 2
406
+ * }
407
+ * and the output flattened type is `F` with additional information.
408
+ */
409
+ class CuteTreeFlattener {
410
+ constructor(transformFunction, getLevel, isExpandable, getChildren) {
411
+ this.transformFunction = transformFunction;
412
+ this.getLevel = getLevel;
413
+ this.isExpandable = isExpandable;
414
+ this.getChildren = getChildren;
415
+ }
416
+ _flattenNode(node, level, resultNodes, parentMap) {
417
+ const flatNode = this.transformFunction(node, level);
418
+ resultNodes.push(flatNode);
419
+ if (this.isExpandable(flatNode)) {
420
+ const childrenNodes = this.getChildren(node);
421
+ if (childrenNodes) {
422
+ if (Array.isArray(childrenNodes)) {
423
+ this._flattenChildren(childrenNodes, level, resultNodes, parentMap);
424
+ }
425
+ else {
426
+ childrenNodes.pipe(take(1)).subscribe(children => {
427
+ this._flattenChildren(children, level, resultNodes, parentMap);
428
+ });
429
+ }
430
+ }
431
+ }
432
+ return resultNodes;
433
+ }
434
+ _flattenChildren(children, level, resultNodes, parentMap) {
435
+ children.forEach((child, index) => {
436
+ let childParentMap = parentMap.slice();
437
+ childParentMap.push(index != children.length - 1);
438
+ this._flattenNode(child, level + 1, resultNodes, childParentMap);
439
+ });
440
+ }
441
+ /**
442
+ * Flatten a list of node type T to a flattened version of node F.
443
+ * Please note that type T may be nested, and the length of `structuredData` may be different
444
+ * from that of a returned list `F[]`.
445
+ */
446
+ flattenNodes(structuredData) {
447
+ let resultNodes = [];
448
+ structuredData.forEach(node => this._flattenNode(node, 0, resultNodes, []));
449
+ return resultNodes;
450
+ }
451
+ /**
452
+ * Expand flattened node with current expansion status.
453
+ * The returned list may have different length.
454
+ */
455
+ expandFlattenedNodes(nodes, treeControl) {
456
+ let results = [];
457
+ let currentExpand = [];
458
+ currentExpand[0] = true;
459
+ nodes.forEach(node => {
460
+ let expand = true;
461
+ for (let i = 0; i <= this.getLevel(node); i++) {
462
+ expand = expand && currentExpand[i];
463
+ }
464
+ if (expand) {
465
+ results.push(node);
466
+ }
467
+ if (this.isExpandable(node)) {
468
+ currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);
469
+ }
470
+ });
471
+ return results;
472
+ }
473
+ }
474
+ /**
475
+ * Data source for a flat tree.
476
+ * The data source needs to handle expansion/collapsion of the tree node and change the data feed
477
+ * to `CuteTree`.
478
+ * The nested tree nodes of type `T` are flattened through `CuteTreeFlattener`, and converted
479
+ * to type `F` for `CuteTree` to consume.
480
+ */
481
+ class CuteTreeFlatDataSource extends DataSource {
482
+ get data() {
483
+ return this._data.value;
484
+ }
485
+ set data(value) {
486
+ this._data.next(value);
487
+ this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));
488
+ this._treeControl.dataNodes = this._flattenedData.value;
489
+ }
490
+ constructor(_treeControl, _treeFlattener, initialData) {
491
+ super();
492
+ this._treeControl = _treeControl;
493
+ this._treeFlattener = _treeFlattener;
494
+ this._flattenedData = new BehaviorSubject([]);
495
+ this._expandedData = new BehaviorSubject([]);
496
+ this._data = new BehaviorSubject([]);
497
+ if (initialData) {
498
+ // Assign the data through the constructor to ensure that all of the logic is executed.
499
+ this.data = initialData;
500
+ }
501
+ }
502
+ connect(collectionViewer) {
503
+ return merge(collectionViewer.viewChange, this._treeControl.expansionModel.changed, this._flattenedData).pipe(map(() => {
504
+ this._expandedData.next(this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));
505
+ return this._expandedData.value;
506
+ }));
507
+ }
508
+ disconnect() {
509
+ // no op
510
+ }
511
+ }
512
+
513
+ /**
514
+ * @license Apache-2.0
515
+ *
516
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
517
+ *
518
+ * You may not use this file except in compliance with the License
519
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
520
+ *
521
+ * This code is a modification of the `@angular/material` original
522
+ * code licensed under MIT-style License (https://angular.dev/license).
523
+ */
524
+ /**
525
+ * Data source for a nested tree.
526
+ *
527
+ * The data source for a nested tree doesn't have to consider node flattener, or the way to expand
528
+ * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.
529
+ */
530
+ class CuteTreeNestedDataSource extends DataSource {
531
+ constructor() {
532
+ super(...arguments);
533
+ this._data = new BehaviorSubject([]);
534
+ }
535
+ /**
536
+ * Data for the nested tree
537
+ */
538
+ get data() { return this._data.value; }
539
+ set data(value) {
540
+ this._data.next(value);
541
+ }
542
+ connect(collectionViewer) {
543
+ return merge(...[collectionViewer.viewChange, this._data]).pipe(map(() => this.data));
544
+ }
545
+ disconnect() {
546
+ // no op
547
+ }
548
+ }
549
+
550
+ /**
551
+ * @license Apache-2.0
552
+ *
553
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
554
+ *
555
+ * You may not use this file except in compliance with the License
556
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
557
+ */
558
+ const TYPES = [
559
+ CuteNestedTreeNode,
560
+ CuteTreeNodeDef,
561
+ CuteTreeNodePadding,
562
+ CuteTreeNodeToggle,
563
+ CuteTree,
564
+ CuteTreeNode,
565
+ CuteTreeNodeOutlet,
566
+ ];
567
+ class CuteTreeModule {
568
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
569
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeModule, imports: [CdkTreeModule, CuteNestedTreeNode,
570
+ CuteTreeNodeDef,
571
+ CuteTreeNodePadding,
572
+ CuteTreeNodeToggle,
573
+ CuteTree,
574
+ CuteTreeNode,
575
+ CuteTreeNodeOutlet], exports: [CuteNestedTreeNode,
576
+ CuteTreeNodeDef,
577
+ CuteTreeNodePadding,
578
+ CuteTreeNodeToggle,
579
+ CuteTree,
580
+ CuteTreeNode,
581
+ CuteTreeNodeOutlet] }); }
582
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeModule, imports: [CdkTreeModule] }); }
583
+ }
584
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTreeModule, decorators: [{
585
+ type: NgModule,
586
+ args: [{
587
+ imports: [CdkTreeModule, ...TYPES],
588
+ exports: TYPES,
589
+ declarations: [],
590
+ }]
591
+ }] });
592
+
593
+ /**
594
+ * Generated bundle index. Do not edit.
595
+ */
596
+
597
+ export { CuteNestedTreeNode, CuteTree, CuteTreeFlatDataSource, CuteTreeFlattener, CuteTreeModule, CuteTreeNestedDataSource, CuteTreeNode, CuteTreeNodeDef, CuteTreeNodeOutlet, CuteTreeNodePadding, CuteTreeNodeToggle };
598
+ //# sourceMappingURL=cute-widgets-base-tree.mjs.map