nuxt-ui-tools 1.6.1 → 1.6.2

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.
package/dist/module.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "configKey": "nuxtUiTools",
6
6
  "docs": "https://ui.nuxt.com/docs/getting-started/installation/nuxt",
7
7
  "name": "nuxt-ui-tools",
8
- "version": "1.6.1",
8
+ "version": "1.6.2",
9
9
  "builder": {
10
10
  "@nuxt/module-builder": "1.0.3",
11
11
  "unbuild": "unknown"
@@ -1,7 +1,7 @@
1
1
  import type { GenericObject, TableColumnBuilder, TableColumnCollection, TableFilterBuilder, TableSortKey, TableUiFilterCollection, TableUiFilterDefinition } from '../types/index.js';
2
2
  export { type TableSortKey } from '../types/index.js';
3
- export declare function createTableColumnBuilder<TRow extends GenericObject, TContext extends GenericObject, TPageContext extends GenericObject, TSortKey extends string = TableSortKey<TRow>>(): TableColumnBuilder<TRow, TContext, TPageContext, TSortKey>;
3
+ export declare function createTableColumnBuilder<TRow extends GenericObject, TContext extends GenericObject, TPageContext extends GenericObject, TSortKey extends string = TableSortKey<TRow>, TData = unknown>(): TableColumnBuilder<TRow, TContext, TPageContext, TSortKey, TData>;
4
4
  export declare function createTableFilterBuilder<TRow extends GenericObject, TContext extends GenericObject = GenericObject>(): TableFilterBuilder<TRow, TContext>;
5
5
  export declare function resolveCollection<TBuilder, TResult>(collection: TResult | ((builder: TBuilder) => TResult) | undefined, builder: TBuilder): TResult | undefined;
6
- export declare function resolveColumns<TRow extends GenericObject, TContext extends GenericObject, TPageContext extends GenericObject, TSortKey extends string = TableSortKey<TRow>, TColumns extends TableColumnCollection<TRow, TContext, TPageContext, string, TSortKey> | undefined = TableColumnCollection<TRow, TContext, TPageContext, string, TSortKey> | undefined>(columns: TColumns): TColumns extends (...args: never[]) => infer TResult ? TResult : TColumns;
6
+ export declare function resolveColumns<TRow extends GenericObject, TContext extends GenericObject, TPageContext extends GenericObject, TSortKey extends string = TableSortKey<TRow>, TData = unknown, TColumns extends TableColumnCollection<TRow, TContext, TPageContext, string, TSortKey, TData> | undefined = TableColumnCollection<TRow, TContext, TPageContext, string, TSortKey, TData> | undefined>(columns: TColumns): TColumns extends (...args: never[]) => infer TResult ? TResult : TColumns;
7
7
  export declare function resolveUiFilters<TRow extends GenericObject, TContext extends GenericObject, TKey extends string>(filters: TableUiFilterCollection<TRow, TContext, TKey> | undefined): TableUiFilterDefinition<TRow, TContext, TKey>[] | undefined;
@@ -8,7 +8,7 @@ type __VLS_Props = {
8
8
  ui?: DataListTableUi;
9
9
  };
10
10
  declare function refresh(): void;
11
- declare var __VLS_28: {
11
+ declare var __VLS_33: {
12
12
  columnSlots: TableColumnSlot[];
13
13
  leafColumns: import("@tanstack/table-core").Column<{
14
14
  columnPinningFeature: import("@tanstack/table-core").TableFeature;
@@ -18,16 +18,16 @@ declare var __VLS_28: {
18
18
  coreRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
19
19
  columnMeta: import("../../utils/index.js").DataListColumnMeta;
20
20
  }, object, unknown>[];
21
- }, __VLS_30: {
21
+ }, __VLS_35: {
22
22
  error: {};
23
23
  retry: typeof refresh;
24
- }, __VLS_39: {};
24
+ }, __VLS_44: {};
25
25
  type __VLS_Slots = {} & {
26
- footer?: (props: typeof __VLS_28) => any;
26
+ footer?: (props: typeof __VLS_33) => any;
27
27
  } & {
28
- error?: (props: typeof __VLS_30) => any;
28
+ error?: (props: typeof __VLS_35) => any;
29
29
  } & {
30
- empty?: (props: typeof __VLS_39) => any;
30
+ empty?: (props: typeof __VLS_44) => any;
31
31
  };
32
32
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
33
33
  resetColumnSizing: () => void;
@@ -191,7 +191,9 @@ const tableCols = computed(() => {
191
191
  width: `${leaf.getSize()}px`
192
192
  }));
193
193
  if (filled.value) {
194
- cols.splice(cols.length - table.getEndVisibleLeafColumns().length, 0, { key: "fill" });
194
+ cols.splice(cols.length - table.getEndVisibleLeafColumns().length, 0, {
195
+ key: "fill"
196
+ });
195
197
  }
196
198
  return cols;
197
199
  });
