@pathscale/ui 2.2.2 → 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.
- package/dist/components/data-grid/DataGrid.css +238 -0
- package/dist/components/data-grid/DataGrid.generated.d.ts +41 -0
- package/dist/components/data-grid/DataGrid.generated.js +408 -0
- package/dist/components/data-grid/DataGrid.interactions.d.ts +11 -0
- package/dist/components/data-grid/DataGrid.interactions.js +25 -0
- package/dist/components/data-grid/DataGrid.recipe.d.ts +52 -0
- package/dist/components/data-grid/DataGrid.recipe.js +96 -0
- package/dist/components/data-grid/createDataGrid.d.ts +121 -0
- package/dist/components/data-grid/createDataGrid.js +252 -0
- package/dist/components/data-grid/index.d.ts +4 -0
- package/dist/components/data-grid/index.js +2 -0
- package/dist/components/table/ExpandToggle.generated.js +2 -2
- package/dist/components/table/InlineConfirm.generated.js +2 -2
- package/dist/components/table/MobileListView.generated.js +2 -2
- package/dist/components/table/SortIcon.generated.js +2 -2
- package/dist/components/table/Table.context.d.ts +23 -0
- package/dist/components/table/Table.context.js +22 -0
- package/dist/components/table/Table.d.ts +18 -0
- package/dist/components/table/Table.js +33 -0
- package/dist/components/table/Table.recipe.d.ts +130 -16
- package/dist/components/table/Table.recipe.js +420 -78
- package/dist/components/table/TableBody.generated.d.ts +6 -0
- package/dist/components/table/TableBody.generated.js +33 -0
- package/dist/components/table/TableCell.generated.d.ts +6 -0
- package/dist/components/table/TableCell.generated.js +33 -0
- package/dist/components/table/TableColumn.generated.d.ts +11 -0
- package/dist/components/table/TableColumn.generated.js +89 -0
- package/dist/components/table/TableColumnResizer.generated.d.ts +6 -0
- package/dist/components/table/TableColumnResizer.generated.js +42 -0
- package/dist/components/table/TableContent.generated.d.ts +10 -0
- package/dist/components/table/TableContent.generated.js +50 -0
- package/dist/components/table/TableExpandedRow.generated.d.ts +11 -0
- package/dist/components/table/TableExpandedRow.generated.js +50 -0
- package/dist/components/table/TableFooter.generated.d.ts +6 -0
- package/dist/components/table/TableFooter.generated.js +33 -0
- package/dist/components/table/TableHeader.generated.d.ts +6 -0
- package/dist/components/table/TableHeader.generated.js +33 -0
- package/dist/components/table/TableLoadMore.generated.d.ts +6 -0
- package/dist/components/table/TableLoadMore.generated.js +33 -0
- package/dist/components/table/TableLoadMoreContent.generated.d.ts +6 -0
- package/dist/components/table/TableLoadMoreContent.generated.js +33 -0
- package/dist/components/table/TablePageSize.generated.d.ts +13 -0
- package/dist/components/table/TablePageSize.generated.js +57 -0
- package/dist/components/table/TableResizableContainer.generated.d.ts +6 -0
- package/dist/components/table/TableResizableContainer.generated.js +33 -0
- package/dist/components/table/TableRoot.generated.d.ts +10 -0
- package/dist/components/table/TableRoot.generated.js +45 -0
- package/dist/components/table/TableRow.generated.d.ts +6 -0
- package/dist/components/table/TableRow.generated.js +33 -0
- package/dist/components/table/TableScrollContainer.generated.d.ts +6 -0
- package/dist/components/table/TableScrollContainer.generated.js +33 -0
- package/dist/components/table/VirtualSpacerRow.generated.js +2 -2
- package/dist/components/table/index.d.ts +43 -13
- package/dist/components/table/index.js +21 -5
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/layouts.manifest.json +4 -1
- package/dist/purge-manifest.json +482 -14
- package/dist/styles/themes/dark.css +3 -0
- package/dist/styles/themes/light.css +3 -0
- package/package.json +2 -2
- package/dist/components/table/Table.generated.d.ts +0 -94
- package/dist/components/table/Table.generated.js +0 -551
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
DataGrid — the assembled grid over Table's parts.
|
|
3
|
+
|
|
4
|
+
Every value here points at a theme token with a fallback. A theme the
|
|
5
|
+
library does not ship matches neither theme block, and an undefined custom
|
|
6
|
+
property does not fall back to its initial value: CSS drops the whole
|
|
7
|
+
declaration. An untokened border would not be thinner, it would be absent.
|
|
8
|
+
========================================================================== */
|
|
9
|
+
|
|
10
|
+
@layer components {
|
|
11
|
+
.data-grid {
|
|
12
|
+
--data-grid-line: color-mix(
|
|
13
|
+
in oklch,
|
|
14
|
+
var(--color-base-content, currentColor) 10%,
|
|
15
|
+
transparent
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* --------------------------------------------------------------------------
|
|
20
|
+
Toolbar — one search field per searchable column.
|
|
21
|
+
-------------------------------------------------------------------------- */
|
|
22
|
+
.data-grid__toolbar {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-wrap: wrap;
|
|
25
|
+
gap: var(--padding-sm, 0.5rem);
|
|
26
|
+
padding: var(--padding-sm, 0.5rem);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.data-grid__search {
|
|
30
|
+
display: inline-flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
min-width: 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Visually hidden, deliberately not Tailwind's `sr-only`. That utility only
|
|
36
|
+
exists if the consuming app's Tailwind scan emitted it, and this library
|
|
37
|
+
ships BEM, so in a non-Tailwind app the label rendered as visible text
|
|
38
|
+
beside its own placeholder. */
|
|
39
|
+
.data-grid__search-label {
|
|
40
|
+
position: absolute;
|
|
41
|
+
inline-size: 1px;
|
|
42
|
+
block-size: 1px;
|
|
43
|
+
padding: 0;
|
|
44
|
+
margin: -1px;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
clip-path: inset(50%);
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
border-width: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.data-grid__search-input {
|
|
52
|
+
inline-size: 100%;
|
|
53
|
+
min-inline-size: 0;
|
|
54
|
+
padding-block: var(--padding-xs, 0.25rem);
|
|
55
|
+
padding-inline: var(--padding-sm, 0.5rem);
|
|
56
|
+
border: var(--border, 1px) solid var(--data-grid-line);
|
|
57
|
+
border-radius: var(--radius-field, 0.25rem);
|
|
58
|
+
background-color: var(--color-base-100, transparent);
|
|
59
|
+
color: var(--color-base-content, currentColor);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.data-grid__search-input:focus-visible {
|
|
63
|
+
outline: var(--focus-ring-width, 2px) solid
|
|
64
|
+
var(--focus-ring-color, var(--color-primary, currentColor));
|
|
65
|
+
outline-offset: var(--focus-ring-offset, 2px);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* --------------------------------------------------------------------------
|
|
69
|
+
Header
|
|
70
|
+
-------------------------------------------------------------------------- */
|
|
71
|
+
.data-grid__header-button {
|
|
72
|
+
display: inline-flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
gap: var(--padding-xs, 0.25rem);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.data-grid__cell[data-align="center"] {
|
|
78
|
+
text-align: center;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.data-grid__cell[data-align="end"] {
|
|
82
|
+
text-align: end;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* --------------------------------------------------------------------------
|
|
86
|
+
Borders — `borders`, not `grid`. A prop named `grid` sitting beside
|
|
87
|
+
`model={grid}` reads like the model was passed twice.
|
|
88
|
+
-------------------------------------------------------------------------- */
|
|
89
|
+
.data-grid--borders-rows .table__row:not(:last-child) .table__cell,
|
|
90
|
+
.data-grid--borders-both .table__row:not(:last-child) .table__cell {
|
|
91
|
+
border-bottom: var(--border, 1px) solid var(--data-grid-line);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.data-grid--borders-cols .table__cell:not(:last-child),
|
|
95
|
+
.data-grid--borders-cols .table__column:not(:last-child),
|
|
96
|
+
.data-grid--borders-both .table__cell:not(:last-child),
|
|
97
|
+
.data-grid--borders-both .table__column:not(:last-child) {
|
|
98
|
+
border-inline-end: var(--border, 1px) solid var(--data-grid-line);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* --------------------------------------------------------------------------
|
|
102
|
+
Striping
|
|
103
|
+
-------------------------------------------------------------------------- */
|
|
104
|
+
.data-grid--striping-rows .table__body .table__row:nth-child(even),
|
|
105
|
+
.data-grid--striping-cols .table__cell:nth-child(even) {
|
|
106
|
+
background-color: color-mix(
|
|
107
|
+
in oklch,
|
|
108
|
+
var(--shade, var(--color-base-content, currentColor))
|
|
109
|
+
var(--shade-subtle, 4%),
|
|
110
|
+
transparent
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* --------------------------------------------------------------------------
|
|
115
|
+
Interactive rows
|
|
116
|
+
-------------------------------------------------------------------------- */
|
|
117
|
+
.data-grid--interactive .table__body .table__row:hover {
|
|
118
|
+
background-color: color-mix(
|
|
119
|
+
in oklch,
|
|
120
|
+
var(--shade, var(--color-base-content, currentColor))
|
|
121
|
+
var(--shade-hover, 8%),
|
|
122
|
+
transparent
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.data-grid .table__row[data-selected="true"] {
|
|
127
|
+
background-color: color-mix(
|
|
128
|
+
in oklch,
|
|
129
|
+
var(--color-primary, currentColor) 12%,
|
|
130
|
+
transparent
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* --------------------------------------------------------------------------
|
|
135
|
+
Sticky — a sticky cell needs a background of its own, or the rows it is
|
|
136
|
+
meant to float above show through it.
|
|
137
|
+
-------------------------------------------------------------------------- */
|
|
138
|
+
.data-grid--sticky-header .table__header .table__column,
|
|
139
|
+
.data-grid--sticky-both .table__header .table__column {
|
|
140
|
+
position: sticky;
|
|
141
|
+
inset-block-start: 0;
|
|
142
|
+
z-index: 2;
|
|
143
|
+
background-color: var(--color-base-200, var(--color-base-100, transparent));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.data-grid--sticky-columns .table__cell[data-sticky="true"],
|
|
147
|
+
.data-grid--sticky-columns .table__column[data-sticky="true"],
|
|
148
|
+
.data-grid--sticky-both .table__cell[data-sticky="true"],
|
|
149
|
+
.data-grid--sticky-both .table__column[data-sticky="true"] {
|
|
150
|
+
position: sticky;
|
|
151
|
+
inset-inline-start: 0;
|
|
152
|
+
z-index: 1;
|
|
153
|
+
background-color: var(--color-base-100, transparent);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.data-grid--sticky-both .table__header .table__column[data-sticky="true"] {
|
|
157
|
+
z-index: 3;
|
|
158
|
+
/* Header first. Without this the sticky-column rule below repaints the
|
|
159
|
+
corner cell as a body cell and it reads as a hole in the header. */
|
|
160
|
+
background-color: var(--color-base-200, var(--color-base-100, transparent));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* --------------------------------------------------------------------------
|
|
164
|
+
Density
|
|
165
|
+
-------------------------------------------------------------------------- */
|
|
166
|
+
.data-grid--size-xs .table__cell,
|
|
167
|
+
.data-grid--size-xs .table__column {
|
|
168
|
+
padding-block: var(--padding-xs, 0.25rem);
|
|
169
|
+
font-size: var(--text-xs, 0.75rem);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.data-grid--size-sm .table__cell,
|
|
173
|
+
.data-grid--size-sm .table__column {
|
|
174
|
+
padding-block: var(--padding-xs, 0.25rem);
|
|
175
|
+
font-size: var(--text-sm, 0.875rem);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.data-grid--size-lg .table__cell,
|
|
179
|
+
.data-grid--size-lg .table__column {
|
|
180
|
+
padding-block: var(--padding-md, 1rem);
|
|
181
|
+
font-size: var(--text-lg, 1.125rem);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.data-grid--size-xl .table__cell,
|
|
185
|
+
.data-grid--size-xl .table__column {
|
|
186
|
+
padding-block: var(--padding-lg, 1.5rem);
|
|
187
|
+
font-size: var(--text-xl, 1.25rem);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* --------------------------------------------------------------------------
|
|
191
|
+
Selection column and empty state
|
|
192
|
+
-------------------------------------------------------------------------- */
|
|
193
|
+
.data-grid__select-cell {
|
|
194
|
+
inline-size: 1px;
|
|
195
|
+
white-space: nowrap;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.data-grid__group-row {
|
|
199
|
+
font-weight: 600;
|
|
200
|
+
background-color: color-mix(
|
|
201
|
+
in oklch,
|
|
202
|
+
var(--shade, var(--color-base-content, currentColor))
|
|
203
|
+
var(--shade-pressed, 12%),
|
|
204
|
+
transparent
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.data-grid__empty {
|
|
209
|
+
text-align: center;
|
|
210
|
+
padding-block: var(--padding-lg, 1.5rem);
|
|
211
|
+
color: color-mix(
|
|
212
|
+
in oklch,
|
|
213
|
+
var(--color-base-content, currentColor) 60%,
|
|
214
|
+
transparent
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* --------------------------------------------------------------------------
|
|
219
|
+
Pagination
|
|
220
|
+
-------------------------------------------------------------------------- */
|
|
221
|
+
.data-grid__pagination {
|
|
222
|
+
display: flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
justify-content: flex-end;
|
|
225
|
+
gap: var(--padding-sm, 0.5rem);
|
|
226
|
+
padding: var(--padding-sm, 0.5rem);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.data-grid__page-status {
|
|
230
|
+
margin-inline-end: auto;
|
|
231
|
+
font-size: var(--text-sm, 0.875rem);
|
|
232
|
+
color: color-mix(
|
|
233
|
+
in oklch,
|
|
234
|
+
var(--color-base-content, currentColor) 70%,
|
|
235
|
+
transparent
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Component as __LayoutComponent } from "solid-js";
|
|
2
|
+
import "./DataGrid.css";
|
|
3
|
+
import { type JSX } from "solid-js";
|
|
4
|
+
import type { Flavor, Size, UIBaseProps, Width } from "../vocabulary";
|
|
5
|
+
import type { DataGridModel, DataGridRow, DataGridSort } from "./createDataGrid";
|
|
6
|
+
export type DataGridBorders = "none" | "rows" | "cols" | "both";
|
|
7
|
+
export type DataGridStriping = "none" | "rows" | "cols";
|
|
8
|
+
export type DataGridSticky = "none" | "header" | "columns" | "both";
|
|
9
|
+
/**
|
|
10
|
+
* `model` is the only required prop.
|
|
11
|
+
*
|
|
12
|
+
* There is no `sortable`, `searchable`, `checkable`, `pagination` or
|
|
13
|
+
* `expandable` flag, because each of those is already a fact about the model
|
|
14
|
+
* and a second copy on the tag could disagree with it. A column is sortable
|
|
15
|
+
* because it was added sortable; the grid pages because it was given a
|
|
16
|
+
* pageSize; it selects because it was given a selection mode.
|
|
17
|
+
*
|
|
18
|
+
* What is left on the tag is presentation, which is nobody else's fact.
|
|
19
|
+
*/
|
|
20
|
+
export type DataGridProps<Row extends DataGridRow = DataGridRow> = Omit<JSX.HTMLAttributes<HTMLDivElement>, "children"> & UIBaseProps & {
|
|
21
|
+
model: DataGridModel<Row>;
|
|
22
|
+
borders?: DataGridBorders;
|
|
23
|
+
striping?: DataGridStriping;
|
|
24
|
+
sticky?: DataGridSticky;
|
|
25
|
+
/** Row hover feedback. Named to match Card rather than vue3's `hoverable`. */
|
|
26
|
+
interactive?: boolean;
|
|
27
|
+
size?: Size;
|
|
28
|
+
width?: Width;
|
|
29
|
+
flavor?: Flavor;
|
|
30
|
+
caption?: JSX.Element;
|
|
31
|
+
/** Shown in place of the body when nothing survives the filters. */
|
|
32
|
+
empty?: JSX.Element;
|
|
33
|
+
/** Renders under a row. Supplying it is what makes rows expandable. */
|
|
34
|
+
renderExpanded?: (row: Row) => JSX.Element;
|
|
35
|
+
/** Mirrors, for an app keeping state in a URL. The model stays the source. */
|
|
36
|
+
onSortChange?: (sort: DataGridSort | null) => void;
|
|
37
|
+
onPageChange?: (page: number) => void;
|
|
38
|
+
onSelectionChange?: (ids: ReadonlySet<string>) => void;
|
|
39
|
+
};
|
|
40
|
+
declare const DataGrid: __LayoutComponent<DataGridProps>;
|
|
41
|
+
export default DataGrid;
|