@one-paragon/angular-utilities 2.8.2 → 2.8.4

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 (203) hide show
  1. package/karma.conf.js +43 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +15 -27
  4. package/src/action-state/action-state-spinner/action-state-spinner.component.css +16 -0
  5. package/src/action-state/action-state-spinner/action-state-spinner.component.html +7 -0
  6. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +25 -0
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +26 -0
  8. package/src/action-state/action-state-ui/action-state-ui.module.ts +13 -0
  9. package/src/action-state/index.ts +8 -0
  10. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +14 -0
  11. package/src/action-state/ngrx.ts +69 -0
  12. package/src/http-request-state/RequestStateFactory.ts +56 -0
  13. package/src/http-request-state/RequestStateStore.ts +360 -0
  14. package/src/http-request-state/deprecated.ts +20 -0
  15. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +29 -0
  16. package/src/http-request-state/directives/http-error-state-directive.ts +21 -0
  17. package/src/http-request-state/directives/http-inProgress-state-directive.ts +19 -0
  18. package/src/http-request-state/directives/http-notStarted-state-directive.ts +19 -0
  19. package/src/http-request-state/directives/http-success-state-directive.ts +29 -0
  20. package/src/http-request-state/directives/index.ts +5 -0
  21. package/src/http-request-state/directives/request-state-directive.spec.ts +73 -0
  22. package/src/http-request-state/directives/request-state-directive.ts +78 -0
  23. package/src/http-request-state/documentation/CREATE-REQUESTOR.md +667 -0
  24. package/src/http-request-state/documentation/README.md +191 -0
  25. package/src/http-request-state/documentation/REQUEST-STATE-STORE-CONFIG.md +648 -0
  26. package/src/http-request-state/documentation/REQUESTOR.md +616 -0
  27. package/src/http-request-state/helpers.ts +30 -0
  28. package/src/http-request-state/http-state-module.ts +23 -0
  29. package/src/http-request-state/index.ts +7 -0
  30. package/src/http-request-state/models/view-context.ts +18 -0
  31. package/src/http-request-state/observable.spec.ts +43 -0
  32. package/src/http-request-state/request-state.ts +66 -0
  33. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  34. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  35. package/src/http-request-state/rxjs/index.ts +4 -0
  36. package/src/http-request-state/rxjs/tapError.ts +16 -0
  37. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  38. package/src/http-request-state/strategies.spec.ts +42 -0
  39. package/src/http-request-state/types.ts +54 -0
  40. package/src/ngrx/actionable-selector.ts +189 -0
  41. package/src/ngrx/index.ts +1 -0
  42. package/src/public-api.ts +40 -0
  43. package/src/rxjs/defaultShareReplay.ts +8 -0
  44. package/src/rxjs/index.ts +5 -0
  45. package/src/rxjs/mapError.ts +8 -0
  46. package/src/rxjs/rxjs-operators.ts +130 -0
  47. package/src/rxjs/subjectifier.ts +17 -0
  48. package/src/rxjs/subscriber.directive.ts +57 -0
  49. package/src/specs/clickSubject.spec.ts +99 -0
  50. package/src/specs/dialog.spec.ts +101 -0
  51. package/src/specs/toggleGroupDirective.spec.ts +229 -0
  52. package/src/table-builder/classes/DefaultSettings.ts +11 -0
  53. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  54. package/src/table-builder/classes/TableBuilderConfig.ts +49 -0
  55. package/src/table-builder/classes/TableBuilderDataSource.ts +64 -0
  56. package/src/table-builder/classes/TableState.ts +96 -0
  57. package/src/table-builder/classes/data-store.ts +10 -0
  58. package/src/table-builder/classes/display-col.ts +5 -0
  59. package/src/table-builder/classes/filter-info.ts +129 -0
  60. package/src/table-builder/classes/table-builder-general-settings.ts +233 -0
  61. package/src/table-builder/classes/table-builder.ts +105 -0
  62. package/src/table-builder/classes/table-store.helpers.ts +109 -0
  63. package/src/table-builder/classes/table-store.ts +540 -0
  64. package/src/table-builder/components/array-column.component.ts +34 -0
  65. package/src/table-builder/components/column-builder/column-builder.component.html +109 -0
  66. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  67. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +49 -0
  68. package/src/table-builder/components/column-builder/column-builder.component.ts +130 -0
  69. package/src/table-builder/components/column-builder/column-helpers.ts +54 -0
  70. package/src/table-builder/components/column-header-menu/column-header-menu.component.html +128 -0
  71. package/src/table-builder/components/column-header-menu/column-header-menu.component.scss +97 -0
  72. package/src/table-builder/components/column-header-menu/column-header-menu.component.ts +113 -0
  73. package/src/table-builder/components/date-filter/date-filter.component.html +39 -0
  74. package/src/table-builder/components/date-filter/date-filter.component.ts +33 -0
  75. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +25 -0
  76. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +33 -0
  77. package/src/table-builder/components/filter/filter.component.html +120 -0
  78. package/src/table-builder/components/filter/filter.component.scss +60 -0
  79. package/src/table-builder/components/filter/filter.component.spec.ts +86 -0
  80. package/src/table-builder/components/filter/filter.component.ts +73 -0
  81. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +171 -0
  82. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +60 -0
  83. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  84. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +44 -0
  85. package/src/table-builder/components/generic-table/generic-table.component.html +140 -0
  86. package/src/table-builder/components/generic-table/generic-table.component.scss +45 -0
  87. package/src/table-builder/components/generic-table/generic-table.component.ts +531 -0
  88. package/src/table-builder/components/generic-table/paginator.component.ts +125 -0
  89. package/src/table-builder/components/group-by-list/group-by-list.component.css +24 -0
  90. package/src/table-builder/components/group-by-list/group-by-list.component.html +21 -0
  91. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  92. package/src/table-builder/components/group-by-list/group-by-list.component.ts +26 -0
  93. package/src/table-builder/components/in-filter/in-filter.component.css +22 -0
  94. package/src/table-builder/components/in-filter/in-filter.component.html +38 -0
  95. package/src/table-builder/components/in-filter/in-filter.component.ts +66 -0
  96. package/src/table-builder/components/index.ts +9 -0
  97. package/src/table-builder/components/initialization-component/initialization.component.html +78 -0
  98. package/src/table-builder/components/initialization-component/initialization.component.ts +28 -0
  99. package/src/table-builder/components/link-column.component.ts +42 -0
  100. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  101. package/src/table-builder/components/number-filter/number-filter.component.html +32 -0
  102. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  103. package/src/table-builder/components/number-filter/number-filter.component.ts +34 -0
  104. package/src/table-builder/components/profiles-menu/profiles-menu.component.html +77 -0
  105. package/src/table-builder/components/profiles-menu/profiles-menu.component.scss +126 -0
  106. package/src/table-builder/components/profiles-menu/profiles-menu.component.spec.ts +23 -0
  107. package/src/table-builder/components/profiles-menu/profiles-menu.component.ts +64 -0
  108. package/src/table-builder/components/reset-menu/reset-menu.component.css +3 -0
  109. package/src/table-builder/components/reset-menu/reset-menu.component.html +10 -0
  110. package/src/table-builder/components/reset-menu/reset-menu.component.ts +87 -0
  111. package/src/table-builder/components/scroll-strategy.ts +139 -0
  112. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +57 -0
  113. package/src/table-builder/components/sort-menu/sort-menu.component.html +115 -0
  114. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  115. package/src/table-builder/components/sort-menu/sort-menu.component.ts +88 -0
  116. package/src/table-builder/components/table-container/table-container.component.html +94 -0
  117. package/src/table-builder/components/table-container/table-container.component.scss +60 -0
  118. package/src/table-builder/components/table-container/table-container.component.ts +467 -0
  119. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +113 -0
  120. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +125 -0
  121. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +172 -0
  122. package/src/table-builder/components/table-container/table-container.helpers/meta-data.helpers.ts +19 -0
  123. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +47 -0
  124. package/src/table-builder/components/table-container/tableProps.ts +21 -0
  125. package/src/table-builder/components/table-container/virtual-scroll-container.ts +216 -0
  126. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +42 -0
  127. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +47 -0
  128. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +40 -0
  129. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +11 -0
  130. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +85 -0
  131. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +35 -0
  132. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +13 -0
  133. package/src/table-builder/components/table-header-menu/table-header-menu.component.css +21 -0
  134. package/src/table-builder/components/table-header-menu/table-header-menu.component.html +48 -0
  135. package/src/table-builder/components/table-header-menu/table-header-menu.component.ts +36 -0
  136. package/src/table-builder/directives/custom-cell-directive.ts +63 -0
  137. package/src/table-builder/directives/custom-header-directive.ts +16 -0
  138. package/src/table-builder/directives/group-row-directive.ts +91 -0
  139. package/src/table-builder/directives/index.ts +8 -0
  140. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  141. package/src/table-builder/directives/multi-sort.directive.ts +58 -0
  142. package/src/table-builder/directives/resize-column.directive.ts +107 -0
  143. package/src/table-builder/directives/table-wrapper.directive.ts +13 -0
  144. package/src/table-builder/directives/tb-filter.directive.ts +376 -0
  145. package/src/table-builder/documentation/table-builder/CUSTOM-CELL.md +568 -0
  146. package/src/table-builder/documentation/table-builder/CUSTOM-GROUP-ROW.md +356 -0
  147. package/src/table-builder/documentation/table-builder/METADATA-DOCUMENTATION.md +517 -0
  148. package/src/table-builder/documentation/table-builder/STYLER-STYLE.md +228 -0
  149. package/src/table-builder/documentation/table-builder/TABLE-BUILDER-CONFIG.md +325 -0
  150. package/src/table-builder/documentation/table-builder/TABLE-BUILDER-SETTINGS.md +515 -0
  151. package/src/table-builder/documentation/table-builder/TABLE-BUILDER.md +430 -0
  152. package/src/table-builder/documentation/table-builder/TABLE-CONTAINER.md +628 -0
  153. package/src/table-builder/enums/filterTypes.ts +39 -0
  154. package/src/table-builder/functions/boolean-filter-function.ts +12 -0
  155. package/src/table-builder/functions/date-filter-function.ts +85 -0
  156. package/src/table-builder/functions/download-data.ts +11 -0
  157. package/src/table-builder/functions/null-filter-function.ts +9 -0
  158. package/src/table-builder/functions/number-filter-function.ts +47 -0
  159. package/src/table-builder/functions/sort-data-function.ts +80 -0
  160. package/src/table-builder/functions/string-filter-function.ts +59 -0
  161. package/src/table-builder/interfaces/ColumnInfo.ts +9 -0
  162. package/src/table-builder/interfaces/dictionary.ts +3 -0
  163. package/src/table-builder/interfaces/meta-data.ts +279 -0
  164. package/src/table-builder/ngrx/tableBuilderStateStore.ts +203 -0
  165. package/src/table-builder/pipes/column-total.pipe.ts +16 -0
  166. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  167. package/src/table-builder/pipes/format-filter-value.pipe.ts +71 -0
  168. package/src/table-builder/pipes/key-display.ts +13 -0
  169. package/src/table-builder/services/all-values-filter-creator.service.ts +92 -0
  170. package/src/table-builder/services/export-to-csv.service.ts +117 -0
  171. package/src/table-builder/services/link-creator.service.ts +98 -0
  172. package/src/table-builder/services/table-template-service.ts +47 -0
  173. package/src/table-builder/services/transform-creator.ts +90 -0
  174. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  175. package/src/table-builder/styles/collapser.styles.scss +16 -0
  176. package/src/table-builder/table-builder.module.ts +42 -0
  177. package/src/table-builder/types/group-types.ts +42 -0
  178. package/src/table-builder/types/index.ts +1 -0
  179. package/src/test.ts +17 -0
  180. package/src/utilities/array-helpers.ts +13 -0
  181. package/src/utilities/directives/auto-focus.directive.ts +20 -0
  182. package/src/utilities/directives/clickEmitterDirective.ts +15 -0
  183. package/src/utilities/directives/clickSubject.ts +19 -0
  184. package/src/utilities/directives/conditional-classes.directive.ts +36 -0
  185. package/src/utilities/directives/dialog-service.ts +19 -0
  186. package/src/utilities/directives/dialog.ts +174 -0
  187. package/src/utilities/directives/mat-toggle-group-directive.ts +60 -0
  188. package/src/utilities/directives/prevent-enter.directive.ts +12 -0
  189. package/src/utilities/directives/stop-propagation.directive.ts +19 -0
  190. package/src/utilities/directives/styler.ts +45 -0
  191. package/src/utilities/directives/trim-whitespace.directive.ts +20 -0
  192. package/src/utilities/index.ts +22 -0
  193. package/src/utilities/module.ts +53 -0
  194. package/src/utilities/pipes/function.pipe.ts +21 -0
  195. package/src/utilities/pipes/phone.pipe.ts +20 -0
  196. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  197. package/src/utilities/pipes/space-case.pipes.ts +29 -0
  198. package/tsconfig.lib.json +20 -0
  199. package/tsconfig.lib.prod.json +10 -0
  200. package/tsconfig.spec.json +17 -0
  201. package/fesm2022/one-paragon-angular-utilities.mjs +0 -7328
  202. package/fesm2022/one-paragon-angular-utilities.mjs.map +0 -1
  203. package/types/one-paragon-angular-utilities.d.ts +0 -2197
