@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,44 @@
1
+ <!--
2
+ The button both card-mode sheets open from. The count is a badge inside the
3
+ label, and is spoken as words — "Filter, 2 applied" — because a bare "2"
4
+ announced after "Filter" says nothing about what it counts.
5
+ -->
6
+ <script lang="ts">
7
+ import { Button } from "@ui-organized/svelte";
8
+ import type { IconComponent, IconName } from "@ui-organized/svelte";
9
+ import { getTable } from "../../core/tableContext.js";
10
+
11
+ let {
12
+ icon,
13
+ label,
14
+ count,
15
+ unit,
16
+ class: className,
17
+ ...rest
18
+ }: {
19
+ icon: IconName | IconComponent;
20
+ label: string;
21
+ /** What is applied. Drawn as a badge from 1 up, and spoken as words. */
22
+ count: number;
23
+ /** The word the count is read with: "2 applied". */
24
+ unit: string;
25
+ class?: string;
26
+ [key: string]: unknown;
27
+ } = $props();
28
+
29
+ const table = getTable();
30
+ </script>
31
+
32
+ <Button
33
+ {...rest as Record<string, never>}
34
+ intent="secondary"
35
+ size={table.size}
36
+ {icon}
37
+ class={className}
38
+ >
39
+ {label}
40
+ {#if count > 0}
41
+ <span class="data-table__badge" aria-hidden="true">{count}</span>
42
+ <span class="data-table__sr-only">{`, ${count} ${unit}`}</span>
43
+ {/if}
44
+ </Button>
@@ -0,0 +1,15 @@
1
+ import type { IconComponent, IconName } from "@ui-organized/svelte";
2
+ type $$ComponentProps = {
3
+ icon: IconName | IconComponent;
4
+ label: string;
5
+ /** What is applied. Drawn as a badge from 1 up, and spoken as words. */
6
+ count: number;
7
+ /** The word the count is read with: "2 applied". */
8
+ unit: string;
9
+ class?: string;
10
+ [key: string]: unknown;
11
+ };
12
+ declare const TableSheetButton: import("svelte").Component<$$ComponentProps, {}, "">;
13
+ type TableSheetButton = ReturnType<typeof TableSheetButton>;
14
+ export default TableSheetButton;
15
+ //# sourceMappingURL=TableSheetButton.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableSheetButton.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableSheets/TableSheetButton.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGnE,KAAK,gBAAgB,GAAI;IACtB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AA6BJ,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,100 @@
1
+ <!--
2
+ Card mode's sort control: a labelled button that opens a bottom sheet holding
3
+ every sorting control, with the applied sort counted on the button.
4
+
5
+ A menu anchored to a 36px icon is a desktop affordance. On a phone the menu
6
+ covers the cards it is sorting; a sheet gives the controls the full width and
7
+ puts them within thumb reach.
8
+ -->
9
+ <script lang="ts">
10
+ import {
11
+ Button,
12
+ RadioGroup,
13
+ Sheet,
14
+ SheetClose,
15
+ SheetContent,
16
+ SheetFooter,
17
+ SheetTitle,
18
+ SheetTrigger,
19
+ } from "@ui-organized/svelte";
20
+ import { getTable } from "../../core/tableContext.js";
21
+ import TableSheetButton from "./TableSheetButton.svelte";
22
+ import { internalGlyph as glyph } from "@ui-organized/svelte";
23
+
24
+ let { label = "Sort", class: className }: { label?: string; class?: string } = $props();
25
+ const table = getTable();
26
+
27
+ const columns = $derived(table.table.getAllLeafColumns().filter((c) => c.getCanSort()));
28
+ const sorting = $derived(table.state.sorting ?? []);
29
+ const active = $derived(sorting[0]);
30
+ const activeId = $derived(active?.id ?? "");
31
+ const direction = $derived(active?.desc ? "desc" : "asc");
32
+ const triggerIcon = $derived(glyph(activeId ? (active?.desc ? "sort-desc" : "sort-asc") : "sort"));
33
+
34
+ const headerOf = (column: (typeof columns)[number]) =>
35
+ typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
36
+ </script>
37
+
38
+ {#if columns.length > 0}
39
+ <Sheet>
40
+ <SheetTrigger>
41
+ {#snippet asChild(props)}
42
+ <TableSheetButton
43
+ {...props()}
44
+ icon={triggerIcon}
45
+ {label}
46
+ count={sorting.length}
47
+ unit="applied"
48
+ class={className}
49
+ />
50
+ {/snippet}
51
+ </SheetTrigger>
52
+ <SheetContent side="bottom" size="lg" class="data-table__sheet">
53
+ <SheetTitle>{label}</SheetTitle>
54
+ <div class="data-table__sheet-body">
55
+ <RadioGroup
56
+ label="Sort by"
57
+ options={columns.map((column) => ({ value: column.id, label: headerOf(column) }))}
58
+ value={activeId}
59
+ onValueChange={(id) => table.table.setSorting([{ id, desc: direction === "desc" }])}
60
+ />
61
+ <!--
62
+ Disabled rather than hidden, as in the desktop menu: the sheet keeps
63
+ its shape, so the second visit finds the controls where they were.
64
+ Nothing is checked until there is a sort to have a direction: a
65
+ pre-ticked "Ascending" over nothing reads as a sort that is applied.
66
+ -->
67
+ <RadioGroup
68
+ label="Direction"
69
+ orientation="horizontal"
70
+ disabled={!activeId}
71
+ options={[
72
+ { value: "asc", label: "Ascending" },
73
+ { value: "desc", label: "Descending" },
74
+ ]}
75
+ value={activeId ? direction : ""}
76
+ onValueChange={(next) => {
77
+ if (activeId) table.table.setSorting([{ id: activeId, desc: next === "desc" }]);
78
+ }}
79
+ />
80
+ </div>
81
+ <SheetFooter>
82
+ <Button
83
+ intent="ghost"
84
+ size="lg"
85
+ disabled={!activeId}
86
+ onclick={() => table.table.setSorting([])}
87
+ >
88
+ Clear sort
89
+ </Button>
90
+ <SheetClose>
91
+ {#snippet asChild(props)}
92
+ <Button {...(props() as Record<string, never>)} intent="primary" size="lg">
93
+ Done
94
+ </Button>
95
+ {/snippet}
96
+ </SheetClose>
97
+ </SheetFooter>
98
+ </SheetContent>
99
+ </Sheet>
100
+ {/if}
@@ -0,0 +1,8 @@
1
+ type $$ComponentProps = {
2
+ label?: string;
3
+ class?: string;
4
+ };
5
+ declare const TableSortSheet: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type TableSortSheet = ReturnType<typeof TableSortSheet>;
7
+ export default TableSortSheet;
8
+ //# sourceMappingURL=TableSortSheet.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableSortSheet.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableSheets/TableSortSheet.svelte.ts"],"names":[],"mappings":"AAiBC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA2D7D,QAAA,MAAM,cAAc,sDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { default as TableSheetButton } from "./TableSheetButton.svelte";
2
+ export { default as TableSortSheet } from "./TableSortSheet.svelte";
3
+ export { default as TableFilterSheet } from "./TableFilterSheet.svelte";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableSheets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as TableSheetButton } from "./TableSheetButton.svelte";
2
+ export { default as TableSortSheet } from "./TableSortSheet.svelte";
3
+ export { default as TableFilterSheet } from "./TableFilterSheet.svelte";
@@ -0,0 +1,35 @@
1
+ <!--
2
+ Empty, loading and error all live *inside* `<tbody>` rather than replacing the
3
+ table.
4
+
5
+ Keeping the header on screen keeps the column widths, the scroll position and
6
+ the filter controls exactly where they were — so clearing a filter that emptied
7
+ the table does not also move every control the user was about to click.
8
+ -->
9
+ <script lang="ts">
10
+ import type { Snippet } from "svelte";
11
+ import { clsx } from "clsx";
12
+ import { getTable } from "../../core/tableContext.js";
13
+
14
+ let {
15
+ title,
16
+ description,
17
+ class: className,
18
+ action,
19
+ }: { title?: string; description?: string; class?: string; action?: Snippet } = $props();
20
+
21
+ const table = getTable();
22
+ const empty = $derived(table.options.empty);
23
+ const heading = $derived(title ?? empty?.title ?? "Nothing to show");
24
+ const detail = $derived(description ?? empty?.description);
25
+ </script>
26
+
27
+ <tr class="data-table__row">
28
+ <td class={clsx("data-table__state-cell", className)} colspan={table.chrome.colCount}>
29
+ <div class="data-table__state">
30
+ <span class="data-table__state-title">{heading}</span>
31
+ {#if detail}<span class="data-table__state-description">{detail}</span>{/if}
32
+ {#if action}<div class="data-table__state-actions">{@render action()}</div>{/if}
33
+ </div>
34
+ </td>
35
+ </tr>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from "svelte";
2
+ type $$ComponentProps = {
3
+ title?: string;
4
+ description?: string;
5
+ class?: string;
6
+ action?: Snippet;
7
+ };
8
+ declare const TableEmpty: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type TableEmpty = ReturnType<typeof TableEmpty>;
10
+ export default TableEmpty;
11
+ //# sourceMappingURL=TableEmpty.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableEmpty.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableStates/TableEmpty.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIrC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAgCrG,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,26 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import { clsx } from "clsx";
4
+ import { getTable } from "../../core/tableContext.js";
5
+
6
+ let {
7
+ title = "Could not load this table",
8
+ class: className,
9
+ children,
10
+ }: { title?: string; class?: string; children?: Snippet } = $props();
11
+
12
+ const table = getTable();
13
+ </script>
14
+
15
+ <tr class="data-table__row">
16
+ <td class={clsx("data-table__state-cell", className)} colspan={table.chrome.colCount}>
17
+ <!--
18
+ `alert` rather than a plain region: the error arrives after the user has
19
+ moved on, so it has to announce itself.
20
+ -->
21
+ <div class="data-table__state data-table__state--error" role="alert">
22
+ <span class="data-table__state-title">{title}</span>
23
+ {#if children}<span class="data-table__state-description">{@render children()}</span>{/if}
24
+ </div>
25
+ </td>
26
+ </tr>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from "svelte";
2
+ type $$ComponentProps = {
3
+ title?: string;
4
+ class?: string;
5
+ children?: Snippet;
6
+ };
7
+ declare const TableError: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type TableError = ReturnType<typeof TableError>;
9
+ export default TableError;
10
+ //# sourceMappingURL=TableError.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableError.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableStates/TableError.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIrC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA2BjF,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,33 @@
1
+ <!--
2
+ Skeleton rows sized to the real row height, so the table does not resize when
3
+ the data lands — which is the entire reason to prefer a skeleton to a spinner.
4
+ (There is no Spinner in the library, which settles it anyway.)
5
+ -->
6
+ <script lang="ts">
7
+ import { clsx } from "clsx";
8
+ import { Skeleton } from "@ui-organized/svelte";
9
+ import { getTable } from "../../core/tableContext.js";
10
+
11
+ let { rows = 8, class: className }: { rows?: number; class?: string } = $props();
12
+ const table = getTable();
13
+ const columns = $derived(table.table.getVisibleLeafColumns());
14
+ const bars = $derived(Array.from({ length: rows }, (_, index) => index));
15
+ </script>
16
+
17
+ {#each bars as index (index)}
18
+ <tr class="data-table__row" aria-hidden="true">
19
+ {#each columns as column (column.id)}
20
+ <td class={clsx("data-table__skeleton-cell", className)}>
21
+ <!--
22
+ Varied but deterministic: identical bars read as a progress bar, and a
23
+ random width changes on every render.
24
+ -->
25
+ <Skeleton
26
+ variant="text"
27
+ width={`${55 + ((column.id.length * 7) % 35)}%`}
28
+ height={table.size === "sm" ? 10 : 12}
29
+ />
30
+ </td>
31
+ {/each}
32
+ </tr>
33
+ {/each}
@@ -0,0 +1,8 @@
1
+ type $$ComponentProps = {
2
+ rows?: number;
3
+ class?: string;
4
+ };
5
+ declare const TableLoading: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type TableLoading = ReturnType<typeof TableLoading>;
7
+ export default TableLoading;
8
+ //# sourceMappingURL=TableLoading.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableLoading.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableStates/TableLoading.svelte.ts"],"names":[],"mappings":"AAOC,KAAK,gBAAgB,GAAI;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA0B5D,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { default as TableEmpty } from "./TableEmpty.svelte";
2
+ export { default as TableLoading } from "./TableLoading.svelte";
3
+ export { default as TableError } from "./TableError.svelte";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableStates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as TableEmpty } from "./TableEmpty.svelte";
2
+ export { default as TableLoading } from "./TableLoading.svelte";
3
+ export { default as TableError } from "./TableError.svelte";
@@ -0,0 +1,34 @@
1
+ <!--
2
+ The row under the toolbar: what is filtered.
3
+
4
+ The selection's bulk actions used to share this line. They now replace the
5
+ toolbar's own controls while anything is selected (see `TableToolbar`), so
6
+ acting on the selection happens in the row the user was already reading.
7
+
8
+ It renders nothing at all until there is a filter to show, so an empty row
9
+ never takes a slice of the table's `gap` — and nothing in card mode, where
10
+ the filter sheet holds them.
11
+ -->
12
+ <script lang="ts">
13
+ import { clsx } from "clsx";
14
+ import { getTable } from "../../core/tableContext.js";
15
+ import { TableFilters } from "../TableFilters/index.js";
16
+
17
+ let { class: className }: { class?: string } = $props();
18
+ const table = getTable();
19
+
20
+ // In card mode every filter lives in the filter sheet, and the toolbar's
21
+ // Filter button counts them; a chips row would repeat it above a list that is
22
+ // already short of room.
23
+ const hasFilters = $derived(
24
+ table.options.filterable !== false &&
25
+ table.filters.conditions.length > 0 &&
26
+ table.mode !== "cards",
27
+ );
28
+ </script>
29
+
30
+ {#if hasFilters}
31
+ <div class={clsx("data-table__subbar", className)}>
32
+ <TableFilters />
33
+ </div>
34
+ {/if}
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const TableSubBar: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type TableSubBar = ReturnType<typeof TableSubBar>;
6
+ export default TableSubBar;
7
+ //# sourceMappingURL=TableSubBar.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableSubBar.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableSubBar/TableSubBar.svelte.ts"],"names":[],"mappings":"AAOC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4B7C,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as TableSubBar } from "./TableSubBar.svelte";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableSubBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as TableSubBar } from "./TableSubBar.svelte";
@@ -0,0 +1,40 @@
1
+ <!--
2
+ The developer's own header buttons — "New user", "Import", "Refresh".
3
+
4
+ Rendered as real buttons rather than folded into a menu, because these are the
5
+ actions a page is *for*: a primary action hidden behind an overflow menu is a
6
+ primary action nobody finds. Each carries whatever intent the developer gave
7
+ it, so exactly one of them can be the page's call to action and the rest can
8
+ recede.
9
+ -->
10
+ <script lang="ts">
11
+ import { clsx } from "clsx";
12
+ import { Button } from "@ui-organized/svelte";
13
+ import { getTable } from "../../core/tableContext.js";
14
+ import type { TableAction } from "../../core/types.js";
15
+
16
+ let { actions, class: className }: { actions?: TableAction[]; class?: string } = $props();
17
+ const table = getTable();
18
+ const items = $derived(actions ?? table.options.actions ?? []);
19
+
20
+ // An icon-only button drops its visible label but keeps its accessible one —
21
+ // the label is the whole name either way.
22
+ const isIconOnly = (action: TableAction) => action.iconOnly === true && action.icon !== undefined;
23
+ </script>
24
+
25
+ {#if items.length > 0}
26
+ <div class={clsx("data-table__toolbar-actions", className)}>
27
+ {#each items as action (action.id)}
28
+ <Button
29
+ intent={action.intent ?? "tertiary"}
30
+ size={table.size}
31
+ icon={action.icon}
32
+ disabled={action.disabled}
33
+ aria-label={isIconOnly(action) ? action.label : undefined}
34
+ onclick={() => void action.onRun()}
35
+ >
36
+ {#if !isIconOnly(action)}{action.label}{/if}
37
+ </Button>
38
+ {/each}
39
+ </div>
40
+ {/if}
@@ -0,0 +1,9 @@
1
+ import type { TableAction } from "../../core/types.js";
2
+ type $$ComponentProps = {
3
+ actions?: TableAction[];
4
+ class?: string;
5
+ };
6
+ declare const TableActions: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type TableActions = ReturnType<typeof TableActions>;
8
+ export default TableActions;
9
+ //# sourceMappingURL=TableActions.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableActions.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableToolbar/TableActions.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtD,KAAK,gBAAgB,GAAI;IAAE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA6BtE,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,60 @@
1
+ <!--
2
+ Export scopes are separate items rather than one button, because "download"
3
+ means three different things depending on what is filtered and what is ticked —
4
+ and silently picking one is how an export loses rows.
5
+ -->
6
+ <script lang="ts">
7
+ import {
8
+ Button,
9
+ Menu,
10
+ MenuContent,
11
+ MenuItem,
12
+ MenuSeparator,
13
+ MenuTrigger,
14
+ } from "@ui-organized/svelte";
15
+ import { getTable } from "../../core/tableContext.js";
16
+ import { internalGlyph as glyph } from "@ui-organized/svelte";
17
+
18
+ let { label = "Export", class: className }: { label?: string; class?: string } = $props();
19
+ const table = getTable();
20
+ const hasSelection = $derived(table.selection.count > 0);
21
+ </script>
22
+
23
+ <Menu>
24
+ <MenuTrigger>
25
+ {#snippet asChild(props)}
26
+ <Button
27
+ {...(props() as Record<string, never>)}
28
+ intent="secondary"
29
+ size={table.size}
30
+ icon={glyph("download")}
31
+ aria-label={label}
32
+ />
33
+ {/snippet}
34
+ </MenuTrigger>
35
+ <MenuContent align="end" class={className}>
36
+ <MenuItem value="csv-view" icon={glyph("download")} onSelect={() => table.exportCsv("view")}>
37
+ Download this view (CSV)
38
+ </MenuItem>
39
+ <MenuItem
40
+ value="csv-selected"
41
+ icon={glyph("download")}
42
+ disabled={!hasSelection}
43
+ onSelect={() => table.exportCsv("selected")}
44
+ >
45
+ Download selected rows (CSV)
46
+ </MenuItem>
47
+ <MenuItem value="csv-all" icon={glyph("download")} onSelect={() => table.exportCsv("all")}>
48
+ Download all rows (CSV)
49
+ </MenuItem>
50
+ <MenuSeparator />
51
+ <MenuItem
52
+ value="copy"
53
+ icon={glyph("copy")}
54
+ disabled={!hasSelection}
55
+ onSelect={() => void table.copySelection("selected")}
56
+ >
57
+ Copy selection to clipboard
58
+ </MenuItem>
59
+ </MenuContent>
60
+ </Menu>
@@ -0,0 +1,8 @@
1
+ type $$ComponentProps = {
2
+ label?: string;
3
+ class?: string;
4
+ };
5
+ declare const TableExportMenu: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type TableExportMenu = ReturnType<typeof TableExportMenu>;
7
+ export default TableExportMenu;
8
+ //# sourceMappingURL=TableExportMenu.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableExportMenu.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableToolbar/TableExportMenu.svelte.ts"],"names":[],"mappings":"AAcC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAqC7D,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -0,0 +1,27 @@
1
+ <!--
2
+ Enters and leaves reorder mode, for `reorderable: "toggle"`. Absent for any
3
+ other setting, and in card mode, which has no headers to move.
4
+
5
+ The label says what a press does next — "Reorder", then "Done" — rather than
6
+ carrying a pressed state, so the button reads the same to a screen reader as
7
+ it does on screen, and "Done" is the obvious way out.
8
+ -->
9
+ <script lang="ts">
10
+ import { Button } from "@ui-organized/svelte";
11
+ import { getTable } from "../../core/tableContext.js";
12
+
13
+ let { class: className }: { class?: string } = $props();
14
+ const table = getTable();
15
+ </script>
16
+
17
+ {#if table.reorder.mode === "toggle" && table.mode !== "cards"}
18
+ <Button
19
+ intent={table.reorder.active ? "primary" : "secondary"}
20
+ size={table.size}
21
+ class={className}
22
+ aria-label={table.reorder.active ? "Done reordering columns" : "Reorder columns"}
23
+ onclick={() => table.reorder.setActive(!table.reorder.active)}
24
+ >
25
+ {table.reorder.active ? "Done" : "Reorder"}
26
+ </Button>
27
+ {/if}
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const TableReorderToggle: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type TableReorderToggle = ReturnType<typeof TableReorderToggle>;
6
+ export default TableReorderToggle;
7
+ //# sourceMappingURL=TableReorderToggle.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableReorderToggle.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TableToolbar/TableReorderToggle.svelte.ts"],"names":[],"mappings":"AAMC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAkB7C,QAAA,MAAM,kBAAkB,sDAAwC,CAAC;AACjE,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChE,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,54 @@
1
+ <!--
2
+ Left and right, for a table wider than its viewport.
3
+
4
+ The scrollbar is the primary affordance; this is the *visible* one. A mouse
5
+ with no horizontal wheel, a thin overlay scrollbar that only paints while it is
6
+ moving, and a pinned first column that makes a half-cut column at the edge look
7
+ deliberate all leave "there are more columns over there" as something the user
8
+ has to guess at.
9
+
10
+ Absent rather than disabled when everything fits: a pair of permanently dead
11
+ buttons in every toolbar is worse noise than no buttons at all. At the ends of
12
+ the scroll they *are* disabled — the same call `Pagination` makes for its own
13
+ prev/next, so the two read the same way.
14
+ -->
15
+ <script lang="ts">
16
+ import { clsx } from "clsx";
17
+ import { Button } from "@ui-organized/svelte";
18
+ import { getTable } from "../../core/tableContext.js";
19
+ import { internalGlyph as glyph } from "@ui-organized/svelte";
20
+
21
+ let {
22
+ leftLabel = "Scroll left",
23
+ rightLabel = "Scroll right",
24
+ class: className,
25
+ }: { leftLabel?: string; rightLabel?: string; class?: string } = $props();
26
+
27
+ const table = getTable();
28
+ const scroll = $derived(table.scroll.state);
29
+ </script>
30
+
31
+ <!--
32
+ Grouped, and tighter than the toolbar's own gap: two halves of one control
33
+ rather than two more buttons in the row.
34
+ -->
35
+ {#if scroll.overflowing}
36
+ <div class={clsx("data-table__scroll-buttons", className)}>
37
+ <Button
38
+ intent="secondary"
39
+ size={table.size}
40
+ icon={glyph("chevron-left")}
41
+ aria-label={leftLabel}
42
+ disabled={!scroll.canScrollLeft}
43
+ onclick={() => table.scroll.by(-1)}
44
+ />
45
+ <Button
46
+ intent="secondary"
47
+ size={table.size}
48
+ icon={glyph("chevron-right")}
49
+ aria-label={rightLabel}
50
+ disabled={!scroll.canScrollRight}
51
+ onclick={() => table.scroll.by(1)}
52
+ />
53
+ </div>
54
+ {/if}
@@ -0,0 +1,9 @@
1
+ type $$ComponentProps = {
2
+ leftLabel?: string;
3
+ rightLabel?: string;
4
+ class?: string;
5
+ };
6
+ declare const TableScrollButtons: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type TableScrollButtons = ReturnType<typeof TableScrollButtons>;
8
+ export default TableScrollButtons;
9
+ //# sourceMappingURL=TableScrollButtons.svelte.d.ts.map