@panneau/lists 5.0.0-alpha.2 → 5.0.0-alpha.20
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/README.md +17 -15
- package/dist/ItemDetails.css +50 -0
- package/dist/ItemDetails.d.ts +27 -0
- package/dist/ItemDetails.d.ts.map +1 -0
- package/dist/ItemDetails.js +134 -0
- package/dist/ItemDetails.js.map +1 -0
- package/dist/ItemDetails.module.js +20 -0
- package/dist/ItemDetails.module.js.map +1 -0
- package/dist/List.d.ts +3 -3
- package/dist/List.d.ts.map +1 -1
- package/dist/List.js +31 -10
- package/dist/List.js.map +1 -1
- package/dist/ListSkeleton.d.ts +19 -0
- package/dist/ListSkeleton.d.ts.map +1 -0
- package/dist/ListSkeleton.js +115 -0
- package/dist/ListSkeleton.js.map +1 -0
- package/dist/ListView.d.ts +73 -8
- package/dist/ListView.d.ts.map +1 -1
- package/dist/ListView.js +616 -218
- package/dist/ListView.js.map +1 -1
- package/dist/actions/ActionButton.d.ts +8 -2
- package/dist/actions/ActionButton.d.ts.map +1 -1
- package/dist/actions/ActionButton.js +98 -26
- package/dist/actions/ActionButton.js.map +1 -1
- package/dist/actions/Actions.css +16 -38
- package/dist/actions/Actions.module.js +6 -6
- package/dist/actions/Actions.module.js.map +1 -1
- package/dist/actions/ConfirmDialog.d.ts +20 -4
- package/dist/actions/ConfirmDialog.d.ts.map +1 -1
- package/dist/actions/ConfirmDialog.js +110 -92
- package/dist/actions/ConfirmDialog.js.map +1 -1
- package/dist/actions/RowActions.d.ts +25 -9
- package/dist/actions/RowActions.d.ts.map +1 -1
- package/dist/actions/RowActions.js +151 -80
- package/dist/actions/RowActions.js.map +1 -1
- package/dist/actions/actions.d.ts +5 -4
- package/dist/actions/actions.d.ts.map +1 -1
- package/dist/actions/actions.js +7 -14
- package/dist/actions/actions.js.map +1 -1
- package/dist/actions/fit.d.ts +25 -0
- package/dist/actions/fit.d.ts.map +1 -0
- package/dist/actions/fit.js +197 -0
- package/dist/actions/fit.js.map +1 -0
- package/dist/actions/icons.d.ts +5 -0
- package/dist/actions/icons.d.ts.map +1 -1
- package/dist/actions/icons.js +15 -1
- package/dist/actions/icons.js.map +1 -1
- package/dist/columns.d.ts +10 -0
- package/dist/columns.d.ts.map +1 -0
- package/dist/columns.js +25 -0
- package/dist/columns.js.map +1 -0
- package/dist/cx.js.map +1 -1
- package/dist/displays/Displays.css +48 -0
- package/dist/displays/Displays.module.js +18 -2
- package/dist/displays/Displays.module.js.map +1 -1
- package/dist/displays/displays.d.ts +62 -6
- package/dist/displays/displays.d.ts.map +1 -1
- package/dist/displays/displays.js +1151 -89
- package/dist/displays/displays.js.map +1 -1
- package/dist/filters/Filters.css +25 -11
- package/dist/filters/Filters.d.ts +1 -1
- package/dist/filters/Filters.js.map +1 -1
- package/dist/filters/Filters.module.js +5 -1
- package/dist/filters/Filters.module.js.map +1 -1
- package/dist/filters/controls.d.ts +1 -1
- package/dist/filters/controls.d.ts.map +1 -1
- package/dist/filters/controls.js +57 -35
- package/dist/filters/controls.js.map +1 -1
- package/dist/filters/format.d.ts +1 -1
- package/dist/filters/format.js.map +1 -1
- package/dist/images.d.ts +7 -0
- package/dist/images.d.ts.map +1 -0
- package/dist/images.js +39 -0
- package/dist/images.js.map +1 -0
- package/dist/index.d.ts +22 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/inline/Inline.css +58 -0
- package/dist/inline/Inline.module.js +20 -0
- package/dist/inline/Inline.module.js.map +1 -0
- package/dist/inline/InlineCell.d.ts +29 -0
- package/dist/inline/InlineCell.d.ts.map +1 -0
- package/dist/inline/InlineCell.js +490 -0
- package/dist/inline/InlineCell.js.map +1 -0
- package/dist/inline/editable.d.ts +12 -0
- package/dist/inline/editable.d.ts.map +1 -0
- package/dist/inline/editable.js +29 -0
- package/dist/inline/editable.js.map +1 -0
- package/dist/layouts/CalendarLayout.css +153 -0
- package/dist/layouts/CalendarLayout.d.ts +9 -0
- package/dist/layouts/CalendarLayout.d.ts.map +1 -0
- package/dist/layouts/CalendarLayout.js +303 -0
- package/dist/layouts/CalendarLayout.js.map +1 -0
- package/dist/layouts/CalendarLayout.module.js +28 -0
- package/dist/layouts/CalendarLayout.module.js.map +1 -0
- package/dist/layouts/CardsLayout.css +5 -0
- package/dist/layouts/CardsLayout.d.ts +2 -2
- package/dist/layouts/CardsLayout.d.ts.map +1 -1
- package/dist/layouts/CardsLayout.js +92 -91
- package/dist/layouts/CardsLayout.js.map +1 -1
- package/dist/layouts/CardsLayout.module.js.map +1 -1
- package/dist/layouts/GalleryLayout.css +87 -0
- package/dist/layouts/GalleryLayout.d.ts +8 -0
- package/dist/layouts/GalleryLayout.d.ts.map +1 -0
- package/dist/layouts/GalleryLayout.js +152 -0
- package/dist/layouts/GalleryLayout.js.map +1 -0
- package/dist/layouts/GalleryLayout.module.js +26 -0
- package/dist/layouts/GalleryLayout.module.js.map +1 -0
- package/dist/layouts/ItemTitle.d.ts +3 -1
- package/dist/layouts/ItemTitle.d.ts.map +1 -1
- package/dist/layouts/ItemTitle.js +12 -8
- package/dist/layouts/ItemTitle.js.map +1 -1
- package/dist/layouts/TableLayout.css +56 -0
- package/dist/layouts/TableLayout.d.ts +5 -4
- package/dist/layouts/TableLayout.d.ts.map +1 -1
- package/dist/layouts/TableLayout.js +171 -101
- package/dist/layouts/TableLayout.js.map +1 -1
- package/dist/layouts/TableLayout.module.js +8 -4
- package/dist/layouts/TableLayout.module.js.map +1 -1
- package/dist/layouts/builtIn.d.ts +2 -2
- package/dist/layouts/builtIn.d.ts.map +1 -1
- package/dist/layouts/builtIn.js +6 -2
- package/dist/layouts/builtIn.js.map +1 -1
- package/dist/layouts/calendarDays.d.ts +14 -0
- package/dist/layouts/calendarDays.d.ts.map +1 -0
- package/dist/layouts/calendarDays.js +44 -0
- package/dist/layouts/calendarDays.js.map +1 -0
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/query.d.ts +4 -3
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +15 -4
- package/dist/query.js.map +1 -1
- package/dist/selection.d.ts +1 -1
- package/dist/selection.js.map +1 -1
- package/dist/toolbar/ColumnMenu.d.ts +17 -0
- package/dist/toolbar/ColumnMenu.d.ts.map +1 -0
- package/dist/toolbar/ColumnMenu.js +193 -0
- package/dist/toolbar/ColumnMenu.js.map +1 -0
- package/dist/toolbar/LayoutSwitch.d.ts.map +1 -1
- package/dist/toolbar/LayoutSwitch.js +73 -55
- package/dist/toolbar/LayoutSwitch.js.map +1 -1
- package/dist/toolbar/Pagination.d.ts +33 -0
- package/dist/toolbar/Pagination.d.ts.map +1 -1
- package/dist/toolbar/Pagination.js +282 -42
- package/dist/toolbar/Pagination.js.map +1 -1
- package/dist/toolbar/SearchField.js.map +1 -1
- package/dist/toolbar/SortSelect.d.ts +1 -1
- package/dist/toolbar/SortSelect.js.map +1 -1
- package/dist/toolbar/Toolbar.css +36 -0
- package/dist/toolbar/Toolbar.module.js +12 -2
- package/dist/toolbar/Toolbar.module.js.map +1 -1
- package/dist/types.d.ts +69 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/useDraft.js.map +1 -1
- package/dist/useListState.js.map +1 -1
- package/dist/useRenderValue.d.ts +10 -0
- package/dist/useRenderValue.d.ts.map +1 -0
- package/dist/useRenderValue.js +84 -0
- package/dist/useRenderValue.js.map +1 -0
- package/dist/values.d.ts +4 -1
- package/dist/values.d.ts.map +1 -1
- package/dist/values.js +6 -2
- package/dist/values.js.map +1 -1
- package/package.json +9 -9
|
@@ -27,6 +27,12 @@
|
|
|
27
27
|
background-color: var(--panneau-color-surface-sunken);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/* The title stays readable in a narrow list, such as next to an item's details: the table
|
|
31
|
+
* scrolls instead. */
|
|
32
|
+
.panneau-table-layout-table td.panneau-table-layout-title {
|
|
33
|
+
min-width: 12rem;
|
|
34
|
+
}
|
|
35
|
+
|
|
30
36
|
.panneau-table-layout-table tbody tr:last-child td {
|
|
31
37
|
border-bottom: 0;
|
|
32
38
|
}
|
|
@@ -35,6 +41,46 @@
|
|
|
35
41
|
background-color: var(--panneau-color-accent-subtle);
|
|
36
42
|
}
|
|
37
43
|
|
|
44
|
+
/* The item shown next to the list: a bar on its first cell. */
|
|
45
|
+
.panneau-table-layout-table tbody tr[data-current] td:first-child {
|
|
46
|
+
box-shadow: inset 3px 0 0 var(--panneau-color-accent);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.panneau-table-layout-table tbody tr[data-current] {
|
|
50
|
+
background-color: var(--panneau-color-hover);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* The thumbnail of an item, before its title (decision 0061). */
|
|
54
|
+
.panneau-table-layout-with-thumbnail {
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
gap: var(--panneau-space-3);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.panneau-table-layout-with-thumbnail > :last-child {
|
|
61
|
+
min-width: 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.panneau-table-layout-thumbnail {
|
|
65
|
+
display: flex;
|
|
66
|
+
flex: none;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
width: 2.5rem;
|
|
70
|
+
height: 2.5rem;
|
|
71
|
+
overflow: hidden;
|
|
72
|
+
color: var(--panneau-color-text-muted);
|
|
73
|
+
background-color: var(--panneau-color-surface-sunken);
|
|
74
|
+
border-radius: var(--panneau-radius-sm);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.panneau-table-layout-thumbnail img {
|
|
78
|
+
display: block;
|
|
79
|
+
width: 100%;
|
|
80
|
+
height: 100%;
|
|
81
|
+
object-fit: cover;
|
|
82
|
+
}
|
|
83
|
+
|
|
38
84
|
.panneau-table-layout-center {
|
|
39
85
|
text-align: center !important;
|
|
40
86
|
}
|
|
@@ -53,6 +99,11 @@
|
|
|
53
99
|
white-space: nowrap;
|
|
54
100
|
}
|
|
55
101
|
|
|
102
|
+
/* As narrow as the actions of the row on one line: they only wrap in a narrow list. */
|
|
103
|
+
.panneau-table-layout-table .panneau-table-layout-actions-cell > * {
|
|
104
|
+
flex-wrap: nowrap;
|
|
105
|
+
}
|
|
106
|
+
|
|
56
107
|
.panneau-table-layout-sort {
|
|
57
108
|
display: inline-flex;
|
|
58
109
|
align-items: center;
|
|
@@ -146,6 +197,10 @@
|
|
|
146
197
|
width: auto;
|
|
147
198
|
}
|
|
148
199
|
|
|
200
|
+
.panneau-table-layout-table td.panneau-table-layout-actions-cell > * {
|
|
201
|
+
flex-wrap: wrap;
|
|
202
|
+
}
|
|
203
|
+
|
|
149
204
|
.panneau-table-layout-table td.panneau-table-layout-check {
|
|
150
205
|
position: absolute;
|
|
151
206
|
top: var(--panneau-space-2);
|
|
@@ -161,6 +216,7 @@
|
|
|
161
216
|
|
|
162
217
|
.panneau-table-layout-table td.panneau-table-layout-title {
|
|
163
218
|
display: block;
|
|
219
|
+
min-width: 0;
|
|
164
220
|
padding-inline-end: var(--panneau-space-10);
|
|
165
221
|
font-weight: var(--panneau-font-weight-medium);
|
|
166
222
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { ListColumn, ListLayoutProps } from '../types';
|
|
1
|
+
import type { ListColumn, ListLayoutProps } from '../types.js';
|
|
2
2
|
/** The sort direction of a column, from the first `sort` value. */
|
|
3
3
|
export declare function getSortDirection(sort: readonly string[], column: ListColumn): 'ascending' | 'descending' | null;
|
|
4
4
|
/**
|
|
5
|
-
* Items as a table, with sortable column headers.
|
|
6
|
-
*
|
|
5
|
+
* Items as a table, with sortable column headers. With the image of items (`getItemImage`), each
|
|
6
|
+
* title starts with a thumbnail. On narrow lists (phones), each row turns into a block that shows
|
|
7
|
+
* the label of each value.
|
|
7
8
|
*/
|
|
8
|
-
export declare function TableLayout({ items, columns, renderValue, getItemLabel, getItemHref, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, }: ListLayoutProps): import("react").JSX.Element;
|
|
9
|
+
export declare function TableLayout({ items, columns, renderValue, getItemLabel, getItemHref, getItemImage, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, renderCell, }: ListLayoutProps): import("react").JSX.Element;
|
|
9
10
|
//# sourceMappingURL=TableLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableLayout.d.ts","sourceRoot":"","sources":["../../src/layouts/TableLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableLayout.d.ts","sourceRoot":"","sources":["../../src/layouts/TableLayout.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI5D,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,UAAU,GACnB,WAAW,GAAG,YAAY,GAAG,IAAI,CAMnC;AAyBD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,EACb,UAAU,GACb,EAAE,eAAe,+BA8IjB"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { messages } from "../messages.js";
|
|
2
2
|
import { ItemTitle } from "./ItemTitle.js";
|
|
3
|
+
import { RowActionsFit, fitContent, useRowActionsFit } from "../actions/fit.js";
|
|
3
4
|
import { cx } from "../cx.js";
|
|
4
5
|
import TableLayout_module_default from "./TableLayout.module.js";
|
|
5
6
|
import { c } from "react/compiler-runtime";
|
|
6
7
|
import { Checkbox, Icon, usePanneauIntl } from "@panneau/ui";
|
|
7
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
import { ArrowDown, ArrowUp, ArrowUpDown } from "lucide-react";
|
|
9
|
+
import { ArrowDown, ArrowUp, ArrowUpDown, ImageOff } from "lucide-react";
|
|
9
10
|
//#region src/layouts/TableLayout.tsx
|
|
10
11
|
/** The sort direction of a column, from the first `sort` value. */
|
|
11
12
|
function getSortDirection(sort, column) {
|
|
@@ -18,12 +19,39 @@ function alignClass(column) {
|
|
|
18
19
|
return column.align === "end" ? TableLayout_module_default.end : void 0;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
22
|
+
* The thumbnail of an item, before its title (decision 0061): a square of its image, loaded when it
|
|
23
|
+
* comes into view, or a placeholder. It has no text: the title is next to it.
|
|
24
|
+
*/
|
|
25
|
+
function Thumbnail(t0) {
|
|
26
|
+
const $ = c(2);
|
|
27
|
+
const { url } = t0;
|
|
28
|
+
let t1;
|
|
29
|
+
if ($[0] !== url) {
|
|
30
|
+
t1 = /* @__PURE__ */ jsx("span", {
|
|
31
|
+
className: TableLayout_module_default.thumbnail,
|
|
32
|
+
children: url !== null ? /* @__PURE__ */ jsx("img", {
|
|
33
|
+
src: url,
|
|
34
|
+
alt: "",
|
|
35
|
+
loading: "lazy",
|
|
36
|
+
decoding: "async"
|
|
37
|
+
}) : /* @__PURE__ */ jsx(Icon, {
|
|
38
|
+
icon: ImageOff,
|
|
39
|
+
size: "sm"
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
$[0] = url;
|
|
43
|
+
$[1] = t1;
|
|
44
|
+
} else t1 = $[1];
|
|
45
|
+
return t1;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Items as a table, with sortable column headers. With the image of items (`getItemImage`), each
|
|
49
|
+
* title starts with a thumbnail. On narrow lists (phones), each row turns into a block that shows
|
|
50
|
+
* the label of each value.
|
|
23
51
|
*/
|
|
24
52
|
function TableLayout(t0) {
|
|
25
|
-
const $ = c(
|
|
26
|
-
const { items, columns, renderValue, getItemLabel, getItemHref, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection } = t0;
|
|
53
|
+
const $ = c(67);
|
|
54
|
+
const { items, columns, renderValue, getItemLabel, getItemHref, getItemImage, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, renderCell } = t0;
|
|
27
55
|
const intl = usePanneauIntl();
|
|
28
56
|
let actions;
|
|
29
57
|
let t1;
|
|
@@ -46,20 +74,28 @@ function TableLayout(t0) {
|
|
|
46
74
|
}
|
|
47
75
|
const hasActions = t1;
|
|
48
76
|
let t2;
|
|
49
|
-
if ($[6] !==
|
|
50
|
-
t2 =
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}) : null;
|
|
54
|
-
$[6] = pageSelection;
|
|
55
|
-
$[7] = selectable;
|
|
77
|
+
if ($[6] !== columns || $[7] !== items) {
|
|
78
|
+
t2 = fitContent(items, columns);
|
|
79
|
+
$[6] = columns;
|
|
80
|
+
$[7] = items;
|
|
56
81
|
$[8] = t2;
|
|
57
82
|
} else t2 = $[8];
|
|
83
|
+
const [fitLevel, measureList] = useRowActionsFit(t2);
|
|
58
84
|
let t3;
|
|
59
|
-
if ($[9] !==
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
85
|
+
if ($[9] !== pageSelection || $[10] !== selectable) {
|
|
86
|
+
t3 = selectable ? /* @__PURE__ */ jsx("th", {
|
|
87
|
+
className: TableLayout_module_default.check,
|
|
88
|
+
children: pageSelection
|
|
89
|
+
}) : null;
|
|
90
|
+
$[9] = pageSelection;
|
|
91
|
+
$[10] = selectable;
|
|
92
|
+
$[11] = t3;
|
|
93
|
+
} else t3 = $[11];
|
|
94
|
+
let t4;
|
|
95
|
+
if ($[12] !== columns || $[13] !== onSort || $[14] !== sort) {
|
|
96
|
+
let t5;
|
|
97
|
+
if ($[16] !== onSort || $[17] !== sort) {
|
|
98
|
+
t5 = (column) => {
|
|
63
99
|
const direction = getSortDirection(sort, column);
|
|
64
100
|
return /* @__PURE__ */ jsx("th", {
|
|
65
101
|
scope: "col",
|
|
@@ -80,50 +116,52 @@ function TableLayout(t0) {
|
|
|
80
116
|
}) : column.label ?? column.id
|
|
81
117
|
}, column.id);
|
|
82
118
|
};
|
|
83
|
-
$[
|
|
84
|
-
$[
|
|
85
|
-
$[
|
|
86
|
-
} else
|
|
87
|
-
|
|
88
|
-
$[
|
|
89
|
-
$[
|
|
90
|
-
$[
|
|
91
|
-
$[
|
|
92
|
-
} else
|
|
93
|
-
let
|
|
94
|
-
if ($[
|
|
95
|
-
|
|
119
|
+
$[16] = onSort;
|
|
120
|
+
$[17] = sort;
|
|
121
|
+
$[18] = t5;
|
|
122
|
+
} else t5 = $[18];
|
|
123
|
+
t4 = columns.map(t5);
|
|
124
|
+
$[12] = columns;
|
|
125
|
+
$[13] = onSort;
|
|
126
|
+
$[14] = sort;
|
|
127
|
+
$[15] = t4;
|
|
128
|
+
} else t4 = $[15];
|
|
129
|
+
let t5;
|
|
130
|
+
if ($[19] !== hasActions || $[20] !== intl) {
|
|
131
|
+
t5 = hasActions ? /* @__PURE__ */ jsx("th", {
|
|
96
132
|
className: TableLayout_module_default.actionsCell,
|
|
97
133
|
children: /* @__PURE__ */ jsx("span", {
|
|
98
134
|
className: TableLayout_module_default.visuallyHidden,
|
|
99
135
|
children: intl.formatMessage(messages.actions)
|
|
100
136
|
})
|
|
101
137
|
}) : null;
|
|
102
|
-
$[
|
|
103
|
-
$[
|
|
104
|
-
$[
|
|
105
|
-
} else
|
|
106
|
-
let
|
|
107
|
-
if ($[
|
|
108
|
-
|
|
109
|
-
t2,
|
|
138
|
+
$[19] = hasActions;
|
|
139
|
+
$[20] = intl;
|
|
140
|
+
$[21] = t5;
|
|
141
|
+
} else t5 = $[21];
|
|
142
|
+
let t6;
|
|
143
|
+
if ($[22] !== t3 || $[23] !== t4 || $[24] !== t5) {
|
|
144
|
+
t6 = /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
110
145
|
t3,
|
|
111
|
-
t4
|
|
146
|
+
t4,
|
|
147
|
+
t5
|
|
112
148
|
] }) });
|
|
113
|
-
$[
|
|
114
|
-
$[
|
|
115
|
-
$[
|
|
116
|
-
$[
|
|
117
|
-
} else
|
|
118
|
-
let
|
|
119
|
-
if ($[
|
|
120
|
-
let
|
|
121
|
-
if ($[
|
|
122
|
-
|
|
149
|
+
$[22] = t3;
|
|
150
|
+
$[23] = t4;
|
|
151
|
+
$[24] = t5;
|
|
152
|
+
$[25] = t6;
|
|
153
|
+
} else t6 = $[25];
|
|
154
|
+
let t7;
|
|
155
|
+
if ($[26] !== actions || $[27] !== columns || $[28] !== getItemHref || $[29] !== getItemImage || $[30] !== getItemLabel || $[31] !== hasActions || $[32] !== intl || $[33] !== isCurrent || $[34] !== isSelected || $[35] !== items || $[36] !== onToggle || $[37] !== renderCell || $[38] !== renderValue || $[39] !== selectable) {
|
|
156
|
+
let t8;
|
|
157
|
+
if ($[41] !== actions || $[42] !== columns || $[43] !== getItemHref || $[44] !== getItemImage || $[45] !== getItemLabel || $[46] !== hasActions || $[47] !== intl || $[48] !== isCurrent || $[49] !== isSelected || $[50] !== onToggle || $[51] !== renderCell || $[52] !== renderValue || $[53] !== selectable) {
|
|
158
|
+
t8 = (item_0, row) => {
|
|
123
159
|
const selected = selectable && isSelected(item_0);
|
|
124
160
|
const href = getItemHref?.(item_0) ?? null;
|
|
161
|
+
const current = isCurrent?.(item_0) ?? false;
|
|
125
162
|
return /* @__PURE__ */ jsxs("tr", {
|
|
126
163
|
"data-selected": selected || void 0,
|
|
164
|
+
"data-current": current || void 0,
|
|
127
165
|
children: [
|
|
128
166
|
selectable ? /* @__PURE__ */ jsx("td", {
|
|
129
167
|
className: TableLayout_module_default.check,
|
|
@@ -133,16 +171,24 @@ function TableLayout(t0) {
|
|
|
133
171
|
onChange: () => onToggle(item_0)
|
|
134
172
|
})
|
|
135
173
|
}) : null,
|
|
136
|
-
columns.map((column_0, index) =>
|
|
137
|
-
|
|
138
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
139
|
-
className: TableLayout_module_default.cellLabel,
|
|
140
|
-
children: column_0.label ?? column_0.id
|
|
141
|
-
}), /* @__PURE__ */ jsx("span", { children: index === 0 ? /* @__PURE__ */ jsx(ItemTitle, {
|
|
174
|
+
columns.map((column_0, index) => {
|
|
175
|
+
const content = index === 0 ? /* @__PURE__ */ jsx(ItemTitle, {
|
|
142
176
|
href,
|
|
177
|
+
current,
|
|
143
178
|
children: renderValue(item_0, column_0)
|
|
144
|
-
}) : renderValue(item_0, column_0)
|
|
145
|
-
|
|
179
|
+
}) : renderValue(item_0, column_0);
|
|
180
|
+
const cell = /* @__PURE__ */ jsx("span", { children: renderCell !== void 0 ? renderCell(item_0, column_0, content) : content });
|
|
181
|
+
return /* @__PURE__ */ jsxs("td", {
|
|
182
|
+
className: cx(alignClass(column_0), index === 0 && TableLayout_module_default.title),
|
|
183
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
184
|
+
className: TableLayout_module_default.cellLabel,
|
|
185
|
+
children: column_0.label ?? column_0.id
|
|
186
|
+
}), index === 0 && getItemImage !== void 0 ? /* @__PURE__ */ jsxs("span", {
|
|
187
|
+
className: TableLayout_module_default.withThumbnail,
|
|
188
|
+
children: [/* @__PURE__ */ jsx(Thumbnail, { url: getItemImage(item_0) }), cell]
|
|
189
|
+
}) : cell]
|
|
190
|
+
}, column_0.id);
|
|
191
|
+
}),
|
|
146
192
|
hasActions ? /* @__PURE__ */ jsx("td", {
|
|
147
193
|
className: TableLayout_module_default.actionsCell,
|
|
148
194
|
children: actions[row]
|
|
@@ -150,54 +196,78 @@ function TableLayout(t0) {
|
|
|
150
196
|
]
|
|
151
197
|
}, item_0.id);
|
|
152
198
|
};
|
|
153
|
-
$[
|
|
154
|
-
$[
|
|
155
|
-
$[
|
|
156
|
-
$[
|
|
157
|
-
$[
|
|
158
|
-
$[
|
|
159
|
-
$[
|
|
160
|
-
$[
|
|
161
|
-
$[
|
|
162
|
-
$[
|
|
163
|
-
$[
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
$[
|
|
168
|
-
|
|
169
|
-
$[26] =
|
|
170
|
-
$[27] =
|
|
171
|
-
$[28] =
|
|
172
|
-
$[29] =
|
|
173
|
-
$[30] =
|
|
174
|
-
$[31] =
|
|
175
|
-
$[32] =
|
|
176
|
-
$[33] =
|
|
177
|
-
$[34] =
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
$[
|
|
183
|
-
$[
|
|
184
|
-
} else t7 = $[
|
|
199
|
+
$[41] = actions;
|
|
200
|
+
$[42] = columns;
|
|
201
|
+
$[43] = getItemHref;
|
|
202
|
+
$[44] = getItemImage;
|
|
203
|
+
$[45] = getItemLabel;
|
|
204
|
+
$[46] = hasActions;
|
|
205
|
+
$[47] = intl;
|
|
206
|
+
$[48] = isCurrent;
|
|
207
|
+
$[49] = isSelected;
|
|
208
|
+
$[50] = onToggle;
|
|
209
|
+
$[51] = renderCell;
|
|
210
|
+
$[52] = renderValue;
|
|
211
|
+
$[53] = selectable;
|
|
212
|
+
$[54] = t8;
|
|
213
|
+
} else t8 = $[54];
|
|
214
|
+
t7 = items.map(t8);
|
|
215
|
+
$[26] = actions;
|
|
216
|
+
$[27] = columns;
|
|
217
|
+
$[28] = getItemHref;
|
|
218
|
+
$[29] = getItemImage;
|
|
219
|
+
$[30] = getItemLabel;
|
|
220
|
+
$[31] = hasActions;
|
|
221
|
+
$[32] = intl;
|
|
222
|
+
$[33] = isCurrent;
|
|
223
|
+
$[34] = isSelected;
|
|
224
|
+
$[35] = items;
|
|
225
|
+
$[36] = onToggle;
|
|
226
|
+
$[37] = renderCell;
|
|
227
|
+
$[38] = renderValue;
|
|
228
|
+
$[39] = selectable;
|
|
229
|
+
$[40] = t7;
|
|
230
|
+
} else t7 = $[40];
|
|
185
231
|
let t8;
|
|
186
|
-
if ($[
|
|
187
|
-
t8 = /* @__PURE__ */ jsx("
|
|
232
|
+
if ($[55] !== t7) {
|
|
233
|
+
t8 = /* @__PURE__ */ jsx("tbody", { children: t7 });
|
|
234
|
+
$[55] = t7;
|
|
235
|
+
$[56] = t8;
|
|
236
|
+
} else t8 = $[56];
|
|
237
|
+
let t9;
|
|
238
|
+
if ($[57] !== label || $[58] !== t6 || $[59] !== t8) {
|
|
239
|
+
t9 = /* @__PURE__ */ jsxs("table", {
|
|
240
|
+
className: TableLayout_module_default.table,
|
|
241
|
+
"aria-label": label,
|
|
242
|
+
children: [t6, t8]
|
|
243
|
+
});
|
|
244
|
+
$[57] = label;
|
|
245
|
+
$[58] = t6;
|
|
246
|
+
$[59] = t8;
|
|
247
|
+
$[60] = t9;
|
|
248
|
+
} else t9 = $[60];
|
|
249
|
+
let t10;
|
|
250
|
+
if ($[61] !== measureList || $[62] !== t9) {
|
|
251
|
+
t10 = /* @__PURE__ */ jsx("div", {
|
|
188
252
|
className: TableLayout_module_default.scroller,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
253
|
+
ref: measureList,
|
|
254
|
+
children: t9
|
|
255
|
+
});
|
|
256
|
+
$[61] = measureList;
|
|
257
|
+
$[62] = t9;
|
|
258
|
+
$[63] = t10;
|
|
259
|
+
} else t10 = $[63];
|
|
260
|
+
let t11;
|
|
261
|
+
if ($[64] !== fitLevel || $[65] !== t10) {
|
|
262
|
+
t11 = /* @__PURE__ */ jsx(RowActionsFit, {
|
|
263
|
+
value: fitLevel,
|
|
264
|
+
children: t10
|
|
194
265
|
});
|
|
195
|
-
$[
|
|
196
|
-
$[
|
|
197
|
-
$[
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
return t8;
|
|
266
|
+
$[64] = fitLevel;
|
|
267
|
+
$[65] = t10;
|
|
268
|
+
$[66] = t11;
|
|
269
|
+
} else t11 = $[66];
|
|
270
|
+
return t11;
|
|
201
271
|
}
|
|
202
272
|
function _temp(node) {
|
|
203
273
|
return node !== null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableLayout.js","names":["pageSelection","item","selected","column","href","label","styles","_c"],"sources":["../../src/layouts/TableLayout.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react';\n\nimport { Checkbox, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { cx } from '../cx';\nimport { messages } from '../messages';\nimport type { ListColumn, ListLayoutProps } from '../types';\nimport { ItemTitle } from './ItemTitle';\nimport styles from './TableLayout.module.css';\n\n/** The sort direction of a column, from the first `sort` value. */\nexport function getSortDirection(\n sort: readonly string[],\n column: ListColumn,\n): 'ascending' | 'descending' | null {\n const first = sort[0];\n if (first === column.id) {\n return 'ascending';\n }\n return first === `-${column.id}` ? 'descending' : null;\n}\n\nfunction alignClass(column: ListColumn): string | undefined {\n if (column.align === 'center') {\n return styles.center;\n }\n return column.align === 'end' ? styles.end : undefined;\n}\n\n/**\n * Items as a table, with sortable column headers. On narrow lists (phones), each row turns into a\n * block that shows the label of each value.\n */\nexport function TableLayout({\n items,\n columns,\n renderValue,\n getItemLabel,\n getItemHref,\n selectable,\n isSelected,\n onToggle,\n renderActions,\n sort,\n onSort,\n label,\n pageSelection,\n}: ListLayoutProps) {\n const intl = usePanneauIntl();\n const actions = items.map((item) => renderActions(item));\n const hasActions = actions.some((node) => node !== null);\n return (\n <div className={styles.scroller}>\n <table className={styles.table} aria-label={label}>\n <thead>\n <tr>\n {selectable ? <th className={styles.check}>{pageSelection}</th> : null}\n {columns.map((column) => {\n const direction = getSortDirection(sort, column);\n return (\n <th\n key={column.id}\n scope=\"col\"\n className={alignClass(column)}\n style={\n column.width !== undefined\n ? { width: column.width }\n : undefined\n }\n aria-sort={\n column.sortable === true ? (direction ?? 'none') : undefined\n }\n >\n {column.sortable === true ? (\n <button\n type=\"button\"\n className={cx(\n styles.sort,\n direction !== null && styles.sorted,\n )}\n onClick={() => onSort(column)}\n >\n {column.label ?? column.id}\n <span className={styles.sortIcon}>\n <Icon\n icon={\n direction === 'ascending'\n ? ArrowUp\n : direction === 'descending'\n ? ArrowDown\n : ArrowUpDown\n }\n size=\"sm\"\n />\n </span>\n </button>\n ) : (\n (column.label ?? column.id)\n )}\n </th>\n );\n })}\n {hasActions ? (\n <th className={styles.actionsCell}>\n <span className={styles.visuallyHidden}>\n {intl.formatMessage(messages.actions)}\n </span>\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, row) => {\n const selected = selectable && isSelected(item);\n const href = getItemHref?.(item) ?? null;\n return (\n <tr key={item.id} data-selected={selected || undefined}>\n {selectable ? (\n <td className={styles.check}>\n <Checkbox\n aria-label={intl.formatMessage(messages.selectItem, {\n item: getItemLabel(item),\n })}\n isSelected={selected}\n onChange={() => onToggle(item)}\n />\n </td>\n ) : null}\n {columns.map((column, index) => (\n <td\n key={column.id}\n className={cx(\n alignClass(column),\n index === 0 && styles.title,\n )}\n >\n <span className={styles.cellLabel}>\n {column.label ?? column.id}\n </span>\n <span>\n {index === 0 ? (\n <ItemTitle href={href}>\n {renderValue(item, column)}\n </ItemTitle>\n ) : (\n renderValue(item, column)\n )}\n </span>\n </td>\n ))}\n {hasActions ? (\n <td className={styles.actionsCell}>{actions[row]}</td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableLayout.js","names":["ArrowDown","ArrowUp","ArrowUpDown","ImageOff","Checkbox","Icon","usePanneauIntl","RowActionsFit","fitContent","useRowActionsFit","cx","messages","ListColumn","ListLayoutProps","ItemTitle","styles","getSortDirection","sort","column","first","id","alignClass","align","center","end","undefined","Thumbnail","t0","$","_c","url","t1","thumbnail","TableLayout","items","columns","renderValue","getItemLabel","getItemHref","getItemImage","isCurrent","selectable","isSelected","onToggle","renderActions","onSort","label","pageSelection","renderCell","intl","actions","t2","item","map","some","_temp","hasActions","fitLevel","measureList","t3","check","t4","t5","direction","width","sortable","sorted","sortIcon","actionsCell","visuallyHidden","formatMessage","t6","t7","t8","item_0","row","selected","href","current","selectItem","column_0","index","content","cell","title","cellLabel","withThumbnail","t9","table","t10","scroller","t11","node","styles","_c"],"sources":["../../src/layouts/TableLayout.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp, ArrowUpDown, ImageOff } from 'lucide-react';\n\nimport { Checkbox, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { RowActionsFit, fitContent, useRowActionsFit } from '../actions/fit';\nimport { cx } from '../cx';\nimport { messages } from '../messages';\nimport type { ListColumn, ListLayoutProps } from '../types';\nimport { ItemTitle } from './ItemTitle';\nimport styles from './TableLayout.module.css';\n\n/** The sort direction of a column, from the first `sort` value. */\nexport function getSortDirection(\n sort: readonly string[],\n column: ListColumn,\n): 'ascending' | 'descending' | null {\n const first = sort[0];\n if (first === column.id) {\n return 'ascending';\n }\n return first === `-${column.id}` ? 'descending' : null;\n}\n\nfunction alignClass(column: ListColumn): string | undefined {\n if (column.align === 'center') {\n return styles.center;\n }\n return column.align === 'end' ? styles.end : undefined;\n}\n\n/**\n * The thumbnail of an item, before its title (decision 0061): a square of its image, loaded when it\n * comes into view, or a placeholder. It has no text: the title is next to it.\n */\nfunction Thumbnail({ url }: { url: string | null }) {\n return (\n <span className={styles.thumbnail}>\n {url !== null ? (\n <img src={url} alt=\"\" loading=\"lazy\" decoding=\"async\" />\n ) : (\n <Icon icon={ImageOff} size=\"sm\" />\n )}\n </span>\n );\n}\n\n/**\n * Items as a table, with sortable column headers. With the image of items (`getItemImage`), each\n * title starts with a thumbnail. On narrow lists (phones), each row turns into a block that shows\n * the label of each value.\n */\nexport function TableLayout({\n items,\n columns,\n renderValue,\n getItemLabel,\n getItemHref,\n getItemImage,\n isCurrent,\n selectable,\n isSelected,\n onToggle,\n renderActions,\n sort,\n onSort,\n label,\n pageSelection,\n renderCell,\n}: ListLayoutProps) {\n const intl = usePanneauIntl();\n const actions = items.map((item) => renderActions(item));\n const hasActions = actions.some((node) => node !== null);\n const [fitLevel, measureList] = useRowActionsFit(fitContent(items, columns));\n return (\n <RowActionsFit value={fitLevel}>\n <div className={styles.scroller} ref={measureList}>\n <table className={styles.table} aria-label={label}>\n <thead>\n <tr>\n {selectable ? <th className={styles.check}>{pageSelection}</th> : null}\n {columns.map((column) => {\n const direction = getSortDirection(sort, column);\n return (\n <th\n key={column.id}\n scope=\"col\"\n className={alignClass(column)}\n style={\n column.width !== undefined\n ? { width: column.width }\n : undefined\n }\n aria-sort={\n column.sortable === true\n ? (direction ?? 'none')\n : undefined\n }\n >\n {column.sortable === true ? (\n <button\n type=\"button\"\n className={cx(\n styles.sort,\n direction !== null && styles.sorted,\n )}\n onClick={() => onSort(column)}\n >\n {column.label ?? column.id}\n <span className={styles.sortIcon}>\n <Icon\n icon={\n direction === 'ascending'\n ? ArrowUp\n : direction === 'descending'\n ? ArrowDown\n : ArrowUpDown\n }\n size=\"sm\"\n />\n </span>\n </button>\n ) : (\n (column.label ?? column.id)\n )}\n </th>\n );\n })}\n {hasActions ? (\n <th className={styles.actionsCell}>\n <span className={styles.visuallyHidden}>\n {intl.formatMessage(messages.actions)}\n </span>\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody>\n {items.map((item, row) => {\n const selected = selectable && isSelected(item);\n const href = getItemHref?.(item) ?? null;\n const current = isCurrent?.(item) ?? false;\n return (\n <tr\n key={item.id}\n data-selected={selected || undefined}\n data-current={current || undefined}\n >\n {selectable ? (\n <td className={styles.check}>\n <Checkbox\n aria-label={intl.formatMessage(\n messages.selectItem,\n {\n item: getItemLabel(item),\n },\n )}\n isSelected={selected}\n onChange={() => onToggle(item)}\n />\n </td>\n ) : null}\n {columns.map((column, index) => {\n const content =\n index === 0 ? (\n <ItemTitle href={href} current={current}>\n {renderValue(item, column)}\n </ItemTitle>\n ) : (\n renderValue(item, column)\n );\n const cell = (\n <span>\n {renderCell !== undefined\n ? renderCell(item, column, content)\n : content}\n </span>\n );\n return (\n <td\n key={column.id}\n className={cx(\n alignClass(column),\n index === 0 && styles.title,\n )}\n >\n <span className={styles.cellLabel}>\n {column.label ?? column.id}\n </span>\n {index === 0 && getItemImage !== undefined ? (\n <span className={styles.withThumbnail}>\n <Thumbnail url={getItemImage(item)} />\n {cell}\n </span>\n ) : (\n cell\n )}\n </td>\n );\n })}\n {hasActions ? (\n <td className={styles.actionsCell}>{actions[row]}</td>\n ) : null}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </RowActionsFit>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import "./TableLayout.css";
|
|
|
2
2
|
//#region src/layouts/TableLayout.module.css
|
|
3
3
|
var scroller = "panneau-table-layout-scroller";
|
|
4
4
|
var table = "panneau-table-layout-table";
|
|
5
|
+
var title = "panneau-table-layout-title";
|
|
6
|
+
var withThumbnail = "panneau-table-layout-with-thumbnail";
|
|
7
|
+
var thumbnail = "panneau-table-layout-thumbnail";
|
|
5
8
|
var center = "panneau-table-layout-center";
|
|
6
9
|
var end = "panneau-table-layout-end";
|
|
7
10
|
var check = "panneau-table-layout-check";
|
|
@@ -11,10 +14,12 @@ var sortIcon = "panneau-table-layout-sort-icon";
|
|
|
11
14
|
var sorted = "panneau-table-layout-sorted";
|
|
12
15
|
var cellLabel = "panneau-table-layout-cell-label";
|
|
13
16
|
var visuallyHidden = "panneau-table-layout-visually-hidden";
|
|
14
|
-
var title = "panneau-table-layout-title";
|
|
15
17
|
var TableLayout_module_default = {
|
|
16
18
|
scroller,
|
|
17
19
|
table,
|
|
20
|
+
title,
|
|
21
|
+
withThumbnail,
|
|
22
|
+
thumbnail,
|
|
18
23
|
center,
|
|
19
24
|
end,
|
|
20
25
|
check,
|
|
@@ -23,10 +28,9 @@ var TableLayout_module_default = {
|
|
|
23
28
|
sortIcon,
|
|
24
29
|
sorted,
|
|
25
30
|
cellLabel,
|
|
26
|
-
visuallyHidden
|
|
27
|
-
title
|
|
31
|
+
visuallyHidden
|
|
28
32
|
};
|
|
29
33
|
//#endregion
|
|
30
|
-
export { actionsCell, cellLabel, center, check, TableLayout_module_default as default, end, scroller, sort, sortIcon, sorted, table, title, visuallyHidden };
|
|
34
|
+
export { actionsCell, cellLabel, center, check, TableLayout_module_default as default, end, scroller, sort, sortIcon, sorted, table, thumbnail, title, visuallyHidden, withThumbnail };
|
|
31
35
|
|
|
32
36
|
//# sourceMappingURL=TableLayout.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableLayout.module.js","names":[],"sources":["../../src/layouts/TableLayout.module.css"],"sourcesContent":[".scroller {\n overflow-x: auto;\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-lg);\n background-color: var(--panneau-color-surface);\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--panneau-font-size-md);\n}\n\n.table th,\n.table td {\n padding: var(--panneau-row-padding-y) var(--panneau-space-3);\n text-align: start;\n vertical-align: middle;\n border-bottom: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n.table th {\n font-size: var(--panneau-font-size-sm);\n font-weight: var(--panneau-font-weight-medium);\n color: var(--panneau-color-text-muted);\n white-space: nowrap;\n background-color: var(--panneau-color-surface-sunken);\n}\n\n.table tbody tr:last-child td {\n border-bottom: 0;\n}\n\n.table tbody tr[data-selected] {\n background-color: var(--panneau-color-accent-subtle);\n}\n\n.center {\n text-align: center !important;\n}\n\n.end {\n text-align: end !important;\n}\n\n.check {\n width: 1px;\n}\n\n.actionsCell {\n width: 1px;\n text-align: end !important;\n white-space: nowrap;\n}\n\n.sort {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-1);\n margin: calc(-1 * var(--panneau-space-1)) calc(-1 * var(--panneau-space-2));\n padding: var(--panneau-space-1) var(--panneau-space-2);\n font: inherit;\n color: inherit;\n background: none;\n border: 0;\n border-radius: var(--panneau-radius-sm);\n cursor: pointer;\n}\n\n.sort:hover {\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-hover);\n}\n\n.sort:focus-visible {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 1px;\n}\n\n.sortIcon {\n opacity: 0.5;\n}\n\n.sorted .sortIcon {\n opacity: 1;\n}\n\n.cellLabel {\n display: none;\n}\n\n.visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n\n/* Narrow lists (phones): each row is a block, with the label of each value next to it. */\n@container panneau-list (max-width: 40rem) {\n .scroller {\n overflow: visible;\n background: none;\n border: 0;\n }\n\n /* The labels of the cells replace the headers, and the list's sort select their buttons. */\n .table thead {\n display: none;\n }\n\n .table,\n .table tbody,\n .table tr,\n .table td {\n display: block;\n }\n\n .table tbody {\n display: grid;\n gap: var(--panneau-space-2);\n }\n\n .table tr {\n position: relative;\n padding: var(--panneau-space-2) 0;\n background-color: var(--panneau-color-surface);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-lg);\n }\n\n .table td {\n display: grid;\n grid-template-columns: minmax(5rem, 35%) 1fr;\n gap: var(--panneau-space-2);\n padding: var(--panneau-space-1) var(--panneau-space-3);\n text-align: start !important;\n border: 0;\n }\n\n .table td.check,\n .table td.actionsCell {\n display: flex;\n width: auto;\n }\n\n .table td.check {\n position: absolute;\n top: var(--panneau-space-2);\n inset-inline-end: var(--panneau-space-2);\n padding: 0;\n }\n\n .table td.actionsCell {\n justify-content: flex-start;\n flex-wrap: wrap;\n padding-top: var(--panneau-space-2);\n }\n\n .table td.title {\n display: block;\n padding-inline-end: var(--panneau-space-10);\n font-weight: var(--panneau-font-weight-medium);\n }\n\n .table td.title .cellLabel {\n display: none;\n }\n\n .cellLabel {\n display: block;\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n }\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TableLayout.module.js","names":[],"sources":["../../src/layouts/TableLayout.module.css"],"sourcesContent":[".scroller {\n overflow-x: auto;\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-lg);\n background-color: var(--panneau-color-surface);\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--panneau-font-size-md);\n}\n\n.table th,\n.table td {\n padding: var(--panneau-row-padding-y) var(--panneau-space-3);\n text-align: start;\n vertical-align: middle;\n border-bottom: var(--panneau-border-width) solid var(--panneau-color-border);\n}\n\n.table th {\n font-size: var(--panneau-font-size-sm);\n font-weight: var(--panneau-font-weight-medium);\n color: var(--panneau-color-text-muted);\n white-space: nowrap;\n background-color: var(--panneau-color-surface-sunken);\n}\n\n/* The title stays readable in a narrow list, such as next to an item's details: the table\n * scrolls instead. */\n.table td.title {\n min-width: 12rem;\n}\n\n.table tbody tr:last-child td {\n border-bottom: 0;\n}\n\n.table tbody tr[data-selected] {\n background-color: var(--panneau-color-accent-subtle);\n}\n\n/* The item shown next to the list: a bar on its first cell. */\n.table tbody tr[data-current] td:first-child {\n box-shadow: inset 3px 0 0 var(--panneau-color-accent);\n}\n\n.table tbody tr[data-current] {\n background-color: var(--panneau-color-hover);\n}\n\n/* The thumbnail of an item, before its title (decision 0061). */\n.withThumbnail {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-3);\n}\n\n.withThumbnail > :last-child {\n min-width: 0;\n}\n\n.thumbnail {\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n overflow: hidden;\n color: var(--panneau-color-text-muted);\n background-color: var(--panneau-color-surface-sunken);\n border-radius: var(--panneau-radius-sm);\n}\n\n.thumbnail img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.center {\n text-align: center !important;\n}\n\n.end {\n text-align: end !important;\n}\n\n.check {\n width: 1px;\n}\n\n.actionsCell {\n width: 1px;\n text-align: end !important;\n white-space: nowrap;\n}\n\n/* As narrow as the actions of the row on one line: they only wrap in a narrow list. */\n.table .actionsCell > * {\n flex-wrap: nowrap;\n}\n\n.sort {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-1);\n margin: calc(-1 * var(--panneau-space-1)) calc(-1 * var(--panneau-space-2));\n padding: var(--panneau-space-1) var(--panneau-space-2);\n font: inherit;\n color: inherit;\n background: none;\n border: 0;\n border-radius: var(--panneau-radius-sm);\n cursor: pointer;\n}\n\n.sort:hover {\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-hover);\n}\n\n.sort:focus-visible {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 1px;\n}\n\n.sortIcon {\n opacity: 0.5;\n}\n\n.sorted .sortIcon {\n opacity: 1;\n}\n\n.cellLabel {\n display: none;\n}\n\n.visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n\n/* Narrow lists (phones): each row is a block, with the label of each value next to it. */\n@container panneau-list (max-width: 40rem) {\n .scroller {\n overflow: visible;\n background: none;\n border: 0;\n }\n\n /* The labels of the cells replace the headers, and the list's sort select their buttons. */\n .table thead {\n display: none;\n }\n\n .table,\n .table tbody,\n .table tr,\n .table td {\n display: block;\n }\n\n .table tbody {\n display: grid;\n gap: var(--panneau-space-2);\n }\n\n .table tr {\n position: relative;\n padding: var(--panneau-space-2) 0;\n background-color: var(--panneau-color-surface);\n border: var(--panneau-border-width) solid var(--panneau-color-border);\n border-radius: var(--panneau-radius-lg);\n }\n\n .table td {\n display: grid;\n grid-template-columns: minmax(5rem, 35%) 1fr;\n gap: var(--panneau-space-2);\n padding: var(--panneau-space-1) var(--panneau-space-3);\n text-align: start !important;\n border: 0;\n }\n\n .table td.check,\n .table td.actionsCell {\n display: flex;\n width: auto;\n }\n\n .table td.actionsCell > * {\n flex-wrap: wrap;\n }\n\n .table td.check {\n position: absolute;\n top: var(--panneau-space-2);\n inset-inline-end: var(--panneau-space-2);\n padding: 0;\n }\n\n .table td.actionsCell {\n justify-content: flex-start;\n flex-wrap: wrap;\n padding-top: var(--panneau-space-2);\n }\n\n .table td.title {\n display: block;\n min-width: 0;\n padding-inline-end: var(--panneau-space-10);\n font-weight: var(--panneau-font-weight-medium);\n }\n\n .table td.title .cellLabel {\n display: none;\n }\n\n .cellLabel {\n display: block;\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n }\n}\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ListLayoutEntry } from '../types';
|
|
2
|
-
/** The built-in list layouts, by id
|
|
1
|
+
import type { ListLayoutEntry } from '../types.js';
|
|
2
|
+
/** The built-in list layouts, by id (decision 0044). */
|
|
3
3
|
export declare const builtInLayouts: Readonly<Record<string, ListLayoutEntry>> & {
|
|
4
4
|
table: ListLayoutEntry;
|
|
5
5
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/layouts/builtIn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/layouts/builtIn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMhD,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,GAAG;IACrE,KAAK,EAAE,eAAe,CAAC;CAM1B,CAAC"}
|
package/dist/layouts/builtIn.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { CalendarLayout } from "./CalendarLayout.js";
|
|
1
2
|
import { CardsLayout } from "./CardsLayout.js";
|
|
3
|
+
import { GalleryLayout } from "./GalleryLayout.js";
|
|
2
4
|
import { TableLayout } from "./TableLayout.js";
|
|
3
5
|
//#region src/layouts/builtIn.ts
|
|
4
|
-
/** The built-in list layouts, by id
|
|
6
|
+
/** The built-in list layouts, by id (decision 0044). */
|
|
5
7
|
var builtInLayouts = {
|
|
6
8
|
table: TableLayout,
|
|
7
|
-
cards: CardsLayout
|
|
9
|
+
cards: CardsLayout,
|
|
10
|
+
gallery: GalleryLayout,
|
|
11
|
+
calendar: CalendarLayout
|
|
8
12
|
};
|
|
9
13
|
//#endregion
|
|
10
14
|
export { builtInLayouts };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtIn.js","names":[],"sources":["../../src/layouts/builtIn.ts"],"sourcesContent":["import type { ListLayoutEntry } from '../types';\nimport { CardsLayout } from './CardsLayout';\nimport { TableLayout } from './TableLayout';\n\n/** The built-in list layouts, by id
|
|
1
|
+
{"version":3,"file":"builtIn.js","names":["ListLayoutEntry","CalendarLayout","CardsLayout","GalleryLayout","TableLayout","builtInLayouts","Readonly","Record","table","cards","gallery","calendar"],"sources":["../../src/layouts/builtIn.ts"],"sourcesContent":["import type { ListLayoutEntry } from '../types';\nimport { CalendarLayout } from './CalendarLayout';\nimport { CardsLayout } from './CardsLayout';\nimport { GalleryLayout } from './GalleryLayout';\nimport { TableLayout } from './TableLayout';\n\n/** The built-in list layouts, by id (decision 0044). */\nexport const builtInLayouts: Readonly<Record<string, ListLayoutEntry>> & {\n table: ListLayoutEntry;\n} = {\n table: TableLayout,\n cards: CardsLayout,\n gallery: GalleryLayout,\n calendar: CalendarLayout,\n};\n"],"mappings":";;;;;;AAOA,IAAaK,iBAET;CACAG,OAAOJ;CACPK,OAAOP;CACPQ,SAASP;CACTQ,UAAUV;AACd"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Field } from '@panneau/protocol';
|
|
2
|
+
/** The time zone of a calendar's field: its `settings.timeZone`, or `null`. */
|
|
3
|
+
export declare function getCalendarTimeZone(field: Field | null | undefined): string | null;
|
|
4
|
+
/**
|
|
5
|
+
* The days an item shows on, within the days shown (`2026-10-26` to `2026-12-06`): the day of a
|
|
6
|
+
* `date` or a `datetime`, in the time zone (the browser's without one), or each day a `daterange`
|
|
7
|
+
* covers (decision 0053). A range open at its end shows on its first day; one open at its start, on
|
|
8
|
+
* its last.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getItemDays(value: unknown, shown: {
|
|
11
|
+
first: string;
|
|
12
|
+
last: string;
|
|
13
|
+
}, timeZone?: string | null): string[];
|
|
14
|
+
//# sourceMappingURL=calendarDays.d.ts.map
|