@panneau/lists 5.0.0-alpha.12 → 5.0.0-alpha.13
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 +13 -11
- package/dist/List.d.ts +1 -1
- package/dist/List.d.ts.map +1 -1
- package/dist/List.js +29 -50
- package/dist/List.js.map +1 -1
- package/dist/ListView.d.ts +34 -5
- package/dist/ListView.d.ts.map +1 -1
- package/dist/ListView.js +416 -359
- package/dist/ListView.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/displays/Displays.css +12 -0
- package/dist/displays/Displays.module.js +6 -2
- package/dist/displays/Displays.module.js.map +1 -1
- package/dist/displays/displays.d.ts +11 -1
- package/dist/displays/displays.d.ts.map +1 -1
- package/dist/displays/displays.js +185 -22
- package/dist/displays/displays.js.map +1 -1
- package/dist/images.d.ts +6 -0
- package/dist/images.d.ts.map +1 -0
- package/dist/images.js +18 -0
- package/dist/images.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- 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 +27 -0
- package/dist/inline/InlineCell.d.ts.map +1 -0
- package/dist/inline/InlineCell.js +471 -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 +298 -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.js +1 -1
- package/dist/layouts/GalleryLayout.css +80 -0
- package/dist/layouts/GalleryLayout.d.ts +8 -0
- package/dist/layouts/GalleryLayout.d.ts.map +1 -0
- package/dist/layouts/GalleryLayout.js +129 -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/TableLayout.d.ts +1 -1
- package/dist/layouts/TableLayout.d.ts.map +1 -1
- package/dist/layouts/TableLayout.js +44 -39
- package/dist/layouts/TableLayout.js.map +1 -1
- package/dist/layouts/builtIn.d.ts +1 -1
- 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/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/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 +42 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/values.d.ts +1 -0
- package/dist/values.d.ts.map +1 -1
- package/dist/values.js +1 -1
- package/dist/values.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { messages } from "../messages.js";
|
|
2
|
+
import { ItemTitle } from "./ItemTitle.js";
|
|
3
|
+
import GalleryLayout_module_default from "./GalleryLayout.module.js";
|
|
4
|
+
import { c } from "react/compiler-runtime";
|
|
5
|
+
import { Checkbox, Icon, usePanneauIntl } from "@panneau/ui";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { ImageOff } from "lucide-react";
|
|
8
|
+
//#region src/layouts/GalleryLayout.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Items as a grid of images (decision 0044): the image of each item (`itemImage` of the
|
|
11
|
+
* resource), its title under it, its checkbox and its actions. An item without an image shows a
|
|
12
|
+
* placeholder.
|
|
13
|
+
*/
|
|
14
|
+
function GalleryLayout(t0) {
|
|
15
|
+
const $ = c(34);
|
|
16
|
+
const { items, columns, renderValue, getItemLabel, getItemHref, getItemImage, isCurrent, selectable, isSelected, onToggle, renderActions, label, pageSelection } = t0;
|
|
17
|
+
const intl = usePanneauIntl();
|
|
18
|
+
const [title] = columns;
|
|
19
|
+
let t1;
|
|
20
|
+
if ($[0] !== pageSelection || $[1] !== selectable) {
|
|
21
|
+
t1 = selectable ? /* @__PURE__ */ jsx("div", {
|
|
22
|
+
className: GalleryLayout_module_default.pageSelection,
|
|
23
|
+
children: pageSelection
|
|
24
|
+
}) : null;
|
|
25
|
+
$[0] = pageSelection;
|
|
26
|
+
$[1] = selectable;
|
|
27
|
+
$[2] = t1;
|
|
28
|
+
} else t1 = $[2];
|
|
29
|
+
let t2;
|
|
30
|
+
if ($[3] !== getItemHref || $[4] !== getItemImage || $[5] !== getItemLabel || $[6] !== intl || $[7] !== isCurrent || $[8] !== isSelected || $[9] !== items || $[10] !== onToggle || $[11] !== renderActions || $[12] !== renderValue || $[13] !== selectable || $[14] !== title) {
|
|
31
|
+
let t3;
|
|
32
|
+
if ($[16] !== getItemHref || $[17] !== getItemImage || $[18] !== getItemLabel || $[19] !== intl || $[20] !== isCurrent || $[21] !== isSelected || $[22] !== onToggle || $[23] !== renderActions || $[24] !== renderValue || $[25] !== selectable || $[26] !== title) {
|
|
33
|
+
t3 = (item) => {
|
|
34
|
+
const selected = selectable && isSelected(item);
|
|
35
|
+
const actions = renderActions(item);
|
|
36
|
+
const current = isCurrent?.(item) ?? false;
|
|
37
|
+
const image = getItemImage?.(item) ?? null;
|
|
38
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
39
|
+
className: GalleryLayout_module_default.tile,
|
|
40
|
+
"data-selected": selected || void 0,
|
|
41
|
+
"data-current": current || void 0,
|
|
42
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
43
|
+
className: GalleryLayout_module_default.media,
|
|
44
|
+
children: [image !== null ? /* @__PURE__ */ jsx("img", {
|
|
45
|
+
src: image,
|
|
46
|
+
alt: "",
|
|
47
|
+
loading: "lazy"
|
|
48
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
49
|
+
className: GalleryLayout_module_default.placeholder,
|
|
50
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
51
|
+
icon: ImageOff,
|
|
52
|
+
size: "lg"
|
|
53
|
+
})
|
|
54
|
+
}), selectable ? /* @__PURE__ */ jsx("span", {
|
|
55
|
+
className: GalleryLayout_module_default.check,
|
|
56
|
+
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
57
|
+
"aria-label": intl.formatMessage(messages.selectItem, { item: getItemLabel(item) }),
|
|
58
|
+
isSelected: selected,
|
|
59
|
+
onChange: () => onToggle(item)
|
|
60
|
+
})
|
|
61
|
+
}) : null]
|
|
62
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
63
|
+
className: GalleryLayout_module_default.caption,
|
|
64
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
65
|
+
className: GalleryLayout_module_default.title,
|
|
66
|
+
children: /* @__PURE__ */ jsx(ItemTitle, {
|
|
67
|
+
href: getItemHref?.(item) ?? null,
|
|
68
|
+
current,
|
|
69
|
+
children: title !== void 0 ? renderValue(item, title) : getItemLabel(item)
|
|
70
|
+
})
|
|
71
|
+
}), actions !== null ? /* @__PURE__ */ jsx("div", {
|
|
72
|
+
className: GalleryLayout_module_default.actions,
|
|
73
|
+
children: actions
|
|
74
|
+
}) : null]
|
|
75
|
+
})]
|
|
76
|
+
}, item.id);
|
|
77
|
+
};
|
|
78
|
+
$[16] = getItemHref;
|
|
79
|
+
$[17] = getItemImage;
|
|
80
|
+
$[18] = getItemLabel;
|
|
81
|
+
$[19] = intl;
|
|
82
|
+
$[20] = isCurrent;
|
|
83
|
+
$[21] = isSelected;
|
|
84
|
+
$[22] = onToggle;
|
|
85
|
+
$[23] = renderActions;
|
|
86
|
+
$[24] = renderValue;
|
|
87
|
+
$[25] = selectable;
|
|
88
|
+
$[26] = title;
|
|
89
|
+
$[27] = t3;
|
|
90
|
+
} else t3 = $[27];
|
|
91
|
+
t2 = items.map(t3);
|
|
92
|
+
$[3] = getItemHref;
|
|
93
|
+
$[4] = getItemImage;
|
|
94
|
+
$[5] = getItemLabel;
|
|
95
|
+
$[6] = intl;
|
|
96
|
+
$[7] = isCurrent;
|
|
97
|
+
$[8] = isSelected;
|
|
98
|
+
$[9] = items;
|
|
99
|
+
$[10] = onToggle;
|
|
100
|
+
$[11] = renderActions;
|
|
101
|
+
$[12] = renderValue;
|
|
102
|
+
$[13] = selectable;
|
|
103
|
+
$[14] = title;
|
|
104
|
+
$[15] = t2;
|
|
105
|
+
} else t2 = $[15];
|
|
106
|
+
let t3;
|
|
107
|
+
if ($[28] !== label || $[29] !== t2) {
|
|
108
|
+
t3 = /* @__PURE__ */ jsx("ul", {
|
|
109
|
+
className: GalleryLayout_module_default.gallery,
|
|
110
|
+
"aria-label": label,
|
|
111
|
+
children: t2
|
|
112
|
+
});
|
|
113
|
+
$[28] = label;
|
|
114
|
+
$[29] = t2;
|
|
115
|
+
$[30] = t3;
|
|
116
|
+
} else t3 = $[30];
|
|
117
|
+
let t4;
|
|
118
|
+
if ($[31] !== t1 || $[32] !== t3) {
|
|
119
|
+
t4 = /* @__PURE__ */ jsxs("div", { children: [t1, t3] });
|
|
120
|
+
$[31] = t1;
|
|
121
|
+
$[32] = t3;
|
|
122
|
+
$[33] = t4;
|
|
123
|
+
} else t4 = $[33];
|
|
124
|
+
return t4;
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
export { GalleryLayout };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=GalleryLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GalleryLayout.js","names":["ImageOff","Checkbox","Icon","usePanneauIntl","messages","ListLayoutProps","styles","ItemTitle","GalleryLayout","t0","$","_c","items","columns","renderValue","getItemLabel","getItemHref","getItemImage","isCurrent","selectable","isSelected","onToggle","renderActions","label","pageSelection","intl","title","t1","t2","t3","item","selected","actions","current","image","id","tile","undefined","media","placeholder","check","formatMessage","selectItem","caption","map","gallery","t4","_c","styles"],"sources":["../../src/layouts/GalleryLayout.tsx"],"sourcesContent":["import { ImageOff } from 'lucide-react';\n\nimport { Checkbox, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { ListLayoutProps } from '../types';\nimport styles from './GalleryLayout.module.css';\nimport { ItemTitle } from './ItemTitle';\n\n/**\n * Items as a grid of images (decision 0044): the image of each item (`itemImage` of the\n * resource), its title under it, its checkbox and its actions. An item without an image shows a\n * placeholder.\n */\nexport function GalleryLayout({\n items,\n columns,\n renderValue,\n getItemLabel,\n getItemHref,\n getItemImage,\n isCurrent,\n selectable,\n isSelected,\n onToggle,\n renderActions,\n label,\n pageSelection,\n}: ListLayoutProps) {\n const intl = usePanneauIntl();\n const [title] = columns;\n return (\n <div>\n {selectable ? <div className={styles.pageSelection}>{pageSelection}</div> : null}\n <ul className={styles.gallery} aria-label={label}>\n {items.map((item) => {\n const selected = selectable && isSelected(item);\n const actions = renderActions(item);\n const current = isCurrent?.(item) ?? false;\n const image = getItemImage?.(item) ?? null;\n return (\n <li\n key={item.id}\n className={styles.tile}\n data-selected={selected || undefined}\n data-current={current || undefined}\n >\n <div className={styles.media}>\n {image !== null ? (\n <img src={image} alt=\"\" loading=\"lazy\" />\n ) : (\n <span className={styles.placeholder}>\n <Icon icon={ImageOff} size=\"lg\" />\n </span>\n )}\n {selectable ? (\n <span 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 </span>\n ) : null}\n </div>\n <div className={styles.caption}>\n <div className={styles.title}>\n <ItemTitle href={getItemHref?.(item) ?? null} current={current}>\n {title !== undefined\n ? renderValue(item, title)\n : getItemLabel(item)}\n </ItemTitle>\n </div>\n {actions !== null ? (\n <div className={styles.actions}>{actions}</div>\n ) : null}\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "./GalleryLayout.css";
|
|
2
|
+
//#region src/layouts/GalleryLayout.module.css
|
|
3
|
+
var gallery = "panneau-gallery-layout-gallery";
|
|
4
|
+
var tile = "panneau-gallery-layout-tile";
|
|
5
|
+
var media = "panneau-gallery-layout-media";
|
|
6
|
+
var placeholder = "panneau-gallery-layout-placeholder";
|
|
7
|
+
var check = "panneau-gallery-layout-check";
|
|
8
|
+
var caption = "panneau-gallery-layout-caption";
|
|
9
|
+
var title = "panneau-gallery-layout-title";
|
|
10
|
+
var actions = "panneau-gallery-layout-actions";
|
|
11
|
+
var pageSelection = "panneau-gallery-layout-page-selection";
|
|
12
|
+
var GalleryLayout_module_default = {
|
|
13
|
+
gallery,
|
|
14
|
+
tile,
|
|
15
|
+
media,
|
|
16
|
+
placeholder,
|
|
17
|
+
check,
|
|
18
|
+
caption,
|
|
19
|
+
title,
|
|
20
|
+
actions,
|
|
21
|
+
pageSelection
|
|
22
|
+
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { actions, caption, check, GalleryLayout_module_default as default, gallery, media, pageSelection, placeholder, tile, title };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=GalleryLayout.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GalleryLayout.module.js","names":[],"sources":["../../src/layouts/GalleryLayout.module.css"],"sourcesContent":[".gallery {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(12rem, 100%), 1fr));\n gap: var(--panneau-space-3);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.tile {\n display: flex;\n flex-direction: column;\n overflow: hidden;\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.tile[data-current] {\n border-color: var(--panneau-color-accent);\n box-shadow: inset 0 0 0 1px var(--panneau-color-accent);\n}\n\n.tile[data-selected] {\n background-color: var(--panneau-color-accent-subtle);\n border-color: var(--panneau-color-border-control);\n}\n\n.media {\n position: relative;\n aspect-ratio: 4 / 3;\n background-color: var(--panneau-color-surface-sunken);\n}\n\n.media img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--panneau-color-text-muted);\n}\n\n.check {\n position: absolute;\n top: var(--panneau-space-2);\n left: var(--panneau-space-2);\n padding: 2px;\n background-color: var(--panneau-color-surface);\n border-radius: var(--panneau-radius-sm);\n}\n\n.caption {\n display: flex;\n align-items: flex-start;\n gap: var(--panneau-space-2);\n padding: var(--panneau-space-2) var(--panneau-space-3);\n}\n\n.title {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n.actions {\n display: flex;\n flex-shrink: 0;\n gap: var(--panneau-space-1);\n}\n\n.pageSelection {\n margin-bottom: var(--panneau-space-2);\n}\n"],"mappings":""}
|
|
@@ -5,5 +5,5 @@ export declare function getSortDirection(sort: readonly string[], column: ListCo
|
|
|
5
5
|
* Items as a table, with sortable column headers. On narrow lists (phones), each row turns into a
|
|
6
6
|
* block that shows the label of each value.
|
|
7
7
|
*/
|
|
8
|
-
export declare function TableLayout({ items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, }: ListLayoutProps): import("react").JSX.Element;
|
|
8
|
+
export declare function TableLayout({ items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, renderCell, }: ListLayoutProps): import("react").JSX.Element;
|
|
9
9
|
//# sourceMappingURL=TableLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableLayout.d.ts","sourceRoot":"","sources":["../../src/layouts/TableLayout.tsx"],"names":[],"mappings":"AAMA,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;AASD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"TableLayout.d.ts","sourceRoot":"","sources":["../../src/layouts/TableLayout.tsx"],"names":[],"mappings":"AAMA,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;AASD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,MAAM,EACN,KAAK,EACL,aAAa,EACb,UAAU,GACb,EAAE,eAAe,+BA4HjB"}
|
|
@@ -22,8 +22,8 @@ function alignClass(column) {
|
|
|
22
22
|
* block that shows the label of each value.
|
|
23
23
|
*/
|
|
24
24
|
function TableLayout(t0) {
|
|
25
|
-
const $ = c(
|
|
26
|
-
const { items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection } = t0;
|
|
25
|
+
const $ = c(56);
|
|
26
|
+
const { items, columns, renderValue, getItemLabel, getItemHref, isCurrent, selectable, isSelected, onToggle, renderActions, sort, onSort, label, pageSelection, renderCell } = t0;
|
|
27
27
|
const intl = usePanneauIntl();
|
|
28
28
|
let actions;
|
|
29
29
|
let t1;
|
|
@@ -116,9 +116,9 @@ function TableLayout(t0) {
|
|
|
116
116
|
$[22] = t5;
|
|
117
117
|
} else t5 = $[22];
|
|
118
118
|
let t6;
|
|
119
|
-
if ($[23] !== actions || $[24] !== columns || $[25] !== getItemHref || $[26] !== getItemLabel || $[27] !== hasActions || $[28] !== intl || $[29] !== isCurrent || $[30] !== isSelected || $[31] !== items || $[32] !== onToggle || $[33] !==
|
|
119
|
+
if ($[23] !== actions || $[24] !== columns || $[25] !== getItemHref || $[26] !== getItemLabel || $[27] !== hasActions || $[28] !== intl || $[29] !== isCurrent || $[30] !== isSelected || $[31] !== items || $[32] !== onToggle || $[33] !== renderCell || $[34] !== renderValue || $[35] !== selectable) {
|
|
120
120
|
let t7;
|
|
121
|
-
if ($[
|
|
121
|
+
if ($[37] !== actions || $[38] !== columns || $[39] !== getItemHref || $[40] !== getItemLabel || $[41] !== hasActions || $[42] !== intl || $[43] !== isCurrent || $[44] !== isSelected || $[45] !== onToggle || $[46] !== renderCell || $[47] !== renderValue || $[48] !== selectable) {
|
|
122
122
|
t7 = (item_0, row) => {
|
|
123
123
|
const selected = selectable && isSelected(item_0);
|
|
124
124
|
const href = getItemHref?.(item_0) ?? null;
|
|
@@ -135,17 +135,20 @@ function TableLayout(t0) {
|
|
|
135
135
|
onChange: () => onToggle(item_0)
|
|
136
136
|
})
|
|
137
137
|
}) : null,
|
|
138
|
-
columns.map((column_0, index) =>
|
|
139
|
-
|
|
140
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
141
|
-
className: TableLayout_module_default.cellLabel,
|
|
142
|
-
children: column_0.label ?? column_0.id
|
|
143
|
-
}), /* @__PURE__ */ jsx("span", { children: index === 0 ? /* @__PURE__ */ jsx(ItemTitle, {
|
|
138
|
+
columns.map((column_0, index) => {
|
|
139
|
+
const content = index === 0 ? /* @__PURE__ */ jsx(ItemTitle, {
|
|
144
140
|
href,
|
|
145
141
|
current,
|
|
146
142
|
children: renderValue(item_0, column_0)
|
|
147
|
-
}) : renderValue(item_0, column_0)
|
|
148
|
-
|
|
143
|
+
}) : renderValue(item_0, column_0);
|
|
144
|
+
return /* @__PURE__ */ jsxs("td", {
|
|
145
|
+
className: cx(alignClass(column_0), index === 0 && TableLayout_module_default.title),
|
|
146
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
147
|
+
className: TableLayout_module_default.cellLabel,
|
|
148
|
+
children: column_0.label ?? column_0.id
|
|
149
|
+
}), /* @__PURE__ */ jsx("span", { children: renderCell !== void 0 ? renderCell(item_0, column_0, content) : content })]
|
|
150
|
+
}, column_0.id);
|
|
151
|
+
}),
|
|
149
152
|
hasActions ? /* @__PURE__ */ jsx("td", {
|
|
150
153
|
className: TableLayout_module_default.actionsCell,
|
|
151
154
|
children: actions[row]
|
|
@@ -153,19 +156,20 @@ function TableLayout(t0) {
|
|
|
153
156
|
]
|
|
154
157
|
}, item_0.id);
|
|
155
158
|
};
|
|
156
|
-
$[
|
|
157
|
-
$[
|
|
158
|
-
$[
|
|
159
|
-
$[
|
|
160
|
-
$[
|
|
161
|
-
$[
|
|
162
|
-
$[
|
|
163
|
-
$[
|
|
164
|
-
$[
|
|
165
|
-
$[
|
|
166
|
-
$[
|
|
167
|
-
$[
|
|
168
|
-
|
|
159
|
+
$[37] = actions;
|
|
160
|
+
$[38] = columns;
|
|
161
|
+
$[39] = getItemHref;
|
|
162
|
+
$[40] = getItemLabel;
|
|
163
|
+
$[41] = hasActions;
|
|
164
|
+
$[42] = intl;
|
|
165
|
+
$[43] = isCurrent;
|
|
166
|
+
$[44] = isSelected;
|
|
167
|
+
$[45] = onToggle;
|
|
168
|
+
$[46] = renderCell;
|
|
169
|
+
$[47] = renderValue;
|
|
170
|
+
$[48] = selectable;
|
|
171
|
+
$[49] = t7;
|
|
172
|
+
} else t7 = $[49];
|
|
169
173
|
t6 = items.map(t7);
|
|
170
174
|
$[23] = actions;
|
|
171
175
|
$[24] = columns;
|
|
@@ -177,18 +181,19 @@ function TableLayout(t0) {
|
|
|
177
181
|
$[30] = isSelected;
|
|
178
182
|
$[31] = items;
|
|
179
183
|
$[32] = onToggle;
|
|
180
|
-
$[33] =
|
|
181
|
-
$[34] =
|
|
182
|
-
$[35] =
|
|
183
|
-
|
|
184
|
+
$[33] = renderCell;
|
|
185
|
+
$[34] = renderValue;
|
|
186
|
+
$[35] = selectable;
|
|
187
|
+
$[36] = t6;
|
|
188
|
+
} else t6 = $[36];
|
|
184
189
|
let t7;
|
|
185
|
-
if ($[
|
|
190
|
+
if ($[50] !== t6) {
|
|
186
191
|
t7 = /* @__PURE__ */ jsx("tbody", { children: t6 });
|
|
187
|
-
$[
|
|
188
|
-
$[
|
|
189
|
-
} else t7 = $[
|
|
192
|
+
$[50] = t6;
|
|
193
|
+
$[51] = t7;
|
|
194
|
+
} else t7 = $[51];
|
|
190
195
|
let t8;
|
|
191
|
-
if ($[
|
|
196
|
+
if ($[52] !== label || $[53] !== t5 || $[54] !== t7) {
|
|
192
197
|
t8 = /* @__PURE__ */ jsx("div", {
|
|
193
198
|
className: TableLayout_module_default.scroller,
|
|
194
199
|
children: /* @__PURE__ */ jsxs("table", {
|
|
@@ -197,11 +202,11 @@ function TableLayout(t0) {
|
|
|
197
202
|
children: [t5, t7]
|
|
198
203
|
})
|
|
199
204
|
});
|
|
200
|
-
$[
|
|
201
|
-
$[
|
|
202
|
-
$[
|
|
203
|
-
$[
|
|
204
|
-
} else t8 = $[
|
|
205
|
+
$[52] = label;
|
|
206
|
+
$[53] = t5;
|
|
207
|
+
$[54] = t7;
|
|
208
|
+
$[55] = t8;
|
|
209
|
+
} else t8 = $[55];
|
|
205
210
|
return t8;
|
|
206
211
|
}
|
|
207
212
|
function _temp(node) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableLayout.js","names":["ArrowDown","ArrowUp","ArrowUpDown","Checkbox","Icon","usePanneauIntl","cx","messages","ListColumn","ListLayoutProps","ItemTitle","styles","getSortDirection","sort","column","first","id","alignClass","align","center","end","undefined","TableLayout","t0","$","_c","items","columns","renderValue","getItemLabel","getItemHref","isCurrent","selectable","isSelected","onToggle","renderActions","onSort","label","pageSelection","intl","actions","t1","t2","item","map","some","_temp","hasActions","check","t3","t4","direction","width","sortable","sorted","sortIcon","actionsCell","visuallyHidden","formatMessage","t5","t6","t7","item_0","row","selected","href","current","selectItem","column_0","index","title","cellLabel","t8","scroller","table","node","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 isCurrent,\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 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(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} current={current}>\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","Checkbox","Icon","usePanneauIntl","cx","messages","ListColumn","ListLayoutProps","ItemTitle","styles","getSortDirection","sort","column","first","id","alignClass","align","center","end","undefined","TableLayout","t0","$","_c","items","columns","renderValue","getItemLabel","getItemHref","isCurrent","selectable","isSelected","onToggle","renderActions","onSort","label","pageSelection","renderCell","intl","actions","t1","t2","item","map","some","_temp","hasActions","check","t3","t4","direction","width","sortable","sorted","sortIcon","actionsCell","visuallyHidden","formatMessage","t5","t6","t7","item_0","row","selected","href","current","selectItem","column_0","index","content","title","cellLabel","t8","scroller","table","node","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 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 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 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(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 const content =\n index === 0 ? (\n <ItemTitle href={href} current={current}>\n {renderValue(item, column)}\n </ItemTitle>\n ) : (\n renderValue(item, column)\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 <span>\n {renderCell !== undefined\n ? renderCell(item, column, content)\n : content}\n </span>\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 );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ListLayoutEntry } from '../types.js';
|
|
2
|
-
/** The built-in list layouts, by id
|
|
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":["ListLayoutEntry","CardsLayout","TableLayout","builtInLayouts","Readonly","Record","table","cards"],"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,17 @@
|
|
|
1
|
+
import type { ListColumn } from '../types.js';
|
|
2
|
+
export interface ColumnMenuProps {
|
|
3
|
+
/** Every column of the list, in the order of the definition. */
|
|
4
|
+
columns: readonly ListColumn[];
|
|
5
|
+
/** The columns shown, in their order. */
|
|
6
|
+
shown: readonly ListColumn[];
|
|
7
|
+
/** Shows these columns, by id, in this order. */
|
|
8
|
+
onChange: (ids: string[]) => void;
|
|
9
|
+
/** Back to the columns of the definition, or `null` while they are shown. */
|
|
10
|
+
onReset: (() => void) | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A button that opens the columns of a list: a checkbox to show or hide each one, buttons to
|
|
14
|
+
* move the shown ones, and a reset to the columns of the definition (decision 0042).
|
|
15
|
+
*/
|
|
16
|
+
export declare function ColumnMenu({ columns, shown, onChange, onReset }: ColumnMenuProps): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=ColumnMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnMenu.d.ts","sourceRoot":"","sources":["../../src/toolbar/ColumnMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC5B,gEAAgE;IAChE,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,yCAAyC;IACzC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClC,6EAA6E;IAC7E,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAChC;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,eAAe,+BAmFhF"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { messages } from "../messages.js";
|
|
2
|
+
import Toolbar_module_default from "./Toolbar.module.js";
|
|
3
|
+
import { c } from "react/compiler-runtime";
|
|
4
|
+
import { Button, Checkbox, IconButton, Popover, PopoverTrigger, usePanneauIntl } from "@panneau/ui";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { ArrowDown, ArrowUp, Columns3 } from "lucide-react";
|
|
7
|
+
//#region src/toolbar/ColumnMenu.tsx
|
|
8
|
+
function labelOf(column) {
|
|
9
|
+
return typeof column.label === "string" ? column.label : column.id;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A button that opens the columns of a list: a checkbox to show or hide each one, buttons to
|
|
13
|
+
* move the shown ones, and a reset to the columns of the definition (decision 0042).
|
|
14
|
+
*/
|
|
15
|
+
function ColumnMenu(t0) {
|
|
16
|
+
const $ = c(42);
|
|
17
|
+
const { columns, shown, onChange, onReset } = t0;
|
|
18
|
+
const intl = usePanneauIntl();
|
|
19
|
+
let T0;
|
|
20
|
+
let T1;
|
|
21
|
+
let t1;
|
|
22
|
+
let t2;
|
|
23
|
+
let t3;
|
|
24
|
+
let t4;
|
|
25
|
+
let t5;
|
|
26
|
+
let t6;
|
|
27
|
+
if ($[0] !== columns || $[1] !== intl || $[2] !== onChange || $[3] !== shown) {
|
|
28
|
+
const ids = shown.map(_temp);
|
|
29
|
+
const ordered = [...shown, ...columns.filter((column_0) => !shown.includes(column_0))];
|
|
30
|
+
const move = (index, offset) => {
|
|
31
|
+
const next = [...ids];
|
|
32
|
+
const [id] = next.splice(index, 1);
|
|
33
|
+
if (id !== void 0) {
|
|
34
|
+
next.splice(index + offset, 0, id);
|
|
35
|
+
onChange(next);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
T1 = PopoverTrigger;
|
|
39
|
+
let t7;
|
|
40
|
+
if ($[12] !== intl) {
|
|
41
|
+
t7 = intl.formatMessage(messages.columns);
|
|
42
|
+
$[12] = intl;
|
|
43
|
+
$[13] = t7;
|
|
44
|
+
} else t7 = $[13];
|
|
45
|
+
if ($[14] !== t7) {
|
|
46
|
+
t6 = /* @__PURE__ */ jsx(Button, {
|
|
47
|
+
icon: Columns3,
|
|
48
|
+
children: t7
|
|
49
|
+
});
|
|
50
|
+
$[14] = t7;
|
|
51
|
+
$[15] = t6;
|
|
52
|
+
} else t6 = $[15];
|
|
53
|
+
T0 = Popover;
|
|
54
|
+
t4 = "bottom end";
|
|
55
|
+
if ($[16] !== intl) {
|
|
56
|
+
t5 = intl.formatMessage(messages.columns);
|
|
57
|
+
$[16] = intl;
|
|
58
|
+
$[17] = t5;
|
|
59
|
+
} else t5 = $[17];
|
|
60
|
+
t3 = Toolbar_module_default.columns;
|
|
61
|
+
t1 = Toolbar_module_default.columnList;
|
|
62
|
+
t2 = ordered.map((column_1) => {
|
|
63
|
+
const index_0 = ids.indexOf(column_1.id);
|
|
64
|
+
const isShown = index_0 !== -1;
|
|
65
|
+
const label = labelOf(column_1);
|
|
66
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
67
|
+
className: Toolbar_module_default.column,
|
|
68
|
+
children: [/* @__PURE__ */ jsx(Checkbox, {
|
|
69
|
+
isSelected: isShown,
|
|
70
|
+
isDisabled: column_1.hideable === false || isShown && ids.length === 1,
|
|
71
|
+
onChange: (selected) => onChange(selected ? [...ids, column_1.id] : ids.filter((id_0) => id_0 !== column_1.id)),
|
|
72
|
+
className: Toolbar_module_default.columnLabel,
|
|
73
|
+
children: label
|
|
74
|
+
}), isShown ? /* @__PURE__ */ jsxs("span", {
|
|
75
|
+
className: Toolbar_module_default.columnMoves,
|
|
76
|
+
children: [/* @__PURE__ */ jsx(IconButton, {
|
|
77
|
+
icon: ArrowUp,
|
|
78
|
+
size: "sm",
|
|
79
|
+
label: intl.formatMessage(messages.moveColumnUp, { column: label }),
|
|
80
|
+
showTooltip: false,
|
|
81
|
+
isDisabled: index_0 === 0,
|
|
82
|
+
onPress: () => move(index_0, -1)
|
|
83
|
+
}), /* @__PURE__ */ jsx(IconButton, {
|
|
84
|
+
icon: ArrowDown,
|
|
85
|
+
size: "sm",
|
|
86
|
+
label: intl.formatMessage(messages.moveColumnDown, { column: label }),
|
|
87
|
+
showTooltip: false,
|
|
88
|
+
isDisabled: index_0 === ids.length - 1,
|
|
89
|
+
onPress: () => move(index_0, 1)
|
|
90
|
+
})]
|
|
91
|
+
}) : null]
|
|
92
|
+
}, column_1.id);
|
|
93
|
+
});
|
|
94
|
+
$[0] = columns;
|
|
95
|
+
$[1] = intl;
|
|
96
|
+
$[2] = onChange;
|
|
97
|
+
$[3] = shown;
|
|
98
|
+
$[4] = T0;
|
|
99
|
+
$[5] = T1;
|
|
100
|
+
$[6] = t1;
|
|
101
|
+
$[7] = t2;
|
|
102
|
+
$[8] = t3;
|
|
103
|
+
$[9] = t4;
|
|
104
|
+
$[10] = t5;
|
|
105
|
+
$[11] = t6;
|
|
106
|
+
} else {
|
|
107
|
+
T0 = $[4];
|
|
108
|
+
T1 = $[5];
|
|
109
|
+
t1 = $[6];
|
|
110
|
+
t2 = $[7];
|
|
111
|
+
t3 = $[8];
|
|
112
|
+
t4 = $[9];
|
|
113
|
+
t5 = $[10];
|
|
114
|
+
t6 = $[11];
|
|
115
|
+
}
|
|
116
|
+
let t7;
|
|
117
|
+
if ($[18] !== t1 || $[19] !== t2) {
|
|
118
|
+
t7 = /* @__PURE__ */ jsx("ul", {
|
|
119
|
+
className: t1,
|
|
120
|
+
children: t2
|
|
121
|
+
});
|
|
122
|
+
$[18] = t1;
|
|
123
|
+
$[19] = t2;
|
|
124
|
+
$[20] = t7;
|
|
125
|
+
} else t7 = $[20];
|
|
126
|
+
const t8 = onReset === null;
|
|
127
|
+
let t9;
|
|
128
|
+
if ($[21] !== onReset) {
|
|
129
|
+
t9 = () => onReset?.();
|
|
130
|
+
$[21] = onReset;
|
|
131
|
+
$[22] = t9;
|
|
132
|
+
} else t9 = $[22];
|
|
133
|
+
let t10;
|
|
134
|
+
if ($[23] !== intl) {
|
|
135
|
+
t10 = intl.formatMessage(messages.resetColumns);
|
|
136
|
+
$[23] = intl;
|
|
137
|
+
$[24] = t10;
|
|
138
|
+
} else t10 = $[24];
|
|
139
|
+
let t11;
|
|
140
|
+
if ($[25] !== t10 || $[26] !== t8 || $[27] !== t9) {
|
|
141
|
+
t11 = /* @__PURE__ */ jsx(Button, {
|
|
142
|
+
size: "sm",
|
|
143
|
+
appearance: "ghost",
|
|
144
|
+
isDisabled: t8,
|
|
145
|
+
onPress: t9,
|
|
146
|
+
children: t10
|
|
147
|
+
});
|
|
148
|
+
$[25] = t10;
|
|
149
|
+
$[26] = t8;
|
|
150
|
+
$[27] = t9;
|
|
151
|
+
$[28] = t11;
|
|
152
|
+
} else t11 = $[28];
|
|
153
|
+
let t12;
|
|
154
|
+
if ($[29] !== t11 || $[30] !== t3 || $[31] !== t7) {
|
|
155
|
+
t12 = /* @__PURE__ */ jsxs("div", {
|
|
156
|
+
className: t3,
|
|
157
|
+
children: [t7, t11]
|
|
158
|
+
});
|
|
159
|
+
$[29] = t11;
|
|
160
|
+
$[30] = t3;
|
|
161
|
+
$[31] = t7;
|
|
162
|
+
$[32] = t12;
|
|
163
|
+
} else t12 = $[32];
|
|
164
|
+
let t13;
|
|
165
|
+
if ($[33] !== T0 || $[34] !== t12 || $[35] !== t4 || $[36] !== t5) {
|
|
166
|
+
t13 = /* @__PURE__ */ jsx(T0, {
|
|
167
|
+
placement: t4,
|
|
168
|
+
"aria-label": t5,
|
|
169
|
+
children: t12
|
|
170
|
+
});
|
|
171
|
+
$[33] = T0;
|
|
172
|
+
$[34] = t12;
|
|
173
|
+
$[35] = t4;
|
|
174
|
+
$[36] = t5;
|
|
175
|
+
$[37] = t13;
|
|
176
|
+
} else t13 = $[37];
|
|
177
|
+
let t14;
|
|
178
|
+
if ($[38] !== T1 || $[39] !== t13 || $[40] !== t6) {
|
|
179
|
+
t14 = /* @__PURE__ */ jsxs(T1, { children: [t6, t13] });
|
|
180
|
+
$[38] = T1;
|
|
181
|
+
$[39] = t13;
|
|
182
|
+
$[40] = t6;
|
|
183
|
+
$[41] = t14;
|
|
184
|
+
} else t14 = $[41];
|
|
185
|
+
return t14;
|
|
186
|
+
}
|
|
187
|
+
function _temp(column) {
|
|
188
|
+
return column.id;
|
|
189
|
+
}
|
|
190
|
+
//#endregion
|
|
191
|
+
export { ColumnMenu };
|
|
192
|
+
|
|
193
|
+
//# sourceMappingURL=ColumnMenu.js.map
|