@@ -250,7 +252,9 @@ const headerCellProps = computed(
250
252
  resizable: column.getCanResize(),
251
253
  resize: header.getResizeHandler(),
252
254
  resizing: column.getIsResizing(),
253
- sortState: internals.tableColumns.getSortState({ columnId: column.id }),
255
+ sortState: internals.tableColumns.getSortState({
256
+ columnId: column.id
257
+ }),
254
258
  sortable: meta?.sortable
255
259
  }
256
260
  ];
@@ -267,7 +271,10 @@ const virtualPaddingBottom = computed(() => {
267
271
  });
268
272
  const renderedRows = computed(() => {
269
273
  if (!virtualized.value) {
270
- return tableRows.value.map((row, index) => ({ row, virtual: { index, key: String(row.id) } }));
274
+ return tableRows.value.map((row, index) => ({
275
+ row,
276
+ virtual: { index, key: String(row.id) }
277
+ }));
271
278
  }
272
279
  return virtualRows.value.flatMap((item) => {
273
280
  const row = tableRows.value[item.index];
@@ -358,6 +365,58 @@ function isFirstEnd(column) {
358
365
  return table.getEndVisibleLeafColumns()[0]?.id === column.id;
359
366
  }
360
367
  const { summaries } = internals;
368
+ function isDeclarativeSummary(summary) {
369
+ return Array.isArray(summary);
370
+ }
371
+ const declarativeSummaryColumns = computed(
372
+ () => new Map(
373
+ internals.tableColumns.runtimeColumns.value.flatMap(
374
+ (column) => isDeclarativeSummary(column.summary) ? [[column.id, column.summary]] : []
375
+ )
376
+ )
377
+ );
378
+ const hasDeclarativeSummaries = computed(() => declarativeSummaryColumns.value.size > 0);
379
+ const summaryCellContext = computed(() => ({
380
+ data: internals.queryContent.sourceData.value,
381
+ rows: internals.queryContent.data.value.rows,
382
+ allRows: internals.queryContent.allRows.value,
383
+ filteredRows: internals.queryContent.filteredRows.value,
384
+ selectedRows: internals.selection.selectedRows.value,
385
+ request: {
386
+ ...internals.queryContent.requestContext.value,
387
+ context: internals.queryContent.contextData.value
388
+ },
389
+ context: internals.queryContent.contextData.value,
390
+ pageContext: internals.queryContent.pageContextData.value
391
+ }));
392
+ function declarativeSummaryCell(columnId, rowIndex) {
393
+ const summary = declarativeSummaryColumns.value.get(columnId);
394
+ const cell = summary?.[rowIndex];
395
+ return cell && (!cell.condition || cell.condition(summaryCellContext.value)) ? cell : void 0;
396
+ }
397
+ const declarativeSummaryRows = computed(() => {
398
+ const columns = leafColumns.value.filter((column) => !column.columnDef.meta?.internal);
399
+ const length = Math.max(
400
+ 0,
401
+ ...columns.map((column) => {
402
+ const summary = declarativeSummaryColumns.value.get(column.id);
403
+ return summary?.length ?? 0;
404
+ })
405
+ );
406
+ return Array.from({ length }, (_, index) => index).filter(
407
+ (index) => columns.some((column) => declarativeSummaryCell(column.id, index))
408
+ );
409
+ });
410
+ const footerRows = computed(() => {
411
+ if (!hasDeclarativeSummaries.value) return summaries.enabled.value ? [0] : [];
412
+ return [
413
+ .../* @__PURE__ */ new Set([...declarativeSummaryRows.value, ...summaries.enabled.value ? [0] : []])
414
+ ].sort((left, right) => left - right);
415
+ });
416
+ function renderDeclarativeSummary(columnId, rowIndex) {
417
+ const cell = declarativeSummaryCell(columnId, rowIndex);
418
+ return cell ? () => cell.render(summaryCellContext.value) : () => null;
419
+ }
361
420
  const summaryColumnIds = computed(() => new Set(summaries.columns.value.map((column) => column.id)));
362
421
  const summaryLabelColumnId = computed(
363
422
  () => leafColumns.value.find(
@@ -386,7 +445,11 @@ function renderSummary(columnId) {
386
445
  const summary = column?.summary;
387
446
  const render = isSummaryConfig(summary) ? summary.render : void 0;
388
447
  if (render) {
389
- return () => render({ loading: cell.loading, scope: summaries.scope.value, value: cell.value });
448
+ return () => render({
449
+ loading: cell.loading,
450
+ scope: summaries.scope.value,
451
+ value: cell.value
452
+ });
390
453
  }
391
454
  const value = summaries.format(columnId);
392
455
  return () => h("span", formatNumber(value));
@@ -656,10 +719,10 @@ defineExpose({ resetColumnSizing });
656
719
  </tbody>
657
720
 
658
721
  <tfoot
659
- v-if="summaries.enabled.value && !isFirstLoad && !empty"
722
+ v-if="footerRows.length > 0 && !isFirstLoad && (hasDeclarativeSummaries || !empty)"
660
723
  :class="mergeDataListUiClass('nut-dl-table__foot', void 0, ui?.tfoot)"
661
724
  >
662
- <tr class="nut-dl-table__foot-row">
725
+ <tr v-for="summaryRow in footerRows" :key="summaryRow" class="nut-dl-table__foot-row">
663
726
  <template v-for="slot in columnSlots" :key="`foot-${slot.key}`">
664
727
  <td
665
728
  v-if="slot.kind === 'fill'"
@@ -686,8 +749,16 @@ defineExpose({ resetColumnSizing });
686
749
  :data-col="slot.columnId"
687
750
  :style="pinnedOffset(headerByColumnId.get(slot.columnId).column)"
688
751
  >
752
+ <span
753
+ v-if="declarativeSummaryCell(slot.columnId, summaryRow)"
754
+ class="nut-dl-tf__value"
755
+ >
756
+ <component :is="renderDeclarativeSummary(slot.columnId, summaryRow)" />
757
+ </span>
689
758
  <div
690
- v-if="slot.columnId === summaryLabelColumnId"
759
+ v-else-if="
760
+ summaryRow === 0 && !empty && summaries.enabled.value && slot.columnId === summaryLabelColumnId
761
+ "
691
762
  class="nut-dl-tf__label flex items-center gap-2 whitespace-nowrap"
692
763
  >
693
764
  <span
@@ -702,7 +773,11 @@ defineExpose({ resetColumnSizing });
702
773
  summaryUnit
703
774
  }}</span>
704
775
  </div>
705
- <template v-else-if="summaryColumnIds.has(slot.columnId)">
776
+ <template
777
+ v-else-if="
778
+ summaryRow === 0 && !empty && summaries.enabled.value && summaryColumnIds.has(slot.columnId)
779
+ "
780
+ >
706
781
  <span
707
782
  v-if="summaries.cell(slot.columnId).loading"
708
783
  class="nut-dl-skeleton nut-dl-tf__skeleton inline-block h-3 w-12 rounded-full align-middle"
@@ -8,7 +8,7 @@ type __VLS_Props = {
8
8
  ui?: DataListTableUi;
9
9
  };
10
10
  declare function refresh(): void;
11
- declare var __VLS_28: {
11
+ declare var __VLS_33: {
12
12
  columnSlots: TableColumnSlot[];
13
13
  leafColumns: import("@tanstack/table-core").Column<{
14
14
  columnPinningFeature: import("@tanstack/table-core").TableFeature;
@@ -18,16 +18,16 @@ declare var __VLS_28: {
18
18
  coreRowModel: (table: import("@tanstack/table-core").Table<any, any>) => () => import("@tanstack/table-core").RowModel<any, any>;
19
19
  columnMeta: import("../../utils/index.js").DataListColumnMeta;
20
20
  }, object, unknown>[];
21
- }, __VLS_30: {
21
+ }, __VLS_35: {
22
22
  error: {};
23
23
  retry: typeof refresh;
24
- }, __VLS_39: {};
24
+ }, __VLS_44: {};
25
25
  type __VLS_Slots = {} & {
26
- footer?: (props: typeof __VLS_28) => any;
26
+ footer?: (props: typeof __VLS_33) => any;
27
27
  } & {
28
- error?: (props: typeof __VLS_30) => any;
28
+ error?: (props: typeof __VLS_35) => any;
29
29
  } & {
30
- empty?: (props: typeof __VLS_39) => any;
30
+ empty?: (props: typeof __VLS_44) => any;
31
31
  };
32
32
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
33
33
  resetColumnSizing: () => void;
@@ -25,6 +25,9 @@ export interface UseTableDataReturn {
25
25
  infiniteQuery: ReturnType<typeof useInfiniteQuery>;
26
26
  rawData: ComputedRef<TableExternalState>;
27
27
  data: ComputedRef<TableExternalState>;
28
+ sourceData: ComputedRef<unknown>;
29
+ allRows: ComputedRef<GenericObject[] | undefined>;
30
+ filteredRows: ComputedRef<GenericObject[] | undefined>;
28
31
  selectableRows: ComputedRef<GenericObject[]>;
29
32
  facets: ComputedRef<TableFacetExecutionResult<string>>;
30
33
  error: ComputedRef<unknown>;
@@ -184,6 +184,9 @@ export function useTableData(params) {
184
184
  const rawData = computed(
185
185
  () => isCursorPagination.value ? cursorRawData.value : rawDataState.value
186
186
  );
187
+ const sourceData = computed(
188
+ () => isCursorPagination.value ? infiniteQuery.data.value?.pages.at(-1) : query.data.value
189
+ );
187
190
  const clientFilteredRows = computed(() => {
188
191
  if (!params.startup.isActive.value) {
189
192
  return [];
@@ -227,6 +230,12 @@ export function useTableData(params) {
227
230
  const selectableRows = computed(
228
231
  () => params.startup.isActive.value ? params.schema.value.source.mode === "client" ? clientSortedRows.value : data.value.rows : []
229
232
  );
233
+ const allRows = computed(
234
+ () => params.schema.value.source.mode === "client" ? rawData.value.rows : void 0
235
+ );
236
+ const filteredRows = computed(
237
+ () => params.schema.value.source.mode === "client" ? clientSortedRows.value : void 0
238
+ );
230
239
  const clientFacetDescriptors = computed(
231
240
  () => globalFacetDescriptors.value.map((facet) => ({
232
241
  key: facet.key,
@@ -460,6 +469,9 @@ export function useTableData(params) {
460
469
  context,
461
470
  contextData,
462
471
  data,
472
+ sourceData,
473
+ allRows,
474
+ filteredRows,
463
475
  error,
464
476
  facets,
465
477
  facetsBaseContext,
@@ -2,7 +2,11 @@ import { computed, ref, shallowRef, watch } from "vue";
2
2
  import { isDate, isFunction, isObject } from "../../shared/utils/predicate.js";
3
3
  export function useTableSummaries(params) {
4
4
  const config = computed(() => params.schema.value.table?.summaries);
5
- const columns = computed(() => params.runtimeColumns.value.filter((column) => column.summary));
5
+ const columns = computed(
6
+ () => params.runtimeColumns.value.filter(
7
+ (column) => column.summary && !Array.isArray(column.summary)
8
+ )
9
+ );
6
10
  const enabled = computed(() => columns.value.length > 0 || Boolean(config.value?.resolve));
7
11
  const scopes = computed(
8
12
  () => config.value?.scopes ?? (params.selection.selectionEnabled.value ? ["filtered", "page", "selection"] : ["filtered", "page"])
@@ -69,7 +73,7 @@ export function useTableSummaries(params) {
69
73
  const remoteFiltered = scope.value === "filtered" && params.schema.value.source.mode !== "client";
70
74
  for (const column of columns.value) {
71
75
  const { summary } = column;
72
- if (!summary) {
76
+ if (!summary || Array.isArray(summary)) {
73
77
  continue;
74
78
  }
75
79
  const context = createContext(column.id);
@@ -39,12 +39,26 @@ export interface TableColumnSummaryConfig<TRow extends GenericObject = GenericOb
39
39
  scope: TableSummaryScope;
40
40
  }) => RenderableType;
41
41
  }
42
- export type TableColumnSummary<TRow extends GenericObject = GenericObject> = TableSummaryKind | TableColumnSummaryConfig<TRow> | ((context: TableSummaryContext<TRow>) => TableSummaryValue | Promise<TableSummaryValue>);
42
+ export type TableColumnSummary<TRow extends GenericObject = GenericObject, TContext extends GenericObject = TableRuntimeRecord, TPageContext extends GenericObject = TableRuntimeRecord, TData = unknown> = TableSummaryKind | TableColumnSummaryConfig<TRow> | ((context: TableSummaryContext<TRow>) => TableSummaryValue | Promise<TableSummaryValue>) | TableSummaryCellDefinition<TRow, TContext, TPageContext, TData>[];
43
+ export interface TableSummaryCellContext<TRow extends GenericObject = GenericObject, TContext extends GenericObject = TableRuntimeRecord, TPageContext extends GenericObject = TableRuntimeRecord, TData = unknown> {
44
+ data: TData | undefined;
45
+ rows: TRow[];
46
+ allRows: TRow[] | undefined;
47
+ filteredRows: TRow[] | undefined;
48
+ selectedRows: TRow[];
49
+ request: TableSourceRequestContext<TRow, TContext>;
50
+ context: TContext;
51
+ pageContext: TPageContext;
52
+ }
53
+ export interface TableSummaryCellDefinition<TRow extends GenericObject = GenericObject, TContext extends GenericObject = TableRuntimeRecord, TPageContext extends GenericObject = TableRuntimeRecord, TData = unknown> {
54
+ condition?: (context: TableSummaryCellContext<TRow, TContext, TPageContext, TData>) => boolean;
55
+ render: (context: TableSummaryCellContext<TRow, TContext, TPageContext, TData>) => RenderableType;
56
+ }
43
57
  export interface TableColumnCellDataAttributes {
44
58
  [key: `data-${string}`]: string | number | boolean | undefined;
45
59
  }
46
60
  export type TableColumnCellProps = TableRuntimeRecord & TableColumnCellDataAttributes;
47
- interface TableColumnBase<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TParams extends TableRowRenderParams<TRow, TContext, TPageContext> = TableRowRenderParams<TRow, TContext, TPageContext>> {
61
+ interface TableColumnBase<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TParams extends TableRowRenderParams<TRow, TContext, TPageContext> = TableRowRenderParams<TRow, TContext, TPageContext>, TData = unknown> {
48
62
  key: TKey;
49
63
  label?: TableTextValue | (() => RenderableType);
50
64
  icon?: string;
@@ -61,7 +75,7 @@ interface TableColumnBase<TRow extends GenericObject = GenericObject, TContext e
61
75
  enabled?: boolean;
62
76
  required?: boolean;
63
77
  /** Footer aggregate for this column. */
64
- summary?: TableColumnSummary<TRow>;
78
+ summary?: TableColumnSummary<TRow, TContext, TPageContext, TData>;
65
79
  /** Placeholder shape rendered while the first page loads. */
66
80
  skeleton?: TableColumnSkeleton;
67
81
  /** Maximum wrapped lines before clamping; defaults to 3, `ellipsis: true` forces one line. */
@@ -78,32 +92,32 @@ interface TableColumnBase<TRow extends GenericObject = GenericObject, TContext e
78
92
  export type TableFieldRenderParams<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TField extends TableKnownFieldPath<TRow> = TableKnownFieldPath<TRow>> = TableRowRenderParams<TRow, TContext, TPageContext> & {
79
93
  value: TableFieldValue<TRow, TField>;
80
94
  };
81
- interface TableFieldColumnBase<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TField extends TableKnownFieldPath<TRow> = TableKnownFieldPath<TRow>> extends TableColumnBase<TRow, TContext, TPageContext, TField, TableFieldRenderParams<TRow, TContext, TPageContext, TField>> {
95
+ interface TableFieldColumnBase<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TField extends TableKnownFieldPath<TRow> = TableKnownFieldPath<TRow>, TData = unknown> extends TableColumnBase<TRow, TContext, TPageContext, TField, TableFieldRenderParams<TRow, TContext, TPageContext, TField>, TData> {
82
96
  kind: 'field';
83
97
  field: TField;
84
98
  render?: (params: TableFieldRenderParams<TRow, TContext, TPageContext, TField>) => RenderableType;
85
99
  }
86
- export type TableFieldColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TField extends TableKnownFieldPath<TRow> = TableKnownFieldPath<TRow>> = TableFieldColumnBase<TRow, TContext, TPageContext, TField>;
87
- type TableAnyFieldColumn<TRow extends GenericObject, TContext extends GenericObject, TPageContext extends GenericObject> = {
88
- [TField in TableKnownFieldPath<TRow>]: TableFieldColumn<TRow, TContext, TPageContext, TField>;
100
+ export type TableFieldColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TField extends TableKnownFieldPath<TRow> = TableKnownFieldPath<TRow>, TData = unknown> = TableFieldColumnBase<TRow, TContext, TPageContext, TField, TData>;
101
+ type TableAnyFieldColumn<TRow extends GenericObject, TContext extends GenericObject, TPageContext extends GenericObject, TData> = {
102
+ [TField in TableKnownFieldPath<TRow>]: TableFieldColumn<TRow, TContext, TPageContext, TField, TData>;
89
103
  }[TableKnownFieldPath<TRow>];
90
- export interface TableCompositeColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>> extends TableColumnBase<TRow, TContext, TPageContext, TKey> {
104
+ export interface TableCompositeColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>, TData = unknown> extends TableColumnBase<TRow, TContext, TPageContext, TKey, TableRowRenderParams<TRow, TContext, TPageContext>, TData> {
91
105
  kind: 'composite';
92
106
  sortableKey?: TSortKey;
93
107
  render: (params: TableRowRenderParams<TRow, TContext, TPageContext>) => RenderableType;
94
108
  }
95
- export interface TableDisplayColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string> extends TableColumnBase<TRow, TContext, TPageContext, TKey> {
109
+ export interface TableDisplayColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TData = unknown> extends TableColumnBase<TRow, TContext, TPageContext, TKey, TableRowRenderParams<TRow, TContext, TPageContext>, TData> {
96
110
  kind: 'display';
97
111
  render: (params: TableRowRenderParams<TRow, TContext, TPageContext>) => RenderableType;
98
112
  }
99
- export type TableColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>> = TableAnyFieldColumn<TRow, TContext, TPageContext> | TableCompositeColumn<TRow, TContext, TPageContext, TKey, TSortKey> | TableDisplayColumn<TRow, TContext, TPageContext, TKey>;
100
- export type TableFieldColumnOptions<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TField extends TableKnownFieldPath<TRow> = TableKnownFieldPath<TRow>> = Omit<TableFieldColumn<TRow, TContext, TPageContext, TField>, 'field' | 'key' | 'kind'>;
101
- export type TableCompositeColumnOptions<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>> = Omit<TableCompositeColumn<TRow, TContext, TPageContext, TKey, TSortKey>, 'key' | 'kind'>;
102
- export type TableDisplayColumnOptions<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string> = Omit<TableDisplayColumn<TRow, TContext, TPageContext, TKey>, 'key' | 'kind'>;
103
- export interface TableColumnBuilder<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TSortKey extends string = TableSortKey<TRow>> {
104
- field<TField extends TableKnownFieldPath<TRow> & string>(field: TField, options?: TableFieldColumnOptions<TRow, TContext, TPageContext, TField>): TableFieldColumn<TRow, TContext, TPageContext, TField>;
105
- composite<TKey extends string>(key: TKey, options: TableCompositeColumnOptions<TRow, TContext, TPageContext, TKey, TSortKey>): TableCompositeColumn<TRow, TContext, TPageContext, TKey, TSortKey>;
106
- display<TKey extends string>(key: TKey, options: TableDisplayColumnOptions<TRow, TContext, TPageContext, TKey>): TableDisplayColumn<TRow, TContext, TPageContext, TKey>;
113
+ export type TableColumn<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>, TData = unknown> = TableAnyFieldColumn<TRow, TContext, TPageContext, TData> | TableCompositeColumn<TRow, TContext, TPageContext, TKey, TSortKey, TData> | TableDisplayColumn<TRow, TContext, TPageContext, TKey, TData>;
114
+ export type TableFieldColumnOptions<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TField extends TableKnownFieldPath<TRow> = TableKnownFieldPath<TRow>, TData = unknown> = Omit<TableFieldColumn<TRow, TContext, TPageContext, TField, TData>, 'field' | 'key' | 'kind'>;
115
+ export type TableCompositeColumnOptions<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>, TData = unknown> = Omit<TableCompositeColumn<TRow, TContext, TPageContext, TKey, TSortKey, TData>, 'key' | 'kind'>;
116
+ export type TableDisplayColumnOptions<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TData = unknown> = Omit<TableDisplayColumn<TRow, TContext, TPageContext, TKey, TData>, 'key' | 'kind'>;
117
+ export interface TableColumnBuilder<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TSortKey extends string = TableSortKey<TRow>, TData = unknown> {
118
+ field<TField extends TableKnownFieldPath<TRow> & string>(field: TField, options?: TableFieldColumnOptions<TRow, TContext, TPageContext, TField, TData>): TableFieldColumn<TRow, TContext, TPageContext, TField, TData>;
119
+ composite<TKey extends string>(key: TKey, options: TableCompositeColumnOptions<TRow, TContext, TPageContext, TKey, TSortKey, TData>): TableCompositeColumn<TRow, TContext, TPageContext, TKey, TSortKey, TData>;
120
+ display<TKey extends string>(key: TKey, options: TableDisplayColumnOptions<TRow, TContext, TPageContext, TKey, TData>): TableDisplayColumn<TRow, TContext, TPageContext, TKey, TData>;
107
121
  }
108
- export type TableColumnCollection<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>> = TableColumn<TRow, TContext, TPageContext, TKey, TSortKey>[] | ((column: TableColumnBuilder<TRow, TContext, TPageContext, TSortKey>) => TableColumn<TRow, TContext, TPageContext, TKey, TSortKey>[]);
122
+ export type TableColumnCollection<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TKey extends string = string, TSortKey extends string = TableSortKey<TRow>, TData = unknown> = TableColumn<TRow, TContext, TPageContext, TKey, TSortKey, TData>[] | ((column: TableColumnBuilder<TRow, TContext, TPageContext, TSortKey, TData>) => TableColumn<TRow, TContext, TPageContext, TKey, TSortKey, TData>[]);
109
123
  export {};
@@ -50,9 +50,9 @@ export interface TableGridSchema<TRow extends GenericObject = GenericObject, TCo
50
50
  sortOptions?: TableGridSortOption<TSortKey>[];
51
51
  defaultSorting?: TableDefaultSort<TSortKey>;
52
52
  }
53
- export interface TableTableSchema<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TSortKey extends string = TableSortKey<TRow>> {
53
+ export interface TableTableSchema<TRow extends GenericObject = GenericObject, TContext extends GenericObject = GenericObject, TPageContext extends GenericObject = GenericObject, TSortKey extends string = TableSortKey<TRow>, TData = unknown> {
54
54
  enabled?: boolean | string | (() => boolean | string);
55
- columns?: TableColumnCollection<TRow, TContext, TPageContext, string, TSortKey>;
55
+ columns?: TableColumnCollection<TRow, TContext, TPageContext, string, TSortKey, TData>;
56
56
  treeMode?: boolean;
57
57
  childrenKey?: TableSortKey<TRow>;
58
58
  defaultSorting?: TableDefaultSort<TSortKey>;
@@ -2,7 +2,7 @@ import type { TableBulkAction, TableRowAction, TableToolbarAction } from './acti
2
2
  import type { TableContextDataFromItems, TableContextItem, TablePageContextItem } from './context.js';
3
3
  import type { TableFiltersSchema } from './filters.js';
4
4
  import type { TableControlsSchema, TableGridSchema, TablePaginationSchema, TablePersistenceOptions, TableSelectionSchema, TableTableSchema } from './layout.js';
5
- import type { InferTableSourceRow, NormalizeTableSource, TableCursorPageResult, TableSource, TableSourceExecutionResult } from './source.js';
5
+ import type { InferTableSourceRow, ExtractTableSourceResult, NormalizeTableSource, TableCursorPageResult, TableSource, TableSourceExecutionResult } from './source.js';
6
6
  import type { TableKnownFieldPath, TableLayout, TableRowKey, TableSortKey, GenericObject } from './utils.js';
7
7
  export interface TableSchema<TRow extends GenericObject = GenericObject, TContextItems extends TableContextItem[] = TableContextItem[], TPageContextItems extends TablePageContextItem<TRow, TableContextDataFromItems<TContextItems>>[] = TablePageContextItem<TRow, TableContextDataFromItems<TContextItems>>[], TFilterKey extends string = TableKnownFieldPath<TRow>, TSortKey extends string = TableSortKey<TRow>> {
8
8
  tableKey: string;
@@ -28,8 +28,9 @@ export interface TableSchema<TRow extends GenericObject = GenericObject, TContex
28
28
  controls?: TableControlsSchema;
29
29
  persistence?: TablePersistenceOptions;
30
30
  }
31
- export type BuildTableSchema<TSource extends TableSource<any, any, any> = TableSource<any, any, any>, TContextItems extends TableContextItem[] = TableContextItem[], TPageContextItems extends TablePageContextItem<InferTableSourceRow<TSource>, TableContextDataFromItems<TContextItems>>[] = TablePageContextItem<InferTableSourceRow<TSource>, TableContextDataFromItems<TContextItems>>[], TFilterKey extends string = TableKnownFieldPath<InferTableSourceRow<TSource>>, TSortKey extends string = TableKnownFieldPath<InferTableSourceRow<TSource>>> = Omit<TableSchema<InferTableSourceRow<TSource>, TContextItems, TPageContextItems, TFilterKey, TSortKey>, 'source'> & {
31
+ export type BuildTableSchema<TSource extends TableSource<any, any, any> = TableSource<any, any, any>, TContextItems extends TableContextItem[] = TableContextItem[], TPageContextItems extends TablePageContextItem<InferTableSourceRow<TSource>, TableContextDataFromItems<TContextItems>>[] = TablePageContextItem<InferTableSourceRow<TSource>, TableContextDataFromItems<TContextItems>>[], TFilterKey extends string = TableKnownFieldPath<InferTableSourceRow<TSource>>, TSortKey extends string = TableKnownFieldPath<InferTableSourceRow<TSource>>> = Omit<TableSchema<InferTableSourceRow<TSource>, TContextItems, TPageContextItems, TFilterKey, TSortKey>, 'source' | 'table'> & {
32
32
  source: ValidateTableSource<TSource, TableContextDataFromItems<TContextItems>>;
33
+ table?: TableTableSchema<InferTableSourceRow<TSource>, TableContextDataFromItems<TContextItems>, TableContextDataFromItems<TPageContextItems>, TSortKey, ExtractTableSourceResult<TSource>>;
33
34
  };
34
35
  type ValidateTableSource<TSource, TContext extends GenericObject> = TSource extends NormalizeTableSource<TSource, TContext> ? TSource : NormalizeTableSource<TSource, TContext>;
35
36
  type ResolveCollection<TCollection> = TCollection extends (...args: never[]) => infer TResult ? TResult : TCollection;
@@ -5,11 +5,20 @@ type RemoteTableSourceResult<TResult> = TResult extends {
5
5
  pageInfo: {
6
6
  nextCursor: string | null;
7
7
  };
8
- } ? TableCursorPageResult<TableSourceRow<TResult>> : TResult extends {
8
+ } ? TableCursorPageResult<TableSourceRow<TResult>> & SummaryFromResult<TResult> : TResult extends {
9
9
  pageInfo: {
10
10
  pageIndex: number;
11
11
  };
12
- } ? TableOffsetPageResult<TableSourceRow<TResult>> : TableSourceExecutionResult<TableSourceRow<TResult>>;
12
+ } ? TableOffsetPageResult<TableSourceRow<TResult>> & SummaryFromResult<TResult> : TableSourceExecutionResult<TableSourceRow<TResult>> & SummaryFromResult<TResult>;
13
+ type SummaryFromResult<TResult> = TResult extends {
14
+ summary: infer TSummary;
15
+ } ? {
16
+ summary: TSummary;
17
+ } : TResult extends {
18
+ summary?: infer TSummary;
19
+ } ? {
20
+ summary?: TSummary;
21
+ } : object;
13
22
  interface TableSourceInferenceContext {
14
23
  pagination: TablePaginationState;
15
24
  sorting: TableSortingRule<never>[];
@@ -1,7 +1,7 @@
1
1
  import type { ComputedRef, ShallowRef } from 'vue';
2
2
  import type { UseTableDataReturn } from '../../composables/use-table-data.js';
3
3
  import type { useTableState } from '../../composables/use-table-state.js';
4
- import type { TableApi, TableColumnAlign, TableColumnPinned, GenericObject, TableLayout, TableSchemaView, TableRuntimeRecord, TableColumnSkeleton, TableColumnSummary } from '../../types/index.js';
4
+ import type { TableApi, TableColumnAlign, TableColumnPinned, GenericObject, TableLayout, TableSchemaView, TableRuntimeRecord, TableColumnSkeleton } from '../../types/index.js';
5
5
  export declare const SELECT_COLUMN_ID = "__select";
6
6
  export declare const SELECT_COLUMN_WIDTH = 44;
7
7
  export declare const ROW_ACTIONS_COLUMN_ID = "__row-actions";
@@ -20,7 +20,7 @@ export interface TableRuntimeColumn {
20
20
  defaultVisible: boolean;
21
21
  configurable?: boolean;
22
22
  pinned?: TableColumnPinned;
23
- summary?: TableColumnSummary;
23
+ summary?: SchemaTableColumn['summary'];
24
24
  ellipsis?: boolean;
25
25
  skeleton?: TableColumnSkeleton;
26
26
  lines?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-ui-tools",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "description": "Nuxt module and runtime toolkit for UI-heavy Nuxt applications",
5
5
  "homepage": "https://github.com/ChronicStone/nuxt-ui-tools#readme",
6
6
  "bugs": "https://github.com/ChronicStone/nuxt-ui-tools/issues",