@@ -0,0 +1,430 @@
1
+ # TableBuilder Class Documentation
2
+
3
+ ## Overview
4
+
5
+ `TableBuilder` is the core class that configures and manages data for the Table Builder component. It accepts data, metadata (column definitions), and settings to create a fully-configured table that can be passed to the `tb-table-container` component.
6
+
7
+ ## Basic Usage
8
+
9
+ ```typescript
10
+ import { TableBuilder, FieldType } from 'angular-utilities';
11
+
12
+ interface User {
13
+ id: number;
14
+ name: string;
15
+ email: string;
16
+ }
17
+
18
+ const data: User[] = [
19
+ { id: 1, name: 'John Doe', email: 'john@example.com' },
20
+ { id: 2, name: 'Jane Smith', email: 'jane@example.com' }
21
+ ];
22
+
23
+ // Simple usage with just data (auto-generates metadata)
24
+ const tableBuilder = new TableBuilder(data);
25
+
26
+ // With metadata
27
+ const metaData = [
28
+ { key: 'id', fieldType: FieldType.Number, displayName: 'ID' },
29
+ { key: 'name', fieldType: FieldType.String, displayName: 'Name' },
30
+ { key: 'email', fieldType: FieldType.String, displayName: 'Email' }
31
+ ];
32
+ const tableBuilder = new TableBuilder(data, metaData);
33
+
34
+ // With settings
35
+ const settings = {
36
+ tableSettings: {
37
+ tableId: 'users-table',
38
+ trackBy: 'id',
39
+ usePaginator: true
40
+ }
41
+ };
42
+ const tableBuilder = new TableBuilder(data, metaData, settings);
43
+ ```
44
+
45
+ ## Constructor
46
+
47
+ ```typescript
48
+ constructor(
49
+ data: T[] | Observable<T[]> | Signal<T[]>,
50
+ metaData?: MetaData<T>[] | Observable<MetaData<T>[]> | Signal<MetaData<T>[]>,
51
+ settings?: TableBuilderSettings<T> | Observable<TableBuilderSettings<T>> | Signal<TableBuilderSettings<T>>
52
+ )
53
+ ```
54
+
55
+ ### Parameters
56
+
57
+ #### `data` (required)
58
+ - **Type**: `T[]` | `Observable<T[]>` | `Signal<T[]>`
59
+ - **Description**: The data to display in the table. Can be provided as:
60
+ - **Array**: Static data
61
+ - **Observable**: Reactive data that updates automatically
62
+ - **Signal**: Angular signal for reactive data
63
+
64
+ **Examples:**
65
+ ```typescript
66
+ // Static array
67
+ const data = [{ id: 1, name: 'John' }];
68
+ const tableBuilder = new TableBuilder(data);
69
+
70
+ // Observable
71
+ const data$ = this.userService.getUsers();
72
+ const tableBuilder = new TableBuilder(data$);
73
+
74
+ // Signal
75
+ const data = signal([{ id: 1, name: 'John' }]);
76
+ const tableBuilder = new TableBuilder(data);
77
+ ```
78
+
79
+ #### `metaData` (optional)
80
+ - **Type**: `MetaData<T>[]` | `Observable<MetaData<T>[]>` | `Signal<MetaData<T>[]>` | `undefined`
81
+ - **Default**: Auto-generated from first data item
82
+ - **Description**: Column definitions that specify how each property should be displayed, sorted, and filtered. If not provided, metadata is automatically generated from the keys of the first data item with `FieldType.Unknown`.
83
+ - **Related Documentation**: See [MetaData Documentation](METADATA-DOCUMENTATION.md) for detailed column configuration options.
84
+
85
+ **Examples:**
86
+ ```typescript
87
+ // Static metadata
88
+ const metaData = [
89
+ { key: 'id', fieldType: FieldType.Number, displayName: 'ID', width: '80px' },
90
+ { key: 'name', fieldType: FieldType.String, displayName: 'Name' },
91
+ { key: 'createdAt', fieldType: FieldType.Date, displayName: 'Created' }
92
+ ];
93
+
94
+ // Observable metadata (useful for dynamic columns)
95
+ const metaData$ = this.configService.getColumnConfig();
96
+
97
+ // Signal metadata
98
+ const metaData = signal([...]);
99
+ ```
100
+
101
+ #### `settings` (optional)
102
+ - **Type**: `TableBuilderSettings<T>` | `Observable<TableBuilderSettings<T>>` | `Signal<TableBuilderSettings<T>>`
103
+ - **Default**: `new GeneralTableSettings()`
104
+ - **Description**: Configuration object that controls table appearance and behavior including headers, footers, pagination, virtual scrolling, and more.
105
+ - **Related Documentation**: See [TableBuilder Settings](TABLE-BUILDER-SETTINGS.md) for all available settings.
106
+
107
+ **Examples:**
108
+ ```typescript
109
+ // Static settings
110
+ const settings = {
111
+ headerSettings: {
112
+ hideExport: false,
113
+ title: { text: 'Users Table', level: 2 }
114
+ },
115
+ tableSettings: {
116
+ tableId: 'users-table',
117
+ trackBy: 'id',
118
+ usePaginator: true,
119
+ paginatorSettings: {
120
+ pageSize: 25
121
+ }
122
+ }
123
+ };
124
+
125
+ // Observable settings
126
+ const settings$ = this.configService.getTableSettings();
127
+
128
+ // Signal settings
129
+ const settings = signal({ ... });
130
+ ```
131
+
132
+ ## Properties
133
+
134
+ ### `container` (readonly)
135
+ - **Type**: `Signal<TableContainerComponent | undefined>`
136
+ - **Description**: Provides access to the `TableContainerComponent` instance once the TableBuilder is bound to a table. This is set automatically when the TableBuilder is passed to a `tb-table-container` component. Use this to programmatically control the table.
137
+
138
+ **Example:**
139
+ ```typescript
140
+ @Component({
141
+ selector: 'app-users',
142
+ template: `
143
+ <tb-table-container [tableBuilder]="tableBuilder" />
144
+ <button (click)="exportData()">Export</button>
145
+ `
146
+ })
147
+ export class UsersComponent {
148
+ tableBuilder = new TableBuilder(this.data, this.metaData);
149
+
150
+ exportData() {
151
+ const container = this.tableBuilder.container();
152
+ if (container) {
153
+ container.exportToCsv();
154
+ }
155
+ }
156
+
157
+ expandAllGroups() {
158
+ this.tableBuilder.container()?.expandAllGroups();
159
+ }
160
+
161
+ clearSelections() {
162
+ this.tableBuilder.container()?.clearSelections();
163
+ }
164
+ }
165
+ ```
166
+
167
+ ## Reactive Data Patterns
168
+
169
+ The TableBuilder supports reactive data patterns through Observables and Signals:
170
+
171
+ ### Observable Pattern
172
+
173
+ ```typescript
174
+ import { Observable } from 'rxjs';
175
+
176
+ @Component({
177
+ selector: 'app-users',
178
+ template: `<tb-table-container [tableBuilder]="tableBuilder" />`
179
+ })
180
+ export class UsersComponent {
181
+ // Data from HTTP service
182
+ users$ = this.userService.getUsers();
183
+
184
+ // Metadata from config service
185
+ metaData$ = this.configService.getColumnConfig();
186
+
187
+ tableBuilder = new TableBuilder(this.users$, this.metaData$);
188
+
189
+ constructor(
190
+ private userService: UserService,
191
+ private configService: ConfigService
192
+ ) {}
193
+ }
194
+ ```
195
+
196
+ ### Signal Pattern
197
+
198
+ ```typescript
199
+ import { signal, computed } from '@angular/core';
200
+
201
+ @Component({
202
+ selector: 'app-users',
203
+ template: `<tb-table-container [tableBuilder]="tableBuilder" />`
204
+ })
205
+ export class UsersComponent {
206
+ users = signal<User[]>([]);
207
+
208
+ metaData = signal([
209
+ { key: 'id', fieldType: FieldType.Number, displayName: 'ID' },
210
+ { key: 'name', fieldType: FieldType.String, displayName: 'Name' }
211
+ ]);
212
+
213
+ tableBuilder = new TableBuilder(this.users, this.metaData);
214
+
215
+ ngOnInit() {
216
+ // Update data dynamically
217
+ this.userService.getUsers().subscribe(users => {
218
+ this.users.set(users);
219
+ });
220
+ }
221
+ }
222
+ ```
223
+
224
+ ### Computed Signal Pattern
225
+
226
+ ```typescript
227
+ @Component({
228
+ selector: 'app-filtered-users',
229
+ template: `<tb-table-container [tableBuilder]="tableBuilder" />`
230
+ })
231
+ export class FilteredUsersComponent {
232
+ allUsers = signal<User[]>([]);
233
+ activeFilter = signal<boolean>(true);
234
+
235
+ // Computed data based on filter
236
+ filteredUsers = computed(() =>
237
+ this.allUsers().filter(user =>
238
+ !this.activeFilter() || user.isActive
239
+ )
240
+ );
241
+
242
+ tableBuilder = new TableBuilder(this.filteredUsers);
243
+ }
244
+ ```
245
+
246
+ ## Auto-Generated Metadata
247
+
248
+ When metadata is not provided, TableBuilder automatically generates basic metadata from the first data item:
249
+
250
+ ```typescript
251
+ const data = [
252
+ { id: 1, name: 'John', age: 30 }
253
+ ];
254
+
255
+ const tableBuilder = new TableBuilder(data);
256
+
257
+ // Internally generates:
258
+ // [
259
+ // { key: 'id', fieldType: FieldType.Unknown, order: -1 },
260
+ // { key: 'name', fieldType: FieldType.Unknown, order: -1 },
261
+ // { key: 'age', fieldType: FieldType.Unknown, order: -1 }
262
+ // ]
263
+ ```
264
+
265
+ **Note**: While auto-generation is convenient for quick prototyping, it's recommended to provide explicit metadata for production use to ensure proper typing, sorting, and filtering behavior.
266
+
267
+ ## Complete Example
268
+
269
+ ```typescript
270
+ import { Component, signal } from '@angular/core';
271
+ import { TableBuilder, FieldType } from 'angular-utilities';
272
+ import { TableContainerComponent } from 'angular-utilities';
273
+
274
+ interface User {
275
+ id: number;
276
+ name: string;
277
+ email: string;
278
+ department: string;
279
+ salary: number;
280
+ hireDate: Date;
281
+ isActive: boolean;
282
+ }
283
+
284
+ @Component({
285
+ selector: 'app-users-table',
286
+ standalone: true,
287
+ imports: [TableContainerComponent],
288
+ template: `
289
+ <div class="controls">
290
+ <button (click)="exportData()">Export to CSV</button>
291
+ <button (click)="expandGroups()">Expand All Groups</button>
292
+ <button (click)="collapseGroups()">Collapse All Groups</button>
293
+ </div>
294
+
295
+ <tb-table-container [tableBuilder]="tableBuilder" />
296
+ `
297
+ })
298
+ export class UsersTableComponent {
299
+ users = signal<User[]>([
300
+ {
301
+ id: 1,
302
+ name: 'John Doe',
303
+ email: 'john@example.com',
304
+ department: 'Engineering',
305
+ salary: 95000,
306
+ hireDate: new Date('2020-01-15'),
307
+ isActive: true
308
+ },
309
+ {
310
+ id: 2,
311
+ name: 'Jane Smith',
312
+ email: 'jane@example.com',
313
+ department: 'Marketing',
314
+ salary: 85000,
315
+ hireDate: new Date('2021-03-20'),
316
+ isActive: true
317
+ }
318
+ ]);
319
+
320
+ metaData = [
321
+ {
322
+ key: 'id',
323
+ fieldType: FieldType.Number,
324
+ displayName: 'ID',
325
+ width: '80px'
326
+ },
327
+ {
328
+ key: 'name',
329
+ fieldType: FieldType.String,
330
+ displayName: 'Full Name',
331
+ width: '200px'
332
+ },
333
+ {
334
+ key: 'email',
335
+ fieldType: FieldType.String,
336
+ displayName: 'Email Address'
337
+ },
338
+ {
339
+ key: 'department',
340
+ fieldType: FieldType.String,
341
+ displayName: 'Department',
342
+ width: '150px'
343
+ },
344
+ {
345
+ key: 'salary',
346
+ fieldType: FieldType.Currency,
347
+ displayName: 'Annual Salary',
348
+ width: '120px'
349
+ },
350
+ {
351
+ key: 'hireDate',
352
+ fieldType: FieldType.Date,
353
+ displayName: 'Hire Date',
354
+ width: '120px'
355
+ },
356
+ {
357
+ key: 'isActive',
358
+ fieldType: FieldType.Boolean,
359
+ displayName: 'Active',
360
+ width: '100px'
361
+ }
362
+ ];
363
+
364
+ settings = {
365
+ headerSettings: {
366
+ title: { text: 'Employee Directory', level: 2 },
367
+ hideExport: false
368
+ },
369
+ tableSettings: {
370
+ tableId: 'users-table',
371
+ trackBy: 'id',
372
+ usePaginator: true,
373
+ includeIndexColumn: true,
374
+ includeSelectionColumn: true,
375
+ paginatorSettings: {
376
+ pageSize: 25,
377
+ includeAllInOptions: true
378
+ },
379
+ groupBySettings: [
380
+ { key: 'department', expanded: true }
381
+ ]
382
+ },
383
+ columnHeaderSettings: {
384
+ stickyHeaderRow: true
385
+ }
386
+ };
387
+
388
+ tableBuilder = new TableBuilder(this.users, this.metaData, this.settings);
389
+
390
+ exportData() {
391
+ this.tableBuilder.container()?.exportToCsv();
392
+ }
393
+
394
+ expandGroups() {
395
+ this.tableBuilder.container()?.expandAllGroups();
396
+ }
397
+
398
+ collapseGroups() {
399
+ this.tableBuilder.container()?.collapseAllGroups();
400
+ }
401
+ }
402
+ ```
403
+
404
+ ## Helper Function: CreateTableBuilder
405
+
406
+ For working with observables that emit `ReportDef` objects (which contain both data and metadata):
407
+
408
+ ```typescript
409
+ import { Observable } from 'rxjs';
410
+ import { CreateTableBuilder } from 'angular-utilities';
411
+
412
+ interface ReportDef {
413
+ data: any[];
414
+ metaData: MetaData[];
415
+ }
416
+
417
+ const reportDef$: Observable<ReportDef> = this.reportService.getReport();
418
+ const tableBuilder = CreateTableBuilder(reportDef$);
419
+ ```
420
+
421
+ This helper automatically splits the observable into separate data and metadata streams.
422
+
423
+ ## Related Documentation
424
+
425
+ - [Table Container Component](TABLE-CONTAINER.md) - How to use TableBuilder with the table component
426
+ - [MetaData Documentation](METADATA-DOCUMENTATION.md) - Column configuration
427
+ - [TableBuilder Settings](TABLE-BUILDER-SETTINGS.md) - Table behavior and appearance
428
+ - [TableBuilder Config](TABLE-BUILDER-CONFIG.md) - Global configuration
429
+ - [CustomCell Directive](CUSTOM-CELL.md) - Custom cell templates
430
+ - [CustomGroupRow Directive](CUSTOM-GROUP-ROW.md) - Custom group row templates