@nova-design-system/nova-angular-18 3.16.0 → 3.18.0-beta.0

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.
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ChangeDetectionStrategy, Component, untracked, computed, InjectionToken, inject, reflectComponentType, ViewContainerRef, Injectable, KeyValueDiffers, ChangeDetectorRef, OutputEmitterRef, TemplateRef, Type, Injector, runInInjectionContext, effect, Input, Inject, Directive, signal, input, CUSTOM_ELEMENTS_SCHEMA, HostListener, APP_INITIALIZER, NgModule, ElementRef, ViewChildren } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, Input, Directive, untracked, computed, InjectionToken, inject, reflectComponentType, ViewContainerRef, Injectable, KeyValueDiffers, ChangeDetectorRef, OutputEmitterRef, TemplateRef, Type, Injector, runInInjectionContext, effect, Inject, signal, input, viewChild, ContentChildren, ContentChild, CUSTOM_ELEMENTS_SCHEMA, HostListener, APP_INITIALIZER, NgModule, ElementRef, ViewChildren } from '@angular/core';
3
3
  import { defineCustomElements } from '@nova-design-system/nova-webcomponents/loader';
4
4
  import { __decorate } from 'tslib';
5
5
  import { fromEvent, BehaviorSubject } from 'rxjs';
6
6
  import * as i2 from '@angular/common';
7
7
  import { CommonModule } from '@angular/common';
8
- import { memo, createTable, getCoreRowModel } from '@tanstack/table-core';
8
+ import { memo, createTable, getCoreRowModel, getPaginationRowModel } from '@tanstack/table-core';
9
9
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
10
10
  export * from '@nova-design-system/nova-webcomponents/constants';
11
11
 
@@ -1101,6 +1101,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1101
1101
  standalone: false
1102
1102
  }]
1103
1103
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }] });
1104
+ let NvSplit = class NvSplit {
1105
+ constructor(c, r, z) {
1106
+ this.z = z;
1107
+ c.detach();
1108
+ this.el = r.nativeElement;
1109
+ proxyOutputs(this, this.el, ['sizesChanged']);
1110
+ }
1111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvSplit, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
1112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NvSplit, selector: "nv-split", inputs: { direction: "direction", gutterSize: "gutterSize", minSizes: "minSizes", sizes: "sizes" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1113
+ };
1114
+ NvSplit = __decorate([
1115
+ ProxyCmp({
1116
+ inputs: ['direction', 'gutterSize', 'minSizes', 'sizes'],
1117
+ methods: ['setSizes', 'getSizes', 'collapse', 'destroy']
1118
+ })
1119
+ ], NvSplit);
1120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvSplit, decorators: [{
1121
+ type: Component,
1122
+ args: [{
1123
+ selector: 'nv-split',
1124
+ changeDetection: ChangeDetectionStrategy.OnPush,
1125
+ template: '<ng-content></ng-content>',
1126
+ // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
1127
+ inputs: ['direction', 'gutterSize', 'minSizes', 'sizes'],
1128
+ standalone: false
1129
+ }]
1130
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }] });
1104
1131
  let NvStack = class NvStack {
1105
1132
  constructor(c, r, z) {
1106
1133
  this.z = z;
@@ -1295,6 +1322,7 @@ const DIRECTIVES = [
1295
1322
  NvNotificationcontainer,
1296
1323
  NvPopover,
1297
1324
  NvRow,
1325
+ NvSplit,
1298
1326
  NvStack,
1299
1327
  NvTable,
1300
1328
  NvToggle,
@@ -1303,6 +1331,41 @@ const DIRECTIVES = [
1303
1331
  NvTooltip
1304
1332
  ];
1305
1333
 
1334
+ /**
1335
+ * Directive to mark ng-templates as cell templates for specific fields.
1336
+ *
1337
+ * @example
1338
+ * ```html
1339
+ * <nv-datatable [columns]="columns" [rows]="data">
1340
+ * <ng-template nvDatatableCell="name" let-context>
1341
+ * <div class="font-semibold">{{ context.value }}</div>
1342
+ * </ng-template>
1343
+ *
1344
+ * <ng-template nvDatatableCell="price" let-context>
1345
+ * <span class="font-mono">${{ context.value }}</span>
1346
+ * </ng-template>
1347
+ * </nv-datatable>
1348
+ * ```
1349
+ */
1350
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1351
+ class NvDatatableCellDirective {
1352
+ constructor(template) {
1353
+ this.template = template;
1354
+ }
1355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvDatatableCellDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1356
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: NvDatatableCellDirective, isStandalone: true, selector: "ng-template[nvDatatableCell]", inputs: { nvDatatableCell: "nvDatatableCell" }, ngImport: i0 }); }
1357
+ }
1358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvDatatableCellDirective, decorators: [{
1359
+ type: Directive,
1360
+ args: [{
1361
+ selector: 'ng-template[nvDatatableCell]',
1362
+ standalone: true,
1363
+ }]
1364
+ }], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { nvDatatableCell: [{
1365
+ type: Input,
1366
+ args: [{ required: true }]
1367
+ }] } });
1368
+
1306
1369
  /**
1307
1370
  * Implementation from @tanstack/angular-query
1308
1371
  * {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}
@@ -2034,38 +2097,227 @@ function createAngularTable(options) {
2034
2097
  * Nova Datatable built on TanStack Table (Angular).
2035
2098
  */
