diff --git a/src/lib/client/ui/navigation/tabs/Tabs.svelte b/src/lib/client/ui/navigation/tabs/Tabs.svelte new file mode 100644 index 0000000..ef5aab3 --- /dev/null +++ b/src/lib/client/ui/navigation/tabs/Tabs.svelte @@ -0,0 +1,33 @@ + + +
+ +
diff --git a/src/lib/client/ui/table/Table.svelte b/src/lib/client/ui/table/Table.svelte index aede8e6..4c59f64 100644 --- a/src/lib/client/ui/table/Table.svelte +++ b/src/lib/client/ui/table/Table.svelte @@ -9,6 +9,8 @@ key: string; /** Header text to display */ header: string; + /** Optional icon component to display before header text */ + headerIcon?: ComponentType; /** Optional width class (e.g., 'w-32', 'w-1/4') */ width?: string; /** Text alignment */ @@ -16,7 +18,7 @@ /** Whether column is sortable */ sortable?: boolean; /** Custom cell renderer - receives the full row object */ - cell?: (row: T) => string | ComponentType; + cell?: (row: T) => string | ComponentType | { html: string }; } /** @@ -27,6 +29,7 @@ export let hoverable: boolean = true; export let compact: boolean = false; export let emptyMessage: string = 'No data available'; + export let onRowClick: ((row: T) => void) | undefined = undefined; /** * Get cell value by key path (supports nested properties like 'user.name') @@ -61,7 +64,12 @@ - {column.header} +
+ {#if column.headerIcon} + + {/if} + {column.header} +
{/each} @@ -89,9 +97,10 @@ {:else} {#each data as row, rowIndex} onRowClick && onRowClick(row)} > {#each columns as column} {/if} @@ -124,3 +135,29 @@ + +