compote-ui 0.56.1 → 0.58.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.
Files changed (46) hide show
  1. package/dist/components/data-table-v9/create-table.svelte.js +15 -14
  2. package/dist/components/toast/index.d.ts +3 -0
  3. package/dist/components/toast/index.js +2 -0
  4. package/dist/components/toast/toaster.svelte +49 -0
  5. package/dist/components/toast/toaster.svelte.d.ts +9 -0
  6. package/dist/index.d.ts +3 -2
  7. package/dist/index.js +2 -2
  8. package/package.json +6 -19
  9. package/dist/components/data-table-v8/column-helper.d.ts +0 -12
  10. package/dist/components/data-table-v8/column-helper.js +0 -42
  11. package/dist/components/data-table-v8/create-svelte-table.svelte.d.ts +0 -8
  12. package/dist/components/data-table-v8/create-svelte-table.svelte.js +0 -85
  13. package/dist/components/data-table-v8/create-table.svelte.d.ts +0 -35
  14. package/dist/components/data-table-v8/create-table.svelte.js +0 -234
  15. package/dist/components/data-table-v8/data-table-foot.svelte +0 -96
  16. package/dist/components/data-table-v8/data-table-foot.svelte.d.ts +0 -33
  17. package/dist/components/data-table-v8/data-table-head.svelte +0 -196
  18. package/dist/components/data-table-v8/data-table-head.svelte.d.ts +0 -35
  19. package/dist/components/data-table-v8/data-table-title.svelte +0 -16
  20. package/dist/components/data-table-v8/data-table-title.svelte.d.ts +0 -10
  21. package/dist/components/data-table-v8/data-table-utils.d.ts +0 -32
  22. package/dist/components/data-table-v8/data-table-utils.js +0 -160
  23. package/dist/components/data-table-v8/data-table.svelte +0 -273
  24. package/dist/components/data-table-v8/data-table.svelte.d.ts +0 -41
  25. package/dist/components/data-table-v8/flex-render.svelte +0 -35
  26. package/dist/components/data-table-v8/flex-render.svelte.d.ts +0 -28
  27. package/dist/components/data-table-v8/index.d.ts +0 -12
  28. package/dist/components/data-table-v8/index.js +0 -10
  29. package/dist/components/data-table-v8/render-helpers.d.ts +0 -13
  30. package/dist/components/data-table-v8/render-helpers.js +0 -23
  31. package/dist/components/data-table-v8/toolbar/data-table-column-filter.svelte +0 -373
  32. package/dist/components/data-table-v8/toolbar/data-table-column-filter.svelte.d.ts +0 -29
  33. package/dist/components/data-table-v8/toolbar/data-table-column-visibility.svelte +0 -73
  34. package/dist/components/data-table-v8/toolbar/data-table-column-visibility.svelte.d.ts +0 -29
  35. package/dist/components/data-table-v8/toolbar/data-table-search.svelte +0 -57
  36. package/dist/components/data-table-v8/toolbar/data-table-search.svelte.d.ts +0 -31
  37. package/dist/components/data-table-v8/toolbar/data-table-toolbar.svelte +0 -39
  38. package/dist/components/data-table-v8/toolbar/data-table-toolbar.svelte.d.ts +0 -12
  39. package/dist/components/data-table-v8/types.d.ts +0 -73
  40. package/dist/components/data-table-v8/types.js +0 -1
  41. package/dist/components/data-table-v8/virtual/data-table-virtual-rows.svelte +0 -176
  42. package/dist/components/data-table-v8/virtual/data-table-virtual-rows.svelte.d.ts +0 -40
  43. package/dist/components/data-table-v8/virtual/data-table-virtualized.svelte +0 -146
  44. package/dist/components/data-table-v8/virtual/data-table-virtualized.svelte.d.ts +0 -41
  45. package/dist/components/data-table-v8/virtual/index.d.ts +0 -3
  46. package/dist/components/data-table-v8/virtual/index.js +0 -2
