@pathscale/ui 2.2.1 → 2.3.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 (64) hide show
  1. package/dist/components/data-grid/DataGrid.css +238 -0
  2. package/dist/components/data-grid/DataGrid.generated.d.ts +41 -0
  3. package/dist/components/data-grid/DataGrid.generated.js +408 -0
  4. package/dist/components/data-grid/DataGrid.interactions.d.ts +11 -0
  5. package/dist/components/data-grid/DataGrid.interactions.js +25 -0
  6. package/dist/components/data-grid/DataGrid.recipe.d.ts +52 -0
  7. package/dist/components/data-grid/DataGrid.recipe.js +96 -0
  8. package/dist/components/data-grid/createDataGrid.d.ts +121 -0
  9. package/dist/components/data-grid/createDataGrid.js +252 -0
  10. package/dist/components/data-grid/index.d.ts +4 -0
  11. package/dist/components/data-grid/index.js +2 -0
  12. package/dist/components/dialog/Dialog.generated.js +1 -1
  13. package/dist/components/table/ExpandToggle.generated.js +2 -2
  14. package/dist/components/table/InlineConfirm.generated.js +2 -2
  15. package/dist/components/table/MobileListView.generated.js +2 -2
  16. package/dist/components/table/SortIcon.generated.js +2 -2
  17. package/dist/components/table/Table.context.d.ts +23 -0
  18. package/dist/components/table/Table.context.js +22 -0
  19. package/dist/components/table/Table.d.ts +18 -0
  20. package/dist/components/table/Table.js +33 -0
  21. package/dist/components/table/Table.recipe.d.ts +130 -16
  22. package/dist/components/table/Table.recipe.js +420 -78
  23. package/dist/components/table/TableBody.generated.d.ts +6 -0
  24. package/dist/components/table/TableBody.generated.js +33 -0
  25. package/dist/components/table/TableCell.generated.d.ts +6 -0
  26. package/dist/components/table/TableCell.generated.js +33 -0
  27. package/dist/components/table/TableColumn.generated.d.ts +11 -0
  28. package/dist/components/table/TableColumn.generated.js +89 -0
  29. package/dist/components/table/TableColumnResizer.generated.d.ts +6 -0
  30. package/dist/components/table/TableColumnResizer.generated.js +42 -0
  31. package/dist/components/table/TableContent.generated.d.ts +10 -0
  32. package/dist/components/table/TableContent.generated.js +50 -0
  33. package/dist/components/table/TableExpandedRow.generated.d.ts +11 -0
  34. package/dist/components/table/TableExpandedRow.generated.js +50 -0
  35. package/dist/components/table/TableFooter.generated.d.ts +6 -0
  36. package/dist/components/table/TableFooter.generated.js +33 -0
  37. package/dist/components/table/TableHeader.generated.d.ts +6 -0
  38. package/dist/components/table/TableHeader.generated.js +33 -0
  39. package/dist/components/table/TableLoadMore.generated.d.ts +6 -0
  40. package/dist/components/table/TableLoadMore.generated.js +33 -0
  41. package/dist/components/table/TableLoadMoreContent.generated.d.ts +6 -0
  42. package/dist/components/table/TableLoadMoreContent.generated.js +33 -0
  43. package/dist/components/table/TablePageSize.generated.d.ts +13 -0
  44. package/dist/components/table/TablePageSize.generated.js +57 -0
  45. package/dist/components/table/TableResizableContainer.generated.d.ts +6 -0
  46. package/dist/components/table/TableResizableContainer.generated.js +33 -0
  47. package/dist/components/table/TableRoot.generated.d.ts +10 -0
  48. package/dist/components/table/TableRoot.generated.js +45 -0
  49. package/dist/components/table/TableRow.generated.d.ts +6 -0
  50. package/dist/components/table/TableRow.generated.js +33 -0
  51. package/dist/components/table/TableScrollContainer.generated.d.ts +6 -0
  52. package/dist/components/table/TableScrollContainer.generated.js +33 -0
  53. package/dist/components/table/VirtualSpacerRow.generated.js +2 -2
  54. package/dist/components/table/index.d.ts +43 -13
  55. package/dist/components/table/index.js +21 -5
  56. package/dist/index.d.ts +3 -0
  57. package/dist/index.js +1 -0
  58. package/dist/layouts.manifest.json +4 -1
  59. package/dist/purge-manifest.json +482 -14
  60. package/dist/styles/themes/dark.css +3 -0
  61. package/dist/styles/themes/light.css +3 -0
  62. package/package.json +2 -2
  63. package/dist/components/table/Table.generated.d.ts +0 -94
  64. package/dist/components/table/Table.generated.js +0 -551
