compote-ui 0.43.15 → 0.44.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.
@@ -111,8 +111,10 @@
111
111
  <Popover.Trigger
112
112
  class="flex h-9 cursor-pointer items-center rounded-md border border-surface-3 bg-surface-1 px-3 text-sm font-medium text-ink shadow-sm outline-none hover:bg-surface-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring"
113
113
  >
114
- {triggerLabel}{#if activeCount > 0}
115
- ({activeCount}){/if}
114
+ {triggerLabel}
115
+ {#if activeCount > 0}
116
+ ({activeCount})
117
+ {/if}
116
118
  </Popover.Trigger>
117
119
 
118
120
  <Popover.Content class="w-72 px-0" showArrow={false}>
@@ -0,0 +1,57 @@
1
+ <script lang="ts" generics="T extends RowData">
2
+ import { onDestroy } from 'svelte';
3
+ import type { RowData } from '@tanstack/table-core';
4
+ import { cn, type ClassValue } from 'tailwind-variants';
5
+ import { PhMagnifyingGlass, PhX } from '../../icons';
6
+ import * as Field from '../field';
7
+ import { getReactiveTableState, type DataTableInstance } from './data-table-utils';
8
+
9
+ type Props = {
10
+ table: DataTableInstance<T>;
11
+ placeholder?: string;
12
+ class?: ClassValue;
13
+ };
14
+
15
+ let { table, placeholder = 'Search...', class: className }: Props = $props();
16
+
17
+ const globalFilter = $derived(
18
+ (getReactiveTableState(table).globalFilter as string | undefined) ?? ''
19
+ );
20
+
21
+ let timer: ReturnType<typeof setTimeout> | undefined;
22
+
23
+ onDestroy(() => clearTimeout(timer));
24
+
25
+ function handleInput(e: Event) {
26
+ const value = (e.currentTarget as HTMLInputElement).value;
27
+ clearTimeout(timer);
28
+ timer = setTimeout(() => {
29
+ table.setGlobalFilter(value || undefined);
30
+ }, 300);
31
+ }
32
+
33
+ function clearFilter() {
34
+ clearTimeout(timer);
35
+ table.setGlobalFilter(undefined);
36
+ }
37
+ </script>
38
+
39
+ <Field.Root class={cn(className)}>
40
+ <Field.Input {placeholder} value={globalFilter} oninput={handleInput}>
41
+ {#snippet startIcon()}
42
+ <PhMagnifyingGlass class="size-4" />
43
+ {/snippet}
44
+ {#snippet endIcon()}
45
+ {#if globalFilter}
46
+ <button
47
+ type="button"
48
+ onclick={clearFilter}
49
+ aria-label="Clear search"
50
+ class="flex size-5 items-center justify-center rounded text-ink-dim hover:text-ink focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-ring"
51
+ >
52
+ <PhX class="size-3.5" />
53
+ </button>
54
+ {/if}
55
+ {/snippet}
56
+ </Field.Input>
57
+ </Field.Root>
@@ -0,0 +1,31 @@
1
+ import type { RowData } from '@tanstack/table-core';
2
+ import { type ClassValue } from 'tailwind-variants';
3
+ import { type DataTableInstance } from './data-table-utils';
4
+ declare function $$render<T extends RowData>(): {
5
+ props: {
6
+ table: DataTableInstance<T>;
7
+ placeholder?: string;
8
+ class?: ClassValue;
9
+ };
10
+ exports: {};
11
+ bindings: "";
12
+ slots: {};
13
+ events: {};
14
+ };
15
+ declare class __sveltets_Render<T extends RowData> {
16
+ props(): ReturnType<typeof $$render<T>>['props'];
17
+ events(): ReturnType<typeof $$render<T>>['events'];
18
+ slots(): ReturnType<typeof $$render<T>>['slots'];
19
+ bindings(): "";
20
+ exports(): {};
21
+ }
22
+ interface $$IsomorphicComponent {
23
+ 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']>> & {
24
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
25
+ } & ReturnType<__sveltets_Render<T>['exports']>;
26
+ <T extends RowData>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
27
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
28
+ }
29
+ declare const DataTableSearch: $$IsomorphicComponent;
30
+ type DataTableSearch<T extends RowData> = InstanceType<typeof DataTableSearch<T>>;
31
+ export default DataTableSearch;
@@ -69,6 +69,7 @@
69
69
  {:else}
70
70
  {#each $rowVirtualizer.getVirtualItems() as virtualRow (virtualRow.index)}
71
71
  {@const row = rows[virtualRow.index]}
72
+ {#if row}
72
73
  {@const rowSelected = getReactiveTableState(table).rowSelection[row.id] === true}
73
74
  <tr
74
75
  data-index={virtualRow.index}
@@ -161,6 +162,7 @@
161
162
  </td>
162
163
  {/each}
163
164
  </tr>
165
+ {/if}
164
166
  {/each}
165
167
  {/if}
166
168
  </tbody>
@@ -7,5 +7,6 @@ export { default as Toolbar } from './data-table-toolbar.svelte';
7
7
  export { default as Title } from './data-table-title.svelte';
8
8
  export { default as ColumnVisibility } from './data-table-column-visibility.svelte';
9
9
  export { default as ColumnFilter } from './data-table-column-filter.svelte';
10
+ export { default as Search } from './data-table-search.svelte';
10
11
  export type { CreateDataTableOptions, DataTableInstance } from './create-table.svelte';
11
12
  export type { DataTableAlign, DataTableAccessorFnColumn, DataTableAccessorKeyColumn, DataTableColumn, DataTableColumnBase, DataTableColumnOptions, DataTableColumnType, DataTableCellPropsResolver, DataTableCellRenderProps, DataTableGroupColumn, DataTableLeafColumnBase, DataTableLeafColumn } from './types';
@@ -7,3 +7,4 @@ export { default as Toolbar } from './data-table-toolbar.svelte';
7
7
  export { default as Title } from './data-table-title.svelte';
8
8
  export { default as ColumnVisibility } from './data-table-column-visibility.svelte';
9
9
  export { default as ColumnFilter } from './data-table-column-filter.svelte';
10
+ export { default as Search } from './data-table-search.svelte';
@@ -1,3 +1,3 @@
1
1
  export { default as Root } from '../data-table-virtualized.svelte';
2
- export { ColumnFilter, ColumnVisibility, FlexRender, Title, Toolbar, createDataTableColumnHelper, createTable, renderComponent, renderSnippet } from '../index';
2
+ export { ColumnFilter, ColumnVisibility, FlexRender, Search, Title, Toolbar, createDataTableColumnHelper, createTable, renderComponent, renderSnippet } from '../index';
3
3
  export type { CreateDataTableOptions, DataTableAccessorFnColumn, DataTableAccessorKeyColumn, DataTableAlign, DataTableCellPropsResolver, DataTableCellRenderProps, DataTableColumn, DataTableColumnBase, DataTableColumnOptions, DataTableColumnType, DataTableGroupColumn, DataTableInstance, DataTableLeafColumn, DataTableLeafColumnBase } from '../index';
@@ -1,2 +1,2 @@
1
1
  export { default as Root } from '../data-table-virtualized.svelte';
2
- export { ColumnFilter, ColumnVisibility, FlexRender, Title, Toolbar, createDataTableColumnHelper, createTable, renderComponent, renderSnippet } from '../index';
2
+ export { ColumnFilter, ColumnVisibility, FlexRender, Search, Title, Toolbar, createDataTableColumnHelper, createTable, renderComponent, renderSnippet } from '../index';
@@ -47,7 +47,7 @@
47
47
  <Select.Control>
48
48
  <Select.Trigger
49
49
  class={cn(
50
- 'flex w-full cursor-pointer items-center justify-between rounded-md border bg-transparent px-3 text-sm shadow-sm focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none active:bg-surface-2 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-invalid:border-danger data-invalid:focus-visible:ring-danger',
50
+ 'flex w-full cursor-pointer items-center justify-between rounded-md border bg-surface-1 px-3 text-sm shadow-sm focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none active:bg-surface-2 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-invalid:border-danger data-invalid:focus-visible:ring-danger',
51
51
  size === 'sm' ? 'h-8' : 'h-9'
52
52
  )}
53
53
  >
@@ -37,13 +37,15 @@
37
37
  aria-label={`Resize ${panelConfig.id} and ${panels[i + 1].id}`}
38
38
  class={cn(
39
39
  'group relative flex shrink-0 items-center justify-center border-none bg-transparent p-0 outline-none',
40
- isHorizontal ? 'w-1.5 cursor-col-resize' : 'h-1.5 cursor-row-resize'
40
+ isHorizontal
41
+ ? 'w-1.5 cursor-col-resize data-disabled:cursor-default'
42
+ : 'h-1.5 cursor-row-resize data-disabled:cursor-default'
41
43
  )}
42
44
  >
43
45
  <!-- Divider line -->
44
46
  <div
45
47
  class={cn(
46
- 'absolute bg-surface-3 transition-colors group-focus-within:bg-primary group-hover:bg-primary/40 group-data-dragging:bg-primary',
48
+ 'absolute bg-surface-3 transition-colors group-focus-within:bg-primary group-hover:bg-primary/40 group-data-dragging:bg-primary group-data-disabled:bg-border',
47
49
  isHorizontal
48
50
  ? 'inset-y-0 left-1/2 w-px -translate-x-1/2'
49
51
  : 'inset-x-0 top-1/2 h-px -translate-y-1/2'
@@ -52,7 +54,7 @@
52
54
  <!-- Handle pill -->
53
55
  <div
54
56
  class={cn(
55
- 'relative z-10 rounded-full bg-surface-3 shadow-sm transition-colors group-hover:bg-primary/40 group-data-dragging:bg-primary',
57
+ 'relative z-10 rounded-full bg-surface-3 shadow-sm transition-colors group-hover:bg-primary/40 group-data-dragging:bg-primary group-data-disabled:invisible',
56
58
  isHorizontal ? 'h-6 w-1' : 'h-1 w-6'
57
59
  )}
58
60
  ></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "compote-ui",
3
- "version": "0.43.15",
3
+ "version": "0.44.0",
4
4
  "license": "MIT",
5
5
  "scripts": {
6
6
  "dev": "vite dev --open",