Codync
免費、開源的 1:1 替代方案,取代 Grok Bot 與 Muse。從 iPhone、Mac 或 Linux 桌面將 Claude Code、Codex、Cursor 與 40+ 程式碼代理人作為持續機器人傳訊。群組聊天、主題串…
AI 翻譯
A powerful, headless table library for Svelte that provides complete control over table UI while handling complex data operations like sorting, filtering, pagination, grouping, and row expansion. Build custom, accessible data tables with zero styling opinions.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Build and design powerful datagrid experiences while retaining 100% control over styles and markup.
Visit the documentation for code examples and API reference, and get started with the quick start guide!
Svelte Headless Table is designed to work seamlessly with Svelte. If you love Svelte, you will love Svelte Headless Table.
Svelte Headless Table comes with an extensive suite of plugins.
Easily extend Svelte Headless Table with complex sorting, filtering, grouping, pagination, and much more.
npm install @humanspeak/svelte-headless-table
Requires Svelte 5.30 or later. Upgrading from 6.x? Follow the migration guide.
<script>
import { createTable, Render } from '@humanspeak/svelte-headless-table';
const data = [
{ name: 'Ada Lovelace', age: 21 },
{ name: 'Barbara Liskov', age: 52 },
{ name: 'Richard Hamming', age: 38 },
];
const table = createTable(data);
const columns = table.createColumns([
table.column({
header: 'Name',
accessor: 'name',
}),
table.column({
header: 'Age',
accessor: 'age',
}),
]);
const vm = table.createViewModel(columns);
</script>
<table {...vm.current.tableAttrs}>
<thead>
{#each vm.current.headerRows as headerRow (headerRow.id)}
<tr {...headerRow.current.attrs}>
{#each headerRow.cells as cell (cell.id)}
<th {...cell.current.attrs}>
<Render of={cell.render()} />
</th>
{/each}
</tr>
{/each}
</thead>
<tbody {...vm.current.tableBodyAttrs}>
{#each vm.current.pageRows as row (row.id)}
<tr {...row.current.attrs}>
{#each row.cells as cell (cell.id)}
<td {...cell.current.attrs}>
<Render of={cell.render()} />
</td>
{/each}
</tr>
{/each}
</tbody>
</table>
Every row, cell and the view model itself expose a current object whose values are plain and reactive: read them in the template and they update as plugins change state, with no stores, $ syntax or wrapper components. For data that changes, keep it in $state and pass a getter: createTable(() => items).
Coming from 6.x, where tables were built on Svelte stores? See Migrating to v7.
Use createSnippetRender to render a cell (or header) with a snippet declared in the same component. Top-level snippets are hoisted, so they can be referenced from <script>.
<script>
import { createSnippetRender } from '@humanspeak/svelte-headless-table';
const columns = table.createColumns([
table.column({
accessor: 'name',
header: 'Name',
cell: ({ value }) => createSnippetRender(nameCell, value),
}),
]);
</script>
{#snippet nameCell(name)}
<strong>{name}</strong>
{/snippet}
For more complex examples with advanced features, visit the documentation site.
Part of the Humanspeak family of runes-native Svelte 5 packages:
| Package | Description |
|---|---|
| @humanspeak/svelte-markdown | Runtime markdown renderer for Svelte |
| @humanspeak/svelte-virtual-list | Virtual scrolling for Svelte |
| @humanspeak/svelte-motion | Framer Motion for Svelte 5 |
| @humanspeak/svelte-headless-table — this package | Headless data tables for Svelte |
| @humanspeak/svelte-virtual-chat | Virtual chat viewport for Svelte 5 |
| @humanspeak/svelte-diff | Diff comparison for Svelte |
| @humanspeak/svelte-purify | HTML sanitisation for Svelte |
| @humanspeak/memory-cache | In-memory cache for TypeScript |
| @humanspeak/svelte-json-view-lite | JSON tree viewer for Svelte 5 |
| @humanspeak/svelte-scoped-props | Scoped class props for Svelte |
MIT © Humanspeak, Inc.
Made with ❤️ by Humanspeak