nuance-ui 0.1.26 → 0.1.28

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 (29) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/app-shell/app-shell.d.vue.ts +19 -9
  3. package/dist/runtime/components/app-shell/app-shell.vue +7 -20
  4. package/dist/runtime/components/app-shell/app-shell.vue.d.ts +19 -9
  5. package/dist/runtime/components/app-shell/context.d.ts +5 -5
  6. package/dist/runtime/components/checkbox/checkbox.d.vue.ts +3 -4
  7. package/dist/runtime/components/checkbox/checkbox.vue +4 -6
  8. package/dist/runtime/components/checkbox/checkbox.vue.d.ts +3 -4
  9. package/dist/runtime/components/index.d.ts +1 -0
  10. package/dist/runtime/components/index.js +1 -0
  11. package/dist/runtime/components/table/_ui/table-row.d.vue.ts +35 -0
  12. package/dist/runtime/components/table/_ui/table-row.vue +74 -0
  13. package/dist/runtime/components/table/_ui/table-row.vue.d.ts +35 -0
  14. package/dist/runtime/components/table/index.d.ts +1 -0
  15. package/dist/runtime/components/table/index.js +1 -0
  16. package/dist/runtime/components/table/lib.d.ts +6 -0
  17. package/dist/runtime/components/table/lib.js +24 -0
  18. package/dist/runtime/components/table/model.d.ts +152 -0
  19. package/dist/runtime/components/table/model.js +0 -0
  20. package/dist/runtime/components/table/table.d.ts +30 -0
  21. package/dist/runtime/components/table/table.d.vue.ts +48 -0
  22. package/dist/runtime/components/table/table.vue +535 -0
  23. package/dist/runtime/components/table/table.vue.d.ts +48 -0
  24. package/dist/runtime/components/tree/_ui/tree-root.d.vue.ts +2 -2
  25. package/dist/runtime/components/tree/_ui/tree-root.vue.d.ts +2 -2
  26. package/dist/runtime/components/tree/lib/item-handlers.js +2 -2
  27. package/dist/runtime/components/tree/tree.d.vue.ts +2 -2
  28. package/dist/runtime/components/tree/tree.vue.d.ts +2 -2
  29. package/package.json +7 -5