@@ -0,0 +1,121 @@
1
+ import { type Accessor, type JSX } from "solid-js";
2
+ /**
3
+ * The imperative grid model.
4
+ *
5
+ * Ported from vue3-ui's `DataGrid` class, keeping its verbs and their
6
+ * positional shapes so a call site moves across unchanged:
7
+ *
8
+ * ```ts
9
+ * const grid = createDataGrid();
10
+ * grid.addColumn("id", "ID", "number");
11
+ * grid.addRow({ id: 1, firstName: "John" });
12
+ * ```
13
+ *
14
+ * Three things are deliberately different, and all three are the same bug.
15
+ * In vue3 `searchColumn`, `sortByColumn` and `switchPage` each rewrite the
16
+ * single `rows` array from `originalRows`, so any two of them compose by
17
+ * destroying each other: paging after a search silently restores the rows the
18
+ * search removed. Here `rows` is the source and everything downstream is
19
+ * derived — `filteredRows` -> `sortedRows` -> `pageRows` — so the three
20
+ * compose, and a search is no longer lost when the reader turns the page.
21
+ *
22
+ * Consequences of that, worth knowing before porting:
23
+ * - `searchColumn` accumulates. Two columns can filter at once; vue3 could
24
+ * only ever hold the last query. `resetFilters()` clears all of them.
25
+ * - `sortByColumn(name)` toggles and takes a direction rather than vue3's
26
+ * `ascendant: boolean`, because a bare `true` meaning "ascending" is the
27
+ * kind of parameter 2.2 spent the release removing.
28
+ * - `switchPage(page)` takes the page. vue3's read a mutable field.
29
+ * - `deleteRow(index)` indexes the source rows, not what is on screen.
30
+ */
31
+ export type DataGridDataType = "string" | "number" | "boolean" | "date" | "custom";
32
+ export type DataGridRow = Record<string, unknown>;
33
+ export type DataGridSortDirection = "ascending" | "descending";
34
+ export type DataGridSort = {
35
+ column: string;
36
+ direction: DataGridSortDirection;
37
+ };
38
+ export type DataGridSelectionMode = "none" | "single" | "multiple";
39
+ export type DataGridCellContext<Row extends DataGridRow = DataGridRow> = {
40
+ value: unknown;
41
+ row: Row;
42
+ column: DataGridColumn<Row>;
43
+ index: number;
44
+ };
45
+ export type DataGridColumn<Row extends DataGridRow = DataGridRow> = {
46
+ /** Key into the row. */
47
+ name: string;
48
+ /** Header text. vue3 called this `caption`, which collides with `<caption>`. */
49
+ label: string;
50
+ dataType: DataGridDataType;
51
+ visible: boolean;
52
+ sortable: boolean;
53
+ searchable: boolean;
54
+ sticky: boolean;
55
+ width?: string;
56
+ align?: "start" | "center" | "end";
57
+ /** Required in practice for `dataType: "custom"`; nothing else reads a custom cell. */
58
+ render?: (context: DataGridCellContext<Row>) => JSX.Element;
59
+ /** Overrides the dataType's ordering. Receives the raw cell values. */
60
+ compare?: (a: unknown, b: unknown) => number;
61
+ };
62
+ export type DataGridColumnOptions<Row extends DataGridRow = DataGridRow> = Partial<Omit<DataGridColumn<Row>, "name" | "label" | "dataType">>;
63
+ export type CreateDataGridOptions<Row extends DataGridRow = DataGridRow> = {
64
+ columns?: readonly DataGridColumn<Row>[];
65
+ rows?: readonly Row[];
66
+ /** Stable identity for selection and keyed rendering. Defaults to `row.id`, then the index. */
67
+ getRowId?: (row: Row, index: number) => string;
68
+ /** Omit for no pagination. There is no separate `pagination` flag to disagree with it. */
69
+ pageSize?: number;
70
+ /** Omit for no checkbox column. Likewise no `checkable` flag. */
71
+ selection?: DataGridSelectionMode;
72
+ sort?: DataGridSort | null;
73
+ groupBy?: string | null;
74
+ /** Defaults for columns added later. */
75
+ sortable?: boolean;
76
+ searchable?: boolean;
77
+ };
78
+ export type DataGridModel<Row extends DataGridRow = DataGridRow> = {
79
+ addColumn(name: string, label: string, dataType?: DataGridDataType, options?: DataGridColumnOptions<Row>): void;
80
+ removeColumn(name: string): void;
81
+ addRow(row: Row, index?: number): void;
82
+ deleteRow(index: number): void;
83
+ setRows(rows: readonly Row[]): void;
84
+ columns: Accessor<DataGridColumn<Row>[]>;
85
+ visibleColumns: Accessor<DataGridColumn<Row>[]>;
86
+ columnsByName: Accessor<Record<string, DataGridColumn<Row>>>;
87
+ toggleColumn(name: string, visible?: boolean): void;
88
+ rows: Accessor<Row[]>;
89
+ filteredRows: Accessor<Row[]>;
90
+ sortedRows: Accessor<Row[]>;
91
+ pageRows: Accessor<Row[]>;
92
+ rowId(row: Row, index: number): string;
93
+ sort: Accessor<DataGridSort | null>;
94
+ setSort(sort: DataGridSort | null): void;
95
+ sortByColumn(name: string, direction?: DataGridSortDirection): void;
96
+ queries: Accessor<Record<string, string>>;
97
+ searchColumn(name: string, query: string): void;
98
+ resetFilters(): void;
99
+ filterRows(name: string, value: unknown): Row[];
100
+ page: Accessor<number>;
101
+ pageSize: Accessor<number>;
102
+ pageCount: Accessor<number>;
103
+ total: Accessor<number>;
104
+ switchPage(page: number): void;
105
+ setPageSize(size: number): void;
106
+ selectionMode: Accessor<DataGridSelectionMode>;
107
+ selectedIds: Accessor<ReadonlySet<string>>;
108
+ selectedRows: Accessor<Row[]>;
109
+ isSelected(row: Row, index: number): boolean;
110
+ toggleCheck(row: Row, index: number, selected?: boolean): void;
111
+ toggleCheckAll(selected: boolean): void;
112
+ groupBy: Accessor<string | null>;
113
+ setGroupBy(name: string | null): void;
114
+ /** Distinct values in a column, in first-seen order. vue3 returned an unordered Set. */
115
+ groups(name: string): unknown[];
116
+ groupedRows: Accessor<{
117
+ value: unknown;
118
+ rows: Row[];
119
+ }[]>;
120
+ };
121
+ export declare function createDataGrid<Row extends DataGridRow = DataGridRow>(options?: CreateDataGridOptions<Row>): DataGridModel<Row>;
@@ -0,0 +1,252 @@
1
+ import { createMemo, createSignal, getOwner } from "solid-js";
2
+ import { createStore, produce } from "solid-js/store";
3
+ const derive = (fn)=>getOwner() ? createMemo(fn) : fn;
4
+ const compareValues = (a, b, dataType)=>{
5
+ if (a === b) return 0;
6
+ if (null == a) return -1;
7
+ if (null == b) return 1;
8
+ if ("number" === dataType) return Number(a) - Number(b);
9
+ if ("boolean" === dataType) return Number(Boolean(a)) - Number(Boolean(b));
10
+ if ("date" === dataType) return new Date(a).getTime() - new Date(b).getTime();
11
+ return String(a).localeCompare(String(b));
12
+ };
13
+ const matches = (value, query)=>{
14
+ if (null == value) return false;
15
+ return String(value).toLowerCase().includes(query.toLowerCase());
16
+ };
17
+ function createDataGrid(options = {}) {
18
+ const columnDefaults = {
19
+ sortable: options.sortable ?? true,
20
+ searchable: options.searchable ?? false
21
+ };
22
+ const [columnStore, setColumnStore] = createStore({
23
+ items: [
24
+ ...options.columns ?? []
25
+ ]
26
+ });
27
+ const [rowStore, setRowStore] = createStore({
28
+ items: [
29
+ ...options.rows ?? []
30
+ ]
31
+ });
32
+ const [sort, writeSort] = createSignal(options.sort ?? null);
33
+ const [queries, setQueries] = createSignal({});
34
+ const [page, setPage] = createSignal(0);
35
+ const [pageSize, setPageSize] = createSignal(options.pageSize ?? 0);
36
+ const [selectedIds, setSelectedIds] = createSignal(new Set());
37
+ const [groupBy, setGroupBy] = createSignal(options.groupBy ?? null);
38
+ const selectionMode = ()=>options.selection ?? "none";
39
+ const identify = (row, index)=>{
40
+ if (options.getRowId) return options.getRowId(row, index);
41
+ const own = row.id;
42
+ return null == own ? String(index) : String(own);
43
+ };
44
+ const idByRow = derive(()=>{
45
+ const map = new Map();
46
+ rowStore.items.forEach((row, index)=>map.set(row, identify(row, index)));
47
+ return map;
48
+ });
49
+ const rowId = (row, index)=>idByRow().get(row) ?? identify(row, index);
50
+ const columns = derive(()=>columnStore.items);
51
+ const visibleColumns = derive(()=>columnStore.items.filter((column)=>column.visible));
52
+ const columnsByName = derive(()=>Object.fromEntries(columnStore.items.map((column)=>[
53
+ column.name,
54
+ column
55
+ ])));
56
+ const rows = derive(()=>rowStore.items);
57
+ const filteredRows = derive(()=>{
58
+ const active = Object.entries(queries()).filter(([, query])=>query.length > 0);
59
+ if (0 === active.length) return rowStore.items;
60
+ return rowStore.items.filter((row)=>active.every(([name, query])=>matches(row[name], query)));
61
+ });
62
+ const sortedRows = derive(()=>{
63
+ const descriptor = sort();
64
+ if (!descriptor) return filteredRows();
65
+ const column = columnStore.items.find((item)=>item.name === descriptor.column);
66
+ if (!column) return filteredRows();
67
+ const sign = "ascending" === descriptor.direction ? 1 : -1;
68
+ const compare = column.compare ?? ((a, b)=>compareValues(a, b, column.dataType));
69
+ return [
70
+ ...filteredRows()
71
+ ].sort((a, b)=>sign * compare(a[column.name], b[column.name]));
72
+ });
73
+ const total = derive(()=>filteredRows().length);
74
+ const pageCount = derive(()=>{
75
+ const size = pageSize();
76
+ if (size <= 0) return 1;
77
+ return Math.max(1, Math.ceil(total() / size));
78
+ });
79
+ const pageRows = derive(()=>{
80
+ const size = pageSize();
81
+ if (size <= 0) return sortedRows();
82
+ const start = page() * size;
83
+ return sortedRows().slice(start, start + size);
84
+ });
85
+ const selectedRows = derive(()=>{
86
+ const ids = selectedIds();
87
+ return rowStore.items.filter((row, index)=>ids.has(rowId(row, index)));
88
+ });
89
+ const groupedRows = derive(()=>{
90
+ const name = groupBy();
91
+ if (!name) return [
92
+ {
93
+ value: void 0,
94
+ rows: pageRows()
95
+ }
96
+ ];
97
+ const buckets = new Map();
98
+ for (const row of pageRows()){
99
+ const value = row[name];
100
+ const bucket = buckets.get(value);
101
+ if (bucket) bucket.push(row);
102
+ else buckets.set(value, [
103
+ row
104
+ ]);
105
+ }
106
+ return [
107
+ ...buckets
108
+ ].map(([value, groupRows])=>({
109
+ value,
110
+ rows: groupRows
111
+ }));
112
+ });
113
+ return {
114
+ addColumn (name, label, dataType = "string", columnOptions = {}) {
115
+ setColumnStore("items", produce((items)=>{
116
+ items.push({
117
+ name,
118
+ label,
119
+ dataType,
120
+ visible: true,
121
+ sticky: false,
122
+ ...columnDefaults,
123
+ ...columnOptions
124
+ });
125
+ }));
126
+ },
127
+ removeColumn (name) {
128
+ setColumnStore("items", (items)=>items.filter((column)=>column.name !== name));
129
+ },
130
+ addRow (row, index) {
131
+ setRowStore("items", produce((items)=>{
132
+ if (void 0 === index) items.push(row);
133
+ else items.splice(index, 0, row);
134
+ }));
135
+ },
136
+ deleteRow (index) {
137
+ setRowStore("items", produce((items)=>{
138
+ items.splice(index, 1);
139
+ }));
140
+ },
141
+ setRows (next) {
142
+ setRowStore("items", [
143
+ ...next
144
+ ]);
145
+ },
146
+ columns,
147
+ visibleColumns,
148
+ columnsByName,
149
+ toggleColumn (name, visible) {
150
+ setColumnStore("items", (items)=>items.map((column)=>column.name === name ? {
151
+ ...column,
152
+ visible: visible ?? !column.visible
153
+ } : column));
154
+ },
155
+ rows,
156
+ filteredRows,
157
+ sortedRows,
158
+ pageRows,
159
+ rowId,
160
+ sort,
161
+ setSort (next) {
162
+ writeSort(next);
163
+ setPage(0);
164
+ },
165
+ sortByColumn (name, direction) {
166
+ const current = sort();
167
+ const apply = (next)=>{
168
+ writeSort(next);
169
+ setPage(0);
170
+ };
171
+ if (direction) return void apply({
172
+ column: name,
173
+ direction
174
+ });
175
+ if (!current || current.column !== name) return void apply({
176
+ column: name,
177
+ direction: "ascending"
178
+ });
179
+ apply("ascending" === current.direction ? {
180
+ column: name,
181
+ direction: "descending"
182
+ } : null);
183
+ },
184
+ queries,
185
+ searchColumn (name, query) {
186
+ setQueries((previous)=>({
187
+ ...previous,
188
+ [name]: query
189
+ }));
190
+ setPage(0);
191
+ },
192
+ resetFilters () {
193
+ setQueries({});
194
+ setPage(0);
195
+ },
196
+ filterRows (name, value) {
197
+ return rowStore.items.filter((row)=>row[name] === value);
198
+ },
199
+ page,
200
+ pageSize,
201
+ pageCount,
202
+ total,
203
+ switchPage (next) {
204
+ setPage(Math.min(Math.max(next, 0), pageCount() - 1));
205
+ },
206
+ setPageSize (size) {
207
+ setPageSize(size);
208
+ setPage(0);
209
+ },
210
+ selectionMode,
211
+ selectedIds,
212
+ selectedRows,
213
+ isSelected (row, index) {
214
+ return selectedIds().has(rowId(row, index));
215
+ },
216
+ toggleCheck (row, index, selected) {
217
+ const id = rowId(row, index);
218
+ setSelectedIds((previous)=>{
219
+ const shouldSelect = selected ?? !previous.has(id);
220
+ if ("single" === selectionMode()) return shouldSelect ? new Set([
221
+ id
222
+ ]) : new Set();
223
+ const next = new Set(previous);
224
+ if (shouldSelect) next.add(id);
225
+ else next.delete(id);
226
+ return next;
227
+ });
228
+ },
229
+ toggleCheckAll (selected) {
230
+ if (!selected) return void setSelectedIds(new Set());
231
+ setSelectedIds(new Set(pageRows().map((row, index)=>rowId(row, index))));
232
+ },
233
+ groupBy,
234
+ setGroupBy,
235
+ groups (name) {
236
+ const seen = [];
237
+ const known = new Set();
238
+ for (const row of rowStore.items){
239
+ const value = row[name];
240
+ if (null != value) {
241
+ if (!known.has(value)) {
242
+ known.add(value);
243
+ seen.push(value);
244
+ }
245
+ }
246
+ }
247
+ return seen;
248
+ },
249
+ groupedRows
250
+ };
251
+ }
252
+ export { createDataGrid };
@@ -0,0 +1,4 @@
1
+ export type { CreateDataGridOptions, DataGridCellContext, DataGridColumn, DataGridColumnOptions, DataGridDataType, DataGridModel, DataGridRow, DataGridSelectionMode, DataGridSort, DataGridSortDirection, } from "./createDataGrid";
2
+ export { createDataGrid } from "./createDataGrid";
3
+ export type { DataGridBorders, DataGridProps, DataGridSticky, DataGridStriping, } from "./DataGrid.generated";
4
+ export { default } from "./DataGrid.generated";
@@ -0,0 +1,2 @@
1
+ export { createDataGrid } from "./createDataGrid.js";
2
+ export { default } from "./DataGrid.generated.js";
@@ -385,7 +385,7 @@ const __solidLayoutDialogContent = (_stable, p)=>{
385
385
  get role () {
386
386
  return local.role ?? "dialog";
387
387
  },
388
- "aria-dialog": "true",
388
+ "aria-modal": "true",
389
389
  get ["aria-labelledby"] () {
390
390
  return local["aria-labelledby"] ?? context.labelledBy();
391
391
  },
@@ -3,7 +3,7 @@ import { defineComponent } from "solid-layouts/application-boundary";
3
3
  import { Show, splitProps } from "solid-js";
4
4
  import { twMerge } from "tailwind-merge";
5
5
  import icon from "../icon/index.js";
6
- import { componentRecipe } from "./Table.recipe.js";
6
+ import { tableExpandToggleRecipe } from "./Table.recipe.js";
7
7
  var _tmpl$ = /*#__PURE__*/ template("<button>");
8
8
  const __solidLayoutExpandToggle = (_stable, p)=>{
9
9
  const [local, rest] = splitProps(p, [
@@ -86,7 +86,7 @@ const __solidLayoutExpandToggle = (_stable, p)=>{
86
86
  })();
87
87
  };
88
88
  const ExpandToggle = defineComponent({
89
- recipe: componentRecipe,
89
+ recipe: tableExpandToggleRecipe,
90
90
  layout: __solidLayoutExpandToggle,
91
91
  embedded: true
92
92
  });
@@ -3,7 +3,7 @@ import { defineComponent } from "solid-layouts/application-boundary";
3
3
  import { splitProps } from "solid-js";
4
4
  import { twMerge } from "tailwind-merge";
5
5
  import button_0 from "../button/index.js";
6
- import { componentRecipe } from "./Table.recipe.js";
6
+ import { tableInlineConfirmRecipe } from "./Table.recipe.js";
7
7
  var _tmpl$ = /*#__PURE__*/ template('<div><span class="text-sm text-base-content/70"data-slot=table-inline-confirm-prompt></span><div class="inline-flex items-center gap-2"data-slot=table-inline-confirm-actions>');
8
8
  const toButtonFlavor = (variant)=>{
9
9
  if ("danger" === variant) return "destructive";
@@ -74,7 +74,7 @@ const __solidLayoutInlineConfirm = (_stable, p)=>{
74
74
  })();
75
75
  };
76
76
  const InlineConfirm = defineComponent({
77
- recipe: componentRecipe,
77
+ recipe: tableInlineConfirmRecipe,
78
78
  layout: __solidLayoutInlineConfirm,
79
79
  embedded: true
80
80
  });
@@ -4,7 +4,7 @@ import { For, Show, splitProps } from "solid-js";
4
4
  import { twMerge } from "tailwind-merge";
5
5
  import { Empty } from "../empty/index.js";
6
6
  import icon from "../icon/index.js";
7
- import { componentRecipe } from "./Table.recipe.js";
7
+ import { tableMobileListViewRecipe } from "./Table.recipe.js";
8
8
  var _tmpl$ = /*#__PURE__*/ template("<div><ul>"), _tmpl$2 = /*#__PURE__*/ template("<li class=py-8 data-slot=table-mobile-list-view-empty>"), _tmpl$3 = /*#__PURE__*/ template("<li>");
9
9
  const __solidLayoutMobileListView = (_stable, p)=>{
10
10
  const [local, rest] = splitProps(p, [
@@ -103,7 +103,7 @@ const __solidLayoutMobileListView = (_stable, p)=>{
103
103
  })();
104
104
  };
105
105
  const MobileListView = defineComponent({
106
- recipe: componentRecipe,
106
+ recipe: tableMobileListViewRecipe,
107
107
  layout: __solidLayoutMobileListView,
108
108
  embedded: true
109
109
  });
@@ -3,7 +3,7 @@ import { defineComponent } from "solid-layouts/application-boundary";
3
3
  import { Show, splitProps } from "solid-js";
4
4
  import { twMerge } from "tailwind-merge";
5
5
  import icon from "../icon/index.js";
6
- import { componentRecipe } from "./Table.recipe.js";
6
+ import { tableSortIconRecipe } from "./Table.recipe.js";
7
7
  var _tmpl$ = /*#__PURE__*/ template("<span>");
8
8
  const __solidLayoutSortIcon = (_stable, p)=>{
9
9
  const [local, rest] = splitProps(p, [
@@ -65,7 +65,7 @@ const __solidLayoutSortIcon = (_stable, p)=>{
65
65
  })();
66
66
  };
67
67
  const SortIcon = defineComponent({
68
- recipe: componentRecipe,
68
+ recipe: tableSortIconRecipe,
69
69
  layout: __solidLayoutSortIcon,
70
70
  embedded: true
71
71
  });
@@ -0,0 +1,23 @@
1
+ import { type Accessor, type JSX } from "solid-js";
2
+ export type TableVariant = "primary" | "secondary";
3
+ export type TableSortDirection = "ascending" | "descending";
4
+ export type TableSortDescriptor = {
5
+ column: string;
6
+ direction: TableSortDirection;
7
+ };
8
+ export type TableColumnRenderProps = {
9
+ sortDirection: TableSortDirection | undefined;
10
+ };
11
+ export type TableColumnChildren = JSX.Element | ((props: TableColumnRenderProps) => JSX.Element);
12
+ export type TableContextValue = {
13
+ variant: Accessor<TableVariant>;
14
+ };
15
+ export declare const TableContext: import("solid-js").Context<TableContextValue | undefined>;
16
+ export type TableContentContextValue = {
17
+ sortDescriptor: Accessor<TableSortDescriptor | undefined>;
18
+ onSortChange?: (descriptor: TableSortDescriptor) => void;
19
+ };
20
+ export declare const TableContentContext: import("solid-js").Context<TableContentContextValue | undefined>;
21
+ export declare const useTableContext: () => TableContextValue;
22
+ export declare const useTableContentContext: () => TableContentContextValue;
23
+ export declare const invokeEventHandler: (handler: unknown, event: Event) => void;
@@ -0,0 +1,22 @@
1
+ import { createContext, useContext } from "solid-js";
2
+ const TableContext = createContext();
3
+ const TableContentContext = createContext();
4
+ const useTableContext = ()=>{
5
+ const context = useContext(TableContext);
6
+ if (context) return context;
7
+ return {
8
+ variant: ()=>"primary"
9
+ };
10
+ };
11
+ const useTableContentContext = ()=>{
12
+ const context = useContext(TableContentContext);
13
+ if (context) return context;
14
+ return {
15
+ sortDescriptor: ()=>void 0
16
+ };
17
+ };
18
+ const invokeEventHandler = (handler, event)=>{
19
+ if ("function" == typeof handler) return void handler(event);
20
+ if (Array.isArray(handler) && "function" == typeof handler[0]) handler[0](handler[1], event);
21
+ };
22
+ export { TableContentContext, TableContext, invokeEventHandler, useTableContentContext, useTableContext };
@@ -0,0 +1,18 @@
1
+ declare const _default: import("solid-js").Component<import("./TableRoot.generated").TableRootProps> & {
2
+ Root: import("solid-js").Component<import("./TableRoot.generated").TableRootProps>;
3
+ ScrollContainer: import("solid-js").Component<import("./TableScrollContainer.generated").TableScrollContainerProps>;
4
+ Content: import("solid-js").Component<import("./TableContent.generated").TableContentProps>;
5
+ Header: import("solid-js").Component<import("./TableHeader.generated").TableHeaderProps>;
6
+ Column: import("solid-js").Component<import("./TableColumn.generated").TableColumnProps>;
7
+ Body: import("solid-js").Component<import("./TableBody.generated").TableBodyProps>;
8
+ Row: import("solid-js").Component<import("./TableRow.generated").TableRowProps>;
9
+ Cell: import("solid-js").Component<import("./TableCell.generated").TableCellProps>;
10
+ ExpandedRow: import("solid-js").Component<import("./TableExpandedRow.generated").TableExpandedRowProps>;
11
+ Footer: import("solid-js").Component<import("./TableFooter.generated").TableFooterProps>;
12
+ PageSize: import("solid-js").Component<import("./TablePageSize.generated").TablePageSizeProps>;
13
+ ResizableContainer: import("solid-js").Component<import("./TableResizableContainer.generated").TableResizableContainerProps>;
14
+ ColumnResizer: import("solid-js").Component<import("./TableColumnResizer.generated").TableColumnResizerProps>;
15
+ LoadMore: import("solid-js").Component<import("./TableLoadMore.generated").TableLoadMoreProps>;
16
+ LoadMoreContent: import("solid-js").Component<import("./TableLoadMoreContent.generated").TableLoadMoreContentProps>;
17
+ };
18
+ export default _default;
@@ -0,0 +1,33 @@
1
+ import TableBody_generated from "./TableBody.generated.js";
2
+ import TableCell_generated from "./TableCell.generated.js";
3
+ import TableColumn_generated from "./TableColumn.generated.js";
4
+ import TableColumnResizer_generated from "./TableColumnResizer.generated.js";
5
+ import TableContent_generated from "./TableContent.generated.js";
6
+ import TableExpandedRow_generated from "./TableExpandedRow.generated.js";
7
+ import TableFooter_generated from "./TableFooter.generated.js";
8
+ import TableHeader_generated from "./TableHeader.generated.js";
9
+ import TableLoadMore_generated from "./TableLoadMore.generated.js";
10
+ import TableLoadMoreContent_generated from "./TableLoadMoreContent.generated.js";
11
+ import TablePageSize_generated from "./TablePageSize.generated.js";
12
+ import TableResizableContainer_generated from "./TableResizableContainer.generated.js";
13
+ import TableRoot_generated from "./TableRoot.generated.js";
14
+ import TableRow_generated from "./TableRow.generated.js";
15
+ import TableScrollContainer_generated from "./TableScrollContainer.generated.js";
16
+ const Table = Object.assign(TableRoot_generated, {
17
+ Root: TableRoot_generated,
18
+ ScrollContainer: TableScrollContainer_generated,
19
+ Content: TableContent_generated,
20
+ Header: TableHeader_generated,
21
+ Column: TableColumn_generated,
22
+ Body: TableBody_generated,
23
+ Row: TableRow_generated,
24
+ Cell: TableCell_generated,
25
+ ExpandedRow: TableExpandedRow_generated,
26
+ Footer: TableFooter_generated,
27
+ PageSize: TablePageSize_generated,
28
+ ResizableContainer: TableResizableContainer_generated,
29
+ ColumnResizer: TableColumnResizer_generated,
30
+ LoadMore: TableLoadMore_generated,
31
+ LoadMoreContent: TableLoadMoreContent_generated
32
+ });
33
+ export default Table;