@panneau/lists 5.0.0-alpha.1 → 5.0.0-alpha.3
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 +2 -2
- package/dist/ListView.css +16 -16
- package/dist/ListView.d.ts +8 -2
- package/dist/ListView.d.ts.map +1 -1
- package/dist/ListView.js +55 -27
- package/dist/ListView.js.map +1 -1
- package/dist/ListView.module.js +10 -10
- package/dist/actions/Actions.css +9 -9
- package/dist/actions/Actions.module.js +6 -6
- package/dist/actions/ConfirmDialog.d.ts +15 -3
- package/dist/actions/ConfirmDialog.d.ts.map +1 -1
- package/dist/actions/ConfirmDialog.js +39 -122
- package/dist/actions/ConfirmDialog.js.map +1 -1
- package/dist/actions/RowActions.js +1 -1
- package/dist/displays/Displays.css +13 -13
- package/dist/displays/Displays.module.js +12 -12
- package/dist/displays/Displays.module.js.map +1 -1
- package/dist/displays/displays.js +1 -1
- package/dist/filters/Filters.css +13 -13
- package/dist/filters/Filters.js +1 -1
- package/dist/filters/Filters.module.js +8 -8
- package/dist/filters/controls.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/layouts/CardsLayout.css +17 -11
- package/dist/layouts/CardsLayout.js +1 -1
- package/dist/layouts/CardsLayout.module.js +8 -8
- package/dist/layouts/CardsLayout.module.js.map +1 -1
- package/dist/layouts/ItemTitle.js +1 -1
- package/dist/layouts/TableLayout.css +35 -35
- package/dist/layouts/TableLayout.js +1 -1
- package/dist/layouts/TableLayout.module.js +12 -12
- package/dist/layouts/TableLayout.module.js.map +1 -1
- package/dist/layouts/link.css +3 -3
- package/dist/layouts/link.module.js +1 -1
- package/dist/toolbar/LayoutSwitch.js +1 -1
- package/dist/toolbar/SearchField.js +1 -1
- package/dist/toolbar/SortSelect.js +1 -1
- package/dist/toolbar/Toolbar.css +12 -12
- package/dist/toolbar/Toolbar.module.js +7 -7
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { messages } from "../messages.js";
|
|
2
2
|
import Actions_module_default from "./Actions.module.js";
|
|
3
|
-
import {
|
|
4
|
-
import { Button, Dialog, usePanneauIntl } from "@panneau/ui";
|
|
3
|
+
import { Button, Dialog, Spinner, usePanneauIntl } from "@panneau/ui";
|
|
5
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
5
|
//#region src/actions/ConfirmDialog.tsx
|
|
7
6
|
/** Formats an ICU message of the definition (`{count, plural, …}`) in the locale. */
|
|
@@ -19,137 +18,55 @@ function needsConfirmation(event) {
|
|
|
19
18
|
}
|
|
20
19
|
/**
|
|
21
20
|
* Asks before running an action (decision 0017): the action's `confirm` title and message (an ICU
|
|
22
|
-
* message with `{count}`), or default ones, and how many selected items will be skipped
|
|
21
|
+
* message with `{count}`), or default ones, and how many selected items will be skipped: those of
|
|
22
|
+
* the current page that don't allow it, or the backend's count for every item matching a query.
|
|
23
23
|
*/
|
|
24
|
-
function ConfirmDialog(
|
|
25
|
-
const $ = c(40);
|
|
26
|
-
const { event, onConfirm, onCancel } = t0;
|
|
24
|
+
function ConfirmDialog({ event, preview = null, onConfirm, onCancel }) {
|
|
27
25
|
const intl = usePanneauIntl();
|
|
28
26
|
if (event === null) return null;
|
|
29
|
-
const { action, count
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
t3 = true;
|
|
48
|
-
if ($[18] !== onCancel) {
|
|
49
|
-
t4 = (open) => {
|
|
50
|
-
if (!open) onCancel();
|
|
51
|
-
};
|
|
52
|
-
$[18] = onCancel;
|
|
53
|
-
$[19] = t4;
|
|
54
|
-
} else t4 = $[19];
|
|
55
|
-
t5 = "alertdialog";
|
|
56
|
-
t6 = false;
|
|
57
|
-
t7 = "sm";
|
|
58
|
-
t8 = confirm.title !== void 0 ? formatDefinitionMessage(intl, confirm.title, values) : intl.formatMessage(messages.confirmTitle, { action: action.label });
|
|
59
|
-
let t10;
|
|
60
|
-
if ($[20] !== event || $[21] !== onConfirm) {
|
|
61
|
-
t10 = () => onConfirm(event);
|
|
62
|
-
$[20] = event;
|
|
63
|
-
$[21] = onConfirm;
|
|
64
|
-
$[22] = t10;
|
|
65
|
-
} else t10 = $[22];
|
|
66
|
-
t9 = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Button, {
|
|
27
|
+
const { action, count } = event;
|
|
28
|
+
const loading = preview?.status === "loading";
|
|
29
|
+
const skipped = preview?.status === "done" ? preview.skipped : event.skipped.length;
|
|
30
|
+
const confirm = typeof action.confirm === "object" ? action.confirm : {};
|
|
31
|
+
const values = {
|
|
32
|
+
count,
|
|
33
|
+
action: action.label
|
|
34
|
+
};
|
|
35
|
+
return /* @__PURE__ */ jsxs(Dialog, {
|
|
36
|
+
isOpen: true,
|
|
37
|
+
onOpenChange: (open) => {
|
|
38
|
+
if (!open) onCancel();
|
|
39
|
+
},
|
|
40
|
+
role: "alertdialog",
|
|
41
|
+
isDismissable: false,
|
|
42
|
+
size: "sm",
|
|
43
|
+
title: confirm.title !== void 0 ? formatDefinitionMessage(intl, confirm.title, values) : intl.formatMessage(messages.confirmTitle, { action: action.label }),
|
|
44
|
+
footer: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Button, {
|
|
67
45
|
variant: "ghost",
|
|
68
46
|
onPress: onCancel,
|
|
69
47
|
children: confirm.cancelLabel ?? intl.formatMessage(messages.cancel)
|
|
70
48
|
}), /* @__PURE__ */ jsx(Button, {
|
|
71
49
|
variant: action.destructive === true ? "danger" : "primary",
|
|
72
50
|
autoFocus: true,
|
|
73
|
-
|
|
51
|
+
isDisabled: loading,
|
|
52
|
+
onPress: () => onConfirm(event),
|
|
74
53
|
children: confirm.confirmLabel ?? action.label
|
|
75
|
-
})] })
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
$[9] = t1;
|
|
88
|
-
$[10] = t2;
|
|
89
|
-
$[11] = t3;
|
|
90
|
-
$[12] = t4;
|
|
91
|
-
$[13] = t5;
|
|
92
|
-
$[14] = t6;
|
|
93
|
-
$[15] = t7;
|
|
94
|
-
$[16] = t8;
|
|
95
|
-
$[17] = t9;
|
|
96
|
-
} else {
|
|
97
|
-
T0 = $[8];
|
|
98
|
-
t1 = $[9];
|
|
99
|
-
t2 = $[10];
|
|
100
|
-
t3 = $[11];
|
|
101
|
-
t4 = $[12];
|
|
102
|
-
t5 = $[13];
|
|
103
|
-
t6 = $[14];
|
|
104
|
-
t7 = $[15];
|
|
105
|
-
t8 = $[16];
|
|
106
|
-
t9 = $[17];
|
|
107
|
-
}
|
|
108
|
-
let t10;
|
|
109
|
-
if ($[23] !== t1 || $[24] !== t2) {
|
|
110
|
-
t10 = /* @__PURE__ */ jsx("p", {
|
|
111
|
-
className: t1,
|
|
112
|
-
children: t2
|
|
113
|
-
});
|
|
114
|
-
$[23] = t1;
|
|
115
|
-
$[24] = t2;
|
|
116
|
-
$[25] = t10;
|
|
117
|
-
} else t10 = $[25];
|
|
118
|
-
let t11;
|
|
119
|
-
if ($[26] !== intl || $[27] !== skipped.length) {
|
|
120
|
-
t11 = skipped.length > 0 ? /* @__PURE__ */ jsx("p", {
|
|
54
|
+
})] }),
|
|
55
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
56
|
+
className: Actions_module_default.message,
|
|
57
|
+
children: confirm.message !== void 0 ? formatDefinitionMessage(intl, confirm.message, values) : intl.formatMessage(messages.confirmMessage, values)
|
|
58
|
+
}), loading ? /* @__PURE__ */ jsx("div", {
|
|
59
|
+
className: Actions_module_default.skipped,
|
|
60
|
+
children: /* @__PURE__ */ jsx(Spinner, {
|
|
61
|
+
size: "sm",
|
|
62
|
+
label: intl.formatMessage(messages.confirmChecking),
|
|
63
|
+
showLabel: true
|
|
64
|
+
})
|
|
65
|
+
}) : skipped > 0 ? /* @__PURE__ */ jsx("p", {
|
|
121
66
|
className: Actions_module_default.skipped,
|
|
122
|
-
children: intl.formatMessage(messages.confirmSkipped, { count: skipped
|
|
123
|
-
}) : null
|
|
124
|
-
|
|
125
|
-
$[27] = skipped.length;
|
|
126
|
-
$[28] = t11;
|
|
127
|
-
} else t11 = $[28];
|
|
128
|
-
let t12;
|
|
129
|
-
if ($[29] !== T0 || $[30] !== t10 || $[31] !== t11 || $[32] !== t3 || $[33] !== t4 || $[34] !== t5 || $[35] !== t6 || $[36] !== t7 || $[37] !== t8 || $[38] !== t9) {
|
|
130
|
-
t12 = /* @__PURE__ */ jsxs(T0, {
|
|
131
|
-
isOpen: t3,
|
|
132
|
-
onOpenChange: t4,
|
|
133
|
-
role: t5,
|
|
134
|
-
isDismissable: t6,
|
|
135
|
-
size: t7,
|
|
136
|
-
title: t8,
|
|
137
|
-
footer: t9,
|
|
138
|
-
children: [t10, t11]
|
|
139
|
-
});
|
|
140
|
-
$[29] = T0;
|
|
141
|
-
$[30] = t10;
|
|
142
|
-
$[31] = t11;
|
|
143
|
-
$[32] = t3;
|
|
144
|
-
$[33] = t4;
|
|
145
|
-
$[34] = t5;
|
|
146
|
-
$[35] = t6;
|
|
147
|
-
$[36] = t7;
|
|
148
|
-
$[37] = t8;
|
|
149
|
-
$[38] = t9;
|
|
150
|
-
$[39] = t12;
|
|
151
|
-
} else t12 = $[39];
|
|
152
|
-
return t12;
|
|
67
|
+
children: intl.formatMessage(messages.confirmSkipped, { count: skipped })
|
|
68
|
+
}) : null]
|
|
69
|
+
});
|
|
153
70
|
}
|
|
154
71
|
//#endregion
|
|
155
72
|
export { ConfirmDialog, needsConfirmation };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.js","names":["
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","names":["_Fragment","styles"],"sources":["../../src/actions/ConfirmDialog.tsx"],"sourcesContent":["import type { IntlShape } from 'react-intl';\n\nimport { Button, Dialog, Spinner, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { ListActionEvent, ListActionPreview } from '../types';\nimport styles from './Actions.module.css';\n\n/** Formats an ICU message of the definition (`{count, plural, …}`) in the locale. */\nfunction formatDefinitionMessage(\n intl: IntlShape,\n message: string,\n values: Record<string, unknown>,\n) {\n try {\n return String(\n intl.formatters\n .getMessageFormat(message, intl.locale)\n .format(values as Record<string, string | number>),\n );\n } catch {\n return message;\n }\n}\n\n/** Whether an action needs a confirmation: it asks for one, or some selected items are skipped. */\nexport function needsConfirmation(event: ListActionEvent): boolean {\n const { confirm } = event.action;\n return (confirm !== undefined && confirm !== false) || event.skipped.length > 0;\n}\n\n/** The dry run of a query selection: in progress, or done with the backend's count. */\nexport type ConfirmPreview = { status: 'loading' } | ({ status: 'done' } & ListActionPreview);\n\nexport interface ConfirmDialogProps {\n /** The action to confirm, or `null` when the dialog is closed. */\n event: ListActionEvent | null;\n /**\n * What the backend told about a query selection. Its count of skipped items replaces the\n * count of the current page; while it loads, the dialog says so and can't be confirmed.\n */\n preview?: ConfirmPreview | null;\n onConfirm: (event: ListActionEvent) => void;\n onCancel: () => void;\n}\n\n/**\n * Asks before running an action (decision 0017): the action's `confirm` title and message (an ICU\n * message with `{count}`), or default ones, and how many selected items will be skipped: those of\n * the current page that don't allow it, or the backend's count for every item matching a query.\n */\nexport function ConfirmDialog({ event, preview = null, onConfirm, onCancel }: ConfirmDialogProps) {\n const intl = usePanneauIntl();\n if (event === null) {\n return null;\n }\n const { action, count } = event;\n const loading = preview?.status === 'loading';\n const skipped = preview?.status === 'done' ? preview.skipped : event.skipped.length;\n const confirm = typeof action.confirm === 'object' ? action.confirm : {};\n const values = { count, action: action.label };\n return (\n <Dialog\n isOpen\n onOpenChange={(open) => {\n if (!open) {\n onCancel();\n }\n }}\n role=\"alertdialog\"\n isDismissable={false}\n size=\"sm\"\n title={\n confirm.title !== undefined\n ? formatDefinitionMessage(intl, confirm.title, values)\n : intl.formatMessage(messages.confirmTitle, { action: action.label })\n }\n footer={\n <>\n <Button variant=\"ghost\" onPress={onCancel}>\n {confirm.cancelLabel ?? intl.formatMessage(messages.cancel)}\n </Button>\n <Button\n variant={action.destructive === true ? 'danger' : 'primary'}\n autoFocus\n isDisabled={loading}\n onPress={() => onConfirm(event)}\n >\n {confirm.confirmLabel ?? action.label}\n </Button>\n </>\n }\n >\n <p className={styles.message}>\n {confirm.message !== undefined\n ? formatDefinitionMessage(intl, confirm.message, values)\n : intl.formatMessage(messages.confirmMessage, values)}\n </p>\n {loading ? (\n <div className={styles.skipped}>\n <Spinner\n size=\"sm\"\n label={intl.formatMessage(messages.confirmChecking)}\n showLabel\n />\n </div>\n ) : skipped > 0 ? (\n <p className={styles.skipped}>\n {intl.formatMessage(messages.confirmSkipped, { count: skipped })}\n </p>\n ) : null}\n </Dialog>\n );\n}\n"],"mappings":";;;;;;AASA,SAAS,wBACL,MACA,SACA,QACF;CACE,IAAI;EACA,OAAO,OACH,KAAK,WACA,iBAAiB,SAAS,KAAK,MAAM,CAAC,CACtC,OAAO,MAAyC,CACzD;CACJ,QAAQ;EACJ,OAAO;CACX;AACJ;;AAGA,SAAgB,kBAAkB,OAAiC;CAC/D,MAAM,EAAE,YAAY,MAAM;CAC1B,OAAQ,YAAY,KAAA,KAAa,YAAY,SAAU,MAAM,QAAQ,SAAS;AAClF;;;;;;AAsBA,SAAgB,cAAc,EAAE,OAAO,UAAU,MAAM,WAAW,YAAgC;CAC9F,MAAM,OAAO,eAAe;CAC5B,IAAI,UAAU,MACV,OAAO;CAEX,MAAM,EAAE,QAAQ,UAAU;CAC1B,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,UAAU,SAAS,WAAW,SAAS,QAAQ,UAAU,MAAM,QAAQ;CAC7E,MAAM,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU,CAAC;CACvE,MAAM,SAAS;EAAE;EAAO,QAAQ,OAAO;CAAM;CAC7C,OACI,qBAAC,QAAD;EACI,QAAA;EACA,eAAe,SAAS;GACpB,IAAI,CAAC,MACD,SAAS;EAEjB;EACA,MAAK;EACL,eAAe;EACf,MAAK;EACL,OACI,QAAQ,UAAU,KAAA,IACZ,wBAAwB,MAAM,QAAQ,OAAO,MAAM,IACnD,KAAK,cAAc,SAAS,cAAc,EAAE,QAAQ,OAAO,MAAM,CAAC;EAE5E,QACI,qBAAAA,UAAA,EAAA,UAAA,CACI,oBAAC,QAAD;GAAQ,SAAQ;GAAQ,SAAS;GAC5B,UAAA,QAAQ,eAAe,KAAK,cAAc,SAAS,MAAM;EACtD,CAAA,GACR,oBAAC,QAAD;GACI,SAAS,OAAO,gBAAgB,OAAO,WAAW;GAClD,WAAA;GACA,YAAY;GACZ,eAAe,UAAU,KAAK;GAE7B,UAAA,QAAQ,gBAAgB,OAAO;EAC5B,CAAA,CACZ,EAAA,CAAA;EA5BR,UAAA,CA+BI,oBAAC,KAAD;GAAG,WAAWC,uBAAO;GAChB,UAAA,QAAQ,YAAY,KAAA,IACf,wBAAwB,MAAM,QAAQ,SAAS,MAAM,IACrD,KAAK,cAAc,SAAS,gBAAgB,MAAM;EACzD,CAAA,GACF,UACG,oBAAC,OAAD;GAAK,WAAWA,uBAAO;GACnB,UAAA,oBAAC,SAAD;IACI,MAAK;IACL,OAAO,KAAK,cAAc,SAAS,eAAe;IAClD,WAAA;GAAS,CAAA;EAEZ,CAAA,IACL,UAAU,IACV,oBAAC,KAAD;GAAG,WAAWA,uBAAO;GAChB,UAAA,KAAK,cAAc,SAAS,gBAAgB,EAAE,OAAO,QAAQ,CAAC;EAChE,CAAA,IACH,IACA;;AAEhB"}
|
|
@@ -3,10 +3,10 @@ import { messages } from "../messages.js";
|
|
|
3
3
|
import Actions_module_default from "./Actions.module.js";
|
|
4
4
|
import { getActionIcon } from "./icons.js";
|
|
5
5
|
import { ActionButton } from "./ActionButton.js";
|
|
6
|
-
import { c } from "react/compiler-runtime";
|
|
7
6
|
import { IconButton, Menu, MenuItem, MenuTrigger, usePanneauIntl } from "@panneau/ui";
|
|
8
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
8
|
import { Ellipsis } from "lucide-react";
|
|
9
|
+
import { c } from "react/compiler-runtime";
|
|
10
10
|
//#region src/actions/RowActions.tsx
|
|
11
11
|
/** The actions of a row: buttons, then an overflow menu. */
|
|
12
12
|
function RowActions(t0) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
.panneau-empty
|
|
1
|
+
.panneau-displays-empty {
|
|
2
2
|
color: var(--panneau-color-text-muted);
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
.panneau-text
|
|
5
|
+
.panneau-displays-text {
|
|
6
6
|
display: -webkit-box;
|
|
7
7
|
overflow: hidden;
|
|
8
8
|
-webkit-line-clamp: 2;
|
|
@@ -11,35 +11,35 @@
|
|
|
11
11
|
overflow-wrap: anywhere;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
.panneau-badges
|
|
14
|
+
.panneau-displays-badges {
|
|
15
15
|
display: inline-flex;
|
|
16
16
|
flex-wrap: wrap;
|
|
17
17
|
gap: var(--panneau-space-1);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.panneau-boolean
|
|
20
|
+
.panneau-displays-boolean {
|
|
21
21
|
display: inline-flex;
|
|
22
22
|
align-items: center;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
.panneau-true
|
|
25
|
+
.panneau-displays-true {
|
|
26
26
|
color: var(--panneau-color-success);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
.panneau-false
|
|
29
|
+
.panneau-displays-false {
|
|
30
30
|
color: var(--panneau-color-text-muted);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
.panneau-number
|
|
34
|
-
font-variant-numeric:
|
|
33
|
+
.panneau-displays-number {
|
|
34
|
+
font-variant-numeric: var(--panneau-font-numeric);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
.panneau-link
|
|
37
|
+
.panneau-displays-link {
|
|
38
38
|
color: var(--panneau-color-link);
|
|
39
39
|
overflow-wrap: anywhere;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
.panneau-color
|
|
42
|
+
.panneau-displays-color {
|
|
43
43
|
display: inline-flex;
|
|
44
44
|
align-items: center;
|
|
45
45
|
gap: var(--panneau-space-2);
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
font-size: var(--panneau-font-size-sm);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
.panneau-swatch
|
|
50
|
+
.panneau-displays-swatch {
|
|
51
51
|
flex: none;
|
|
52
52
|
width: 1rem;
|
|
53
53
|
height: 1rem;
|
|
@@ -55,13 +55,13 @@
|
|
|
55
55
|
border-radius: var(--panneau-radius-sm);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
.panneau-media
|
|
58
|
+
.panneau-displays-media {
|
|
59
59
|
display: inline-flex;
|
|
60
60
|
align-items: center;
|
|
61
61
|
gap: var(--panneau-space-2);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
.panneau-thumbnail
|
|
64
|
+
.panneau-displays-thumbnail {
|
|
65
65
|
flex: none;
|
|
66
66
|
width: 2.5rem;
|
|
67
67
|
height: 2.5rem;
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import "./Displays.css";
|
|
2
2
|
//#region src/displays/Displays.module.css
|
|
3
|
-
var empty = "panneau-empty
|
|
4
|
-
var text = "panneau-text
|
|
5
|
-
var badges = "panneau-badges
|
|
6
|
-
var boolean = "panneau-boolean
|
|
7
|
-
var number = "panneau-number
|
|
8
|
-
var link = "panneau-link
|
|
9
|
-
var color = "panneau-color
|
|
10
|
-
var swatch = "panneau-swatch
|
|
11
|
-
var media = "panneau-media
|
|
12
|
-
var thumbnail = "panneau-thumbnail
|
|
3
|
+
var empty = "panneau-displays-empty";
|
|
4
|
+
var text = "panneau-displays-text";
|
|
5
|
+
var badges = "panneau-displays-badges";
|
|
6
|
+
var boolean = "panneau-displays-boolean";
|
|
7
|
+
var number = "panneau-displays-number";
|
|
8
|
+
var link = "panneau-displays-link";
|
|
9
|
+
var color = "panneau-displays-color";
|
|
10
|
+
var swatch = "panneau-displays-swatch";
|
|
11
|
+
var media = "panneau-displays-media";
|
|
12
|
+
var thumbnail = "panneau-displays-thumbnail";
|
|
13
13
|
var Displays_module_default = {
|
|
14
14
|
empty,
|
|
15
15
|
text,
|
|
16
16
|
badges,
|
|
17
17
|
boolean,
|
|
18
|
-
"true": "panneau-true
|
|
19
|
-
"false": "panneau-false
|
|
18
|
+
"true": "panneau-displays-true",
|
|
19
|
+
"false": "panneau-displays-false",
|
|
20
20
|
number,
|
|
21
21
|
link,
|
|
22
22
|
color,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Displays.module.js","names":[],"sources":["../../src/displays/Displays.module.css"],"sourcesContent":[".empty {\n color: var(--panneau-color-text-muted);\n}\n\n.text {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n}\n\n.badges {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-1);\n}\n\n.boolean {\n display: inline-flex;\n align-items: center;\n}\n\n.true {\n color: var(--panneau-color-success);\n}\n\n.false {\n color: var(--panneau-color-text-muted);\n}\n\n.number {\n font-variant-numeric:
|
|
1
|
+
{"version":3,"file":"Displays.module.js","names":[],"sources":["../../src/displays/Displays.module.css"],"sourcesContent":[".empty {\n color: var(--panneau-color-text-muted);\n}\n\n.text {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow-wrap: anywhere;\n}\n\n.badges {\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--panneau-space-1);\n}\n\n.boolean {\n display: inline-flex;\n align-items: center;\n}\n\n.true {\n color: var(--panneau-color-success);\n}\n\n.false {\n color: var(--panneau-color-text-muted);\n}\n\n.number {\n font-variant-numeric: var(--panneau-font-numeric);\n}\n\n.link {\n color: var(--panneau-color-link);\n overflow-wrap: anywhere;\n}\n\n.color {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n font-family: var(--panneau-font-family-mono);\n font-size: var(--panneau-font-size-sm);\n}\n\n.swatch {\n flex: none;\n width: 1rem;\n height: 1rem;\n border: var(--panneau-border-width) solid var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-sm);\n}\n\n.media {\n display: inline-flex;\n align-items: center;\n gap: var(--panneau-space-2);\n}\n\n.thumbnail {\n flex: none;\n width: 2.5rem;\n height: 2.5rem;\n object-fit: cover;\n background-color: var(--panneau-color-surface-sunken);\n border-radius: var(--panneau-radius-sm);\n}\n"],"mappings":""}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { messages } from "../messages.js";
|
|
2
2
|
import { getFieldOptions, getOptionLabel, toText } from "../values.js";
|
|
3
3
|
import Displays_module_default from "./Displays.module.js";
|
|
4
|
-
import { c } from "react/compiler-runtime";
|
|
5
4
|
import { Badge, Icon, usePanneauIntl } from "@panneau/ui";
|
|
6
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
6
|
import { Check, Minus } from "lucide-react";
|
|
7
|
+
import { c } from "react/compiler-runtime";
|
|
8
8
|
import { toReferences } from "@panneau/fields";
|
|
9
9
|
//#region src/displays/displays.tsx
|
|
10
10
|
/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */
|
package/dist/filters/Filters.css
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
.panneau-filters
|
|
1
|
+
.panneau-filters {
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-wrap: wrap;
|
|
4
4
|
align-items: flex-end;
|
|
5
5
|
gap: var(--panneau-space-3);
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
.panneau-control
|
|
8
|
+
.panneau-filters-control {
|
|
9
9
|
width: 12rem;
|
|
10
10
|
max-width: 100%;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
.panneau-toggle
|
|
13
|
+
.panneau-filters-toggle {
|
|
14
14
|
align-self: center;
|
|
15
15
|
min-height: var(--panneau-control-height);
|
|
16
16
|
display: flex;
|
|
17
17
|
align-items: center;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.panneau-range
|
|
20
|
+
.panneau-filters-range {
|
|
21
21
|
display: flex;
|
|
22
22
|
flex-wrap: wrap;
|
|
23
23
|
gap: var(--panneau-space-2);
|
|
24
24
|
max-width: 100%;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
.panneau-range
|
|
27
|
+
.panneau-filters-range > :not(legend) {
|
|
28
28
|
width: 11rem;
|
|
29
29
|
max-width: 100%;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
.panneau-chips
|
|
32
|
+
.panneau-filters-chips {
|
|
33
33
|
display: flex;
|
|
34
34
|
flex-wrap: wrap;
|
|
35
35
|
align-items: center;
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
list-style: none;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
.panneau-chip
|
|
42
|
+
.panneau-filters-chip {
|
|
43
43
|
display: inline-flex;
|
|
44
44
|
align-items: center;
|
|
45
45
|
gap: var(--panneau-space-1);
|
|
@@ -51,21 +51,21 @@
|
|
|
51
51
|
border-radius: var(--panneau-radius-full);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
.panneau-
|
|
54
|
+
.panneau-filters-chip-text {
|
|
55
55
|
overflow: hidden;
|
|
56
56
|
text-overflow: ellipsis;
|
|
57
57
|
white-space: nowrap;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
.panneau-
|
|
60
|
+
.panneau-filters-chip-label {
|
|
61
61
|
color: var(--panneau-color-text-muted);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
@container panneau-list (max-width: 40rem) {
|
|
65
|
-
.panneau-filters
|
|
66
|
-
.panneau-control
|
|
67
|
-
.panneau-range
|
|
68
|
-
.panneau-range
|
|
65
|
+
.panneau-filters,
|
|
66
|
+
.panneau-filters-control,
|
|
67
|
+
.panneau-filters-range,
|
|
68
|
+
.panneau-filters-range > :not(legend) {
|
|
69
69
|
width: 100%;
|
|
70
70
|
}
|
|
71
71
|
}
|
package/dist/filters/Filters.js
CHANGED
|
@@ -2,10 +2,10 @@ import { messages } from "../messages.js";
|
|
|
2
2
|
import Filters_module_default from "./Filters.module.js";
|
|
3
3
|
import { builtInFilters } from "./controls.js";
|
|
4
4
|
import { formatFilterValue, getFilterLabel, getFilterOptions } from "./format.js";
|
|
5
|
-
import { c } from "react/compiler-runtime";
|
|
6
5
|
import { Button, IconButton, usePanneauIntl } from "@panneau/ui";
|
|
7
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
7
|
import { X } from "lucide-react";
|
|
8
|
+
import { c } from "react/compiler-runtime";
|
|
9
9
|
import { useState } from "react";
|
|
10
10
|
//#region src/filters/Filters.tsx
|
|
11
11
|
/** Remembers the labels of filter values, for the chips of active filters. */
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import "./Filters.css";
|
|
2
2
|
//#region src/filters/Filters.module.css
|
|
3
|
-
var filters = "panneau-filters
|
|
4
|
-
var control = "panneau-control
|
|
5
|
-
var toggle = "panneau-toggle
|
|
6
|
-
var range = "panneau-range
|
|
7
|
-
var chips = "panneau-chips
|
|
8
|
-
var chip = "panneau-chip
|
|
9
|
-
var chipText = "panneau-
|
|
10
|
-
var chipLabel = "panneau-
|
|
3
|
+
var filters = "panneau-filters";
|
|
4
|
+
var control = "panneau-filters-control";
|
|
5
|
+
var toggle = "panneau-filters-toggle";
|
|
6
|
+
var range = "panneau-filters-range";
|
|
7
|
+
var chips = "panneau-filters-chips";
|
|
8
|
+
var chip = "panneau-filters-chip";
|
|
9
|
+
var chipText = "panneau-filters-chip-text";
|
|
10
|
+
var chipLabel = "panneau-filters-chip-label";
|
|
11
11
|
var Filters_module_default = {
|
|
12
12
|
filters,
|
|
13
13
|
control,
|
package/dist/filters/controls.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { messages } from "../messages.js";
|
|
2
2
|
import { useDraft } from "../useDraft.js";
|
|
3
3
|
import Filters_module_default from "./Filters.module.js";
|
|
4
|
-
import { c } from "react/compiler-runtime";
|
|
5
4
|
import { Fieldset, Select, Switch, TextInput, usePanneauIntl } from "@panneau/ui";
|
|
6
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { c } from "react/compiler-runtime";
|
|
7
7
|
import { useFieldsContext } from "@panneau/fields";
|
|
8
8
|
import { useEffect } from "react";
|
|
9
9
|
import { DateField } from "@panneau/fields/date";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { type ListActions, getActionHref, groupListActions, isAllowedOn } from './actions/actions';
|
|
2
|
-
export { ConfirmDialog, type ConfirmDialogProps } from './actions/ConfirmDialog';
|
|
2
|
+
export { ConfirmDialog, type ConfirmDialogProps, type ConfirmPreview, } from './actions/ConfirmDialog';
|
|
3
3
|
export { type ActionIcons, getActionIcon } from './actions/icons';
|
|
4
4
|
export { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, EmailDisplay, EmptyValue, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays, } from './displays/displays';
|
|
5
5
|
export { DateFilter, DateRangeFilter, RelationFilter, SelectFilter, TextFilter, ToggleFilter, builtInFilters, } from './filters/controls';
|
|
@@ -13,7 +13,7 @@ export { type LocalQueryOptions, type LocalQueryResult, applyListQuery } from '.
|
|
|
13
13
|
export { countSelected, getPageSelection, isItemSelected } from './selection';
|
|
14
14
|
export { Pagination, type PaginationProps } from './toolbar/Pagination';
|
|
15
15
|
export { SearchField, type SearchFieldProps } from './toolbar/SearchField';
|
|
16
|
-
export type { DisplayEntry, DisplayProps, FilterControlProps, FilterEntry, ListActionEvent, ListActionHandler, ListColumn, ListItem, ListLayoutEntry, ListLayoutProps, } from './types';
|
|
16
|
+
export type { DisplayEntry, DisplayProps, FilterControlProps, FilterEntry, ListActionEvent, ListActionHandler, ListActionPreview, ListActionPreviewer, ListColumn, ListItem, ListLayoutEntry, ListLayoutProps, } from './types';
|
|
17
17
|
export { useListState } from './useListState';
|
|
18
18
|
export { getLocalizedValue, toText } from './values';
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACH,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.panneau-cards-
|
|
1
|
+
.panneau-cards-layout-cards {
|
|
2
2
|
display: grid;
|
|
3
3
|
grid-template-columns: repeat(auto-fill, minmax(min(16rem, 100%), 1fr));
|
|
4
4
|
gap: var(--panneau-space-3);
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
list-style: none;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
.panneau-card
|
|
10
|
+
.panneau-cards-layout-card {
|
|
11
11
|
display: flex;
|
|
12
12
|
flex-direction: column;
|
|
13
13
|
gap: var(--panneau-space-2);
|
|
@@ -17,18 +17,18 @@
|
|
|
17
17
|
border-radius: var(--panneau-radius-lg);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.panneau-card
|
|
20
|
+
.panneau-cards-layout-card[data-selected] {
|
|
21
21
|
background-color: var(--panneau-color-accent-subtle);
|
|
22
22
|
border-color: var(--panneau-color-border-control);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
.panneau-header
|
|
25
|
+
.panneau-cards-layout-header {
|
|
26
26
|
display: flex;
|
|
27
27
|
align-items: flex-start;
|
|
28
28
|
gap: var(--panneau-space-2);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
.panneau-title
|
|
31
|
+
.panneau-cards-layout-title {
|
|
32
32
|
flex: 1;
|
|
33
33
|
min-width: 0;
|
|
34
34
|
margin: 0;
|
|
@@ -37,29 +37,35 @@
|
|
|
37
37
|
line-height: var(--panneau-line-height-tight);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
.panneau-values
|
|
40
|
+
.panneau-cards-layout-values {
|
|
41
41
|
display: grid;
|
|
42
42
|
gap: var(--panneau-space-1);
|
|
43
43
|
margin: 0;
|
|
44
44
|
font-size: var(--panneau-font-size-md);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.panneau-
|
|
47
|
+
.panneau-cards-layout-values dt,
|
|
48
|
+
.panneau-cards-layout-values dd {
|
|
49
|
+
margin: 0;
|
|
50
|
+
font-weight: inherit;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.panneau-cards-layout-value {
|
|
48
54
|
display: grid;
|
|
49
55
|
grid-template-columns: minmax(5rem, 40%) 1fr;
|
|
50
56
|
gap: var(--panneau-space-2);
|
|
51
57
|
}
|
|
52
58
|
|
|
53
|
-
.panneau-value
|
|
59
|
+
.panneau-cards-layout-value dt {
|
|
54
60
|
color: var(--panneau-color-text-muted);
|
|
55
61
|
}
|
|
56
62
|
|
|
57
|
-
.panneau-value
|
|
63
|
+
.panneau-cards-layout-value dd {
|
|
58
64
|
margin: 0;
|
|
59
65
|
min-width: 0;
|
|
60
66
|
}
|
|
61
67
|
|
|
62
|
-
.panneau-
|
|
68
|
+
.panneau-cards-layout-actions {
|
|
63
69
|
display: flex;
|
|
64
70
|
flex-wrap: wrap;
|
|
65
71
|
gap: var(--panneau-space-1);
|
|
@@ -67,6 +73,6 @@
|
|
|
67
73
|
padding-top: var(--panneau-space-1);
|
|
68
74
|
}
|
|
69
75
|
|
|
70
|
-
.panneau-
|
|
76
|
+
.panneau-cards-layout-page-selection {
|
|
71
77
|
margin-bottom: var(--panneau-space-2);
|
|
72
78
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { messages } from "../messages.js";
|
|
2
2
|
import CardsLayout_module_default from "./CardsLayout.module.js";
|
|
3
3
|
import { ItemTitle } from "./ItemTitle.js";
|
|
4
|
-
import { c } from "react/compiler-runtime";
|
|
5
4
|
import { Checkbox, usePanneauIntl } from "@panneau/ui";
|
|
6
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { c } from "react/compiler-runtime";
|
|
7
7
|
//#region src/layouts/CardsLayout.tsx
|
|
8
8
|
/** Items as cards: the first column is the title, the others are listed under it. */
|
|
9
9
|
function CardsLayout(t0) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import "./CardsLayout.css";
|
|
2
2
|
//#region src/layouts/CardsLayout.module.css
|
|
3
|
-
var cards = "panneau-cards-
|
|
4
|
-
var card = "panneau-card
|
|
5
|
-
var header = "panneau-header
|
|
6
|
-
var title = "panneau-title
|
|
7
|
-
var values = "panneau-values
|
|
8
|
-
var value = "panneau-value
|
|
9
|
-
var actions = "panneau-
|
|
10
|
-
var pageSelection = "panneau-
|
|
3
|
+
var cards = "panneau-cards-layout-cards";
|
|
4
|
+
var card = "panneau-cards-layout-card";
|
|
5
|
+
var header = "panneau-cards-layout-header";
|
|
6
|
+
var title = "panneau-cards-layout-title";
|
|
7
|
+
var values = "panneau-cards-layout-values";
|
|
8
|
+
var value = "panneau-cards-layout-value";
|
|
9
|
+
var actions = "panneau-cards-layout-actions";
|
|
10
|
+
var pageSelection = "panneau-cards-layout-page-selection";
|
|
11
11
|
var CardsLayout_module_default = {
|
|
12
12
|
cards,
|
|
13
13
|
card,
|