@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.
Files changed (43) hide show
  1. package/README.md +2 -2
  2. package/dist/ListView.css +16 -16
  3. package/dist/ListView.d.ts +8 -2
  4. package/dist/ListView.d.ts.map +1 -1
  5. package/dist/ListView.js +55 -27
  6. package/dist/ListView.js.map +1 -1
  7. package/dist/ListView.module.js +10 -10
  8. package/dist/actions/Actions.css +9 -9
  9. package/dist/actions/Actions.module.js +6 -6
  10. package/dist/actions/ConfirmDialog.d.ts +15 -3
  11. package/dist/actions/ConfirmDialog.d.ts.map +1 -1
  12. package/dist/actions/ConfirmDialog.js +39 -122
  13. package/dist/actions/ConfirmDialog.js.map +1 -1
  14. package/dist/actions/RowActions.js +1 -1
  15. package/dist/displays/Displays.css +13 -13
  16. package/dist/displays/Displays.module.js +12 -12
  17. package/dist/displays/Displays.module.js.map +1 -1
  18. package/dist/displays/displays.js +1 -1
  19. package/dist/filters/Filters.css +13 -13
  20. package/dist/filters/Filters.js +1 -1
  21. package/dist/filters/Filters.module.js +8 -8
  22. package/dist/filters/controls.js +1 -1
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/layouts/CardsLayout.css +17 -11
  26. package/dist/layouts/CardsLayout.js +1 -1
  27. package/dist/layouts/CardsLayout.module.js +8 -8
  28. package/dist/layouts/CardsLayout.module.js.map +1 -1
  29. package/dist/layouts/ItemTitle.js +1 -1
  30. package/dist/layouts/TableLayout.css +35 -35
  31. package/dist/layouts/TableLayout.js +1 -1
  32. package/dist/layouts/TableLayout.module.js +12 -12
  33. package/dist/layouts/TableLayout.module.js.map +1 -1
  34. package/dist/layouts/link.css +3 -3
  35. package/dist/layouts/link.module.js +1 -1
  36. package/dist/toolbar/LayoutSwitch.js +1 -1
  37. package/dist/toolbar/SearchField.js +1 -1
  38. package/dist/toolbar/SortSelect.js +1 -1
  39. package/dist/toolbar/Toolbar.css +12 -12
  40. package/dist/toolbar/Toolbar.module.js +7 -7
  41. package/dist/types.d.ts +10 -0
  42. package/dist/types.d.ts.map +1 -1
  43. 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 { c } from "react/compiler-runtime";
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(t0) {
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, skipped } = event;
30
- let T0;
31
- let t1;
32
- let t2;
33
- let t3;
34
- let t4;
35
- let t5;
36
- let t6;
37
- let t7;
38
- let t8;
39
- let t9;
40
- if ($[0] !== action.confirm || $[1] !== action.destructive || $[2] !== action.label || $[3] !== count || $[4] !== event || $[5] !== intl || $[6] !== onCancel || $[7] !== onConfirm) {
41
- const confirm = typeof action.confirm === "object" ? action.confirm : {};
42
- const values = {
43
- count,
44
- action: action.label
45
- };
46
- T0 = Dialog;
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
- onPress: t10,
51
+ isDisabled: loading,
52
+ onPress: () => onConfirm(event),
74
53
  children: confirm.confirmLabel ?? action.label
75
- })] });
76
- t1 = Actions_module_default.message;
77
- t2 = confirm.message !== void 0 ? formatDefinitionMessage(intl, confirm.message, values) : intl.formatMessage(messages.confirmMessage, values);
78
- $[0] = action.confirm;
79
- $[1] = action.destructive;
80
- $[2] = action.label;
81
- $[3] = count;
82
- $[4] = event;
83
- $[5] = intl;
84
- $[6] = onCancel;
85
- $[7] = onConfirm;
86
- $[8] = T0;
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.length })
123
- }) : null;
124
- $[26] = intl;
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":["onCancel","_c","_Fragment","styles"],"sources":["../../src/actions/ConfirmDialog.tsx"],"sourcesContent":["import type { IntlShape } from 'react-intl';\n\nimport { Button, Dialog, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { ListActionEvent } 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\nexport interface ConfirmDialogProps {\n /** The action to confirm, or `null` when the dialog is closed. */\n event: ListActionEvent | 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.\n */\nexport function ConfirmDialog({ event, onConfirm, onCancel }: ConfirmDialogProps) {\n const intl = usePanneauIntl();\n if (event === null) {\n return null;\n }\n const { action, count, skipped } = event;\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 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 {skipped.length > 0 ? (\n <p className={styles.skipped}>\n {intl.formatMessage(messages.confirmSkipped, { count: skipped.length })}\n </p>\n ) : null}\n </Dialog>\n );\n}\n"],"mappings":"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"}
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-xEtZBq {
1
+ .panneau-displays-empty {
2
2
  color: var(--panneau-color-text-muted);
3
3
  }
4
4
 
5
- .panneau-text-vty-EA {
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-2n5UJa {
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-vvV7kf {
20
+ .panneau-displays-boolean {
21
21
  display: inline-flex;
22
22
  align-items: center;
23
23
  }
24
24
 
25
- .panneau-true-Iu6Hsd {
25
+ .panneau-displays-true {
26
26
  color: var(--panneau-color-success);
27
27
  }
28
28
 
29
- .panneau-false-zp5WgH {
29
+ .panneau-displays-false {
30
30
  color: var(--panneau-color-text-muted);
31
31
  }
32
32
 
33
- .panneau-number-yfICs7 {
34
- font-variant-numeric: tabular-nums;
33
+ .panneau-displays-number {
34
+ font-variant-numeric: var(--panneau-font-numeric);
35
35
  }
36
36
 
37
- .panneau-link-nvMTOa {
37
+ .panneau-displays-link {
38
38
  color: var(--panneau-color-link);
39
39
  overflow-wrap: anywhere;
40
40
  }
41
41
 
42
- .panneau-color-kkWQ1L {
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-50Qwvv {
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-EOUwYg {
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-WgBzFY {
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-xEtZBq";
4
- var text = "panneau-text-vty-EA";
5
- var badges = "panneau-badges-2n5UJa";
6
- var boolean = "panneau-boolean-vvV7kf";
7
- var number = "panneau-number-yfICs7";
8
- var link = "panneau-link-nvMTOa";
9
- var color = "panneau-color-kkWQ1L";
10
- var swatch = "panneau-swatch-50Qwvv";
11
- var media = "panneau-media-EOUwYg";
12
- var thumbnail = "panneau-thumbnail-WgBzFY";
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-Iu6Hsd",
19
- "false": "panneau-false-zp5WgH",
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: tabular-nums;\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
+ {"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. */
@@ -1,35 +1,35 @@
1
- .panneau-filters-9H41r8 {
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-vD-jl2 {
8
+ .panneau-filters-control {
9
9
  width: 12rem;
10
10
  max-width: 100%;
11
11
  }
12
12
 
13
- .panneau-toggle-aBWzSX {
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-lY9OdJ {
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-lY9OdJ > :not(legend) {
27
+ .panneau-filters-range > :not(legend) {
28
28
  width: 11rem;
29
29
  max-width: 100%;
30
30
  }
31
31
 
32
- .panneau-chips-zPj5hD {
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-RQRPo6 {
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-chipText-Uofas9 {
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-chipLabel-QsALcI {
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-9H41r8,
66
- .panneau-control-vD-jl2,
67
- .panneau-range-lY9OdJ,
68
- .panneau-range-lY9OdJ > :not(legend) {
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
  }
@@ -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-9H41r8";
4
- var control = "panneau-control-vD-jl2";
5
- var toggle = "panneau-toggle-aBWzSX";
6
- var range = "panneau-range-lY9OdJ";
7
- var chips = "panneau-chips-zPj5hD";
8
- var chip = "panneau-chip-RQRPo6";
9
- var chipText = "panneau-chipText-Uofas9";
10
- var chipLabel = "panneau-chipLabel-QsALcI";
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,
@@ -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
@@ -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,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,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,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
+ {"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-Z7Eoyl {
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-3yuJKc {
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-3yuJKc[data-selected] {
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-8nkYnu {
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-D4GR87 {
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-JmHWF4 {
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-value--4Hmov {
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--4Hmov dt {
59
+ .panneau-cards-layout-value dt {
54
60
  color: var(--panneau-color-text-muted);
55
61
  }
56
62
 
57
- .panneau-value--4Hmov dd {
63
+ .panneau-cards-layout-value dd {
58
64
  margin: 0;
59
65
  min-width: 0;
60
66
  }
61
67
 
62
- .panneau-actions-gw5-oU {
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-pageSelection-r1GtpS {
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-Z7Eoyl";
4
- var card = "panneau-card-3yuJKc";
5
- var header = "panneau-header-8nkYnu";
6
- var title = "panneau-title-D4GR87";
7
- var values = "panneau-values-JmHWF4";
8
- var value = "panneau-value--4Hmov";
9
- var actions = "panneau-actions-gw5-oU";
10
- var pageSelection = "panneau-pageSelection-r1GtpS";
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,