@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.
Files changed (63) 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/table/ExpandToggle.generated.js +2 -2
  13. package/dist/components/table/InlineConfirm.generated.js +2 -2
  14. package/dist/components/table/MobileListView.generated.js +2 -2
  15. package/dist/components/table/SortIcon.generated.js +2 -2
  16. package/dist/components/table/Table.context.d.ts +23 -0
  17. package/dist/components/table/Table.context.js +22 -0
  18. package/dist/components/table/Table.d.ts +18 -0
  19. package/dist/components/table/Table.js +33 -0
  20. package/dist/components/table/Table.recipe.d.ts +130 -16
  21. package/dist/components/table/Table.recipe.js +420 -78
  22. package/dist/components/table/TableBody.generated.d.ts +6 -0
  23. package/dist/components/table/TableBody.generated.js +33 -0
  24. package/dist/components/table/TableCell.generated.d.ts +6 -0
  25. package/dist/components/table/TableCell.generated.js +33 -0
  26. package/dist/components/table/TableColumn.generated.d.ts +11 -0
  27. package/dist/components/table/TableColumn.generated.js +89 -0
  28. package/dist/components/table/TableColumnResizer.generated.d.ts +6 -0
  29. package/dist/components/table/TableColumnResizer.generated.js +42 -0
  30. package/dist/components/table/TableContent.generated.d.ts +10 -0
  31. package/dist/components/table/TableContent.generated.js +50 -0
  32. package/dist/components/table/TableExpandedRow.generated.d.ts +11 -0
  33. package/dist/components/table/TableExpandedRow.generated.js +50 -0
  34. package/dist/components/table/TableFooter.generated.d.ts +6 -0
  35. package/dist/components/table/TableFooter.generated.js +33 -0
  36. package/dist/components/table/TableHeader.generated.d.ts +6 -0
  37. package/dist/components/table/TableHeader.generated.js +33 -0
  38. package/dist/components/table/TableLoadMore.generated.d.ts +6 -0
  39. package/dist/components/table/TableLoadMore.generated.js +33 -0
  40. package/dist/components/table/TableLoadMoreContent.generated.d.ts +6 -0
  41. package/dist/components/table/TableLoadMoreContent.generated.js +33 -0
  42. package/dist/components/table/TablePageSize.generated.d.ts +13 -0
  43. package/dist/components/table/TablePageSize.generated.js +57 -0
  44. package/dist/components/table/TableResizableContainer.generated.d.ts +6 -0
  45. package/dist/components/table/TableResizableContainer.generated.js +33 -0
  46. package/dist/components/table/TableRoot.generated.d.ts +10 -0
  47. package/dist/components/table/TableRoot.generated.js +45 -0
  48. package/dist/components/table/TableRow.generated.d.ts +6 -0
  49. package/dist/components/table/TableRow.generated.js +33 -0
  50. package/dist/components/table/TableScrollContainer.generated.d.ts +6 -0
  51. package/dist/components/table/TableScrollContainer.generated.js +33 -0
  52. package/dist/components/table/VirtualSpacerRow.generated.js +2 -2
  53. package/dist/components/table/index.d.ts +43 -13
  54. package/dist/components/table/index.js +21 -5
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.js +1 -0
  57. package/dist/layouts.manifest.json +4 -1
  58. package/dist/purge-manifest.json +482 -14
  59. package/dist/styles/themes/dark.css +3 -0
  60. package/dist/styles/themes/light.css +3 -0
  61. package/package.json +2 -2
  62. package/dist/components/table/Table.generated.d.ts +0 -94
  63. 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;