2036
2099
  class NvDatatable {
2100
+ /** Public getter for table instance. */
2101
+ table() {
2102
+ return this.tableInstance();
2103
+ }
2037
2104
  constructor() {
2038
2105
  /** Column definitions */
2039
2106
  this.columns = input([]);
2040
2107
  /** Row data */
2041
2108
  this.rows = input([]);
2109
+ /** Optional pagination configuration */
2110
+ this.pagination = input(undefined);
2111
+ /** Should the header stick to the top of the table when scrolling? */
2112
+ this.stickyHeader = input(false);
2113
+ /** Signal to track cell templates array */
2114
+ this.cellTemplatesSignal = signal([]);
2115
+ /** Map of field names to cell templates */
2116
+ this.cellTemplateMap = computed(() => {
2117
+ const map = new Map();
2118
+ this.cellTemplatesSignal().forEach((directive) => {
2119
+ map.set(directive.nvDatatableCell, directive.template);
2120
+ });
2121
+ return map;
2122
+ });
2123
+ /** Pagination state for server mode */
2124
+ this.paginationState = signal({
2125
+ pageIndex: 0,
2126
+ pageSize: this.pagination()?.initialPageSize || 10,
2127
+ });
2128
+ /** Reference to table rows for infinite scroll observer */
2129
+ this.tableRows = viewChild('tableRow');
2130
+ /** Intersection observer for infinite scroll */
2131
+ this.observer = null;
2132
+ /** Helper to check if using infinite scroll */
2133
+ this.isInfiniteScroll = computed(() => this.pagination()?.mode === 'infinite');
2042
2134
  /** Computed table columns with proper typing and filtering. */
2043
- this.tableColumns = computed(() => this.columns()
2044
- .filter((col) => !col.hidden)
2045
- .map((col) => ({
2046
- accessorKey: col.field,
2047
- header: col.headerName || String(col.field),
2048
- size: col.width,
2049
- enableResizing: col.resizable ?? true,
2050
- cell: col.renderCell ??
2051
- ((context) => context.getValue()),
2052
- })));
2135
+ this.tableColumns = computed(() => {
2136
+ const templateMap = this.cellTemplateMap();
2137
+ return this.columns()
2138
+ .filter((col) => !col.hidden)
2139
+ .map((col) => ({
2140
+ accessorKey: col.field,
2141
+ header: col.headerName || String(col.field),
2142
+ size: col.width,
2143
+ enableResizing: col.resizable ?? true,
2144
+ cell: (context) => {
2145
+ const fieldName = String(col.field);
2146
+ const cellTemplate = templateMap.get(fieldName);
2147
+ // Priority: template > renderCell > default
2148
+ if (cellTemplate) {
2149
+ // Return TemplateRef directly - FlexRender will handle it
2150
+ return cellTemplate;
2151
+ }
2152
+ // Fall back to renderCell if provided
2153
+ if (col.renderCell) {
2154
+ return col.renderCell(context);
2155
+ }
2156
+ // Default: just return the value
2157
+ return context.getValue();
2158
+ },
2159
+ }));
2160
+ });
2053
2161
  /** TanStack table instance with Signals */
2054
- this.tableInstance = createAngularTable(() => ({
2055
- data: this.rows(),
2056
- columns: this.tableColumns(),
2057
- getCoreRowModel: getCoreRowModel(),
2058
- }));
2162
+ this.tableInstance = createAngularTable(() => {
2163
+ const paginationConfig = this.pagination();
2164
+ if (!paginationConfig || paginationConfig.mode === 'infinite') {
2165
+ // No pagination or infinite scroll - simple config
2166
+ return {
2167
+ data: this.rows(),
2168
+ columns: this.tableColumns(),
2169
+ getCoreRowModel: getCoreRowModel(),
2170
+ };
2171
+ }
2172
+ else if (paginationConfig.mode === 'client') {
2173
+ // Client-side pagination
2174
+ return {
2175
+ data: this.rows(),
2176
+ columns: this.tableColumns(),
2177
+ getCoreRowModel: getCoreRowModel(),
2178
+ getPaginationRowModel: getPaginationRowModel(),
2179
+ initialState: {
2180
+ pagination: {
2181
+ pageIndex: 0,
2182
+ pageSize: paginationConfig.initialPageSize || 10,
2183
+ },
2184
+ },
2185
+ };
2186
+ }
2187
+ else {
2188
+ // Server-side pagination
2189
+ const pageSize = this.paginationState().pageSize;
2190
+ return {
2191
+ data: this.rows(),
2192
+ columns: this.tableColumns(),
2193
+ getCoreRowModel: getCoreRowModel(),
2194
+ manualPagination: true,
2195
+ pageCount: paginationConfig.totalPageCount !== undefined
2196
+ ? paginationConfig.totalPageCount
2197
+ : paginationConfig.totalRowCount !== undefined
2198
+ ? Math.ceil(paginationConfig.totalRowCount / pageSize)
2199
+ : -1,
2200
+ state: {
2201
+ pagination: this.paginationState(),
2202
+ },
2203
+ onPaginationChange: (updaterOrValue) => {
2204
+ if (typeof updaterOrValue === 'function') {
2205
+ this.paginationState.set(updaterOrValue(this.paginationState()));
2206
+ }
2207
+ else {
2208
+ this.paginationState.set(updaterOrValue);
2209
+ }
2210
+ },
2211
+ };
2212
+ }
2213
+ });
2214
+ /** Build pagination API for template */
2215
+ this.paginationAPI = computed(() => {
2216
+ const paginationConfig = this.pagination();
2217
+ if (!paginationConfig) {
2218
+ return null;
2219
+ }
2220
+ const table = this.table();
2221
+ const tablePaginationState = table.getState().pagination;
2222
+ const pageCount = table.getPageCount();
2223
+ const rowCount = paginationConfig.mode === 'server'
2224
+ ? paginationConfig.totalRowCount || this.rows().length
2225
+ : this.rows().length;
2226
+ return {
2227
+ pageIndex: tablePaginationState.pageIndex,
2228
+ pageSize: tablePaginationState.pageSize,
2229
+ pageCount,
2230
+ rowCount,
2231
+ firstPage: () => table.setPageIndex(0),
2232
+ previousPage: () => table.previousPage(),
2233
+ nextPage: () => table.nextPage(),
2234
+ lastPage: () => table.setPageIndex(pageCount - 1),
2235
+ setPageIndex: (index) => table.setPageIndex(index),
2236
+ setPageSize: (size) => table.setPageSize(size),
2237
+ canPreviousPage: table.getCanPreviousPage(),
2238
+ canNextPage: table.getCanNextPage(),
2239
+ isLoading: paginationConfig.mode === 'infinite'
2240
+ ? paginationConfig.isLoading
2241
+ : undefined,
2242
+ hasMore: paginationConfig.mode === 'infinite'
2243
+ ? paginationConfig.hasMore
2244
+ : undefined,
2245
+ };
2246
+ });
2247
+ // Watch pagination state changes for server mode
2248
+ effect(() => {
2249
+ const paginationConfig = this.pagination();
2250
+ const state = this.paginationState();
2251
+ if (paginationConfig?.mode === 'server' &&
2252
+ paginationConfig.onPaginationChange) {
2253
+ paginationConfig.onPaginationChange({
2254
+ pageIndex: state.pageIndex,
2255
+ pageSize: state.pageSize,
2256
+ });
2257
+ }
2258
+ }, { allowSignalWrites: true });
2259
+ // Set up intersection observer for infinite scroll
2260
+ effect(() => {
2261
+ const paginationConfig = this.pagination();
2262
+ const rows = this.rows(); // Track rows changes
2263
+ // Clean up existing observer
2264
+ if (this.observer) {
2265
+ this.observer.disconnect();
2266
+ this.observer = null;
2267
+ }
2268
+ // Only set up observer for infinite scroll mode
2269
+ if (paginationConfig?.mode !== 'infinite' || rows.length === 0) {
2270
+ return;
2271
+ }
2272
+ // Use setTimeout to ensure DOM is updated
2273
+ setTimeout(() => {
2274
+ const threshold = paginationConfig.loadMoreThreshold || 500;
2275
+ // Find the last row element
2276
+ const tableRowElements = document.querySelectorAll('[data-is-last="true"]');
2277
+ const lastRowElement = tableRowElements[tableRowElements.length - 1];
2278
+ if (!lastRowElement) {
2279
+ return;
2280
+ }
2281
+ this.observer = new IntersectionObserver((entries) => {
2282
+ const entry = entries[0];
2283
+ if (entry.isIntersecting &&
2284
+ paginationConfig.mode === 'infinite' &&
2285
+ paginationConfig.hasMore &&
2286
+ !paginationConfig.isLoading &&
2287
+ paginationConfig.onLoadMore) {
2288
+ paginationConfig.onLoadMore();
2289
+ }
2290
+ }, {
2291
+ rootMargin: `${threshold}px`,
2292
+ root: null,
2293
+ });
2294
+ this.observer.observe(lastRowElement);
2295
+ }, 0);
2296
+ }, { allowSignalWrites: true });
2059
2297
  }
2060
- /** Public getter for table instance. */
2061
- table() {
2062
- return this.tableInstance();
2298
+ ngAfterViewInit() {
2299
+ // Sync cell templates QueryList to signal
2300
+ if (this.cellTemplates) {
2301
+ this.cellTemplatesSignal.set(this.cellTemplates.toArray());
2302
+ // Subscribe to changes in the QueryList
2303
+ this.cellTemplates.changes.subscribe(() => {
2304
+ if (this.cellTemplates) {
2305
+ this.cellTemplatesSignal.set(this.cellTemplates.toArray());
2306
+ }
2307
+ });
2308
+ }
2309
+ }
2310
+ ngOnDestroy() {
2311
+ if (this.observer) {
2312
+ this.observer.disconnect();
2313
+ this.observer = null;
2314
+ }
2063
2315
  }
2064
2316
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvDatatable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2065
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
2317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "paginationTemplate", first: true, predicate: ["paginationTemplate"], descendants: true, read: TemplateRef }, { propertyName: "cellTemplates", predicate: NvDatatableCellDirective }], viewQueries: [{ propertyName: "tableRows", first: true, predicate: ["tableRow"], descendants: true, isSignal: true }], ngImport: i0, template: `
2066
2318
  <nv-table>
2067
2319
  <table>
2068
- <thead>
2320
+ <thead [attr.data-sticky-top]="stickyHeader() ? 'true' : null">
2069
2321
  @for (headerGroup of table().getHeaderGroups(); track headerGroup.id)
2070
2322
  {
2071
2323
  <tr>
@@ -2091,14 +2343,19 @@ class NvDatatable {
2091
2343
  </thead>
2092
2344
 
2093
2345
  <tbody>
2094
- @for (row of table().getRowModel().rows; track row.id) {
2095
- <tr [attr.data-testid]="'datatable-row-' + row.id">
2346
+ @for (row of table().getRowModel().rows; track row.id; let i = $index)
2347
+ {
2348
+ <tr
2349
+ [attr.data-testid]="'datatable-row-' + row.id"
2350
+ #tableRow
2351
+ [attr.data-is-last]="
2352
+ isInfiniteScroll() && i === table().getRowModel().rows.length - 1
2353
+ ? 'true'
2354
+ : null
2355
+ "
2356
+ >
2096
2357
  @for (cell of row.getVisibleCells(); track cell.id) {
2097
- <td
2098
- [attr.data-testid]="'datatable-cell-' + cell.id"
2099
- style="padding: 8px; border-bottom: 1px solid #eee;"
2100
- >
2101
- <!-- Let FlexRender handle strings vs TemplateRef -->
2358
+ <td [attr.data-testid]="'datatable-cell-' + cell.id">
2102
2359
  <ng-container
2103
2360
  *flexRender="
2104
2361
  cell.column.columnDef.cell;
@@ -2115,7 +2372,17 @@ class NvDatatable {
2115
2372
  </tbody>
2116
2373
  </table>
2117
2374
  </nv-table>
2118
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: FlexRenderDirective, selector: "[flexRender]", inputs: ["flexRender", "flexRenderProps", "flexRenderInjector"] }] }); }
2375
+
2376
+ <!-- Render pagination if configured -->
2377
+ @if (paginationAPI()) {
2378
+ <ng-container
2379
+ *ngTemplateOutlet="
2380
+ paginationTemplate || null;
2381
+ context: { $implicit: paginationAPI() }
2382
+ "
2383
+ ></ng-container>
2384
+ }
2385
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FlexRenderDirective, selector: "[flexRender]", inputs: ["flexRender", "flexRenderProps", "flexRenderInjector"] }] }); }
2119
2386
  }
2120
2387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvDatatable, decorators: [{
2121
2388
  type: Component,
@@ -2127,7 +2394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2127
2394
  template: `
