@ui-organized/svelte-table 0.0.0-stage → 6.0.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.
Files changed (208) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +99 -2
  3. package/dist/DataTable/DataTable.svelte +62 -0
  4. package/dist/DataTable/DataTable.svelte.d.ts +29 -0
  5. package/dist/DataTable/DataTable.svelte.d.ts.map +1 -0
  6. package/dist/DataTable/DataTable.test.svelte.d.ts +2 -0
  7. package/dist/DataTable/DataTable.test.svelte.d.ts.map +1 -0
  8. package/dist/DataTable/DataTable.test.svelte.js +360 -0
  9. package/dist/DataTable/index.d.ts +2 -0
  10. package/dist/DataTable/index.d.ts.map +1 -0
  11. package/dist/DataTable/index.js +1 -0
  12. package/dist/components/Table/CellEditor.svelte +29 -0
  13. package/dist/components/Table/CellEditor.svelte.d.ts +8 -0
  14. package/dist/components/Table/CellEditor.svelte.d.ts.map +1 -0
  15. package/dist/components/Table/MoveButtons.svelte +60 -0
  16. package/dist/components/Table/MoveButtons.svelte.d.ts +8 -0
  17. package/dist/components/Table/MoveButtons.svelte.d.ts.map +1 -0
  18. package/dist/components/Table/ResizeHandle.svelte +82 -0
  19. package/dist/components/Table/ResizeHandle.svelte.d.ts +28 -0
  20. package/dist/components/Table/ResizeHandle.svelte.d.ts.map +1 -0
  21. package/dist/components/Table/Table.svelte +17 -0
  22. package/dist/components/Table/Table.svelte.d.ts +9 -0
  23. package/dist/components/Table/Table.svelte.d.ts.map +1 -0
  24. package/dist/components/Table/TableBody.svelte +78 -0
  25. package/dist/components/Table/TableBody.svelte.d.ts +30 -0
  26. package/dist/components/Table/TableBody.svelte.d.ts.map +1 -0
  27. package/dist/components/Table/TableCell.svelte +106 -0
  28. package/dist/components/Table/TableCell.svelte.d.ts +34 -0
  29. package/dist/components/Table/TableCell.svelte.d.ts.map +1 -0
  30. package/dist/components/Table/TableFooter.svelte +34 -0
  31. package/dist/components/Table/TableFooter.svelte.d.ts +9 -0
  32. package/dist/components/Table/TableFooter.svelte.d.ts.map +1 -0
  33. package/dist/components/Table/TableHeadCell.svelte +157 -0
  34. package/dist/components/Table/TableHeadCell.svelte.d.ts +29 -0
  35. package/dist/components/Table/TableHeadCell.svelte.d.ts.map +1 -0
  36. package/dist/components/Table/TableHeader.svelte +22 -0
  37. package/dist/components/Table/TableHeader.svelte.d.ts +7 -0
  38. package/dist/components/Table/TableHeader.svelte.d.ts.map +1 -0
  39. package/dist/components/Table/TableRow.svelte +84 -0
  40. package/dist/components/Table/TableRow.svelte.d.ts +32 -0
  41. package/dist/components/Table/TableRow.svelte.d.ts.map +1 -0
  42. package/dist/components/Table/TableViewport.svelte +69 -0
  43. package/dist/components/Table/TableViewport.svelte.d.ts +10 -0
  44. package/dist/components/Table/TableViewport.svelte.d.ts.map +1 -0
  45. package/dist/components/Table/index.d.ts +23 -0
  46. package/dist/components/Table/index.d.ts.map +1 -0
  47. package/dist/components/Table/index.js +22 -0
  48. package/dist/components/TableCards/TableCard.svelte +96 -0
  49. package/dist/components/TableCards/TableCard.svelte.d.ts +31 -0
  50. package/dist/components/TableCards/TableCard.svelte.d.ts.map +1 -0
  51. package/dist/components/TableCards/TableCards.svelte +61 -0
  52. package/dist/components/TableCards/TableCards.svelte.d.ts +7 -0
  53. package/dist/components/TableCards/TableCards.svelte.d.ts.map +1 -0
  54. package/dist/components/TableCards/index.d.ts +3 -0
  55. package/dist/components/TableCards/index.d.ts.map +1 -0
  56. package/dist/components/TableCards/index.js +2 -0
  57. package/dist/components/TableDetailSheet/TableDetailSheet.svelte +130 -0
  58. package/dist/components/TableDetailSheet/TableDetailSheet.svelte.d.ts +8 -0
  59. package/dist/components/TableDetailSheet/TableDetailSheet.svelte.d.ts.map +1 -0
  60. package/dist/components/TableDetailSheet/index.d.ts +2 -0
  61. package/dist/components/TableDetailSheet/index.d.ts.map +1 -0
  62. package/dist/components/TableDetailSheet/index.js +1 -0
  63. package/dist/components/TableFilters/TableFilterAdd.svelte +89 -0
  64. package/dist/components/TableFilters/TableFilterAdd.svelte.d.ts +15 -0
  65. package/dist/components/TableFilters/TableFilterAdd.svelte.d.ts.map +1 -0
  66. package/dist/components/TableFilters/TableFilterChip.svelte +164 -0
  67. package/dist/components/TableFilters/TableFilterChip.svelte.d.ts +9 -0
  68. package/dist/components/TableFilters/TableFilterChip.svelte.d.ts.map +1 -0
  69. package/dist/components/TableFilters/TableFilterEditor.svelte +40 -0
  70. package/dist/components/TableFilters/TableFilterEditor.svelte.d.ts +9 -0
  71. package/dist/components/TableFilters/TableFilterEditor.svelte.d.ts.map +1 -0
  72. package/dist/components/TableFilters/TableFilterValueEditor.svelte +209 -0
  73. package/dist/components/TableFilters/TableFilterValueEditor.svelte.d.ts +10 -0
  74. package/dist/components/TableFilters/TableFilterValueEditor.svelte.d.ts.map +1 -0
  75. package/dist/components/TableFilters/TableFilters.svelte +51 -0
  76. package/dist/components/TableFilters/TableFilters.svelte.d.ts +7 -0
  77. package/dist/components/TableFilters/TableFilters.svelte.d.ts.map +1 -0
  78. package/dist/components/TableFilters/index.d.ts +7 -0
  79. package/dist/components/TableFilters/index.d.ts.map +1 -0
  80. package/dist/components/TableFilters/index.js +6 -0
  81. package/dist/components/TableFilters/useAutoFocusField.d.ts +30 -0
  82. package/dist/components/TableFilters/useAutoFocusField.d.ts.map +1 -0
  83. package/dist/components/TableFilters/useAutoFocusField.js +59 -0
  84. package/dist/components/TablePagination/TablePagination.svelte +61 -0
  85. package/dist/components/TablePagination/TablePagination.svelte.d.ts +9 -0
  86. package/dist/components/TablePagination/TablePagination.svelte.d.ts.map +1 -0
  87. package/dist/components/TablePagination/index.d.ts +2 -0
  88. package/dist/components/TablePagination/index.d.ts.map +1 -0
  89. package/dist/components/TablePagination/index.js +1 -0
  90. package/dist/components/TableRowActions/TableRowActions.svelte +68 -0
  91. package/dist/components/TableRowActions/TableRowActions.svelte.d.ts +37 -0
  92. package/dist/components/TableRowActions/TableRowActions.svelte.d.ts.map +1 -0
  93. package/dist/components/TableRowActions/index.d.ts +2 -0
  94. package/dist/components/TableRowActions/index.d.ts.map +1 -0
  95. package/dist/components/TableRowActions/index.js +1 -0
  96. package/dist/components/TableSelectionBar/TableSelectionBar.svelte +88 -0
  97. package/dist/components/TableSelectionBar/TableSelectionBar.svelte.d.ts +30 -0
  98. package/dist/components/TableSelectionBar/TableSelectionBar.svelte.d.ts.map +1 -0
  99. package/dist/components/TableSelectionBar/index.d.ts +2 -0
  100. package/dist/components/TableSelectionBar/index.d.ts.map +1 -0
  101. package/dist/components/TableSelectionBar/index.js +1 -0
  102. package/dist/components/TableSelectionFooter/TableSelectionFooter.svelte +38 -0
  103. package/dist/components/TableSelectionFooter/TableSelectionFooter.svelte.d.ts +7 -0
  104. package/dist/components/TableSelectionFooter/TableSelectionFooter.svelte.d.ts.map +1 -0
  105. package/dist/components/TableSelectionFooter/index.d.ts +2 -0
  106. package/dist/components/TableSelectionFooter/index.d.ts.map +1 -0
  107. package/dist/components/TableSelectionFooter/index.js +1 -0
  108. package/dist/components/TableSheets/TableFilterSheet.svelte +150 -0
  109. package/dist/components/TableSheets/TableFilterSheet.svelte.d.ts +8 -0
  110. package/dist/components/TableSheets/TableFilterSheet.svelte.d.ts.map +1 -0
  111. package/dist/components/TableSheets/TableFilterSheetCondition.svelte +53 -0
  112. package/dist/components/TableSheets/TableFilterSheetCondition.svelte.d.ts +9 -0
  113. package/dist/components/TableSheets/TableFilterSheetCondition.svelte.d.ts.map +1 -0
  114. package/dist/components/TableSheets/TableSheetButton.svelte +44 -0
  115. package/dist/components/TableSheets/TableSheetButton.svelte.d.ts +15 -0
  116. package/dist/components/TableSheets/TableSheetButton.svelte.d.ts.map +1 -0
  117. package/dist/components/TableSheets/TableSortSheet.svelte +100 -0
  118. package/dist/components/TableSheets/TableSortSheet.svelte.d.ts +8 -0
  119. package/dist/components/TableSheets/TableSortSheet.svelte.d.ts.map +1 -0
  120. package/dist/components/TableSheets/index.d.ts +4 -0
  121. package/dist/components/TableSheets/index.d.ts.map +1 -0
  122. package/dist/components/TableSheets/index.js +3 -0
  123. package/dist/components/TableStates/TableEmpty.svelte +35 -0
  124. package/dist/components/TableStates/TableEmpty.svelte.d.ts +11 -0
  125. package/dist/components/TableStates/TableEmpty.svelte.d.ts.map +1 -0
  126. package/dist/components/TableStates/TableError.svelte +26 -0
  127. package/dist/components/TableStates/TableError.svelte.d.ts +10 -0
  128. package/dist/components/TableStates/TableError.svelte.d.ts.map +1 -0
  129. package/dist/components/TableStates/TableLoading.svelte +33 -0
  130. package/dist/components/TableStates/TableLoading.svelte.d.ts +8 -0
  131. package/dist/components/TableStates/TableLoading.svelte.d.ts.map +1 -0
  132. package/dist/components/TableStates/index.d.ts +4 -0
  133. package/dist/components/TableStates/index.d.ts.map +1 -0
  134. package/dist/components/TableStates/index.js +3 -0
  135. package/dist/components/TableSubBar/TableSubBar.svelte +34 -0
  136. package/dist/components/TableSubBar/TableSubBar.svelte.d.ts +7 -0
  137. package/dist/components/TableSubBar/TableSubBar.svelte.d.ts.map +1 -0
  138. package/dist/components/TableSubBar/index.d.ts +2 -0
  139. package/dist/components/TableSubBar/index.d.ts.map +1 -0
  140. package/dist/components/TableSubBar/index.js +1 -0
  141. package/dist/components/TableToolbar/TableActions.svelte +40 -0
  142. package/dist/components/TableToolbar/TableActions.svelte.d.ts +9 -0
  143. package/dist/components/TableToolbar/TableActions.svelte.d.ts.map +1 -0
  144. package/dist/components/TableToolbar/TableExportMenu.svelte +60 -0
  145. package/dist/components/TableToolbar/TableExportMenu.svelte.d.ts +8 -0
  146. package/dist/components/TableToolbar/TableExportMenu.svelte.d.ts.map +1 -0
  147. package/dist/components/TableToolbar/TableReorderToggle.svelte +27 -0
  148. package/dist/components/TableToolbar/TableReorderToggle.svelte.d.ts +7 -0
  149. package/dist/components/TableToolbar/TableReorderToggle.svelte.d.ts.map +1 -0
  150. package/dist/components/TableToolbar/TableScrollButtons.svelte +54 -0
  151. package/dist/components/TableToolbar/TableScrollButtons.svelte.d.ts +9 -0
  152. package/dist/components/TableToolbar/TableScrollButtons.svelte.d.ts.map +1 -0
  153. package/dist/components/TableToolbar/TableSearch.svelte +24 -0
  154. package/dist/components/TableToolbar/TableSearch.svelte.d.ts +9 -0
  155. package/dist/components/TableToolbar/TableSearch.svelte.d.ts.map +1 -0
  156. package/dist/components/TableToolbar/TableSortMenu.svelte +97 -0
  157. package/dist/components/TableToolbar/TableSortMenu.svelte.d.ts +8 -0
  158. package/dist/components/TableToolbar/TableSortMenu.svelte.d.ts.map +1 -0
  159. package/dist/components/TableToolbar/TableToolbar.svelte +113 -0
  160. package/dist/components/TableToolbar/TableToolbar.svelte.d.ts +9 -0
  161. package/dist/components/TableToolbar/TableToolbar.svelte.d.ts.map +1 -0
  162. package/dist/components/TableToolbar/TableViewOptions.svelte +69 -0
  163. package/dist/components/TableToolbar/TableViewOptions.svelte.d.ts +8 -0
  164. package/dist/components/TableToolbar/TableViewOptions.svelte.d.ts.map +1 -0
  165. package/dist/components/TableToolbar/index.d.ts +9 -0
  166. package/dist/components/TableToolbar/index.d.ts.map +1 -0
  167. package/dist/components/TableToolbar/index.js +8 -0
  168. package/dist/core/ActionsHeader.svelte +8 -0
  169. package/dist/core/ActionsHeader.svelte.d.ts +27 -0
  170. package/dist/core/ActionsHeader.svelte.d.ts.map +1 -0
  171. package/dist/core/SelectAllCell.svelte +21 -0
  172. package/dist/core/SelectAllCell.svelte.d.ts +19 -0
  173. package/dist/core/SelectAllCell.svelte.d.ts.map +1 -0
  174. package/dist/core/SelectCell.svelte +37 -0
  175. package/dist/core/SelectCell.svelte.d.ts +8 -0
  176. package/dist/core/SelectCell.svelte.d.ts.map +1 -0
  177. package/dist/core/createDataTable.svelte.d.ts +4 -0
  178. package/dist/core/createDataTable.svelte.d.ts.map +1 -0
  179. package/dist/core/createDataTable.svelte.js +1152 -0
  180. package/dist/core/createDataTable.test.svelte.d.ts +2 -0
  181. package/dist/core/createDataTable.test.svelte.d.ts.map +1 -0
  182. package/dist/core/createDataTable.test.svelte.js +156 -0
  183. package/dist/core/createDeferred.svelte.d.ts +38 -0
  184. package/dist/core/createDeferred.svelte.d.ts.map +1 -0
  185. package/dist/core/createDeferred.svelte.js +81 -0
  186. package/dist/core/elementRef.d.ts +17 -0
  187. package/dist/core/elementRef.d.ts.map +1 -0
  188. package/dist/core/elementRef.js +20 -0
  189. package/dist/core/props.d.ts +3 -0
  190. package/dist/core/props.d.ts.map +1 -0
  191. package/dist/core/props.js +46 -0
  192. package/dist/core/systemColumns.d.ts +16 -0
  193. package/dist/core/systemColumns.d.ts.map +1 -0
  194. package/dist/core/systemColumns.js +53 -0
  195. package/dist/core/tableContext.d.ts +7 -0
  196. package/dist/core/tableContext.d.ts.map +1 -0
  197. package/dist/core/tableContext.js +30 -0
  198. package/dist/core/trackStore.svelte.d.ts +24 -0
  199. package/dist/core/trackStore.svelte.d.ts.map +1 -0
  200. package/dist/core/trackStore.svelte.js +28 -0
  201. package/dist/core/types.d.ts +397 -0
  202. package/dist/core/types.d.ts.map +1 -0
  203. package/dist/core/types.js +1 -0
  204. package/dist/index.d.ts +31 -0
  205. package/dist/index.d.ts.map +1 -0
  206. package/dist/index.js +31 -0
  207. package/dist/styles.css +895 -0
  208. package/package.json +77 -3