@@ -0,0 +1,48 @@
1
+ import type { ColumnFiltersState, ColumnOrderState, ColumnPinningState, ColumnSizingInfoState, ColumnSizingState, ExpandedState, GroupingState, PaginationState, RowPinningState, RowSelectionState, SortingState, VisibilityState } from '@tanstack/vue-table';
2
+ import type { TableData, TableProps, TableSlots } from './model.js';
3
+ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: __VLS_PrettifyLocal<(TableProps<T> & {
5
+ globalFilter?: string;
6
+ columnFilters?: ColumnFiltersState;
7
+ columnOrder?: ColumnOrderState;
8
+ columnVisibility?: VisibilityState;
9
+ columnPinning?: ColumnPinningState;
10
+ columnSizing?: ColumnSizingState;
11
+ columnSizingInfo?: ColumnSizingInfoState;
12
+ rowSelection?: RowSelectionState;
13
+ rowPinning?: RowPinningState;
14
+ sorting?: SortingState;
15
+ grouping?: GroupingState;
16
+ expanded?: ExpandedState;
17
+ pagination?: PaginationState;
18
+ }) & {
19
+ "onUpdate:globalFilter"?: ((value: string | undefined) => any) | undefined;
20
+ "onUpdate:columnFilters"?: ((value: ColumnFiltersState | undefined) => any) | undefined;
21
+ "onUpdate:columnOrder"?: ((value: ColumnOrderState | undefined) => any) | undefined;
22
+ "onUpdate:columnVisibility"?: ((value: VisibilityState | undefined) => any) | undefined;
23
+ "onUpdate:columnPinning"?: ((value: ColumnPinningState | undefined) => any) | undefined;
24
+ "onUpdate:columnSizing"?: ((value: ColumnSizingState | undefined) => any) | undefined;
25
+ "onUpdate:columnSizingInfo"?: ((value: ColumnSizingInfoState | undefined) => any) | undefined;
26
+ "onUpdate:rowSelection"?: ((value: RowSelectionState | undefined) => any) | undefined;
27
+ "onUpdate:rowPinning"?: ((value: RowPinningState | undefined) => any) | undefined;
28
+ "onUpdate:sorting"?: ((value: SortingState | undefined) => any) | undefined;
29
+ "onUpdate:grouping"?: ((value: GroupingState | undefined) => any) | undefined;
30
+ "onUpdate:expanded"?: ((value: ExpandedState | undefined) => any) | undefined;
31
+ "onUpdate:pagination"?: ((value: PaginationState | undefined) => any) | undefined;
32
+ }> & import("vue").PublicProps;
33
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
34
+ readonly $el: HTMLElement;
35
+ tableRef: Readonly<import("vue").ShallowRef<HTMLTableElement | null>>;
36
+ table: import("@tanstack/table-core").Table<T>;
37
+ }>) => void;
38
+ attrs: any;
39
+ slots: TableSlots<T>;
40
+ emit: ((evt: "update:globalFilter", value: string | undefined) => void) & ((evt: "update:columnFilters", value: ColumnFiltersState | undefined) => void) & ((evt: "update:columnOrder", value: ColumnOrderState | undefined) => void) & ((evt: "update:columnVisibility", value: VisibilityState | undefined) => void) & ((evt: "update:columnPinning", value: ColumnPinningState | undefined) => void) & ((evt: "update:columnSizing", value: ColumnSizingState | undefined) => void) & ((evt: "update:columnSizingInfo", value: ColumnSizingInfoState | undefined) => void) & ((evt: "update:rowSelection", value: RowSelectionState | undefined) => void) & ((evt: "update:rowPinning", value: RowPinningState | undefined) => void) & ((evt: "update:sorting", value: SortingState | undefined) => void) & ((evt: "update:grouping", value: GroupingState | undefined) => void) & ((evt: "update:expanded", value: ExpandedState | undefined) => void) & ((evt: "update:pagination", value: PaginationState | undefined) => void);
41
+ }>) => import("vue").VNode & {
42
+ __ctx?: Awaited<typeof __VLS_setup>;
43
+ };
44
+ declare const _default: typeof __VLS_export;
45
+ export default _default;
46
+ type __VLS_PrettifyLocal<T> = {
47
+ [K in keyof T as K]: T[K];
48
+ } & {};
@@ -0,0 +1,535 @@
1
+ <script setup>
2
+ import {
3
+ FlexRender,
4
+ getCoreRowModel,
5
+ getExpandedRowModel,
6
+ getFilteredRowModel,
7
+ getSortedRowModel,
8
+ useVueTable
9
+ } from "@tanstack/vue-table";
10
+ import { useVirtualizer } from "@tanstack/vue-virtual";
11
+ import { reactivePick, unrefElement } from "@vueuse/core";
12
+ import { useStyleResolver } from "#imports";
13
+ import defu from "defu";
14
+ import { computed, ref, toRef, useTemplateRef, watch } from "vue";
15
+ import { getThemeColor } from "../../utils";
16
+ import Box from "../box.vue";
17
+ import TableRow from "./_ui/table-row.vue";
18
+ import { processColumns, resolveValue, valueUpdater } from "./lib";
19
+ defineOptions({ inheritAttrs: false });
20
+ const props = defineProps({
21
+ data: { type: Array, required: false },
22
+ columns: { type: Array, required: false },
23
+ caption: { type: String, required: false },
24
+ meta: { type: Object, required: false },
25
+ virtualize: { type: [Boolean, Object], required: false },
26
+ empty: { type: String, required: false },
27
+ sticky: { type: [Boolean, String], required: false },
28
+ loading: { type: Boolean, required: false },
29
+ loadingColor: { type: null, required: false },
30
+ verticalAlign: { type: null, required: false },
31
+ onSelect: { type: Function, required: false },
32
+ onHover: { type: Function, required: false },
33
+ onContextmenu: { type: [Function, Array], required: false },
34
+ classes: { type: Object, required: false },
35
+ watchOptions: { type: Object, required: false },
36
+ globalFilterOptions: { type: Object, required: false },
37
+ columnFiltersOptions: { type: Object, required: false },
38
+ columnPinningOptions: { type: Object, required: false },
39
+ columnSizingOptions: { type: Object, required: false },
40
+ visibilityOptions: { type: Object, required: false },
41
+ sortingOptions: { type: Object, required: false },
42
+ groupingOptions: { type: Object, required: false },
43
+ expandedOptions: { type: Object, required: false },
44
+ rowSelectionOptions: { type: Object, required: false },
45
+ rowPinningOptions: { type: Object, required: false },
46
+ paginationOptions: { type: Object, required: false },
47
+ facetedOptions: { type: Object, required: false },
48
+ state: { type: Object, required: false },
49
+ onStateChange: { type: Function, required: false },
50
+ renderFallbackValue: { type: null, required: false },
51
+ _features: { type: Array, required: false },
52
+ autoResetAll: { type: Boolean, required: false },
53
+ debugAll: { type: Boolean, required: false },
54
+ debugCells: { type: Boolean, required: false },
55
+ debugColumns: { type: Boolean, required: false },
56
+ debugHeaders: { type: Boolean, required: false },
57
+ debugRows: { type: Boolean, required: false },
58
+ debugTable: { type: Boolean, required: false },
59
+ defaultColumn: { type: Object, required: false },
60
+ getRowId: { type: Function, required: false },
61
+ getSubRows: { type: Function, required: false },
62
+ initialState: { type: Object, required: false },
63
+ mergeOptions: { type: Function, required: false }
64
+ });
65
+ defineSlots();
66
+ const data = ref(props.data ?? []);
67
+ const meta = computed(() => props?.meta ?? {});
68
+ const columns = computed(() => processColumns(props.columns ?? Object.keys(data.value[0] ?? {}).map((accessorKey) => ({ accessorKey, header: accessorKey }))));
69
+ const hasFooter = computed(() => {
70
+ function hasFooterRecursive(columns2) {
71
+ for (const column of columns2) {
72
+ if ("footer" in column)
73
+ return true;
74
+ if ("columns" in column && hasFooterRecursive(column.columns))
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+ return hasFooterRecursive(columns.value);
80
+ });
81
+ const globalFilterState = defineModel("globalFilter", { type: String });
82
+ const columnFiltersState = defineModel("columnFilters", { type: Array });
83
+ const columnOrderState = defineModel("columnOrder", { type: Array });
84
+ const columnVisibilityState = defineModel("columnVisibility", { type: Object });
85
+ const columnPinningState = defineModel("columnPinning", { type: Object });
86
+ const columnSizingState = defineModel("columnSizing", { type: Object });
87
+ const columnSizingInfoState = defineModel("columnSizingInfo", { type: Object });
88
+ const rowSelectionState = defineModel("rowSelection", { type: Object });
89
+ const rowPinningState = defineModel("rowPinning", { type: Object });
90
+ const sortingState = defineModel("sorting", { type: Array });
91
+ const groupingState = defineModel("grouping", { type: Array });
92
+ const expandedState = defineModel("expanded", { type: [Boolean, Object] });
93
+ const paginationState = defineModel("pagination", { type: Object });
94
+ const tableProps = reactivePick(props, "_features", "autoResetAll", "debugAll", "debugCells", "debugColumns", "debugHeaders", "debugRows", "debugTable", "defaultColumn", "getRowId", "getSubRows", "initialState", "mergeOptions", "renderFallbackValue");
95
+ const rootRef = useTemplateRef("rootRef");
96
+ const tableRef = useTemplateRef("tableRef");
97
+ const table = useVueTable({
98
+ ...tableProps,
99
+ get data() {
100
+ return data.value;
101
+ },
102
+ get columns() {
103
+ return columns.value;
104
+ },
105
+ meta: meta.value,
106
+ getCoreRowModel: getCoreRowModel(),
107
+ ...props.globalFilterOptions || {},
108
+ ...globalFilterState.value !== void 0 && {
109
+ onGlobalFilterChange: (updaterOrValue) => valueUpdater(updaterOrValue, globalFilterState)
110
+ },
111
+ ...props.columnFiltersOptions || {},
112
+ getFilteredRowModel: getFilteredRowModel(),
113
+ ...columnFiltersState.value !== void 0 && {
114
+ onColumnFiltersChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnFiltersState)
115
+ },
116
+ ...columnOrderState.value !== void 0 && {
117
+ onColumnOrderChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnOrderState)
118
+ },
119
+ ...props.visibilityOptions || {},
120
+ ...columnVisibilityState.value !== void 0 && {
121
+ onColumnVisibilityChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnVisibilityState)
122
+ },
123
+ ...props.columnPinningOptions || {},
124
+ ...columnPinningState.value !== void 0 && {
125
+ onColumnPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnPinningState)
126
+ },
127
+ ...props.columnSizingOptions || {},
128
+ ...columnSizingState.value !== void 0 && {
129
+ onColumnSizingChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingState)
130
+ },
131
+ ...columnSizingInfoState.value !== void 0 && {
132
+ onColumnSizingInfoChange: (updaterOrValue) => valueUpdater(updaterOrValue, columnSizingInfoState)
133
+ },
134
+ ...props.rowSelectionOptions || {},
135
+ ...rowSelectionState.value !== void 0 && {
136
+ onRowSelectionChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowSelectionState)
137
+ },
138
+ ...props.rowPinningOptions || {},
139
+ ...rowPinningState.value !== void 0 && {
140
+ onRowPinningChange: (updaterOrValue) => valueUpdater(updaterOrValue, rowPinningState)
141
+ },
142
+ ...props.sortingOptions || {},
143
+ getSortedRowModel: getSortedRowModel(),
144
+ ...sortingState.value !== void 0 && {
145
+ onSortingChange: (updaterOrValue) => valueUpdater(updaterOrValue, sortingState)
146
+ },
147
+ ...props.groupingOptions || {},
148
+ ...groupingState.value !== void 0 && {
149
+ onGroupingChange: (updaterOrValue) => valueUpdater(updaterOrValue, groupingState)
150
+ },
151
+ ...props.expandedOptions || {},
152
+ getExpandedRowModel: getExpandedRowModel(),
153
+ ...expandedState.value !== void 0 && {
154
+ onExpandedChange: (updaterOrValue) => valueUpdater(updaterOrValue, expandedState)
155
+ },
156
+ ...props.paginationOptions || {},
157
+ ...paginationState.value !== void 0 && {
158
+ onPaginationChange: (updaterOrValue) => valueUpdater(updaterOrValue, paginationState)
159
+ },
160
+ ...props.facetedOptions || {},
161
+ state: {
162
+ get globalFilter() {
163
+ return globalFilterState.value;
164
+ },
165
+ get columnFilters() {
166
+ return columnFiltersState.value;
167
+ },
168
+ get columnOrder() {
169
+ return columnOrderState.value;
170
+ },
171
+ get columnVisibility() {
172
+ return columnVisibilityState.value;
173
+ },
174
+ get columnPinning() {
175
+ return columnPinningState.value;
176
+ },
177
+ get expanded() {
178
+ return expandedState.value;
179
+ },
180
+ get rowSelection() {
181
+ return rowSelectionState.value;
182
+ },
183
+ get sorting() {
184
+ return sortingState.value;
185
+ },
186
+ get grouping() {
187
+ return groupingState.value;
188
+ },
189
+ get rowPinning() {
190
+ return rowPinningState.value;
191
+ },
192
+ get columnSizing() {
193
+ return columnSizingState.value;
194
+ },
195
+ get columnSizingInfo() {
196
+ return columnSizingInfoState.value;
197
+ },
198
+ get pagination() {
199
+ return paginationState.value;
200
+ }
201
+ }
202
+ });
203
+ const rows = computed(() => table.getRowModel().rows);
204
+ watch(() => props.data, () => {
205
+ data.value = props.data ? [...props.data] : [];
206
+ }, props.watchOptions);
207
+ const virtualizerProps = toRef(() => defu(typeof props.virtualize === "boolean" ? {} : props.virtualize, {
208
+ estimateSize: 65,
209
+ overscan: 12
210
+ }));
211
+ const virtualizer = !!props.virtualize && useVirtualizer({
212
+ ...virtualizerProps.value,
213
+ get count() {
214
+ return rows.value.length;
215
+ },
216
+ getScrollElement: () => unrefElement(rootRef),
217
+ estimateSize: (index) => {
218
+ const estimate = virtualizerProps.value.estimateSize;
219
+ return typeof estimate === "function" ? estimate(index) : estimate;
220
+ }
221
+ });
222
+ const renderedSize = computed(() => {
223
+ if (!virtualizer)
224
+ return 0;
225
+ const virtualItems = virtualizer.value.getVirtualItems();
226
+ if (!virtualItems?.length)
227
+ return 0;
228
+ return virtualItems.reduce((sum, item) => sum + item.size, 0);
229
+ });
230
+ const style = computed(() => useStyleResolver((theme) => ({
231
+ "--table-loader-color": props.loadingColor ? getThemeColor(props.loadingColor, theme) : void 0,
232
+ "--vertical-align": props.verticalAlign
233
+ })));
234
+ defineExpose({
235
+ get $el() {
236
+ return unrefElement(rootRef);
237
+ },
238
+ tableRef,
239
+ table
240
+ });
241
+ </script>
242
+
243
+ <template>
244
+ <Box
245
+ ref='rootRef'
246
+ :class='[$style.root, props.classes?.root]'
247
+ :style='[
248
+ virtualizer ? { height: `${virtualizer.getTotalSize()}px` } : void 0,
249
+ style
250
+ ]'
251
+ :mod='{ virtualize: !!virtualizer }'
252
+ >
253
+ <table ref='tableRef' :class='[$style.table, props.classes?.table]'>
254
+ <caption v-if='caption || $slots.caption' :class='props.classes?.caption'>
255
+ <slot name='caption'>
256
+ {{ props.caption }}
257
+ </slot>
258
+ </caption>
259
+
260
+ <Box
261
+ is='thead'
262
+ :class='$style.thead'
263
+ :mod='{
264
+ sticky: props.sticky === "header" || props.sticky === true,
265
+ loading: props.loading
266
+ }'
267
+ >
268
+ <tr v-for='headerGroup in table.getHeaderGroups()' :key='headerGroup.id' :class='$style.tr'>
269
+ <Box
270
+ is='th'
271
+ v-for='header in headerGroup.headers'
272
+ :key='header.id'
273
+ :mod='{ pinned: header.column.getIsPinned() }'
274
+ :scope="header.colSpan > 1 ? 'colgroup' : 'col'"
275
+ :colspan='header.colSpan > 1 ? header.colSpan : void 0'
276
+ :rowspan='header.rowSpan > 1 ? header.rowSpan : void 0'
277
+ :class='[$style.th, props.classes?.th, resolveValue(header.column.columnDef.meta?.class?.th, header)]'
278
+ :style='resolveValue(header.column.columnDef.meta?.style?.th, header)'
279
+ >
280
+ <slot :name='`${header.id}-header`' v-bind='header.getContext()'>
281
+ <FlexRender
282
+ v-if='!header.isPlaceholder'
283
+ :render='header.column.columnDef.header'
284
+ :props='header.getContext()'
285
+ />
286
+ </slot>
287
+ </Box>
288
+ </tr>
289
+
290
+ <tr :class='[$style.separator, props.classes?.separator]' />
291
+ </Box>
292
+
293
+ <tbody :class='[$style.tbody, props.classes?.tbody]'>
294
+ <slot name='body-top' />
295
+
296
+ <template v-if='rows.length'>
297
+ <template v-if='virtualizer'>
298
+ <template v-for='(virtualRow, index) in virtualizer.getVirtualItems()' :key='rows[virtualRow.index]?.id'>
299
+ <TableRow
300
+ :row='rows[virtualRow.index]'
301
+ :class='[$style.tr, props.classes?.tr, resolveValue(table.options.meta?.class?.tr, virtualRow)]'
302
+ :style='[
303
+ {
304
+ height: `${virtualRow.size}px`,
305
+ transform: `translateY(${virtualRow.start - index * virtualRow.size}px)`
306
+ },
307
+ resolveValue(table.options.meta?.style?.tr, virtualRow)
308
+ ]'
309
+ :on-select='props?.onSelect'
310
+ :on-hover='props?.onHover'
311
+ :on-contextmenu='props?.onContextmenu'
312
+ />
313
+ </template>
314
+ </template>
315
+
316
+ <template v-else>
317
+ <TableRow
318
+ v-for='row in rows'
319
+ :key='row.id'
320
+ :row='row'
321
+ :class='[$style.tr, props.classes?.tr, resolveValue(table.options.meta?.class?.tr, row)]'
322
+ :style='resolveValue(table.options.meta?.style?.tr, row)'
323
+ :on-select='props?.onSelect'
324
+ :on-hover='props?.onHover'
325
+ :on-contextmenu='props?.onContextmenu'
326
+ />
327
+ </template>
328
+ </template>
329
+
330
+ <tr v-else-if='loading && !!$slots.loading'>
331
+ <td :colspan='table.getAllLeafColumns().length' :class='[$style.loading, props.classes?.loading]'>
332
+ <slot name='loading' />
333
+ </td>
334
+ </tr>
335
+
336
+ <tr v-else>
337
+ <td :colspan='table.getAllLeafColumns().length' :class='[$style.empty, props.classes?.empty]'>
338
+ <slot name='empty'>
339
+ {{ empty || "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445" }}
340
+ </slot>
341
+ </td>
342
+ </tr>
343
+
344
+ <slot name='body-bottom' />
345
+ </tbody>
346
+
347
+ <Box
348
+ is='tfoot'
349
+ v-if='hasFooter'
350
+ :class='[$style.tfoot, props.classes?.tfoot]'
351
+ :style='virtualizer ? { transform: `translateY(${virtualizer.getTotalSize() - renderedSize}px)` } : void 0'
352
+ :mod='{ sticky: props.sticky === "footer" || props.sticky === true }'
353
+ >
354
+ <tr :class='[$style.separator, props.classes?.separator]' />
355
+
356
+ <tr v-for='footerGroup in table.getFooterGroups()' :key='footerGroup.id' :class='[$style.tr, props.classes?.tr]'>
357
+ <Box
358
+ is='th'
359
+ v-for='header in footerGroup.headers'
360
+ :key='header.id'
361
+ :mod='{ pinned: header.column.getIsPinned() }'
362
+ :colspan='header.colSpan > 1 ? header.colSpan : void 0'
363
+ :rowspan='header.rowSpan > 1 ? header.rowSpan : void 0'
364
+ :class='[$style.th, props.classes?.th, resolveValue(header.column.columnDef.meta?.class?.th, header)]'
365
+ :style='resolveValue(header.column.columnDef.meta?.style?.th, header)'
366
+ >
367
+ <slot :name='`${header.id}-footer`' v-bind='header.getContext()'>
368
+ <FlexRender
369
+ v-if='!header.isPlaceholder'
370
+ :render='header.column.columnDef.footer'
371
+ :props='header.getContext()'
372
+ />
373
+ </slot>
374
+ </Box>
375
+ </tr>
376
+ </Box>
377
+ </table>
378
+ </Box>
379
+ </template>
380
+
381
+ <style lang="postcss" module>
382
+ .root {
383
+ --table-color: var(--color-primary-4);
384
+ --table-loader-color: var(--table-color);
385
+ --table-loader-animation: carousel 2s ease-in-out infinite;
386
+ --table-padding-x: .5rem;
387
+ --table-padding-y: .5rem;
388
+ --vertical-align: baseline;
389
+
390
+ @mixin where-light {
391
+ --table-active-bg: alpha(var(--color-slate-1), .5);
392
+ --table-c: var(--color-slate-7);
393
+ --table-bd-color: var(--color-slate-3);
394
+ }
395
+
396
+ @mixin where-dark {
397
+ --table-active-bg: alpha(var(--color-slate-7), .5);
398
+ --table-c: var(--color-slate-4);
399
+ --table-bd-color: var(--color-slate-7);
400
+ }
401
+
402
+ position: relative;
403
+ overflow: auto;
404
+
405
+ &:not([data-virtualize]) {
406
+ .table {
407
+ overflow: clip;
408
+ }
409
+
410
+ .tbody > tr:not(:last-of-type) {
411
+ border-bottom: 1px solid var(--table-bd-color);
412
+ }
413
+ }
414
+ }
415
+
416
+ .table {
417
+ min-width: 100%;
418
+ border-collapse: collapse;
419
+ }
420
+
421
+ .thead {
422
+ position: relative;
423
+
424
+ &[data-loading]::after {
425
+ content: '';
426
+ position: absolute;
427
+ z-index: 1;
428
+ height: 1px;
429
+ background-color: alpha(var(--table-loader-color), .75);
430
+ animation: var(--table-loader-animation);
431
+ }
432
+
433
+ &[data-sticky] {
434
+ position: sticky;
435
+ top: 0;
436
+ inset-inline: 0rem;
437
+ z-index: 1;
438
+
439
+ background-color: alpha(var(--color-body), .75);
440
+ backdrop-filter: blur(8px);
441
+ }
442
+ }
443
+
444
+ .th {
445
+ font-weight: 600;
446
+ padding-block: var(--table-padding-y);
447
+ padding-inline: var(--table-padding-x);
448
+ text-align: left;
449
+ color: var(--table-c);
450
+ vertical-align: var(--vertical-align);
451
+
452
+ &:has([role='checkbox']) {
453
+ padding-inline-end: 0;
454
+ }
455
+ }
456
+
457
+ .th[data-pinned],
458
+ .tr td[data-pinned] {
459
+ position: sticky;
460
+ z-index: 1;
461
+ background-color: alpha(var(--color-body), .75);
462
+ }
463
+
464
+ .tbody {
465
+ isolation: isolate;
466
+ }
467
+
468
+ .tfoot {
469
+ position: relative;
470
+
471
+ &[data-sticky] {
472
+ position: sticky;
473
+ bottom: 0;
474
+ inset-inline: 0rem;
475
+ z-index: 1;
476
+
477
+ background-color: var(--color-body);
478
+ backdrop-filter: blur(8px);
479
+ }
480
+ }
481
+
482
+ .tr {
483
+ &[data-selectable] {
484
+ &:hover {
485
+ background-color: var(--table-active-bg);
486
+ }
487
+ &:focus-visible {
488
+ outline: 1px solid var(--table-color);
489
+ }
490
+ }
491
+
492
+ &[data-selected] {
493
+ background-color: var(--table-active-bg);
494
+ }
495
+
496
+ td {
497
+ white-space: nowrap;
498
+ padding-block: var(--table-padding-y);
499
+ padding-inline: var(--table-padding-x);
500
+ color: var(--table-c);
501
+ vertical-align: var(--vertical-align);
502
+
503
+ &:has([role='checkbox']) {
504
+ padding-inline-end: 0;
505
+ }
506
+ }
507
+ }
508
+
509
+ .separator {
510
+ position: absolute;
511
+ z-index: 1;
512
+ left: 0;
513
+ width: 100%;
514
+ height: 1px;
515
+ background-color: var(--table-bd-color);
516
+ }
517
+
518
+ .loading,
519
+ .empty {
520
+ padding-inline: 1.5rem;
521
+ text-align: center;
522
+ }
523
+
524
+ @keyframes carousel {
525
+ 0%, to{
526
+ width:50%
527
+ }
528
+ 0%{
529
+ transform:translate(-100%)
530
+ }
531
+ to{
532
+ transform:translate(200%)
533
+ }
534
+ }
535
+ </style>
@@ -0,0 +1,48 @@
1
+ import type { ColumnFiltersState, ColumnOrderState, ColumnPinningState, ColumnSizingInfoState, ColumnSizingState, ExpandedState, GroupingState, PaginationState, RowPinningState, RowSelectionState, SortingState, VisibilityState } from '@tanstack/vue-table';
2
+ import type { TableData, TableProps, TableSlots } from './model.js';
3
+ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: __VLS_PrettifyLocal<(TableProps<T> & {
5
+ globalFilter?: string;
6
+ columnFilters?: ColumnFiltersState;
7
+ columnOrder?: ColumnOrderState;
8
+ columnVisibility?: VisibilityState;
9
+ columnPinning?: ColumnPinningState;
10
+ columnSizing?: ColumnSizingState;
11
+ columnSizingInfo?: ColumnSizingInfoState;
12
+ rowSelection?: RowSelectionState;
13
+ rowPinning?: RowPinningState;
14
+ sorting?: SortingState;
15
+ grouping?: GroupingState;
16
+ expanded?: ExpandedState;
17
+ pagination?: PaginationState;
18
+ }) & {
19
+ "onUpdate:globalFilter"?: ((value: string | undefined) => any) | undefined;
20
+ "onUpdate:columnFilters"?: ((value: ColumnFiltersState | undefined) => any) | undefined;
21
+ "onUpdate:columnOrder"?: ((value: ColumnOrderState | undefined) => any) | undefined;
22
+ "onUpdate:columnVisibility"?: ((value: VisibilityState | undefined) => any) | undefined;
23
+ "onUpdate:columnPinning"?: ((value: ColumnPinningState | undefined) => any) | undefined;
24
+ "onUpdate:columnSizing"?: ((value: ColumnSizingState | undefined) => any) | undefined;
25
+ "onUpdate:columnSizingInfo"?: ((value: ColumnSizingInfoState | undefined) => any) | undefined;
26
+ "onUpdate:rowSelection"?: ((value: RowSelectionState | undefined) => any) | undefined;
27
+ "onUpdate:rowPinning"?: ((value: RowPinningState | undefined) => any) | undefined;
28
+ "onUpdate:sorting"?: ((value: SortingState | undefined) => any) | undefined;
29
+ "onUpdate:grouping"?: ((value: GroupingState | undefined) => any) | undefined;
30
+ "onUpdate:expanded"?: ((value: ExpandedState | undefined) => any) | undefined;
31
+ "onUpdate:pagination"?: ((value: PaginationState | undefined) => any) | undefined;
32
+ }> & import("vue").PublicProps;
33
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
34
+ readonly $el: HTMLElement;
35
+ tableRef: Readonly<import("vue").ShallowRef<HTMLTableElement | null>>;
36
+ table: import("@tanstack/table-core").Table<T>;
37
+ }>) => void;
38
+ attrs: any;
39
+ slots: TableSlots<T>;
40
+ emit: ((evt: "update:globalFilter", value: string | undefined) => void) & ((evt: "update:columnFilters", value: ColumnFiltersState | undefined) => void) & ((evt: "update:columnOrder", value: ColumnOrderState | undefined) => void) & ((evt: "update:columnVisibility", value: VisibilityState | undefined) => void) & ((evt: "update:columnPinning", value: ColumnPinningState | undefined) => void) & ((evt: "update:columnSizing", value: ColumnSizingState | undefined) => void) & ((evt: "update:columnSizingInfo", value: ColumnSizingInfoState | undefined) => void) & ((evt: "update:rowSelection", value: RowSelectionState | undefined) => void) & ((evt: "update:rowPinning", value: RowPinningState | undefined) => void) & ((evt: "update:sorting", value: SortingState | undefined) => void) & ((evt: "update:grouping", value: GroupingState | undefined) => void) & ((evt: "update:expanded", value: ExpandedState | undefined) => void) & ((evt: "update:pagination", value: PaginationState | undefined) => void);
41
+ }>) => import("vue").VNode & {
42
+ __ctx?: Awaited<typeof __VLS_setup>;
43
+ };
44
+ declare const _default: typeof __VLS_export;
45
+ export default _default;
46
+ type __VLS_PrettifyLocal<T> = {
47
+ [K in keyof T as K]: T[K];
48
+ } & {};
@@ -23,14 +23,14 @@ type __VLS_Slots = {} & {
23
23
  };