2128
2395
  <nv-table>
2129
2396
  <table>
2130
- <thead>
2397
+ <thead [attr.data-sticky-top]="stickyHeader() ? 'true' : null">
2131
2398
  @for (headerGroup of table().getHeaderGroups(); track headerGroup.id)
2132
2399
  {
2133
2400
  <tr>
@@ -2153,14 +2420,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2153
2420
  </thead>
2154
2421
 
2155
2422
  <tbody>
2156
- @for (row of table().getRowModel().rows; track row.id) {
2157
- <tr [attr.data-testid]="'datatable-row-' + row.id">
2423
+ @for (row of table().getRowModel().rows; track row.id; let i = $index)
2424
+ {
2425
+ <tr
2426
+ [attr.data-testid]="'datatable-row-' + row.id"
2427
+ #tableRow
2428
+ [attr.data-is-last]="
2429
+ isInfiniteScroll() && i === table().getRowModel().rows.length - 1
2430
+ ? 'true'
2431
+ : null
2432
+ "
2433
+ >
2158
2434
  @for (cell of row.getVisibleCells(); track cell.id) {
2159
- <td
2160
- [attr.data-testid]="'datatable-cell-' + cell.id"
2161
- style="padding: 8px; border-bottom: 1px solid #eee;"
2162
- >
2163
- <!-- Let FlexRender handle strings vs TemplateRef -->
2435
+ <td [attr.data-testid]="'datatable-cell-' + cell.id">
2164
2436
  <ng-container
2165
2437
  *flexRender="
2166
2438
  cell.column.columnDef.cell;
@@ -2177,9 +2449,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2177
2449
  </tbody>
2178
2450
  </table>
2179
2451
  </nv-table>
2452
+
2453
+ <!-- Render pagination if configured -->
2454
+ @if (paginationAPI()) {
2455
+ <ng-container
2456
+ *ngTemplateOutlet="
2457
+ paginationTemplate || null;
2458
+ context: { $implicit: paginationAPI() }
2459
+ "
2460
+ ></ng-container>
2461
+ }
2180
2462
  `,
2181
2463
  }]
2182
- }] });
2464
+ }], ctorParameters: () => [], propDecorators: { paginationTemplate: [{
2465
+ type: ContentChild,
2466
+ args: ['paginationTemplate', { read: TemplateRef }]
2467
+ }], cellTemplates: [{
2468
+ type: ContentChildren,
2469
+ args: [NvDatatableCellDirective]
2470
+ }] } });
2183
2471
 
2184
2472
  class ValueAccessor {
2185
2473
  constructor(el) {
@@ -2885,6 +3173,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2885
3173
  type: HostListener,
2886
3174
  args: ['openChanged', ['$event']]
2887
3175
  }] } });
3176
+ class NvSplitValueAccessor extends ValueAccessor {
3177
+ constructor(el) {
3178
+ super(el);
3179
+ }
3180
+ handleSizesChanged(event) {
3181
+ this.handleChangeEvent(event.target.sizes);
3182
+ }
3183
+ writeValue(value) {
3184
+ this.el.nativeElement.sizes = this.lastValue = value;
3185
+ }
3186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvSplitValueAccessor, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
3187
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: NvSplitValueAccessor, selector: "nv-split", host: { listeners: { "sizesChanged": "handleSizesChanged($event)" } }, providers: [
3188
+ {
3189
+ provide: NG_VALUE_ACCESSOR,
3190
+ useExisting: NvSplitValueAccessor,
3191
+ multi: true,
3192
+ },
3193
+ ], usesInheritance: true, ngImport: i0 }); }
3194
+ }
3195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvSplitValueAccessor, decorators: [{
3196
+ type: Directive,
3197
+ args: [{
3198
+ selector: 'nv-split',
3199
+ providers: [
3200
+ {
3201
+ provide: NG_VALUE_ACCESSOR,
3202
+ useExisting: NvSplitValueAccessor,
3203
+ multi: true,
3204
+ },
3205
+ ],
3206
+ }]
3207
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { handleSizesChanged: [{
3208
+ type: HostListener,
3209
+ args: ['sizesChanged', ['$event']]
3210
+ }] } });
2888
3211
  class NvToggleValueAccessor extends ValueAccessor {
2889
3212
  constructor(el) {
2890
3213
  super(el);
@@ -2975,6 +3298,7 @@ const VALUE_ACCESSORS = [
2975
3298
  NvFieldtextareaValueAccessor,
2976
3299
  NvNotificationValueAccessor,
2977
3300
  NvPopoverValueAccessor,
3301
+ NvSplitValueAccessor,
2978
3302
  NvToggleValueAccessor,
2979
3303
  NvTogglebuttongroupValueAccessor,
2980
3304
  ];
@@ -2993,7 +3317,7 @@ function provideNovaComponents() {
2993
3317
  }
2994
3318
  class NovaComponentsModule {
2995
3319
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2996
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, declarations: [NvAccordion, NvAccordionItem, NvAlert, NvAvatar, NvBadge, NvBreadcrumb, NvBreadcrumbs, NvButton, NvButtongroup, NvCalendar, NvCol, NvDatagrid, NvDatagridcolumn, NvDialog, NvDialogfooter, NvDialogheader, NvFieldcheckbox, NvFielddate, NvFielddaterange, NvFielddropdown, NvFielddropdownitem, NvFielddropdownitemcheck, NvFieldmultiselect, NvFieldnumber, NvFieldpassword, NvFieldradio, NvFieldselect, NvFieldslider, NvFieldtext, NvFieldtextarea, NvFieldtime, NvIcon, NvIconbutton, NvLoader, NvMenu, NvMenuitem, NvNotification, NvNotificationcontainer, NvPopover, NvRow, NvStack, NvTable, NvToggle, NvTogglebutton, NvTogglebuttongroup, NvTooltip], imports: [NvDatatable], exports: [NvAccordion, NvAccordionItem, NvAlert, NvAvatar, NvBadge, NvBreadcrumb, NvBreadcrumbs, NvButton, NvButtongroup, NvCalendar, NvCol, NvDatagrid, NvDatagridcolumn, NvDialog, NvDialogfooter, NvDialogheader, NvFieldcheckbox, NvFielddate, NvFielddaterange, NvFielddropdown, NvFielddropdownitem, NvFielddropdownitemcheck, NvFieldmultiselect, NvFieldnumber, NvFieldpassword, NvFieldradio, NvFieldselect, NvFieldslider, NvFieldtext, NvFieldtextarea, NvFieldtime, NvIcon, NvIconbutton, NvLoader, NvMenu, NvMenuitem, NvNotification, NvNotificationcontainer, NvPopover, NvRow, NvStack, NvTable, NvToggle, NvTogglebutton, NvTogglebuttongroup, NvTooltip, NvDatatable] }); }
3320
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, declarations: [NvAccordion, NvAccordionItem, NvAlert, NvAvatar, NvBadge, NvBreadcrumb, NvBreadcrumbs, NvButton, NvButtongroup, NvCalendar, NvCol, NvDatagrid, NvDatagridcolumn, NvDialog, NvDialogfooter, NvDialogheader, NvFieldcheckbox, NvFielddate, NvFielddaterange, NvFielddropdown, NvFielddropdownitem, NvFielddropdownitemcheck, NvFieldmultiselect, NvFieldnumber, NvFieldpassword, NvFieldradio, NvFieldselect, NvFieldslider, NvFieldtext, NvFieldtextarea, NvFieldtime, NvIcon, NvIconbutton, NvLoader, NvMenu, NvMenuitem, NvNotification, NvNotificationcontainer, NvPopover, NvRow, NvSplit, NvStack, NvTable, NvToggle, NvTogglebutton, NvTogglebuttongroup, NvTooltip], imports: [NvDatatable], exports: [NvAccordion, NvAccordionItem, NvAlert, NvAvatar, NvBadge, NvBreadcrumb, NvBreadcrumbs, NvButton, NvButtongroup, NvCalendar, NvCol, NvDatagrid, NvDatagridcolumn, NvDialog, NvDialogfooter, NvDialogheader, NvFieldcheckbox, NvFielddate, NvFielddaterange, NvFielddropdown, NvFielddropdownitem, NvFielddropdownitemcheck, NvFieldmultiselect, NvFieldnumber, NvFieldpassword, NvFieldradio, NvFieldselect, NvFieldslider, NvFieldtext, NvFieldtextarea, NvFieldtime, NvIcon, NvIconbutton, NvLoader, NvMenu, NvMenuitem, NvNotification, NvNotificationcontainer, NvPopover, NvRow, NvSplit, NvStack, NvTable, NvToggle, NvTogglebutton, NvTogglebuttongroup, NvTooltip, NvDatatable] }); }
2997
3321
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, providers: [provideNovaComponents()], imports: [NvDatatable] }); }
2998
3322
  }
2999
3323
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, decorators: [{
@@ -3007,7 +3331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3007
3331
  }] });
3008
3332
  class NovaComponentsValueAccessorModule {
3009
3333
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3010
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [NvAccordionValueAccessor, NvAlertValueAccessor, NvCalendarValueAccessor, NvDatagridValueAccessor, NvDialogValueAccessor, NvFieldcheckboxValueAccessor, NvFielddateValueAccessor, NvFielddaterangeValueAccessor, NvFielddropdownValueAccessor, NvFieldmultiselectValueAccessor, NvFieldnumberValueAccessor, NvFieldpasswordValueAccessor, NvFieldradioValueAccessor, NvFieldselectValueAccessor, NvFieldsliderValueAccessor, NvFieldtextValueAccessor, NvFieldtextareaValueAccessor, NvNotificationValueAccessor, NvPopoverValueAccessor, NvToggleValueAccessor, NvTogglebuttongroupValueAccessor], exports: [NvAccordionValueAccessor, NvAlertValueAccessor, NvCalendarValueAccessor, NvDatagridValueAccessor, NvDialogValueAccessor, NvFieldcheckboxValueAccessor, NvFielddateValueAccessor, NvFielddaterangeValueAccessor, NvFielddropdownValueAccessor, NvFieldmultiselectValueAccessor, NvFieldnumberValueAccessor, NvFieldpasswordValueAccessor, NvFieldradioValueAccessor, NvFieldselectValueAccessor, NvFieldsliderValueAccessor, NvFieldtextValueAccessor, NvFieldtextareaValueAccessor, NvNotificationValueAccessor, NvPopoverValueAccessor, NvToggleValueAccessor, NvTogglebuttongroupValueAccessor] }); }
3334
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [NvAccordionValueAccessor, NvAlertValueAccessor, NvCalendarValueAccessor, NvDatagridValueAccessor, NvDialogValueAccessor, NvFieldcheckboxValueAccessor, NvFielddateValueAccessor, NvFielddaterangeValueAccessor, NvFielddropdownValueAccessor, NvFieldmultiselectValueAccessor, NvFieldnumberValueAccessor, NvFieldpasswordValueAccessor, NvFieldradioValueAccessor, NvFieldselectValueAccessor, NvFieldsliderValueAccessor, NvFieldtextValueAccessor, NvFieldtextareaValueAccessor, NvNotificationValueAccessor, NvPopoverValueAccessor, NvSplitValueAccessor, NvToggleValueAccessor, NvTogglebuttongroupValueAccessor], exports: [NvAccordionValueAccessor, NvAlertValueAccessor, NvCalendarValueAccessor, NvDatagridValueAccessor, NvDialogValueAccessor, NvFieldcheckboxValueAccessor, NvFielddateValueAccessor, NvFielddaterangeValueAccessor, NvFielddropdownValueAccessor, NvFieldmultiselectValueAccessor, NvFieldnumberValueAccessor, NvFieldpasswordValueAccessor, NvFieldradioValueAccessor, NvFieldselectValueAccessor, NvFieldsliderValueAccessor, NvFieldtextValueAccessor, NvFieldtextareaValueAccessor, NvNotificationValueAccessor, NvPopoverValueAccessor, NvSplitValueAccessor, NvToggleValueAccessor, NvTogglebuttongroupValueAccessor] }); }
3011
3335
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule }); }
3012
3336
  }
3013
3337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, decorators: [{
@@ -3335,5 +3659,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3335
3659
  * Generated bundle index. Do not edit.
3336
3660
  */
3337
3661
 
3338
- export { NotificationService, NotificationServiceComponent, NovaComponentsModule, NovaComponentsValueAccessorModule, NvAccordion, NvAccordionItem, NvAccordionValueAccessor, NvAlert, NvAlertValueAccessor, NvAvatar, NvBadge, NvBreadcrumb, NvBreadcrumbs, NvButton, NvButtongroup, NvCalendar, NvCalendarValueAccessor, NvCol, NvDatagrid, NvDatagridValueAccessor, NvDatagridcolumn, NvDatatable, NvDialog, NvDialogValueAccessor, NvDialogfooter, NvDialogheader, NvFieldcheckbox, NvFieldcheckboxValueAccessor, NvFielddate, NvFielddateValueAccessor, NvFielddaterange, NvFielddaterangeValueAccessor, NvFielddropdown, NvFielddropdownValueAccessor, NvFielddropdownitem, NvFielddropdownitemcheck, NvFieldmultiselect, NvFieldmultiselectValueAccessor, NvFieldnumber, NvFieldnumberValueAccessor, NvFieldpassword, NvFieldpasswordValueAccessor, NvFieldradio, NvFieldradioValueAccessor, NvFieldselect, NvFieldselectValueAccessor, NvFieldslider, NvFieldsliderValueAccessor, NvFieldtext, NvFieldtextValueAccessor, NvFieldtextarea, NvFieldtextareaValueAccessor, NvFieldtime, NvIcon, NvIconbutton, NvLoader, NvMenu, NvMenuitem, NvNotification, NvNotificationValueAccessor, NvNotificationcontainer, NvPopover, NvPopoverValueAccessor, NvRow, NvStack, NvTable, NvToggle, NvToggleValueAccessor, NvTogglebutton, NvTogglebuttongroup, NvTogglebuttongroupValueAccessor, NvTooltip, VALUE_ACCESSORS, flexRenderComponent as nvDatatableRenderComponent, provideNovaComponents };
3662
+ export { NotificationService, NotificationServiceComponent, NovaComponentsModule, NovaComponentsValueAccessorModule, NvAccordion, NvAccordionItem, NvAccordionValueAccessor, NvAlert, NvAlertValueAccessor, NvAvatar, NvBadge, NvBreadcrumb, NvBreadcrumbs, NvButton, NvButtongroup, NvCalendar, NvCalendarValueAccessor, NvCol, NvDatagrid, NvDatagridValueAccessor, NvDatagridcolumn, NvDatatable, NvDatatableCellDirective, NvDialog, NvDialogValueAccessor, NvDialogfooter, NvDialogheader, NvFieldcheckbox, NvFieldcheckboxValueAccessor, NvFielddate, NvFielddateValueAccessor, NvFielddaterange, NvFielddaterangeValueAccessor, NvFielddropdown, NvFielddropdownValueAccessor, NvFielddropdownitem, NvFielddropdownitemcheck, NvFieldmultiselect, NvFieldmultiselectValueAccessor, NvFieldnumber, NvFieldnumberValueAccessor, NvFieldpassword, NvFieldpasswordValueAccessor, NvFieldradio, NvFieldradioValueAccessor, NvFieldselect, NvFieldselectValueAccessor, NvFieldslider, NvFieldsliderValueAccessor, NvFieldtext, NvFieldtextValueAccessor, NvFieldtextarea, NvFieldtextareaValueAccessor, NvFieldtime, NvIcon, NvIconbutton, NvLoader, NvMenu, NvMenuitem, NvNotification, NvNotificationValueAccessor, NvNotificationcontainer, NvPopover, NvPopoverValueAccessor, NvRow, NvSplit, NvSplitValueAccessor, NvStack, NvTable, NvToggle, NvToggleValueAccessor, NvTogglebutton, NvTogglebuttongroup, NvTogglebuttongroupValueAccessor, NvTooltip, VALUE_ACCESSORS, flexRenderComponent as nvDatatableRenderComponent, provideNovaComponents };
3339
3663
  //# sourceMappingURL=nova-components.mjs.map