@@ -1,273 +0,0 @@
1
- <script lang="ts" generics="T extends RowData">
2
- import type { RowData } from '@tanstack/table-core';
3
- import type { HTMLAttributes } from 'svelte/elements';
4
- import { cn, type ClassValue } from 'tailwind-variants';
5
- import { PhArrowSquareOut, PhCheck, PhX } from '../../icons';
6
- import type { DataTableInstance } from './data-table-utils';
7
- import DataTableHead from './data-table-head.svelte';
8
- import DataTableFoot from './data-table-foot.svelte';
9
- import FlexRender from './flex-render.svelte';
10
- import {
11
- alignClass,
12
- columnSizeStyle,
13
- getBooleanCellValue,
14
- getColumnMeta,
15
- getPinningStyle,
16
- getAllRowsSelectionState,
17
- getReactiveCells,
18
- getReactiveTableState,
19
- getSelectedRowCount,
20
- getUrlCellValue,
21
- justifyClass,
22
- openUrlCell,
23
- selectionColumnSizeStyle,
24
- tableSizeStyle
25
- } from './data-table-utils';
26
-
27
- type Props = Omit<HTMLAttributes<HTMLDivElement>, 'class'> & {
28
- table: DataTableInstance<T>;
29
- caption?: string;
30
- emptyMessage?: string;
31
- class?: ClassValue;
32
- onRowClick?: (details: { row: T; event: MouseEvent }) => void;
33
- onRowDoubleClick?: (details: { row: T; event: MouseEvent }) => void;
34
- };
35
-
36
- let {
37
- table,
38
- caption,
39
- emptyMessage = 'No rows found',
40
- class: className,
41
- onRowClick,
42
- onRowDoubleClick,
43
- ...rest
44
- }: Props = $props();
45
-
46
- const tableState = $derived(getReactiveTableState(table));
47
- const rowModel = $derived.by(() => {
48
- getReactiveTableState(table);
49
- return table.getRowModel();
50
- });
51
- const headerGroups = $derived.by(() => {
52
- const { columnPinning, columnVisibility } = getReactiveTableState(table);
53
- void columnPinning;
54
- void columnVisibility;
55
-
56
- const leftHeaderGroups = table.getLeftHeaderGroups();
57
- const centerHeaderGroups = table.getCenterHeaderGroups();
58
- const rightHeaderGroups = table.getRightHeaderGroups();
59
-
60
- return centerHeaderGroups.map((headerGroup, index) => {
61
- const merged = [
62
- ...(leftHeaderGroups[index]?.headers ?? []),
63
- ...headerGroup.headers,
64
- ...(rightHeaderGroups[index]?.headers ?? [])
65
- ];
66
-
67
- // When a column group spans pinned and unpinned columns, TanStack splits it
68
- // into separate header objects (one per section). Merge adjacent headers that
69
- // share the same column.id so the group label renders once.
70
- const headers = merged.reduce<typeof merged>((acc, header) => {
71
- const prev = acc[acc.length - 1];
72
- if (prev && prev.column.id === header.column.id) {
73
- acc[acc.length - 1] = { ...prev, colSpan: prev.colSpan + header.colSpan };
74
- } else {
75
- acc.push(header);
76
- }
77
- return acc;
78
- }, []);
79
-
80
- return {
81
- ...headerGroup,
82
- id: `${leftHeaderGroups[index]?.id ?? ''}|${headerGroup.id}|${rightHeaderGroups[index]?.id ?? ''}`,
83
- headers
84
- };
85
- });
86
- });
87
- const visibleLeafColumns = $derived.by(() => {
88
- const { columnVisibility } = getReactiveTableState(table);
89
- void columnVisibility;
90
- return table.getVisibleLeafColumns();
91
- });
92
- const growColumn = $derived(visibleLeafColumns.find((col) => getColumnMeta(col.columnDef)?.grow));
93
- const hasGrowColumn = $derived(growColumn !== undefined);
94
- const visibleColumnCount = $derived(visibleLeafColumns.length);
95
- const isRowSelectionEnabled = $derived(Boolean(table.options.enableRowSelection));
96
- const isMultiRowSelectionEnabled = $derived(table.options.enableMultiRowSelection !== false);
97
- const tableColumnCount = $derived(visibleColumnCount + (isRowSelectionEnabled ? 1 : 0));
98
- const renderedColumnCount = $derived(tableColumnCount + 1);
99
- const headerGroupCount = $derived(headerGroups.length);
100
- const allRowsSelectionState = $derived.by(() => {
101
- getReactiveTableState(table);
102
- return getAllRowsSelectionState(table);
103
- });
104
- const selectedRowCount = $derived.by(() => {
105
- getReactiveTableState(table);
106
- return getSelectedRowCount(table);
107
- });
108
- const isColumnResizing = $derived(tableState.columnSizingInfo.isResizingColumn !== false);
109
- const hasFooter = $derived(
110
- visibleLeafColumns.some((col) => {
111
- const meta = getColumnMeta(col.columnDef);
112
- return !!(meta?.sum || meta?.footer);
113
- })
114
- );
115
- </script>
116
-
117
- <div
118
- class={cn(
119
- 'flex max-h-full min-h-0 flex-col overflow-hidden rounded-lg border border-surface-3 bg-surface-1',
120
- className
121
- )}
122
- {...rest}
123
- >
124
- {#if isColumnResizing}
125
- <div aria-hidden="true" class="fixed inset-0 z-50 cursor-col-resize select-none"></div>
126
- {/if}
127
-
128
- <div class="min-h-0 flex-1 overflow-auto">
129
- <table
130
- class="table-fixed border-separate border-spacing-0 text-sm"
131
- style={tableSizeStyle(table, isRowSelectionEnabled)}
132
- >
133
- <colgroup>
134
- {#if isRowSelectionEnabled}
135
- <col style={selectionColumnSizeStyle()} />
136
- {/if}
137
- {#each visibleLeafColumns as column (column.id)}
138
- <col
139
- style={getColumnMeta(column.columnDef)?.grow
140
- ? undefined
141
- : columnSizeStyle(column.getSize())}
142
- />
143
- {/each}
144
- {#if !hasGrowColumn}
145
- <col />
146
- {/if}
147
- </colgroup>
148
- {#if caption}
149
- <caption class="sr-only">{caption}</caption>
150
- {/if}
151
- <DataTableHead
152
- {table}
153
- {headerGroups}
154
- {headerGroupCount}
155
- {isRowSelectionEnabled}
156
- {isMultiRowSelectionEnabled}
157
- {allRowsSelectionState}
158
- {hasGrowColumn}
159
- />
160
- <tbody>
161
- {#each rowModel.rows as row (row.id)}
162
- {@const rowSelected = getReactiveTableState(table).rowSelection[row.id] === true}
163
- <tr
164
- class={cn(
165
- 'group/row',
166
- '[--row-bg:var(--compote-surface-1)]',
167
- 'hover:bg-well/60 hover:[--row-bg:color-mix(in_srgb,var(--compote-well)_60%,var(--compote-surface-1))]',
168
- rowSelected &&
169
- 'bg-well/60 [--row-bg:color-mix(in_srgb,var(--compote-well)_60%,var(--compote-surface-1))]'
170
- )}
171
- onclick={(event) => onRowClick?.({ row: row.original, event })}
172
- ondblclick={(event) => onRowDoubleClick?.({ row: row.original, event })}
173
- >
174
- {#if isRowSelectionEnabled}
175
- <td
176
- class="border-b border-surface-2 bg-(--row-bg) px-3 py-2 text-center align-middle group-last/row:border-b-0"
177
- style="position: sticky; left: 0; z-index: 1"
178
- >
179
- <input
180
- type="checkbox"
181
- aria-label="Select row"
182
- class="table-checkbox mx-auto block size-4"
183
- checked={rowSelected}
184
- disabled={!row.getCanSelect()}
185
- onchange={(e) => row.toggleSelected(e.currentTarget.checked)}
186
- />
187
- </td>
188
- {/if}
189
- {#each getReactiveCells(row, getReactiveTableState(table).columnVisibility) as cell (cell.id)}
190
- {@const columnDef = getColumnMeta(cell.column.columnDef)}
191
- <td
192
- class={cn(
193
- 'truncate border-b border-b-surface-2 px-3 py-2 group-last/row:border-b-0',
194
- alignClass(columnDef?.align),
195
- cell.column.getIsPinned() && 'bg-(--row-bg)'
196
- )}
197
- style={getPinningStyle(cell.column, table, false, isRowSelectionEnabled)}
198
- >
199
- {#if columnDef?.type === 'boolean'}
200
- {@const value = getBooleanCellValue(cell.getValue())}
201
- {#if value === true}
202
- <span
203
- class="inline-flex size-5 items-center justify-center text-success"
204
- role="img"
205
- aria-label="Yes"
206
- >
207
- <PhCheck class="size-4" />
208
- </span>
209
- {:else if value === false}
210
- <span
211
- class="inline-flex size-5 items-center justify-center text-danger"
212
- role="img"
213
- aria-label="No"
214
- >
215
- <PhX class="size-4" />
216
- </span>
217
- {:else}
218
- -
219
- {/if}
220
- {:else if columnDef?.type === 'url'}
221
- {@const value = getUrlCellValue(cell.getValue())}
222
- {#if value}
223
- <button
224
- type="button"
225
- class={cn(
226
- 'inline-flex max-w-full appearance-none items-center gap-1.5 rounded-sm border-0 bg-transparent p-0 align-middle leading-5 font-medium text-ink underline decoration-border decoration-dotted underline-offset-4 outline-none hover:text-primary focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',
227
- justifyClass(columnDef.align)
228
- )}
229
- onclick={() => openUrlCell(value)}
230
- >
231
- <PhArrowSquareOut class="size-3.5 shrink-0" />
232
- </button>
233
- {:else}
234
- -
235
- {/if}
236
- {:else}
237
- <FlexRender content={cell.column.columnDef.cell} context={cell.getContext()} />
238
- {/if}
239
- </td>
240
- {/each}
241
- {#if !hasGrowColumn}
242
- <td aria-hidden="true" class="border-b border-surface-2 p-0 group-last/row:border-b-0"
243
- ></td>
244
- {/if}
245
- </tr>
246
- {:else}
247
- <tr>
248
- <td class="px-3 py-10 text-center text-sm text-ink-dim" colspan={renderedColumnCount}>
249
- {emptyMessage}
250
- </td>
251
- </tr>
252
- {/each}
253
- </tbody>
254
- {#if hasFooter}
255
- <DataTableFoot
256
- {table}
257
- {visibleLeafColumns}
258
- rows={rowModel.rows}
259
- {isRowSelectionEnabled}
260
- {hasGrowColumn}
261
- />
262
- {/if}
263
- </table>
264
- </div>
265
-
266
- <div class="shrink-0 border-t border-surface-3 bg-surface-2 px-3 py-2 text-sm text-ink-dim">
267
- {#if isRowSelectionEnabled}
268
- {selectedRowCount} of {rowModel.rows.length} rows selected
269
- {:else}
270
- {rowModel.rows.length} rows
271
- {/if}
272
- </div>
273
- </div>
@@ -1,41 +0,0 @@
1
- import type { RowData } from '@tanstack/table-core';
2
- import type { HTMLAttributes } from 'svelte/elements';
3
- import { type ClassValue } from 'tailwind-variants';
4
- import type { DataTableInstance } from './data-table-utils';
5
- declare function $$render<T extends RowData>(): {
6
- props: Omit<HTMLAttributes<HTMLDivElement>, "class"> & {
7
- table: DataTableInstance<T>;
8
- caption?: string;
9
- emptyMessage?: string;
10
- class?: ClassValue;
11
- onRowClick?: (details: {
12
- row: T;
13
- event: MouseEvent;
14
- }) => void;
15
- onRowDoubleClick?: (details: {
16
- row: T;
17
- event: MouseEvent;
18
- }) => void;
19
- };
20
- exports: {};
21
- bindings: "";
22
- slots: {};
23
- events: {};
24
- };
25
- declare class __sveltets_Render<T extends RowData> {
26
- props(): ReturnType<typeof $$render<T>>['props'];
27
- events(): ReturnType<typeof $$render<T>>['events'];
28
- slots(): ReturnType<typeof $$render<T>>['slots'];
29
- bindings(): "";
30
- exports(): {};
31
- }
32
- interface $$IsomorphicComponent {
33
- new <T extends RowData>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
34
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
35
- } & ReturnType<__sveltets_Render<T>['exports']>;
36
- <T extends RowData>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
37
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
38
- }
39
- declare const DataTable: $$IsomorphicComponent;
40
- type DataTable<T extends RowData> = InstanceType<typeof DataTable<T>>;
41
- export default DataTable;
@@ -1,35 +0,0 @@
1
- <script
2
- lang="ts"
3
- generics="TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>"
4
- >
5
- import type { CellContext, ColumnDefTemplate, HeaderContext } from '@tanstack/table-core';
6
- import { RenderComponentConfig, RenderSnippetConfig } from './render-helpers.js';
7
-
8
- type Props = {
9
- content?:
10
- | (TContext extends HeaderContext<TData, TValue>
11
- ? ColumnDefTemplate<HeaderContext<TData, TValue>>
12
- : TContext extends CellContext<TData, TValue>
13
- ? ColumnDefTemplate<CellContext<TData, TValue>>
14
- : never)
15
- | undefined;
16
- context: TContext;
17
- };
18
-
19
- let { content, context }: Props = $props();
20
- </script>
21
-
22
- {#if typeof content === 'string'}
23
- {content}
24
- {:else if content instanceof Function}
25
- {@const result = content(context as never)}
26
- {#if result instanceof RenderComponentConfig}
27
- {@const { component: Component, props } = result}
28
- <Component {...props} />
29
- {:else if result instanceof RenderSnippetConfig}
30
- {@const { snippet, params } = result}
31
- {@render snippet(params)}
32
- {:else}
33
- {result}
34
- {/if}
35
- {/if}
@@ -1,28 +0,0 @@
1
- import type { CellContext, ColumnDefTemplate, HeaderContext } from '@tanstack/table-core';
2
- declare function $$render<TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>>(): {
3
- props: {
4
- content?: (TContext extends HeaderContext<TData, TValue> ? ColumnDefTemplate<HeaderContext<TData, TValue>> : TContext extends CellContext<TData, TValue> ? ColumnDefTemplate<CellContext<TData, TValue>> : never) | undefined;
5
- context: TContext;
6
- };
7
- exports: {};
8
- bindings: "";
9
- slots: {};
10
- events: {};
11
- };
12
- declare class __sveltets_Render<TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>> {
13
- props(): ReturnType<typeof $$render<TData, TValue, TContext>>['props'];
14
- events(): ReturnType<typeof $$render<TData, TValue, TContext>>['events'];
15
- slots(): ReturnType<typeof $$render<TData, TValue, TContext>>['slots'];
16
- bindings(): "";
17
- exports(): {};
18
- }
19
- interface $$IsomorphicComponent {
20
- new <TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData, TValue, TContext>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData, TValue, TContext>['props']>, ReturnType<__sveltets_Render<TData, TValue, TContext>['events']>, ReturnType<__sveltets_Render<TData, TValue, TContext>['slots']>> & {
21
- $$bindings?: ReturnType<__sveltets_Render<TData, TValue, TContext>['bindings']>;
22
- } & ReturnType<__sveltets_Render<TData, TValue, TContext>['exports']>;
23
- <TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>>(internal: unknown, props: ReturnType<__sveltets_Render<TData, TValue, TContext>['props']> & {}): ReturnType<__sveltets_Render<TData, TValue, TContext>['exports']>;
24
- z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
25
- }
26
- declare const FlexRender: $$IsomorphicComponent;
27
- type FlexRender<TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>> = InstanceType<typeof FlexRender<TData, TValue, TContext>>;
28
- export default FlexRender;
@@ -1,12 +0,0 @@
1
- export { createDataTableColumnHelper } from './column-helper';
2
- export { createTable } from './create-table.svelte';
3
- export { renderComponent, renderSnippet } from './render-helpers';
4
- export { default as FlexRender } from './flex-render.svelte';
5
- export { default as Root } from './data-table.svelte';
6
- export { default as Title } from './data-table-title.svelte';
7
- export { default as Toolbar } from './toolbar/data-table-toolbar.svelte';
8
- export { default as ColumnFilter } from './toolbar/data-table-column-filter.svelte';
9
- export { default as ColumnVisibility } from './toolbar/data-table-column-visibility.svelte';
10
- export { default as Search } from './toolbar/data-table-search.svelte';
11
- export type { CreateDataTableOptions, DataTableInstance } from './create-table.svelte';
12
- export type { DataTableAlign, DataTableAccessorFnColumn, DataTableAccessorKeyColumn, DataTableColumn, DataTableColumnBase, DataTableColumnOptions, DataTableColumnType, DataTableCellPropsResolver, DataTableCellRenderProps, DataTableGroupColumn, DataTableLeafColumnBase, DataTableLeafColumn } from './types';
@@ -1,10 +0,0 @@
1
- export { createDataTableColumnHelper } from './column-helper';
2
- export { createTable } from './create-table.svelte';
3
- export { renderComponent, renderSnippet } from './render-helpers';
4
- export { default as FlexRender } from './flex-render.svelte';
5
- export { default as Root } from './data-table.svelte';
6
- export { default as Title } from './data-table-title.svelte';
7
- export { default as Toolbar } from './toolbar/data-table-toolbar.svelte';
8
- export { default as ColumnFilter } from './toolbar/data-table-column-filter.svelte';
9
- export { default as ColumnVisibility } from './toolbar/data-table-column-visibility.svelte';
10
- export { default as Search } from './toolbar/data-table-search.svelte';
@@ -1,13 +0,0 @@
1
- import type { Component, ComponentProps, Snippet } from 'svelte';
2
- export declare class RenderComponentConfig<TComponent extends Component> {
3
- component: TComponent;
4
- props: ComponentProps<TComponent> | Record<string, never>;
5
- constructor(component: TComponent, props?: ComponentProps<TComponent> | Record<string, never>);
6
- }
7
- export declare class RenderSnippetConfig<TProps> {
8
- snippet: Snippet<[TProps]>;
9
- params: TProps;
10
- constructor(snippet: Snippet<[TProps]>, params: TProps);
11
- }
12
- export declare function renderComponent<T extends Component<any>, Props extends ComponentProps<T>>(component: T, props?: Props): RenderComponentConfig<T>;
13
- export declare function renderSnippet<TProps>(snippet: Snippet<[TProps]>, params?: TProps): RenderSnippetConfig<TProps>;
@@ -1,23 +0,0 @@
1
- export class RenderComponentConfig {
2
- component;
3
- props;
4
- constructor(component, props = {}) {
5
- this.component = component;
6
- this.props = props;
7
- }
8
- }
9
- export class RenderSnippetConfig {
10
- snippet;
11
- params;
12
- constructor(snippet, params) {
13
- this.snippet = snippet;
14
- this.params = params;
15
- }
16
- }
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
- export function renderComponent(component, props = {}) {
19
- return new RenderComponentConfig(component, props);
20
- }
21
- export function renderSnippet(snippet, params = {}) {
22
- return new RenderSnippetConfig(snippet, params);
23
- }