@kong-ui-public/table-data-grid 0.5.4 → 0.5.5-pr.3854.0b79f8321.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.
- package/README.md +69 -11
- package/dist/style.css +1 -1
- package/dist/table-data-grid.es.js +481 -350
- package/dist/table-data-grid.umd.js +1 -1
- package/dist/types/components/TableDataGrid.vue.d.ts +3 -9
- package/dist/types/components/TableDataGrid.vue.d.ts.map +1 -1
- package/dist/types/components/TableDataGridCellRenderer.vue.d.ts +4 -1
- package/dist/types/components/TableDataGridCellRenderer.vue.d.ts.map +1 -1
- package/dist/types/composables/useFetchInfinite.d.ts +3 -3
- package/dist/types/composables/useFetchInfinite.d.ts.map +1 -1
- package/dist/types/composables/useTableDataGridColumnDefs.d.ts +12 -1
- package/dist/types/composables/useTableDataGridColumnDefs.d.ts.map +1 -1
- package/dist/types/composables/useTableDataGridConfig.d.ts +2 -0
- package/dist/types/composables/useTableDataGridConfig.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +40 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/tableConfig.d.ts.map +1 -1
- package/dist/types/utils/tableDataGridPresentation.d.ts +51 -0
- package/dist/types/utils/tableDataGridPresentation.d.ts.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Reusable Vue wrapper around AG Grid for Kong table data grids.
|
|
4
4
|
|
|
5
|
-
This package
|
|
6
|
-
|
|
5
|
+
This package supports AG Grid infinite row loading with a cursor-first fetcher
|
|
6
|
+
contract and host-supplied complete results through its client-side row model. It also
|
|
7
|
+
provides basic column definitions, single-column sorting, empty/error
|
|
7
8
|
presentation states, and state lifecycle emits.
|
|
8
9
|
|
|
9
10
|
## Peer Dependencies
|
|
@@ -113,11 +114,13 @@ const handleState = (payload: TableDataGridStatePayload) => {
|
|
|
113
114
|
| Prop | Type | Required | Default | Notes |
|
|
114
115
|
| --- | --- | --- | --- | --- |
|
|
115
116
|
| `headers` | `Array<TableDataGridHeader<Row>>` | Yes | - | Basic column definitions mapped to AG Grid columns. |
|
|
116
|
-
| `fetcher` | `TableDataGridFetcher<Row>` |
|
|
117
|
+
| `fetcher` | `TableDataGridFetcher<Row>` | Infinite mode | - | Async row loader called by the AG Grid infinite datasource. |
|
|
118
|
+
| `rows` | `Row[]` | Unpaginated mode | - | Complete host-owned result. The grid does not fetch in this mode. |
|
|
119
|
+
| `mode` | `'infinite' \| 'unpaginated'` | No | `'infinite'` | Selects `fetcher` or `rows` and the AG Grid row model when mounted. Remount to change modes. |
|
|
117
120
|
| `error` | `boolean` | No | `false` | Host-controlled visible error state. Internal fetch failures emit state but do not render error UI unless this prop is true. |
|
|
118
|
-
| `pageSize` | `number` | No | `25` | AG Grid cache block size and fetcher request size. `tableConfig.pageSize` wins when present. |
|
|
119
|
-
| `refreshKey` | `string \| number \| boolean` | No | - | Parent invalidation signal that rebuilds the datasource from the beginning. |
|
|
120
|
-
| `tableConfig` | `TableDataGridConfig` | No | - | Host-controlled current sort and
|
|
121
|
+
| `pageSize` | `number` | No | `25` | Infinite mode only. AG Grid cache block size and fetcher request size. `tableConfig.pageSize` wins when present. |
|
|
122
|
+
| `refreshKey` | `string \| number \| boolean` | No | - | Infinite mode only. Parent invalidation signal that rebuilds the datasource from the beginning. |
|
|
123
|
+
| `tableConfig` | `TableDataGridConfig` | No | - | Host-controlled current sort, page size, and optional content-height sizing. Restores a previously-chosen sort on mount, or moves it after mount, without a click. Uncontrolled (internal state) when omitted. |
|
|
121
124
|
|
|
122
125
|
## Fetcher Contract
|
|
123
126
|
|
|
@@ -161,11 +164,38 @@ the public fetcher contract.
|
|
|
161
164
|
is omitted, `hasMore: false` or a response shorter than `pageSize` marks the last
|
|
162
165
|
loaded row as the end of the dataset.
|
|
163
166
|
|
|
167
|
+
## Complete Results
|
|
168
|
+
|
|
169
|
+
For a complete result that the host already loaded, set `mode="unpaginated"`
|
|
170
|
+
and pass `rows`. The rows go to AG Grid's client-side row model. The grid does
|
|
171
|
+
not fetch, show a loading overlay, or emit `state` events in this mode. The host
|
|
172
|
+
owns loading, refresh, and error handling, and replaces `rows` when its result
|
|
173
|
+
changes. An empty `rows` array shows the empty state.
|
|
174
|
+
|
|
175
|
+
The row model is selected when `TableDataGrid` mounts. To switch between
|
|
176
|
+
`infinite` and `unpaginated`, key the component by mode so Vue remounts it.
|
|
177
|
+
|
|
178
|
+
For compact, content-sized tables, set `tableConfig.fitToContent` to `true` and
|
|
179
|
+
leave the host height unconstrained. The grid fits its header and all returned
|
|
180
|
+
rows, retains horizontal scrolling, and resizes when the result changes. This
|
|
181
|
+
option defaults to `false` and is ignored in infinite mode. Otherwise, give the
|
|
182
|
+
host a height and the grid scrolls within it.
|
|
183
|
+
|
|
184
|
+
```vue
|
|
185
|
+
<TableDataGrid
|
|
186
|
+
mode="unpaginated"
|
|
187
|
+
:headers="headers"
|
|
188
|
+
:rows="rows"
|
|
189
|
+
/>
|
|
190
|
+
```
|
|
191
|
+
|
|
164
192
|
## Refresh Behavior
|
|
165
193
|
|
|
166
194
|
`refreshKey` is a parent-owned invalidation signal. Changing it rebuilds the
|
|
167
195
|
infinite datasource, clears stored cursors, and starts again from the first
|
|
168
|
-
block with `cursor: undefined`.
|
|
196
|
+
block with `cursor: undefined`. Replacing `fetcher` triggers the same reset;
|
|
197
|
+
subsequent requests use the new function and superseded responses cannot update
|
|
198
|
+
current rows or error state.
|
|
169
199
|
|
|
170
200
|
This reset is required for cursor APIs because cursor values are only valid
|
|
171
201
|
relative to the response and query chain that produced them. Reusing a later
|
|
@@ -223,6 +253,23 @@ should opt out of the default flexible fill behavior.
|
|
|
223
253
|
| `disableRowClick` | `boolean` | No | Suppresses `row:click` for clicks landing in this column's cells, e.g. an actions column. `cell:click` still fires. |
|
|
224
254
|
| `sortable` | `boolean` | No | Enables sorting on this column via AG Grid's built-in header sort control. Only one column can be sorted at a time. |
|
|
225
255
|
| `showSortIcon` | `boolean` | No | Shows the unsorted sort icon on this column even when it isn't the active sort, instead of only on hover or once sorted. Only relevant when `sortable` is true. |
|
|
256
|
+
| `dataType` | `'number'` | No | Enables numeric presentation options for this column. Aggregate options are applied only in unpaginated mode. |
|
|
257
|
+
| `valueFormatter` | `(value, row) => string` | No | Formats a raw value for display. A custom cell slot still receives the original `rowValue`. |
|
|
258
|
+
| `showPercentage` | `boolean` | No | In unpaginated numeric columns, shows the row's percentage of the complete returned column sum. |
|
|
259
|
+
| `percentageFormatter` | `(percentage) => string` | No | Optional formatter for the percentage points (50 means 50%) shown by `showPercentage`. The default uses the grid locale, up to two decimal places, and `< 0.01 %` for small positive values. |
|
|
260
|
+
| `bar` | `'relative' \| 'absolute'` | No | In unpaginated numeric columns, renders a bar. `relative` uses `value / sum`; `absolute` uses `value / maximum`, matching the TopN scales. |
|
|
261
|
+
| `thresholds` | `Array<{ value: number, type: 'warning' \| 'error' }>` | No | Applies threshold text/bar colors at or above the highest crossed threshold. Numeric finite values only. |
|
|
262
|
+
|
|
263
|
+
Numeric presentation is intentionally derived from the complete `rows` result
|
|
264
|
+
in unpaginated mode. Infinite mode does not calculate aggregate values; supplying
|
|
265
|
+
numeric presentation options there, or on a header without `dataType: 'number'`,
|
|
266
|
+
emits a console warning and omits those adornments. Nonnumeric or non-finite
|
|
267
|
+
values also warn once per column and keep their ordinary content without numeric
|
|
268
|
+
adornments. Missing values retain an empty bar track when a bar is configured.
|
|
269
|
+
Bars clamp to 0–100%; percentage labels are omitted when the column total is not positive.
|
|
270
|
+
|
|
271
|
+
Hosts render optional icons through the `cell-icon` slot. The grid places slot
|
|
272
|
+
content beside the cell value without replacing its default or custom content.
|
|
226
273
|
|
|
227
274
|
## Sorting
|
|
228
275
|
|
|
@@ -255,7 +302,13 @@ under one sort order is not valid under another.
|
|
|
255
302
|
## Custom Cell Content
|
|
256
303
|
|
|
257
304
|
Columns render custom cell content through a slot named after `header.key`.
|
|
258
|
-
Columns without a matching slot render
|
|
305
|
+
Columns without a matching slot render `valueFormatter(rowValue, row)` when
|
|
306
|
+
configured, otherwise their raw `rowValue`. The `cell-icon` slot, percentages,
|
|
307
|
+
and bars decorate both default values and slot content.
|
|
308
|
+
When a named slot renders no content, the grid falls back to the formatted
|
|
309
|
+
default value with ellipsis and an overflow tooltip; non-empty slot content
|
|
310
|
+
remains host-owned.
|
|
311
|
+
`cell-icon` is reserved for icon content and cannot name a column content slot.
|
|
259
312
|
|
|
260
313
|
```vue
|
|
261
314
|
<TableDataGrid
|
|
@@ -267,6 +320,9 @@ Columns without a matching slot render their raw `rowValue`.
|
|
|
267
320
|
{{ rowValue }}
|
|
268
321
|
</KBadge>
|
|
269
322
|
</template>
|
|
323
|
+
<template #cell-icon="{ column, rowValue }">
|
|
324
|
+
<ProviderIcon v-if="column.key === 'provider' && rowValue === 'openai'" />
|
|
325
|
+
</template>
|
|
270
326
|
</TableDataGrid>
|
|
271
327
|
```
|
|
272
328
|
|
|
@@ -275,7 +331,7 @@ Columns without a matching slot render their raw `rowValue`.
|
|
|
275
331
|
| `row` | `Row` | The full row record backing this cell. |
|
|
276
332
|
| `rowValue` | `unknown` | `row[header.key]`. |
|
|
277
333
|
| `column` | `TableDataGridHeader<Row>` | The header definition for this column. |
|
|
278
|
-
| `rowIndex` | `number` | The row's index in the currently loaded
|
|
334
|
+
| `rowIndex` | `number` | The row's index in the currently loaded result. |
|
|
279
335
|
| `selected` | `boolean` | Whether the row is currently selected. |
|
|
280
336
|
| `refreshCell` | `() => void` | Forces AG Grid to re-render this cell. |
|
|
281
337
|
|
|
@@ -284,7 +340,7 @@ Columns without a matching slot render their raw `rowValue`.
|
|
|
284
340
|
| Event | Payload | When it fires |
|
|
285
341
|
| --- | --- | --- |
|
|
286
342
|
| `grid:ready` | `GridApi<Row>` | AG Grid is ready. |
|
|
287
|
-
| `state` | `{ state: 'loading' \| 'success' \| 'error', hasData: boolean }` | Internal fetch lifecycle changes after the datasource starts requesting rows. |
|
|
343
|
+
| `state` | `{ state: 'loading' \| 'success' \| 'error', hasData: boolean }` | Internal fetch lifecycle changes after the datasource starts requesting rows. Not emitted in `unpaginated` mode. |
|
|
288
344
|
| `row:click` | `(row: TableDataGridRowClickPayload<Row>, event: RowClickedEvent<Row>)` | A row is clicked, unless the click landed in a `disableRowClick` column. |
|
|
289
345
|
| `cell:click` | `TableDataGridCellClickPayload<Row>` | Any cell is clicked, including cells in `disableRowClick` columns. |
|
|
290
346
|
| `sort` | `TableDataGridSort` | The current single-column sort changes. Fires before `update:tableConfig`. |
|
|
@@ -294,8 +350,9 @@ Columns without a matching slot render their raw `rowValue`.
|
|
|
294
350
|
|
|
295
351
|
| Slot | Purpose |
|
|
296
352
|
| --- | --- |
|
|
297
|
-
| `empty-state` | Replaces the default empty state after a successful empty
|
|
353
|
+
| `empty-state` | Replaces the default empty state after a successful empty result. |
|
|
298
354
|
| `error-state` | Replaces the default visible error state when `error` is true. |
|
|
355
|
+
| `cell-icon` | Adds optional host-rendered content before each cell's default value or column slot. Uses the same cell slot props; render nothing for cells without an icon. |
|
|
299
356
|
| `[columnKey]` | Renders custom cell content for the column matching `header.key`. See [Custom Cell Content](#custom-cell-content). |
|
|
300
357
|
|
|
301
358
|
## Exports
|
|
@@ -308,6 +365,7 @@ Columns without a matching slot render their raw `rowValue`.
|
|
|
308
365
|
- `TableDataGridCellClickPayload`
|
|
309
366
|
- `TableDataGridCellSlotProps`
|
|
310
367
|
- `TableDataGridHeader`
|
|
368
|
+
- `TableDataGridProps`
|
|
311
369
|
- `TableDataGridInfiniteFetcherParams`
|
|
312
370
|
- `TableDataGridFetcherResult`
|
|
313
371
|
- `TableDataGridFetcher`
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.table-data-grid-cell-renderer,.table-data-grid-cell-tooltip,.table-data-grid-cell-content{display:block;min-width:0;width:100%}.table-data-grid-cell-content{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kong-ui-public-table-data-grid[data-v-
|
|
1
|
+
.table-data-grid-cell-renderer,.table-data-grid-cell-tooltip,.table-data-grid-cell-content,.table-data-grid-cell-slot-content{display:block;min-width:0;width:100%}.table-data-grid-cell-renderer{align-items:center;display:flex;font-feature-settings:"case";font-variant-numeric:tabular-nums;gap:4px;gap:var(--kui-space-20, 4px);min-width:0;width:100%}.table-data-grid-cell-content,.table-data-grid-cell-slot-content,.table-data-grid-cell-relative{white-space:nowrap}.table-data-grid-cell-relative{font-size:12px;font-size:var(--kui-font-size-20, 12px);font-weight:400;font-weight:var(--kui-font-weight-regular, 400)}.table-data-grid-cell-renderer--bar .table-data-grid-cell-content,.table-data-grid-cell-renderer--bar .table-data-grid-cell-slot-content,.table-data-grid-cell-renderer--text-warning .table-data-grid-cell-content,.table-data-grid-cell-renderer--text-warning .table-data-grid-cell-slot-content,.table-data-grid-cell-renderer--text-error .table-data-grid-cell-content,.table-data-grid-cell-renderer--text-error .table-data-grid-cell-slot-content{font-weight:600;font-weight:var(--kui-font-weight-semibold, 600)}.table-data-grid-cell-renderer--text-warning{color:#995c00;color:var(--kui-color-text-warning, #995c00)}.table-data-grid-cell-renderer--text-error{color:#d60027;color:var(--kui-color-text-danger, #d60027)}.table-data-grid-cell-renderer--bar .table-data-grid-cell-content,.table-data-grid-cell-renderer--bar .table-data-grid-cell-slot-content,.table-data-grid-cell-renderer--bar .table-data-grid-cell-tooltip,.table-data-grid-cell-renderer--percentage .table-data-grid-cell-slot-content,.table-data-grid-cell-renderer--percentage .table-data-grid-cell-tooltip,.table-data-grid-cell-renderer--percentage .table-data-grid-cell-content{flex:0 1 auto;width:auto}.table-data-grid-cell-bar{background-color:#e0e4ea;background-color:var(--kui-color-background-neutral-weaker, #e0e4ea);border-radius:100px;border-radius:var(--kui-border-radius-round, 100px);display:block;flex:1 1 80px;height:8px;min-width:80px;overflow:hidden;width:100%}.table-data-grid-cell-bar-fill{background-color:#6a86d2;border-radius:inherit;display:block;height:100%}.table-data-grid-cell-bar[data-threshold=warning] .table-data-grid-cell-bar-fill{background-color:#995c00;background-color:var(--kui-color-background-warning, #995c00)}.table-data-grid-cell-bar[data-threshold=error] .table-data-grid-cell-bar-fill{background-color:#d60027;background-color:var(--kui-color-background-danger, #d60027)}.table-data-grid-cell-content{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kong-ui-public-table-data-grid[data-v-70223444]{border:none;border-radius:4px;border-radius:var(--kui-border-radius-20, 4px);box-sizing:border-box;display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden;width:100%}.kong-ui-public-table-data-grid.fit-to-content[data-v-70223444]{height:auto}.kong-ui-public-table-data-grid.fit-to-content[data-v-70223444] .ag-grid-scrolling-rows{min-height:0}.table-data-grid-grid[data-v-70223444]{--ag-background-color: var(--kui-color-background, #ffffff);--ag-border-color: var(--kui-color-border, #e0e4ea);--ag-foreground-color: var(--kui-color-text, #0d0e14);--ag-header-background-color: var(--kui-color-background, #ffffff);--ag-header-column-border: 1px solid var(--kui-color-border, #e0e4ea);--ag-header-column-border-height: 30%;--ag-header-column-resize-handle-color: transparent;--ag-header-font-weight: var(--kui-font-weight-semibold, 600);--ag-header-text-color: var(--kui-color-text-neutral, #6c7489);--ag-wrapper-border: none;--ag-wrapper-border-radius: 0;flex:1 1 auto;min-height:0;width:100%}.ag-cell{align-items:center;display:flex;min-width:0}.ag-cell-wrapper,.ag-cell-value{min-width:0;width:100%}
|