@@ -0,0 +1,78 @@
1
+ <!--
2
+ The body, and the four states it decides between on its own.
3
+
4
+ Explicit content wins: layer-2 composition is the point of these parts.
5
+ Otherwise `<TableBody />` alone is a complete table body — the error, the
6
+ loading skeleton, the empty state and the rows are all its business.
7
+ -->
8
+ <script lang="ts" generics="T extends RowData">
9
+ import type { Snippet } from "svelte";
10
+ import { getSpacerProps, type RowData } from "@ui-organized/table-core";
11
+ import { getTable } from "../../core/tableContext.js";
12
+ import { svelteProps } from "../../core/props.js";
13
+ import { TableEmpty, TableError, TableLoading } from "../TableStates/index.js";
14
+ import TableRow from "./TableRow.svelte";
15
+
16
+ let { children }: { children?: Snippet } = $props();
17
+ const table = getTable<T>();
18
+
19
+ const spacers = $derived(
20
+ table.virtual.enabled ? table.virtual.spacers : { top: 0, bottom: 0 },
21
+ );
22
+ const renderRows = $derived(table.renderRows);
23
+ const editTarget = $derived(table.edit.state.target);
24
+
25
+ const state = $derived(
26
+ children
27
+ ? "slot"
28
+ : table.options.error
29
+ ? "error"
30
+ : table.loading && renderRows.length === 0
31
+ ? "loading"
32
+ : renderRows.length === 0
33
+ ? "empty"
34
+ : "rows",
35
+ );
36
+
37
+ const spacerProps = (height: number) => getSpacerProps(height, table.chrome.colCount);
38
+ const focusedColFor = (index: number) =>
39
+ table.focus.cursor.row === index ? table.focus.cursor.col : null;
40
+ const editContextFor = (row: (typeof renderRows)[number]["row"]) =>
41
+ editTarget?.rowId === row.id ? table.edit.contextFor(row, editTarget.columnId) : null;
42
+ </script>
43
+
44
+ <tbody class="data-table__body">
45
+ {#if state === "slot"}
46
+ {@render children?.()}
47
+ {:else if state === "error"}
48
+ <TableError>
49
+ {#if typeof table.options.error === "function"}
50
+ {@render table.options.error()}
51
+ {:else}
52
+ {table.options.error}
53
+ {/if}
54
+ </TableError>
55
+ {:else if state === "loading"}
56
+ <TableLoading />
57
+ {:else if state === "empty"}
58
+ <TableEmpty />
59
+ {:else}
60
+ {#if spacers.top > 0}
61
+ {@const props = spacerProps(spacers.top)}
62
+ <tr {...svelteProps(props.row)}><td {...svelteProps(props.cell)}></td></tr>
63
+ {/if}
64
+ {#each renderRows as entry (entry.row.id)}
65
+ <TableRow
66
+ row={entry.row}
67
+ index={entry.index}
68
+ absoluteIndex={entry.absoluteIndex}
69
+ focusedCol={focusedColFor(entry.index)}
70
+ editContext={editContextFor(entry.row)}
71
+ />
72
+ {/each}
73
+ {#if spacers.bottom > 0}
74
+ {@const props = spacerProps(spacers.bottom)}
75
+ <tr {...svelteProps(props.row)}><td {...svelteProps(props.cell)}></td></tr>
76
+ {/if}
77
+ {/if}
78
+ </tbody>
@@ -0,0 +1,30 @@
1
+ import type { Snippet } from "svelte";
2
+ import { type RowData } from "@ui-organized/table-core";
3
+ type $$ComponentProps = {
4
+ children?: Snippet;
5
+ };
6
+ declare function $$render<T extends RowData>(): {
7
+ props: $$ComponentProps;
8
+ exports: {};
9
+ bindings: "";
10
+ slots: {};
11
+ events: {};
12
+ };
13
+ declare class __sveltets_Render<T extends RowData> {
14
+ props(): ReturnType<typeof $$render<T>>['props'];
15
+ events(): ReturnType<typeof $$render<T>>['events'];
16
+ slots(): ReturnType<typeof $$render<T>>['slots'];
17
+ bindings(): "";
18
+ exports(): {};
19
+ }
20
+ interface $$IsomorphicComponent {
21
+ 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']>> & {
22
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
23
+ } & ReturnType<__sveltets_Render<T>['exports']>;
24
+ <T extends RowData>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
25
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
26
+ }
27
+ declare const TableBody: $$IsomorphicComponent;
28
+ type TableBody<T extends RowData> = InstanceType<typeof TableBody<T>>;
29
+ export default TableBody;
30
+ //# sourceMappingURL=TableBody.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableBody.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Table/TableBody.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMvE,KAAK,gBAAgB,GAAI;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAAA,iBAAS,QAAQ,CAAC,CAAC,SAAS,OAAO;WAqEvD,gBAAgB;;;;;EAA4E;AACzH,cAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO;IACrC,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5Y,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3I,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACjE;AACD,QAAA,MAAM,SAAS,EAAE,qBAAmC,CAAC;AACnC,KAAK,SAAS,CAAC,CAAC,SAAS,OAAO,IAAI,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,eAAe,SAAS,CAAC"}
@@ -0,0 +1,106 @@
1
+ <script lang="ts" generics="T extends RowData">
2
+ import { FlexRender } from "@tanstack/svelte-table";
3
+ import {
4
+ alignOf,
5
+ getCellProps,
6
+ metaOf,
7
+ stickyPositionOf,
8
+ type RowData,
9
+ type TableCellInstance,
10
+ type TableEditContext,
11
+ type TableInstance,
12
+ type TableRowModel,
13
+ } from "@ui-organized/table-core";
14
+ import { getTable } from "../../core/tableContext.js";
15
+ import { svelteProps } from "../../core/props.js";
16
+ import CellEditor from "./CellEditor.svelte";
17
+
18
+ let {
19
+ cell,
20
+ row,
21
+ index,
22
+ rowIndex,
23
+ primary,
24
+ focused,
25
+ editContext,
26
+ }: {
27
+ cell: TableCellInstance<T>;
28
+ row: TableRowModel<T>;
29
+ index: number;
30
+ rowIndex: number;
31
+ primary: boolean;
32
+ focused: boolean;
33
+ editContext: TableEditContext<T> | null;
34
+ } = $props();
35
+
36
+ const table = getTable<T>();
37
+ const column = $derived(cell.column);
38
+ const meta = $derived(metaOf<T>(column.columnDef));
39
+ const editing = $derived(editContext?.columnId === column.id ? editContext : null);
40
+ const interactive = $derived(table.interactive);
41
+ const editable = $derived(Boolean(meta?.edit));
42
+
43
+ const cellProps = $derived(
44
+ getCellProps({
45
+ columnId: column.id,
46
+ index,
47
+ align: alignOf(column.columnDef),
48
+ primary,
49
+ sticky: stickyPositionOf(table.table as unknown as TableInstance<T>, column),
50
+ focused,
51
+ editable,
52
+ editing: Boolean(editing),
53
+ invalid: Boolean(editing?.invalid),
54
+ interactive,
55
+ }),
56
+ );
57
+
58
+ const onFocus = () => {
59
+ if (interactive) table.focus.setCursor({ row: rowIndex, col: index });
60
+ };
61
+ // One click opens the editor. The click stops here either way: it must not
62
+ // also activate the row (open its detail sheet), and a click *inside* the
63
+ // open editor must not restart the edit and throw the draft away.
64
+ const onClick = (event: MouseEvent) => {
65
+ if (!editable) return;
66
+ event.stopPropagation();
67
+ if (!editing) table.edit.start(row, column.id);
68
+ };
69
+ </script>
70
+
71
+ <!--
72
+ The identifying column is a real row header, which is what makes a screen
73
+ reader announce "Ada Lovelace, Role, Engineer" instead of just "Engineer".
74
+ Svelte has no dynamic element by name, so the two tags are written out; the
75
+ props and the content are shared.
76
+ -->
77
+ {#snippet content()}
78
+ {#if editing}
79
+ <CellEditor>
80
+ {@const rendered = meta?.edit?.render(editing)}
81
+ {#if typeof rendered === "function"}{@render rendered()}{:else}{rendered}{/if}
82
+ </CellEditor>
83
+ {:else}
84
+ <FlexRender {cell} />
85
+ {/if}
86
+ {/snippet}
87
+
88
+ {#if primary}
89
+ <th
90
+ {...svelteProps(cellProps)}
91
+ data-cell={`${rowIndex}:${index}`}
92
+ onfocus={onFocus}
93
+ onclick={editable ? onClick : undefined}
94
+ >
95
+ {@render content()}
96
+ </th>
97
+ {:else}
98
+ <td
99
+ {...svelteProps(cellProps)}
100
+ data-cell={`${rowIndex}:${index}`}
101
+ onfocus={onFocus}
102
+ onclick={editable ? onClick : undefined}
103
+ >
104
+ {@render content()}
105
+ </td>
106
+ {/if}
@@ -0,0 +1,34 @@
1
+ import { type RowData, type TableCellInstance, type TableEditContext, type TableRowModel } from "@ui-organized/table-core";
2
+ declare function $$render<T extends RowData>(): {
3
+ props: {
4
+ cell: TableCellInstance<T>;
5
+ row: TableRowModel<T>;
6
+ index: number;
7
+ rowIndex: number;
8
+ primary: boolean;
9
+ focused: boolean;
10
+ editContext: TableEditContext<T> | null;
11
+ };
12
+ exports: {};
13
+ bindings: "";
14
+ slots: {};
15
+ events: {};
16
+ };
17
+ declare class __sveltets_Render<T extends RowData> {
18
+ props(): ReturnType<typeof $$render<T>>['props'];
19
+ events(): ReturnType<typeof $$render<T>>['events'];
20
+ slots(): ReturnType<typeof $$render<T>>['slots'];
21
+ bindings(): "";
22
+ exports(): {};
23
+ }
24
+ interface $$IsomorphicComponent {
25
+ 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']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<T>['exports']>;
28
+ <T extends RowData>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
29
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
30
+ }
31
+ declare const TableCell: $$IsomorphicComponent;
32
+ type TableCell<T extends RowData> = InstanceType<typeof TableCell<T>>;
33
+ export default TableCell;
34
+ //# sourceMappingURL=TableCell.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCell.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Table/TableCell.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAKH,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAIpC,iBAAS,QAAQ,CAAC,CAAC,SAAS,OAAO;;cAgBzB,iBAAiB,CAAC,CAAC,CAAC;aACrB,aAAa,CAAC,CAAC,CAAC;eACd,MAAM;kBACH,MAAM;iBACP,OAAO;iBACP,OAAO;qBACH,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;;;;;;EA8D8E;AACzH,cAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO;IACrC,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5Y,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3I,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACjE;AACD,QAAA,MAAM,SAAS,EAAE,qBAAmC,CAAC;AACnC,KAAK,SAAS,CAAC,CAAC,SAAS,OAAO,IAAI,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,eAAe,SAAS,CAAC"}
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import { clsx } from "clsx";
4
+ import { FlexRender } from "@tanstack/svelte-table";
5
+ import { getTable } from "../../core/tableContext.js";
6
+
7
+ let { class: className, children }: { class?: string; children?: Snippet } = $props();
8
+ const table = getTable();
9
+
10
+ const groups = $derived(table.table.getFooterGroups());
11
+ const hasFooter = $derived(
12
+ groups.some((group) =>
13
+ group.headers.some((header) => header.column.columnDef.footer !== undefined),
14
+ ),
15
+ );
16
+ </script>
17
+
18
+ {#if children || hasFooter}
19
+ <tfoot class={clsx("data-table__foot", className)}>
20
+ {#if children}
21
+ {@render children()}
22
+ {:else}
23
+ {#each groups as group (group.id)}
24
+ <tr class="data-table__row">
25
+ {#each group.headers as header (header.id)}
26
+ <td class="data-table__cell">
27
+ {#if !header.isPlaceholder}<FlexRender footer={header} />{/if}
28
+ </td>
29
+ {/each}
30
+ </tr>
31
+ {/each}
32
+ {/if}
33
+ </tfoot>
34
+ {/if}
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from "svelte";
2
+ type $$ComponentProps = {
3
+ class?: string;
4
+ children?: Snippet;
5
+ };
6
+ declare const TableFooter: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type TableFooter = ReturnType<typeof TableFooter>;
8
+ export default TableFooter;
9
+ //# sourceMappingURL=TableFooter.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableFooter.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Table/TableFooter.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKrC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAsCjE,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,157 @@
1
+ <!-- One header cell: the sort control, the roving tab stop, and the resize grip. -->
2
+ <script lang="ts" generics="T extends RowData">
3
+ import { FlexRender } from "@tanstack/svelte-table";
4
+ import { Icon } from "@ui-organized/svelte";
5
+ import {
6
+ alignOf,
7
+ dropSideAt,
8
+ getHeadCellProps,
9
+ metaOf,
10
+ stickyPositionOf,
11
+ type RowData,
12
+ type TableHeaderInstance,
13
+ type TableInstance,
14
+ } from "@ui-organized/table-core";
15
+ import { getTable } from "../../core/tableContext.js";
16
+ import { svelteProps } from "../../core/props.js";
17
+ import ResizeHandle from "./ResizeHandle.svelte";
18
+ import MoveButtons from "./MoveButtons.svelte";
19
+ import { internalGlyph as glyph } from "@ui-organized/svelte";
20
+
21
+ let { header, index }: { header: TableHeaderInstance<T>; index: number } = $props();
22
+ const table = getTable<T>();
23
+
24
+ const column = $derived(header.column);
25
+ const sortable = $derived(column.getCanSort());
26
+ const sorted = $derived(column.getIsSorted());
27
+ const interactive = $derived(table.interactive);
28
+ const focused = $derived(
29
+ interactive && table.focus.cursor.row === -1 && table.focus.cursor.col === index,
30
+ );
31
+
32
+ const editable = $derived(Boolean(metaOf<T>(column.columnDef)?.edit));
33
+
34
+ const movable = $derived(table.reorder.active && table.reorder.isMovable(column.id));
35
+ const drag = $derived(table.reorder.drag);
36
+ const dropSide = $derived(
37
+ drag && drag.target === column.id && drag.source !== column.id ? drag.side : undefined,
38
+ );
39
+ const headerText = $derived(
40
+ typeof column.columnDef.header === "string" ? column.columnDef.header : column.id,
41
+ );
42
+
43
+ // The drag source is the label area, not the <th>: with the <th>
44
+ // draggable, pressing the resize handle started a native drag that took the
45
+ // pointer away from the resize. A drag starting on the move buttons is theirs.
46
+ const onDragStart = (event: DragEvent) => {
47
+ if (!movable) return;
48
+ const origin = event.target as Element;
49
+ if (origin.closest(".data-table__move")) {
50
+ event.preventDefault();
51
+ return;
52
+ }
53
+ if (event.dataTransfer) {
54
+ event.dataTransfer.effectAllowed = "move";
55
+ event.dataTransfer.setData("text/plain", column.id);
56
+ }
57
+ table.reorder.setDrag({ source: column.id, target: null, side: "before" });
58
+ };
59
+ const onDragOver = (event: DragEvent) => {
60
+ if (!movable || !drag) return;
61
+ event.preventDefault();
62
+ if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
63
+ const side = dropSideAt(
64
+ event.clientX,
65
+ (event.currentTarget as HTMLElement).getBoundingClientRect(),
66
+ );
67
+ if (drag.target !== column.id || drag.side !== side) {
68
+ table.reorder.setDrag({ ...drag, target: column.id, side });
69
+ }
70
+ };
71
+ const onDrop = (event: DragEvent) => {
72
+ if (!movable || !drag) return;
73
+ event.preventDefault();
74
+ const side = dropSideAt(
75
+ event.clientX,
76
+ (event.currentTarget as HTMLElement).getBoundingClientRect(),
77
+ );
78
+ table.reorder.drop(drag.source, column.id, side);
79
+ table.reorder.setDrag(null);
80
+ };
81
+ const onDragEnd = () => {
82
+ if (movable) table.reorder.setDrag(null);
83
+ };
84
+
85
+ const cellProps = $derived(
86
+ getHeadCellProps({
87
+ columnId: column.id,
88
+ index,
89
+ align: alignOf(column.columnDef),
90
+ sortable,
91
+ sortDirection: sorted === false ? false : sorted,
92
+ sticky: stickyPositionOf(table.table as unknown as TableInstance<T>, column),
93
+ resizing: column.getIsResizing(),
94
+ interactive,
95
+ editable,
96
+ }),
97
+ );
98
+ </script>
99
+
100
+ <!--
101
+ The pencil on an editable column's header. The words go with it: as part of
102
+ the column header, ", editable" is announced with every cell in the column,
103
+ which is where a screen-reader user needs to learn that Enter opens an editor.
104
+ -->
105
+ {#snippet editMark()}
106
+ <span class="data-table__edit-icon">
107
+ <Icon name={glyph("edit")} size={14} />
108
+ <span class="data-table__sr-only">, editable</span>
109
+ </span>
110
+ {/snippet}
111
+
112
+ <th
113
+ {...svelteProps(cellProps)}
114
+ data-cell={`-1:${index}`}
115
+ tabindex={interactive ? (focused ? 0 : -1) : undefined}
116
+ onfocus={() => (interactive ? table.focus.setCursor({ row: -1, col: index }) : undefined)}
117
+ data-dragging={drag?.source === column.id ? "" : undefined}
118
+ data-drop={dropSide}
119
+ ondragover={onDragOver}
120
+ ondrop={onDrop}
121
+ >
122
+ <div
123
+ class="data-table__head-inner"
124
+ draggable={movable ? "true" : undefined}
125
+ ondragstart={onDragStart}
126
+ ondragend={onDragEnd}
127
+ >
128
+ <!--
129
+ The roving tabindex covers the header row too, so ArrowUp out of the first
130
+ body row lands somewhere focusable and Enter sorts from there. Inner
131
+ controls are not their own tab stops in a grid; the cell is.
132
+ -->
133
+ {#if sortable}
134
+ <button
135
+ type="button"
136
+ class="data-table__sort-button"
137
+ tabindex={interactive ? -1 : undefined}
138
+ onclick={(event) => column.getToggleSortingHandler()?.(event)}
139
+ >
140
+ <span class="data-table__head-label">
141
+ {#if !header.isPlaceholder}<FlexRender {header} />{/if}
142
+ </span>
143
+ {#if editable}{@render editMark()}{/if}
144
+ <span class="data-table__sort-icon">
145
+ <Icon name={glyph(sorted === "desc" ? "sort-desc" : "sort-asc")} size={14} />
146
+ </span>
147
+ </button>
148
+ {:else}
149
+ <span class="data-table__head-label">
150
+ {#if !header.isPlaceholder}<FlexRender {header} />{/if}
151
+ </span>
152
+ {#if editable}{@render editMark()}{/if}
153
+ {/if}
154
+ {#if movable}<MoveButtons columnId={column.id} name={headerText} />{/if}
155
+ </div>
156
+ {#if column.getCanResize()}<ResizeHandle {header} />{/if}
157
+ </th>
@@ -0,0 +1,29 @@
1
+ import { type RowData, type TableHeaderInstance } from "@ui-organized/table-core";
2
+ declare function $$render<T extends RowData>(): {
3
+ props: {
4
+ header: TableHeaderInstance<T>;
5
+ index: number;
6
+ };
7
+ exports: {};
8
+ bindings: "";
9
+ slots: {};
10
+ events: {};
11
+ };
12
+ declare class __sveltets_Render<T extends RowData> {
13
+ props(): ReturnType<typeof $$render<T>>['props'];
14
+ events(): ReturnType<typeof $$render<T>>['events'];
15
+ slots(): ReturnType<typeof $$render<T>>['slots'];
16
+ bindings(): "";
17
+ exports(): {};
18
+ }
19
+ interface $$IsomorphicComponent {
20
+ 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']>> & {
21
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
22
+ } & ReturnType<__sveltets_Render<T>['exports']>;
23
+ <T extends RowData>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
24
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
25
+ }
26
+ declare const TableHeadCell: $$IsomorphicComponent;
27
+ type TableHeadCell<T extends RowData> = InstanceType<typeof TableHeadCell<T>>;
28
+ export default TableHeadCell;
29
+ //# sourceMappingURL=TableHeadCell.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHeadCell.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Table/TableHeadCell.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,EAMH,KAAK,OAAO,EACZ,KAAK,mBAAmB,EAEzB,MAAM,0BAA0B,CAAC;AAMpC,iBAAS,QAAQ,CAAC,CAAC,SAAS,OAAO;;gBAcG,mBAAmB,CAAC,CAAC,CAAC;eAAS,MAAM;;;;;;EA8G8C;AACzH,cAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO;IACrC,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5Y,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3I,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACjE;AACD,QAAA,MAAM,aAAa,EAAE,qBAAmC,CAAC;AACvC,KAAK,aAAa,CAAC,CAAC,SAAS,OAAO,IAAI,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import { clsx } from "clsx";
3
+ import { getHeaderRowProps } from "@ui-organized/table-core";
4
+ import { getTable } from "../../core/tableContext.js";
5
+ import { svelteProps } from "../../core/props.js";
6
+ import TableHeadCell from "./TableHeadCell.svelte";
7
+
8
+ let { class: className }: { class?: string } = $props();
9
+ const table = getTable();
10
+ const groups = $derived(table.table.getHeaderGroups());
11
+ const rowProps = getHeaderRowProps();
12
+ </script>
13
+
14
+ <thead class={clsx("data-table__head", className)}>
15
+ {#each groups as group (group.id)}
16
+ <tr {...svelteProps(rowProps)}>
17
+ {#each group.headers as header, index (header.id)}
18
+ <TableHeadCell {header} {index} />
19
+ {/each}
20
+ </tr>
21
+ {/each}
22
+ </thead>
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const TableHeader: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type TableHeader = ReturnType<typeof TableHeader>;
6
+ export default TableHeader;
7
+ //# sourceMappingURL=TableHeader.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHeader.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Table/TableHeader.svelte.ts"],"names":[],"mappings":"AASC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA0B7C,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,84 @@
1
+ <!--
2
+ One row.
3
+
4
+ React memoizes this on a hand-written nine-field comparator, and threads every
5
+ value it needs through props so the comparator can see them. Svelte needs
6
+ neither: a component re-renders only what its own reads touch, so the row takes
7
+ what genuinely *varies per row* as props and reads the rest — the table, the
8
+ handlers, `interactive` — from context. That is the first of the two places the
9
+ plan predicted this port would get simpler.
10
+ -->
11
+ <script lang="ts" generics="T extends RowData">
12
+ import {
13
+ getRowProps,
14
+ type RowData,
15
+ type TableEditContext,
16
+ type TableRowModel,
17
+ } from "@ui-organized/table-core";
18
+ import { getTable } from "../../core/tableContext.js";
19
+ import { elementRef } from "../../core/elementRef.js";
20
+ import { svelteProps } from "../../core/props.js";
21
+ import TableCell from "./TableCell.svelte";
22
+
23
+ let {
24
+ row,
25
+ index,
26
+ absoluteIndex,
27
+ focusedCol,
28
+ editContext,
29
+ }: {
30
+ row: TableRowModel<T>;
31
+ index: number;
32
+ absoluteIndex: number;
33
+ focusedCol: number | null;
34
+ editContext: TableEditContext<T> | null;
35
+ } = $props();
36
+
37
+ const table = getTable<T>();
38
+ const clickable = $derived(
39
+ Boolean(table.options.onRowClick) || Boolean(table.options.detail),
40
+ );
41
+ const selected = $derived(table.selection.isSelected(row.id));
42
+ const editing = $derived(table.edit.state.target?.rowId === row.id);
43
+
44
+ const rowProps = $derived(
45
+ getRowProps({
46
+ rowId: row.id,
47
+ index: absoluteIndex,
48
+ selected,
49
+ editing,
50
+ selectable: table.selection.mode !== "none",
51
+ interactive: table.interactive,
52
+ clickable,
53
+ }),
54
+ );
55
+
56
+ const cells = $derived(row.getVisibleCells());
57
+
58
+ /**
59
+ * The virtualizer measures the real row rather than trusting the estimate, so
60
+ * a re-themed row height corrects itself on the first frame.
61
+ */
62
+ const measure = (element: HTMLElement | null) => {
63
+ if (table.virtual.enabled && element) table.virtual.virtualizer.measureElement(element);
64
+ };
65
+ </script>
66
+
67
+ <tr
68
+ {...svelteProps(rowProps)}
69
+ data-index={index}
70
+ use:elementRef={measure}
71
+ onclick={() => table.activate(row)}
72
+ >
73
+ {#each cells as cell, colIndex (cell.id)}
74
+ <TableCell
75
+ {cell}
76
+ {row}
77
+ index={colIndex}
78
+ rowIndex={index}
79
+ primary={cell.column.id === table.primaryColumnId}
80
+ focused={focusedCol === colIndex}
81
+ {editContext}
82
+ />
83
+ {/each}
84
+ </tr>
@@ -0,0 +1,32 @@
1
+ import { type RowData, type TableEditContext, type TableRowModel } from "@ui-organized/table-core";
2
+ declare function $$render<T extends RowData>(): {
3
+ props: {
4
+ row: TableRowModel<T>;
5
+ index: number;
6
+ absoluteIndex: number;
7
+ focusedCol: number | null;
8
+ editContext: TableEditContext<T> | null;
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 TableRow: $$IsomorphicComponent;
30
+ type TableRow<T extends RowData> = InstanceType<typeof TableRow<T>>;
31
+ export default TableRow;
32
+ //# sourceMappingURL=TableRow.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableRow.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Table/TableRow.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAKpC,iBAAS,QAAQ,CAAC,CAAC,SAAS,OAAO;;aAO1B,aAAa,CAAC,CAAC,CAAC;eACd,MAAM;uBACE,MAAM;oBACT,MAAM,GAAG,IAAI;qBACZ,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;;;;;;EAiD8E;AACzH,cAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO;IACrC,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5Y,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3I,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACjE;AACD,QAAA,MAAM,QAAQ,EAAE,qBAAmC,CAAC;AAClC,KAAK,QAAQ,CAAC,CAAC,SAAS,OAAO,IAAI,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,eAAe,QAAQ,CAAC"}