@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,1023 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Directive, booleanAttribute, Input, HostBinding, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
3
+ import { CdkTable, HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet, CDK_TABLE, STICKY_POSITIONING_LISTENER, CdkCellDef, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkHeaderCell, CdkFooterCell, CdkCell, CdkHeaderRowDef, CdkFooterRowDef, CdkRowDef, CdkHeaderRow, CdkCellOutlet, CdkFooterRow, CdkRow, CdkNoDataRow, CdkTextColumn, CdkTableModule } from '@angular/cdk/table';
4
+ import { _RecycleViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY, _DisposeViewRepeaterStrategy, DataSource } from '@angular/cdk/collections';
5
+ import { BehaviorSubject, Subject, merge, of, combineLatest } from 'rxjs';
6
+ import { _isNumberValue } from '@angular/cdk/coercion';
7
+ import { map } from 'rxjs/operators';
8
+ import { CommonModule } from '@angular/common';
9
+
10
+ /**
11
+ * @license Apache-2.0
12
+ *
13
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
14
+ *
15
+ * You may not use this file except in compliance with the License
16
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
17
+ *
18
+ * This code is a modification of the `@angular/material` original
19
+ * code licensed under MIT-style License (https://angular.dev/license).
20
+ */
21
+ //++ CWT
22
+ /**
23
+ * Used to provide a table to some of the subcomponents without causing a circular dependency.
24
+ */
25
+ const CUTE_TABLE = new InjectionToken("CUTE_TABLE");
26
+ /**
27
+ * Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with
28
+ * tables that animate rows.
29
+ *
30
+ * @deprecated This directive is a no-op and will be removed.
31
+ * @breaking-change 23.0.0
32
+ */
33
+ class CuteRecycleRows {
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
35
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteRecycleRows, isStandalone: true, selector: "cute-table[recycleRows], table[cute-table][recycleRows]", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteRecycleRows, decorators: [{
38
+ type: Directive,
39
+ args: [{
40
+ selector: 'cute-table[recycleRows], table[cute-table][recycleRows]',
41
+ providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],
42
+ standalone: true,
43
+ }]
44
+ }] });
45
+ class CuteTable extends CdkTable {
46
+ constructor() {
47
+ super(...arguments);
48
+ /** Overrides the sticky CSS class set by the `CdkTable`. */
49
+ this.stickyCssClass = 'cute-table-sticky';
50
+ /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */
51
+ this.needsPositionStickyOnElement = false;
52
+ /** Adds zebra-striping to any table row within the `<tbody>`. */
53
+ this.stripedRows = false;
54
+ /** Adds zebra-striping to any table column */
55
+ this.stripedColumns = false;
56
+ /** Enables a hover state on table rows within a `<tbody>` */
57
+ this.hoveredRows = false;
58
+ this._compact = false;
59
+ /**
60
+ * Adds a thicker border, darker between table groups — `<thead>`, `<tbody>`, and `<tfoot>`.
61
+ * @experimental
62
+ */
63
+ this.divideGroups = false;
64
+ this._verticalHeads = false;
65
+ }
66
+ get classList() {
67
+ let classes = "";
68
+ if (this.color) {
69
+ classes += " table-" + this.color;
70
+ }
71
+ if (this.borderColor) {
72
+ classes += " border-" + this.borderColor;
73
+ }
74
+ return classes.trim();
75
+ }
76
+ /** Makes a `<table>` more compact */
77
+ get compact() { return this._compact; }
78
+ set compact(value) {
79
+ if (value !== this._compact) {
80
+ this._compact = value;
81
+ this.updateStickyStyles();
82
+ }
83
+ }
84
+ /**
85
+ * Whether to display `th` cells vertically.
86
+ * @experimental
87
+ */
88
+ get verticalHeads() { return this._verticalHeads; }
89
+ set verticalHeads(value) {
90
+ if (value !== this._verticalHeads) {
91
+ this._verticalHeads = value;
92
+ this.updateStickyStyles();
93
+ }
94
+ }
95
+ updateStickyStyles() {
96
+ this.updateStickyHeaderRowStyles();
97
+ this.updateStickyFooterRowStyles();
98
+ this.updateStickyColumnStyles();
99
+ }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTable, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CuteTable, isStandalone: true, selector: "cute-table, table[cute-table]", inputs: { color: "color", borderColor: "borderColor", stripedRows: ["stripedRows", "stripedRows", booleanAttribute], stripedColumns: ["stripedColumns", "stripedColumns", booleanAttribute], hoveredRows: ["hoveredRows", "hoveredRows", booleanAttribute], compact: ["compact", "compact", booleanAttribute], displayBorders: "displayBorders", divideGroups: ["divideGroups", "divideGroups", booleanAttribute], verticalHeads: ["verticalHeads", "verticalHeads", booleanAttribute] }, host: { properties: { "class.cute-table-fixed-layout": "fixedLayout", "class.table-hover": "hoveredRows", "class.table-striped": "stripedRows", "class.table-striped-columns": "stripedColumns", "class.table-bordered": "displayBorders==\"all\"", "class.table-borderless": "displayBorders==\"none\"", "class.table-sm": "compact", "class.cute-table-vertical-head": "verticalHeads", "style.--bs-table-border-color": "borderColor ? \"var(--bs-\"+borderColor+\")\" : undefined", "class": "this.classList" }, classAttribute: "cute-table table" }, providers: [
102
+ { provide: CdkTable, useExisting: CuteTable },
103
+ { provide: CDK_TABLE, useExisting: CuteTable },
104
+ { provide: CUTE_TABLE, useExisting: CuteTable },
105
+ // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code
106
+ // is only included in the build if used.
107
+ { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
108
+ // Prevent nested tables from seeing this table's StickyPositioningListener.
109
+ { provide: STICKY_POSITIONING_LISTENER, useValue: null },
110
+ ], exportAs: ["cuteTable"], usesInheritance: true, ngImport: i0, template: `
111
+ <ng-content select="caption"/>
112
+ <ng-content select="colgroup, col"/>
113
+
114
+ <!--
115
+ Unprojected content throws a hydration error so we need this to capture it.
116
+ It gets removed on the client so it doesn't affect the layout.
117
+ -->
118
+ @if (_isServer) {
119
+ <ng-content/>
120
+ }
121
+
122
+ @if (_isNativeHtmlTable) {
123
+ <thead role="rowgroup">
124
+ <ng-container headerRowOutlet/>
125
+ </thead>
126
+ <tbody class="cute-data-table__content" [class.table-group-divider]="divideGroups" role="rowgroup">
127
+ <ng-container rowOutlet/>
128
+ <ng-container noDataRowOutlet/>
129
+ </tbody>
130
+ <tfoot role="rowgroup" [class.table-group-divider]="divideGroups">
131
+ <ng-container footerRowOutlet/>
132
+ </tfoot>
133
+ } @else {
134
+ <ng-container headerRowOutlet/>
135
+ <ng-container rowOutlet/>
136
+ <ng-container noDataRowOutlet/>
137
+ <ng-container footerRowOutlet/>
138
+ }
139
+ `, isInline: true, styles: [".cute-table-sticky{position:sticky!important}.cute-table{table-layout:auto;white-space:normal;border-spacing:0;border-collapse:separate;min-width:100%;background-color:var(--bs-table-bg)}.cute-table>tfoot{font-weight:700}.cute-table.cute-table-vertical-head thead th{position:relative;writing-mode:vertical-lr;white-space:wrap;transform:rotate(180deg)}.cute-table .table-group-divider tr:first-child td,.cute-table .table-group-divider tr:first-child th{border-top:calc(var(--bs-border-width) * 2) solid var(--bs-table-border-color)}.cute-table.table-bordered>:not(caption)>*>*{border-width:0}.cute-table.table-bordered th{border-top:var(--bs-border-width) solid var(--bs-table-border-color);border-bottom:var(--bs-border-width) solid var(--bs-table-border-color);border-right:var(--bs-border-width) solid var(--bs-table-border-color)}.cute-table.table-bordered td{border-bottom:var(--bs-border-width) solid var(--bs-table-border-color);border-right:var(--bs-border-width) solid var(--bs-table-border-color)}.cute-table.table-bordered th:first-child,.cute-table.table-bordered td:first-child{border-left:var(--bs-border-width) solid var(--bs-table-border-color)}.cute-table.cute-table-fixed-layout{table-layout:fixed}.cute-table .cute-table-sticky-border-elem-right{border-left:var(--bs-border-width) solid var(--bs-table-border-color)!important}.cute-table .cute-table-sticky-border-elem-left{border-right:var(--bs-border-width) solid var(--bs-table-border-color)!important}.cute-row,.cute-header-row,.cute-footer-row{-webkit-font-smoothing:antialiased}.cute-cell,.cute-header-cell,.cute-footer-cell{box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none}\n"], dependencies: [{ kind: "directive", type: HeaderRowOutlet, selector: "[headerRowOutlet]" }, { kind: "directive", type: DataRowOutlet, selector: "[rowOutlet]" }, { kind: "directive", type: NoDataRowOutlet, selector: "[noDataRowOutlet]" }, { kind: "directive", type: FooterRowOutlet, selector: "[footerRowOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTable, decorators: [{
142
+ type: Component,
143
+ args: [{ selector: 'cute-table, table[cute-table]', exportAs: 'cuteTable', template: `
144
+ <ng-content select="caption"/>
145
+ <ng-content select="colgroup, col"/>
146
+
147
+ <!--
148
+ Unprojected content throws a hydration error so we need this to capture it.
149
+ It gets removed on the client so it doesn't affect the layout.
150
+ -->
151
+ @if (_isServer) {
152
+ <ng-content/>
153
+ }
154
+
155
+ @if (_isNativeHtmlTable) {
156
+ <thead role="rowgroup">
157
+ <ng-container headerRowOutlet/>
158
+ </thead>
159
+ <tbody class="cute-data-table__content" [class.table-group-divider]="divideGroups" role="rowgroup">
160
+ <ng-container rowOutlet/>
161
+ <ng-container noDataRowOutlet/>
162
+ </tbody>
163
+ <tfoot role="rowgroup" [class.table-group-divider]="divideGroups">
164
+ <ng-container footerRowOutlet/>
165
+ </tfoot>
166
+ } @else {
167
+ <ng-container headerRowOutlet/>
168
+ <ng-container rowOutlet/>
169
+ <ng-container noDataRowOutlet/>
170
+ <ng-container footerRowOutlet/>
171
+ }
172
+ `, host: {
173
+ 'class': 'cute-table table',
174
+ '[class.cute-table-fixed-layout]': 'fixedLayout',
175
+ '[class.table-hover]': 'hoveredRows',
176
+ '[class.table-striped]': 'stripedRows',
177
+ '[class.table-striped-columns]': 'stripedColumns',
178
+ '[class.table-bordered]': 'displayBorders=="all"',
179
+ '[class.table-borderless]': 'displayBorders=="none"',
180
+ '[class.table-sm]': 'compact',
181
+ '[class.cute-table-vertical-head]': 'verticalHeads',
182
+ '[style.--bs-table-border-color]': 'borderColor ? "var(--bs-"+borderColor+")" : undefined',
183
+ }, providers: [
184
+ { provide: CdkTable, useExisting: CuteTable },
185
+ { provide: CDK_TABLE, useExisting: CuteTable },
186
+ { provide: CUTE_TABLE, useExisting: CuteTable },
187
+ // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code
188
+ // is only included in the build if used.
189
+ { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
190
+ // Prevent nested tables from seeing this table's StickyPositioningListener.
191
+ { provide: STICKY_POSITIONING_LISTENER, useValue: null },
192
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, imports: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet], styles: [".cute-table-sticky{position:sticky!important}.cute-table{table-layout:auto;white-space:normal;border-spacing:0;border-collapse:separate;min-width:100%;background-color:var(--bs-table-bg)}.cute-table>tfoot{font-weight:700}.cute-table.cute-table-vertical-head thead th{position:relative;writing-mode:vertical-lr;white-space:wrap;transform:rotate(180deg)}.cute-table .table-group-divider tr:first-child td,.cute-table .table-group-divider tr:first-child th{border-top:calc(var(--bs-border-width) * 2) solid var(--bs-table-border-color)}.cute-table.table-bordered>:not(caption)>*>*{border-width:0}.cute-table.table-bordered th{border-top:var(--bs-border-width) solid var(--bs-table-border-color);border-bottom:var(--bs-border-width) solid var(--bs-table-border-color);border-right:var(--bs-border-width) solid var(--bs-table-border-color)}.cute-table.table-bordered td{border-bottom:var(--bs-border-width) solid var(--bs-table-border-color);border-right:var(--bs-border-width) solid var(--bs-table-border-color)}.cute-table.table-bordered th:first-child,.cute-table.table-bordered td:first-child{border-left:var(--bs-border-width) solid var(--bs-table-border-color)}.cute-table.cute-table-fixed-layout{table-layout:fixed}.cute-table .cute-table-sticky-border-elem-right{border-left:var(--bs-border-width) solid var(--bs-table-border-color)!important}.cute-table .cute-table-sticky-border-elem-left{border-right:var(--bs-border-width) solid var(--bs-table-border-color)!important}.cute-row,.cute-header-row,.cute-footer-row{-webkit-font-smoothing:antialiased}.cute-cell,.cute-header-cell,.cute-footer-cell{box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;outline:none}\n"] }]
193
+ }], propDecorators: { classList: [{
194
+ type: HostBinding,
195
+ args: ["class"]
196
+ }], color: [{
197
+ type: Input
198
+ }], borderColor: [{
199
+ type: Input
200
+ }], stripedRows: [{
201
+ type: Input,
202
+ args: [{ transform: booleanAttribute }]
203
+ }], stripedColumns: [{
204
+ type: Input,
205
+ args: [{ transform: booleanAttribute }]
206
+ }], hoveredRows: [{
207
+ type: Input,
208
+ args: [{ transform: booleanAttribute }]
209
+ }], compact: [{
210
+ type: Input,
211
+ args: [{ transform: booleanAttribute }]
212
+ }], displayBorders: [{
213
+ type: Input
214
+ }], divideGroups: [{
215
+ type: Input,
216
+ args: [{ transform: booleanAttribute }]
217
+ }], verticalHeads: [{
218
+ type: Input,
219
+ args: [{ transform: booleanAttribute }]
220
+ }] } });
221
+
222
+ /**
223
+ * @license Apache-2.0
224
+ *
225
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
226
+ *
227
+ * You may not use this file except in compliance with the License
228
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
229
+ *
230
+ * This code is a modification of the `@angular/material` original
231
+ * code licensed under MIT-style License (https://angular.dev/license).
232
+ */
233
+ /**
234
+ * Cell definition for the `cute-table`.
235
+ * Captures the template of a column's data row cell as well as cell-specific properties.
236
+ */
237
+ class CuteCellDef extends CdkCellDef {
238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
239
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteCellDef, isStandalone: true, selector: "[cuteCellDef]", providers: [{ provide: CdkCellDef, useExisting: CuteCellDef }], usesInheritance: true, ngImport: i0 }); }
240
+ }
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteCellDef, decorators: [{
242
+ type: Directive,
243
+ args: [{
244
+ selector: '[cuteCellDef]',
245
+ providers: [{ provide: CdkCellDef, useExisting: CuteCellDef }],
246
+ }]
247
+ }] });
248
+ /**
249
+ * Header cell definition for the `cute-table`.
250
+ * Captures the template of a column's header cell and as well as cell-specific properties.
251
+ */
252
+ class CuteHeaderCellDef extends CdkHeaderCellDef {
253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
254
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteHeaderCellDef, isStandalone: true, selector: "[cuteHeaderCellDef]", providers: [{ provide: CdkHeaderCellDef, useExisting: CuteHeaderCellDef }], usesInheritance: true, ngImport: i0 }); }
255
+ }
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderCellDef, decorators: [{
257
+ type: Directive,
258
+ args: [{
259
+ selector: '[cuteHeaderCellDef]',
260
+ providers: [{ provide: CdkHeaderCellDef, useExisting: CuteHeaderCellDef }],
261
+ }]
262
+ }] });
263
+ /**
264
+ * Footer cell definition for the `cute-table`.
265
+ * Captures the template of a column's footer cell and as well as cell-specific properties.
266
+ */
267
+ class CuteFooterCellDef extends CdkFooterCellDef {
268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterCellDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
269
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteFooterCellDef, isStandalone: true, selector: "[cuteFooterCellDef]", providers: [{ provide: CdkFooterCellDef, useExisting: CuteFooterCellDef }], usesInheritance: true, ngImport: i0 }); }
270
+ }
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterCellDef, decorators: [{
272
+ type: Directive,
273
+ args: [{
274
+ selector: '[cuteFooterCellDef]',
275
+ providers: [{ provide: CdkFooterCellDef, useExisting: CuteFooterCellDef }],
276
+ }]
277
+ }] });
278
+ /**
279
+ * Column definition for the `cute-table`.
280
+ * Defines a set of cells available for a table column.
281
+ */
282
+ class CuteColumnDef extends CdkColumnDef {
283
+ /** Unique name for this column. */
284
+ get name() { return this._name; }
285
+ set name(name) { this._setNameInput(name); }
286
+ /**
287
+ * Add "cute-column-" prefix in addition to "cdk-column-" prefix.
288
+ * In the future, this will only add "cute-column-" and columnCssClassName
289
+ * will change from type string[] to string.
290
+ */
291
+ _updateColumnCssClassName() {
292
+ super._updateColumnCssClassName();
293
+ this._columnCssClassName.push(`cute-column-${this.cssClassFriendlyName}`);
294
+ }
295
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteColumnDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
296
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteColumnDef, isStandalone: true, selector: "[cuteColumnDef]", inputs: { sticky: ["sticky", "sticky", booleanAttribute], name: ["cuteColumnDef", "name"] }, providers: [
297
+ { provide: CdkColumnDef, useExisting: CuteColumnDef },
298
+ { provide: 'CUTE_SORT_HEADER_COLUMN_DEF', useExisting: CuteColumnDef },
299
+ ], usesInheritance: true, ngImport: i0 }); }
300
+ }
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteColumnDef, decorators: [{
302
+ type: Directive,
303
+ args: [{
304
+ selector: '[cuteColumnDef]',
305
+ inputs: [{ name: 'sticky', transform: booleanAttribute }],
306
+ providers: [
307
+ { provide: CdkColumnDef, useExisting: CuteColumnDef },
308
+ { provide: 'CUTE_SORT_HEADER_COLUMN_DEF', useExisting: CuteColumnDef },
309
+ ],
310
+ standalone: true,
311
+ }]
312
+ }], propDecorators: { name: [{
313
+ type: Input,
314
+ args: ['cuteColumnDef']
315
+ }] } });
316
+ /** Header cell template container that adds the right classes and role. */
317
+ class CuteHeaderCell extends CdkHeaderCell {
318
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderCell, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
319
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteHeaderCell, isStandalone: true, selector: "cute-header-cell, th[cute-header-cell]", inputs: { color: "color" }, host: { attributes: { "role": "columnheader" }, properties: { "class": "color ? \"table-\"+color : \"\"" }, classAttribute: "cute-header-cell" }, usesInheritance: true, ngImport: i0 }); }
320
+ }
321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderCell, decorators: [{
322
+ type: Directive,
323
+ args: [{
324
+ selector: 'cute-header-cell, th[cute-header-cell]',
325
+ host: {
326
+ 'class': 'cute-header-cell',
327
+ '[class]': 'color ? "table-"+color : ""',
328
+ 'role': 'columnheader',
329
+ },
330
+ standalone: true,
331
+ }]
332
+ }], propDecorators: { color: [{
333
+ type: Input
334
+ }] } });
335
+ /** Footer cell template container that adds the right classes and role. */
336
+ class CuteFooterCell extends CdkFooterCell {
337
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterCell, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
338
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteFooterCell, isStandalone: true, selector: "cute-footer-cell, td[cute-footer-cell]", inputs: { color: "color" }, host: { properties: { "class": "color ? \"table-\"+color : \"\"" }, classAttribute: "cute-footer-cell" }, usesInheritance: true, ngImport: i0 }); }
339
+ }
340
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterCell, decorators: [{
341
+ type: Directive,
342
+ args: [{
343
+ selector: 'cute-footer-cell, td[cute-footer-cell]',
344
+ host: {
345
+ 'class': 'cute-footer-cell',
346
+ '[class]': 'color ? "table-"+color : ""',
347
+ },
348
+ standalone: true,
349
+ }]
350
+ }], propDecorators: { color: [{
351
+ type: Input
352
+ }] } });
353
+ /** Cell template container that adds the right classes and role. */
354
+ class CuteCell extends CdkCell {
355
+ constructor() {
356
+ super(...arguments);
357
+ /* Body cell's activity state */
358
+ this.active = false;
359
+ }
360
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteCell, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
361
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteCell, isStandalone: true, selector: "cute-cell, td[cute-cell]", inputs: { color: "color", active: ["active", "active", booleanAttribute] }, host: { properties: { "class.table-active": "active", "class": "color ? \"table-\"+color : \"\"" }, classAttribute: "cute-cell" }, usesInheritance: true, ngImport: i0 }); }
362
+ }
363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteCell, decorators: [{
364
+ type: Directive,
365
+ args: [{
366
+ selector: 'cute-cell, td[cute-cell]',
367
+ host: {
368
+ 'class': 'cute-cell',
369
+ '[class.table-active]': 'active',
370
+ '[class]': 'color ? "table-"+color : ""',
371
+ },
372
+ standalone: true,
373
+ }]
374
+ }], propDecorators: { color: [{
375
+ type: Input
376
+ }], active: [{
377
+ type: Input,
378
+ args: [{ transform: booleanAttribute }]
379
+ }] } });
380
+
381
+ /**
382
+ * @license Apache-2.0
383
+ *
384
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
385
+ *
386
+ * You may not use this file except in compliance with the License
387
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
388
+ *
389
+ * This code is a modification of the `@angular/material` original
390
+ * code licensed under MIT-style License (https://angular.dev/license).
391
+ */
392
+ // We can't reuse `CDK_ROW_TEMPLATE` because it's incompatible with local compilation mode.
393
+ const ROW_TEMPLATE = `<ng-container cdkCellOutlet></ng-container>`;
394
+ /**
395
+ * Header row definition for the `cute-table`.
396
+ * Captures the header row's template and other header properties such as the columns to display.
397
+ */
398
+ class CuteHeaderRowDef extends CdkHeaderRowDef {
399
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
400
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteHeaderRowDef, isStandalone: true, selector: "[cuteHeaderRowDef]", inputs: { columns: ["cuteHeaderRowDef", "columns"], sticky: ["cuteHeaderRowDefSticky", "sticky", booleanAttribute] }, providers: [{ provide: CdkHeaderRowDef, useExisting: CuteHeaderRowDef }], usesInheritance: true, ngImport: i0 }); }
401
+ }
402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderRowDef, decorators: [{
403
+ type: Directive,
404
+ args: [{
405
+ selector: '[cuteHeaderRowDef]',
406
+ providers: [{ provide: CdkHeaderRowDef, useExisting: CuteHeaderRowDef }],
407
+ inputs: [
408
+ { name: 'columns', alias: 'cuteHeaderRowDef' },
409
+ { name: 'sticky', alias: 'cuteHeaderRowDefSticky', transform: booleanAttribute },
410
+ ],
411
+ }]
412
+ }] });
413
+ /**
414
+ * Footer row definition for the `cute-table`.
415
+ * Captures the footer row's template and other footer properties such as the columns to display.
416
+ */
417
+ class CuteFooterRowDef extends CdkFooterRowDef {
418
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
419
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteFooterRowDef, isStandalone: true, selector: "[cuteFooterRowDef]", inputs: { columns: ["cuteFooterRowDef", "columns"], sticky: ["cuteFooterRowDefSticky", "sticky", booleanAttribute] }, providers: [{ provide: CdkFooterRowDef, useExisting: CuteFooterRowDef }], usesInheritance: true, ngImport: i0 }); }
420
+ }
421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterRowDef, decorators: [{
422
+ type: Directive,
423
+ args: [{
424
+ selector: '[cuteFooterRowDef]',
425
+ providers: [{ provide: CdkFooterRowDef, useExisting: CuteFooterRowDef }],
426
+ inputs: [
427
+ { name: 'columns', alias: 'cuteFooterRowDef' },
428
+ { name: 'sticky', alias: 'cuteFooterRowDefSticky', transform: booleanAttribute },
429
+ ],
430
+ }]
431
+ }] });
432
+ /**
433
+ * Data row definition for the `cute-table`.
434
+ * Captures the data row's template and other properties such as the columns to display and
435
+ * a when predicate that describes when this row should be used.
436
+ */
437
+ class CuteRowDef extends CdkRowDef {
438
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteRowDef, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
439
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteRowDef, isStandalone: true, selector: "[cuteRowDef]", inputs: { columns: ["cuteRowDefColumns", "columns"], when: ["cuteRowDefWhen", "when"] }, providers: [{ provide: CdkRowDef, useExisting: CuteRowDef }], usesInheritance: true, ngImport: i0 }); }
440
+ }
441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteRowDef, decorators: [{
442
+ type: Directive,
443
+ args: [{
444
+ selector: '[cuteRowDef]',
445
+ providers: [{ provide: CdkRowDef, useExisting: CuteRowDef }],
446
+ inputs: ['columns: cuteRowDefColumns', 'when: cuteRowDefWhen'],
447
+ }]
448
+ }] });
449
+ /** Header template container that contains the cell outlet. Adds the right class and role. */
450
+ class CuteHeaderRow extends CdkHeaderRow {
451
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderRow, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
452
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CuteHeaderRow, isStandalone: true, selector: "cute-header-row, tr[cute-header-row]", inputs: { color: "color" }, host: { attributes: { "role": "row" }, properties: { "class": "color ? \"table-\"+color : \"\"" }, classAttribute: "cute-header-row" }, providers: [{ provide: CdkHeaderRow, useExisting: CuteHeaderRow }], exportAs: ["cuteHeaderRow"], usesInheritance: true, ngImport: i0, template: "<ng-container cdkCellOutlet></ng-container>", isInline: true, dependencies: [{ kind: "directive", type: CdkCellOutlet, selector: "[cdkCellOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
453
+ }
454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteHeaderRow, decorators: [{
455
+ type: Component,
456
+ args: [{
457
+ selector: 'cute-header-row, tr[cute-header-row]',
458
+ template: ROW_TEMPLATE,
459
+ host: {
460
+ 'class': 'cute-header-row',
461
+ '[class]': 'color ? "table-"+color : ""',
462
+ 'role': 'row',
463
+ },
464
+ // See note on CdkTable for explanation on why this uses the default change detection strategy.
465
+ // tslint:disable-next-line:validate-decorators
466
+ changeDetection: ChangeDetectionStrategy.Default,
467
+ encapsulation: ViewEncapsulation.None,
468
+ exportAs: 'cuteHeaderRow',
469
+ providers: [{ provide: CdkHeaderRow, useExisting: CuteHeaderRow }],
470
+ imports: [CdkCellOutlet]
471
+ }]
472
+ }], propDecorators: { color: [{
473
+ type: Input
474
+ }] } });
475
+ /** Footer template container that contains the cell outlet. Adds the right class and role. */
476
+ class CuteFooterRow extends CdkFooterRow {
477
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterRow, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
478
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CuteFooterRow, isStandalone: true, selector: "cute-footer-row, tr[cute-footer-row]", inputs: { color: "color" }, host: { attributes: { "role": "row" }, properties: { "class": "color ? \"table-\"+color : \"\"" }, classAttribute: "cute-footer-row" }, providers: [{ provide: CdkFooterRow, useExisting: CuteFooterRow }], exportAs: ["cuteFooterRow"], usesInheritance: true, ngImport: i0, template: "<ng-container cdkCellOutlet></ng-container>", isInline: true, dependencies: [{ kind: "directive", type: CdkCellOutlet, selector: "[cdkCellOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
479
+ }
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFooterRow, decorators: [{
481
+ type: Component,
482
+ args: [{
483
+ selector: 'cute-footer-row, tr[cute-footer-row]',
484
+ template: ROW_TEMPLATE,
485
+ host: {
486
+ 'class': 'cute-footer-row',
487
+ '[class]': 'color ? "table-"+color : ""',
488
+ 'role': 'row',
489
+ },
490
+ // See note on CdkTable for explanation on why this uses the default change detection strategy.
491
+ // tslint:disable-next-line:validate-decorators
492
+ changeDetection: ChangeDetectionStrategy.Default,
493
+ encapsulation: ViewEncapsulation.None,
494
+ exportAs: 'cuteFooterRow',
495
+ providers: [{ provide: CdkFooterRow, useExisting: CuteFooterRow }],
496
+ imports: [CdkCellOutlet]
497
+ }]
498
+ }], propDecorators: { color: [{
499
+ type: Input
500
+ }] } });
501
+ /** Data row template container that contains the cell outlet. Adds the right class and role. */
502
+ class CuteRow extends CdkRow {
503
+ constructor() {
504
+ super(...arguments);
505
+ /* Whether the row has an active state */
506
+ this.active = false;
507
+ }
508
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteRow, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
509
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "20.3.15", type: CuteRow, isStandalone: true, selector: "cute-row, tr[cute-row]", inputs: { color: "color", active: ["active", "active", booleanAttribute] }, host: { attributes: { "role": "row" }, properties: { "class.table-active": "active", "class": "color ? \"table-\"+color : \"\"" }, classAttribute: "cute-row" }, providers: [{ provide: CdkRow, useExisting: CuteRow }], exportAs: ["cuteRow"], usesInheritance: true, ngImport: i0, template: "<ng-container cdkCellOutlet></ng-container>", isInline: true, dependencies: [{ kind: "directive", type: CdkCellOutlet, selector: "[cdkCellOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
510
+ }
511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteRow, decorators: [{
512
+ type: Component,
513
+ args: [{
514
+ selector: 'cute-row, tr[cute-row]',
515
+ template: ROW_TEMPLATE,
516
+ host: {
517
+ 'class': 'cute-row',
518
+ '[class.table-active]': 'active',
519
+ '[class]': 'color ? "table-"+color : ""',
520
+ 'role': 'row',
521
+ },
522
+ // See note on CdkTable for explanation on why this uses the default change detection strategy.
523
+ // tslint:disable-next-line:validate-decorators
524
+ changeDetection: ChangeDetectionStrategy.Default,
525
+ encapsulation: ViewEncapsulation.None,
526
+ exportAs: 'cuteRow',
527
+ providers: [{ provide: CdkRow, useExisting: CuteRow }],
528
+ imports: [CdkCellOutlet]
529
+ }]
530
+ }], propDecorators: { color: [{
531
+ type: Input
532
+ }], active: [{
533
+ type: Input,
534
+ args: [{ transform: booleanAttribute }]
535
+ }] } });
536
+ /** Row that can be used to display a message when no data is shown in the table. */
537
+ class CuteNoDataRow extends CdkNoDataRow {
538
+ constructor() {
539
+ super();
540
+ this._cellSelector = 'td, cute-cell, [cute-cell], .cute-cell';
541
+ this._contentClassNames.push('cute-no-data-row', 'cute-row');
542
+ this._cellClassNames.push('cute-cell', 'cute-no-data-cell');
543
+ }
544
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteNoDataRow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
545
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteNoDataRow, isStandalone: true, selector: "ng-template[cuteNoDataRow]", providers: [{ provide: CdkNoDataRow, useExisting: CuteNoDataRow }], usesInheritance: true, ngImport: i0 }); }
546
+ }
547
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteNoDataRow, decorators: [{
548
+ type: Directive,
549
+ args: [{
550
+ selector: 'ng-template[cuteNoDataRow]',
551
+ providers: [{ provide: CdkNoDataRow, useExisting: CuteNoDataRow }],
552
+ standalone: true,
553
+ }]
554
+ }], ctorParameters: () => [] });
555
+
556
+ /**
557
+ * @license Apache-2.0
558
+ *
559
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
560
+ *
561
+ * You may not use this file except in compliance with the License
562
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
563
+ *
564
+ * This code is a modification of the `@angular/material` original
565
+ * code licensed under MIT-style License (https://angular.dev/license).
566
+ */
567
+ /**
568
+ * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to
569
+ * flaky browser support and the value not being defined in Closure's typings.
570
+ */
571
+ const MAX_SAFE_INTEGER = 9007199254740991;
572
+ /**
573
+ * Data source that accepts a client-side data array and includes native support of filtering,
574
+ * sorting (using CuteSort), and pagination (using CutePaginator).
575
+ *
576
+ * Allows for sort customization by overriding sortingDataAccessor, which defines how data
577
+ * properties are accessed. It also allows for filter customization by overriding filterPredicate,
578
+ * which defines how row data is converted to a string for filter matching.
579
+ *
580
+ * **Note:** This class is meant to be a simple data source to help you get started. As such,
581
+ * it isn't equipped to handle some more advanced cases like robust i18n support or server-side
582
+ * interactions. If your app needs to support more advanced use cases, consider implementing your
583
+ * own `DataSource`.
584
+ */
585
+ class CuteTableDataSource extends DataSource {
586
+ /** Array of data that should be rendered by the table, where each object represents one row. */
587
+ get data() { return this._data.value; }
588
+ set data(data) {
589
+ data = Array.isArray(data) ? data : [];
590
+ this._data.next(data);
591
+ // Normally the `filteredData` is updated by the re-render
592
+ // subscription, but that won't happen if it's inactive.
593
+ if (!this._renderChangesSubscription) {
594
+ this._filterData(data);
595
+ }
596
+ }
597
+ /**
598
+ * Filter term that should be used to filter out objects from the data array. To override how
599
+ * data objects match to this filter string, provide a custom function for filterPredicate.
600
+ */
601
+ get filter() { return this._filter.value; }
602
+ set filter(filter) {
603
+ this._filter.next(filter);
604
+ // Normally the `filteredData` is updated by the re-render
605
+ // subscription, but that won't happen if it's inactive.
606
+ if (!this._renderChangesSubscription) {
607
+ this._filterData(this.data);
608
+ }
609
+ }
610
+ /**
611
+ * Instance of the CuteSort directive used by the table to control its sorting. Sort changes
612
+ * emitted by the CuteSort will trigger an update to the table's rendered data.
613
+ */
614
+ get sort() { return this._sort; }
615
+ set sort(sort) {
616
+ this._sort = sort;
617
+ this._updateChangeSubscription();
618
+ }
619
+ /**
620
+ * Instance of the paginator component used by the table to control what page of the data is
621
+ * displayed. Page changes emitted by the paginator will trigger an update to the
622
+ * table's rendered data.
623
+ *
624
+ * Note that the data source uses the paginator's properties to calculate which page of data
625
+ * should be displayed. If the paginator receives its properties as template inputs,
626
+ * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been
627
+ * initialized before assigning it to this data source.
628
+ */
629
+ get paginator() { return this._paginator; }
630
+ set paginator(paginator) {
631
+ this._paginator = paginator;
632
+ this._updateChangeSubscription();
633
+ }
634
+ constructor(initialData = []) {
635
+ super();
636
+ /** Stream emitting render data to the table (depends on ordered data changes). */
637
+ this._renderData = new BehaviorSubject([]);
638
+ /** Stream that emits when a new filter string is set on the data source. */
639
+ this._filter = new BehaviorSubject('');
640
+ /** Used to react to internal changes of the paginator that are made by the data source itself. */
641
+ this._internalPageChanges = new Subject();
642
+ /**
643
+ * Subscription to the changes that should trigger an update to the table's rendered rows, such
644
+ * as filtering, sorting, pagination, or base data changes.
645
+ */
646
+ this._renderChangesSubscription = null;
647
+ /**
648
+ * The filtered set of data that has been matched by the filter string, or all the data if there
649
+ * is no filter. Useful for knowing the set of data the table represents.
650
+ * For example, a 'selectAll()' function would likely want to select the set of filtered data
651
+ * shown to the user rather than all the data.
652
+ */
653
+ this.filteredData = [];
654
+ this._sort = null;
655
+ this._paginator = null;
656
+ /**
657
+ * Data accessor function that is used for accessing data properties for sorting through
658
+ * the default sortData function.
659
+ * This default function assumes that the sort header IDs (which defaults to the column name)
660
+ * matches the data's properties (e.g., column Xyz represents data['Xyz']).
661
+ * May be set to a custom function for different behavior.
662
+ * @param data Data object that is being accessed.
663
+ * @param sortHeaderId The name of the column that represents the data.
664
+ */
665
+ this.sortingDataAccessor = (data, sortHeaderId) => {
666
+ const value = data[sortHeaderId];
667
+ if (_isNumberValue(value)) {
668
+ const numberValue = Number(value);
669
+ // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we
670
+ // leave them as strings. For more info: https://goo.gl/y5vbSg
671
+ return numberValue < MAX_SAFE_INTEGER ? numberValue : value;
672
+ }
673
+ return value;
674
+ };
675
+ /**
676
+ * Gets a sorted copy of the data array based on the state of the CuteSort. Called
677
+ * after changes are made to the filtered data or when sort changes are emitted from CuteSort.
678
+ * By default, the function retrieves the active sort and its direction and compares data
679
+ * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation
680
+ * of data ordering.
681
+ * @param data The array of data that should be sorted.
682
+ * @param sort The connected CuteSort that holds the current sort state.
683
+ */
684
+ this.sortData = (data, sort) => {
685
+ const active = sort.active;
686
+ const direction = sort.direction;
687
+ if (!active || direction == '') {
688
+ return data;
689
+ }
690
+ return data.sort((a, b) => {
691
+ let valueA = this.sortingDataAccessor(a, active);
692
+ let valueB = this.sortingDataAccessor(b, active);
693
+ // If there are data in the column that can be converted to a number,
694
+ // it must be ensured that the rest of the data
695
+ // is of the same type so as not to order incorrectly.
696
+ const valueAType = typeof valueA;
697
+ const valueBType = typeof valueB;
698
+ if (valueAType !== valueBType) {
699
+ if (valueAType === 'number') {
700
+ valueA += '';
701
+ }
702
+ if (valueBType === 'number') {
703
+ valueB += '';
704
+ }
705
+ }
706
+ // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if
707
+ // one value exists while the other doesn't. In this case, existing value should come last.
708
+ // This avoids inconsistent results when comparing values to undefined/null.
709
+ // If neither value exists, return 0 (equal).
710
+ let comparatorResult = 0;
711
+ if (valueA != null && valueB != null) {
712
+ // Check if one value is greater than the other; if equal, comparatorResult should remain 0.
713
+ if (valueA > valueB) {
714
+ comparatorResult = 1;
715
+ }
716
+ else if (valueA < valueB) {
717
+ comparatorResult = -1;
718
+ }
719
+ }
720
+ else if (valueA != null) {
721
+ comparatorResult = 1;
722
+ }
723
+ else if (valueB != null) {
724
+ comparatorResult = -1;
725
+ }
726
+ return comparatorResult * (direction == 'asc' ? 1 : -1);
727
+ });
728
+ };
729
+ /**
730
+ * Checks if a data object matches the data source's filter string. By default, each data object
731
+ * is converted to a string of its properties and returns true if the filter has
732
+ * at least one occurrence in that string. By default, the filter string has its whitespace
733
+ * trimmed and the match is case-insensitive. May be overridden for a custom implementation of
734
+ * filter matching.
735
+ * @param data Data object used to check against the filter.
736
+ * @param filter Filter string that has been set on the data source.
737
+ * @returns Whether the filter matches against the data
738
+ */
739
+ this.filterPredicate = (data, filter) => {
740
+ // Transform the data into a lowercase string of all property values.
741
+ const dataStr = Object.keys(data)
742
+ .reduce((currentTerm, key) => {
743
+ // Use an obscure Unicode character to delimit the words in the concatenated string.
744
+ // This avoids matches where the values of two columns combined will match the user's query
745
+ // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something
746
+ // that has a very low chance of being typed in by somebody in a text field. This one in
747
+ // particular is "White up-pointing triangle with dot" from
748
+ // https://en.wikipedia.org/wiki/List_of_Unicode_characters
749
+ return currentTerm + data[key] + '◬';
750
+ }, '')
751
+ .toLowerCase();
752
+ // Transform the filter by converting it to lowercase and removing whitespace.
753
+ const transformedFilter = filter.trim().toLowerCase();
754
+ return dataStr.indexOf(transformedFilter) != -1;
755
+ };
756
+ this._data = new BehaviorSubject(initialData);
757
+ this._updateChangeSubscription();
758
+ }
759
+ /**
760
+ * Subscribe to changes that should trigger an update to the table's rendered rows. When the
761
+ * changes occur, process the current state of the filter, sort, and pagination along with
762
+ * the provided base data and send it to the table for rendering.
763
+ */
764
+ _updateChangeSubscription() {
765
+ // Sorting and/or pagination should be watched if sort and/or paginator are provided.
766
+ // The events should emit whenever the component emits a change or initializes, or if no
767
+ // component is provided, a stream with just a null event should be provided.
768
+ // The `sortChange` and `pageChange` acts as a signal to the `combineLatests` below so that the
769
+ // pipeline can progress to the next step. Note that the value from these streams are not used,
770
+ // they purely act as a signal to progress in the pipeline.
771
+ const sortChange = this._sort
772
+ ? merge(this._sort.sortChange, this._sort.initialized$)
773
+ : of(null);
774
+ const pageChange = this._paginator
775
+ ? merge(this._paginator.page, this._internalPageChanges, this._paginator.initialized$)
776
+ : of(null);
777
+ const dataStream = this._data;
778
+ // Watch for base data or filter changes to provide a filtered set of data.
779
+ const filteredData = combineLatest([dataStream, this._filter]).pipe(map(([data]) => this._filterData(data)));
780
+ // Watch for filtered data or sort changes to provide an ordered set of data.
781
+ const orderedData = combineLatest([filteredData, sortChange]).pipe(map(([data]) => this._orderData(data)));
782
+ // Watch for ordered data or page changes to provide a paged set of data.
783
+ const paginatedData = combineLatest([orderedData, pageChange]).pipe(map(([data]) => this._pageData(data)));
784
+ // Watched for paged data changes and send the result to the table to render.
785
+ this._renderChangesSubscription?.unsubscribe();
786
+ this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));
787
+ }
788
+ /**
789
+ * Returns a filtered data array where each filter object contains the filter string within
790
+ * the result of the filterPredicate function. If no filter is set, return the data array
791
+ * as provided.
792
+ */
793
+ _filterData(data) {
794
+ // If there is a filter string, filter out data that does not contain it.
795
+ // Each data object is converted to a string using the function defined by filterPredicate.
796
+ // May be overridden for customization.
797
+ this.filteredData =
798
+ this.filter == null || this.filter === ''
799
+ ? data
800
+ : data.filter(obj => this.filterPredicate(obj, this.filter));
801
+ if (this.paginator) {
802
+ this._updatePaginator(this.filteredData.length);
803
+ }
804
+ return this.filteredData;
805
+ }
806
+ /**
807
+ * Returns a sorted copy of the data if CuteSort has a sort applied, otherwise just returns the
808
+ * data array as provided. Uses the default data accessor for data lookup, unless a
809
+ * sortDataAccessor function is defined.
810
+ */
811
+ _orderData(data) {
812
+ // If there is no active sort or direction, return the data without trying to sort.
813
+ if (!this.sort) {
814
+ return data;
815
+ }
816
+ return this.sortData(data.slice(), this.sort);
817
+ }
818
+ /**
819
+ * Returns a paged slice of the provided data array according to the provided paginator's page
820
+ * index and length. If there is no paginator provided, return the data array as provided.
821
+ */
822
+ _pageData(data) {
823
+ if (!this.paginator) {
824
+ return data;
825
+ }
826
+ const startIndex = this.paginator.pageIndex * this.paginator.pageSize;
827
+ return data.slice(startIndex, startIndex + this.paginator.pageSize);
828
+ }
829
+ /**
830
+ * Updates the paginator to reflect the length of the filtered data, and makes sure that the page
831
+ * index does not exceed the paginator's last page. Values are changed in a resolved promise to
832
+ * guard against making property changes within a round of change detection.
833
+ */
834
+ _updatePaginator(filteredDataLength) {
835
+ Promise.resolve().then(() => {
836
+ const paginator = this.paginator;
837
+ if (!paginator) {
838
+ return;
839
+ }
840
+ paginator.length = filteredDataLength;
841
+ // If the page index is set beyond the page, reduce it to the last page.
842
+ if (paginator.pageIndex > 0) {
843
+ const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;
844
+ const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);
845
+ if (newPageIndex !== paginator.pageIndex) {
846
+ paginator.pageIndex = newPageIndex;
847
+ // Since the paginator only emits after user-generated changes,
848
+ // we need our own stream, so we know to should re-render the data.
849
+ this._internalPageChanges.next();
850
+ }
851
+ }
852
+ });
853
+ }
854
+ /**
855
+ * Used by the CuteTable. Called when it connects to the data source.
856
+ */
857
+ connect() {
858
+ if (!this._renderChangesSubscription) {
859
+ this._updateChangeSubscription();
860
+ }
861
+ return this._renderData;
862
+ }
863
+ /**
864
+ * Used by the CuteTable. Called when it disconnects from the data source.
865
+ */
866
+ disconnect() {
867
+ this._renderChangesSubscription?.unsubscribe();
868
+ this._renderChangesSubscription = null;
869
+ }
870
+ }
871
+
872
+ /**
873
+ * @license Apache-2.0
874
+ *
875
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
876
+ *
877
+ * You may not use this file except in compliance with the License
878
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
879
+ *
880
+ * This code is a modification of the `@angular/material` original
881
+ * code licensed under MIT-style License (https://angular.dev/license).
882
+ */
883
+ /**
884
+ * Column that simply shows text content for the header and row cells. Assumes that the table
885
+ * is using the native table implementation (`<table>`).
886
+ *
887
+ * By default, the name of this column will be the header text and data property accessor.
888
+ * The header text can be overridden with the `headerText` input. Cell values can be overridden with
889
+ * the `dataAccessor` input. Change the text justification to the start or end using the `justify`
890
+ * input.
891
+ */
892
+ class CuteTextColumn extends CdkTextColumn {
893
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTextColumn, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
894
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: CuteTextColumn, isStandalone: true, selector: "cute-text-column", usesInheritance: true, ngImport: i0, template: `
895
+ <ng-container cuteColumnDef>
896
+ <th cute-header-cell *cuteHeaderCellDef [style.text-align]="justify">
897
+ {{headerText}}
898
+ </th>
899
+ <td cute-cell *cuteCellDef="let data" [style.text-align]="justify">
900
+ {{dataAccessor(data, name)}}
901
+ </td>
902
+ </ng-container>
903
+ `, isInline: true, dependencies: [{ kind: "directive", type: CuteColumnDef, selector: "[cuteColumnDef]", inputs: ["sticky", "cuteColumnDef"] }, { kind: "directive", type: CuteHeaderCellDef, selector: "[cuteHeaderCellDef]" }, { kind: "directive", type: CuteHeaderCell, selector: "cute-header-cell, th[cute-header-cell]", inputs: ["color"] }, { kind: "directive", type: CuteCellDef, selector: "[cuteCellDef]" }, { kind: "directive", type: CuteCell, selector: "cute-cell, td[cute-cell]", inputs: ["color", "active"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
904
+ }
905
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTextColumn, decorators: [{
906
+ type: Component,
907
+ args: [{
908
+ selector: 'cute-text-column',
909
+ template: `
910
+ <ng-container cuteColumnDef>
911
+ <th cute-header-cell *cuteHeaderCellDef [style.text-align]="justify">
912
+ {{headerText}}
913
+ </th>
914
+ <td cute-cell *cuteCellDef="let data" [style.text-align]="justify">
915
+ {{dataAccessor(data, name)}}
916
+ </td>
917
+ </ng-container>
918
+ `,
919
+ encapsulation: ViewEncapsulation.None,
920
+ // Change detection is intentionally not set to OnPush. This component's template will be provided
921
+ // to the table to be inserted into its view. This is problematic when change detection runs since
922
+ // the bindings in this template will be evaluated _after_ the table's view is evaluated, which
923
+ // means the template in the table's view will not have the updated value (and in fact will cause
924
+ // an ExpressionChangedAfterItHasBeenCheckedError).
925
+ // tslint:disable-next-line:validate-decorators
926
+ changeDetection: ChangeDetectionStrategy.Default,
927
+ imports: [CuteColumnDef, CuteHeaderCellDef, CuteHeaderCell, CuteCellDef, CuteCell]
928
+ }]
929
+ }] });
930
+
931
+ /**
932
+ * @license Apache-2.0
933
+ *
934
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
935
+ *
936
+ * You may not use this file except in compliance with the License
937
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
938
+ */
939
+ const TYPES = [
940
+ // Table
941
+ CuteTable,
942
+ CuteRecycleRows,
943
+ // Template defs
944
+ CuteHeaderCellDef,
945
+ CuteHeaderRowDef,
946
+ CuteColumnDef,
947
+ CuteCellDef,
948
+ CuteRowDef,
949
+ CuteFooterCellDef,
950
+ CuteFooterRowDef,
951
+ // Cell directives
952
+ CuteHeaderCell,
953
+ CuteCell,
954
+ CuteFooterCell,
955
+ // Row directives
956
+ CuteHeaderRow,
957
+ CuteRow,
958
+ CuteFooterRow,
959
+ CuteNoDataRow,
960
+ CuteTextColumn,
961
+ ];
962
+ class CuteTableModule {
963
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
964
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: CuteTableModule, imports: [CommonModule, CdkTableModule,
965
+ // Table
966
+ CuteTable,
967
+ CuteRecycleRows,
968
+ // Template defs
969
+ CuteHeaderCellDef,
970
+ CuteHeaderRowDef,
971
+ CuteColumnDef,
972
+ CuteCellDef,
973
+ CuteRowDef,
974
+ CuteFooterCellDef,
975
+ CuteFooterRowDef,
976
+ // Cell directives
977
+ CuteHeaderCell,
978
+ CuteCell,
979
+ CuteFooterCell,
980
+ // Row directives
981
+ CuteHeaderRow,
982
+ CuteRow,
983
+ CuteFooterRow,
984
+ CuteNoDataRow,
985
+ CuteTextColumn], exports: [
986
+ // Table
987
+ CuteTable,
988
+ CuteRecycleRows,
989
+ // Template defs
990
+ CuteHeaderCellDef,
991
+ CuteHeaderRowDef,
992
+ CuteColumnDef,
993
+ CuteCellDef,
994
+ CuteRowDef,
995
+ CuteFooterCellDef,
996
+ CuteFooterRowDef,
997
+ // Cell directives
998
+ CuteHeaderCell,
999
+ CuteCell,
1000
+ CuteFooterCell,
1001
+ // Row directives
1002
+ CuteHeaderRow,
1003
+ CuteRow,
1004
+ CuteFooterRow,
1005
+ CuteNoDataRow,
1006
+ CuteTextColumn] }); }
1007
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTableModule, imports: [CommonModule, CdkTableModule] }); }
1008
+ }
1009
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteTableModule, decorators: [{
1010
+ type: NgModule,
1011
+ args: [{
1012
+ imports: [CommonModule, CdkTableModule, ...TYPES],
1013
+ exports: TYPES,
1014
+ declarations: [],
1015
+ }]
1016
+ }] });
1017
+
1018
+ /**
1019
+ * Generated bundle index. Do not edit.
1020
+ */
1021
+
1022
+ export { CUTE_TABLE, CuteCell, CuteCellDef, CuteColumnDef, CuteFooterCell, CuteFooterCellDef, CuteFooterRow, CuteFooterRowDef, CuteHeaderCell, CuteHeaderCellDef, CuteHeaderRow, CuteHeaderRowDef, CuteNoDataRow, CuteRecycleRows, CuteRow, CuteRowDef, CuteTable, CuteTableDataSource, CuteTableModule, CuteTextColumn };
1023
+ //# sourceMappingURL=cute-widgets-base-table.mjs.map