{ "id": "data-table-root", "type": "div", "bindings": { "className": { "source": "className", "transform": "(() => { return 'rounded-md border ' + (data || ''); })()" } }, "children": [ { "id": "data-table-wrapper", "type": "Table", "children": [ { "id": "data-table-header", "type": "TableHeader", "children": [ { "id": "data-table-header-row", "type": "TableRow", "children": [ { "id": "data-table-header-columns", "type": "forEach", "bindings": { "items": "columns", "children": { "id": "data-table-header-cell", "type": "TableHead", "bindings": { "style": { "transform": "(() => { return { width: data.width || 'auto' }; })()" }, "className": { "transform": "(() => { return data.sortable ? 'cursor-pointer select-none' : ''; })()" } }, "children": [ { "id": "data-table-header-cell-content", "bindings": { "children": "header" } } ] } } } ] } ] }, { "id": "data-table-body", "type": "TableBody", "children": [ { "id": "data-table-rows", "type": "conditional", "conditional": { "if": { "source": "data", "transform": "data.length === 0" } }, "children": [ { "id": "data-table-empty-row", "type": "TableRow", "children": [ { "id": "data-table-empty-cell", "type": "TableCell", "bindings": { "colSpan": { "transform": "$props.columns.length" } }, "props": { "className": "text-center py-8 text-muted-foreground" }, "children": [ { "id": "data-table-empty-message", "bindings": { "children": "emptyMessage" } } ] } ] } ] }, { "id": "data-table-data-rows", "type": "forEach", "bindings": { "items": "data" }, "children": { "id": "data-table-data-row", "type": "TableRow", "bindings": { "onClick": { "transform": "(() => { return () => $props.onRowClick?.(data); })()" }, "className": { "transform": "$props.onRowClick ? 'cursor-pointer' : ''" } }, "children": [ { "id": "data-table-data-cells", "type": "forEach", "bindings": { "items": "columns" }, "children": { "id": "data-table-data-cell", "type": "TableCell", "children": [ { "id": "data-table-data-cell-content", "bindings": { "children": { "transform": "(() => { const column = data; const rowData = $root.data; const cellValue = rowData[column.key]; return column.cell ? column.cell(rowData) : cellValue; })()" } } } ] } } ] } } ] } ] } ] }