24
24
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
25
25
  delete: (path: string[]) => any;
26
+ "update:expanded": (value: string[]) => any;
26
27
  "update:active": (value: string | null) => any;
27
28
  "update:selected": (value: string[]) => any;
28
- "update:expanded": (value: string[]) => any;
29
29
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
30
30
  onDelete?: ((path: string[]) => any) | undefined;
31
+ "onUpdate:expanded"?: ((value: string[]) => any) | undefined;
31
32
  "onUpdate:active"?: ((value: string | null) => any) | undefined;
32
33
  "onUpdate:selected"?: ((value: string[]) => any) | undefined;
33
- "onUpdate:expanded"?: ((value: string[]) => any) | undefined;
34
34
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
35
35
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
36
36
  declare const _default: typeof __VLS_export;
@@ -23,14 +23,14 @@ type __VLS_Slots = {} & {
23
23
  };
24
24
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
25
25
  delete: (path: string[]) => any;
26
+ "update:expanded": (value: string[]) => any;
26
27
  "update:active": (value: string | null) => any;
27
28
  "update:selected": (value: string[]) => any;
28
- "update:expanded": (value: string[]) => any;
29
29
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
30
30
  onDelete?: ((path: string[]) => any) | undefined;
31
+ "onUpdate:expanded"?: ((value: string[]) => any) | undefined;
31
32
  "onUpdate:active"?: ((value: string | null) => any) | undefined;
32
33
  "onUpdate:selected"?: ((value: string[]) => any) | undefined;
33
- "onUpdate:expanded"?: ((value: string[]) => any) | undefined;
34
34
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
35
35
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
36
36
  declare const _default: typeof __VLS_export;
@@ -21,7 +21,7 @@ export function useTreeItemHandlers(path, isFolder, expanded) {
21
21
  if (isFolder.value && expanded.value)
22
22
  return ctx.off("expand", path);
23
23
  else
24
- return focus("prev", event.currentTarget);
24
+ return focus?.("prev", event.currentTarget);
25
25
  }
26
26
  // Arrow Right - открыть папку или перейти к первому ребенку
27
27
  case "ArrowRight": {
@@ -29,7 +29,7 @@ export function useTreeItemHandlers(path, isFolder, expanded) {
29
29
  if (isFolder.value && !expanded.value)
30
30
  return ctx.on("expand", path);
31
31
  else if (expanded.value)
32
- return focus("next", event.currentTarget);
32
+ return focus?.("next", event.currentTarget);
33
33
  break;
34
34
  }
35
35
  // Enter/Space - выбор элемента