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 @@
+
+