@panneau/lists 4.1.1 → 5.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +112 -0
  2. package/dist/List.d.ts +26 -0
  3. package/dist/List.d.ts.map +1 -0
  4. package/dist/List.js +38 -0
  5. package/dist/List.js.map +1 -0
  6. package/dist/ListView.css +101 -0
  7. package/dist/ListView.d.ts +70 -0
  8. package/dist/ListView.d.ts.map +1 -0
  9. package/dist/ListView.js +322 -0
  10. package/dist/ListView.js.map +1 -0
  11. package/dist/ListView.module.js +28 -0
  12. package/dist/ListView.module.js.map +1 -0
  13. package/dist/actions/ActionButton.d.ts +15 -0
  14. package/dist/actions/ActionButton.d.ts.map +1 -0
  15. package/dist/actions/ActionButton.js +34 -0
  16. package/dist/actions/ActionButton.js.map +1 -0
  17. package/dist/actions/Actions.css +58 -0
  18. package/dist/actions/Actions.module.js +20 -0
  19. package/dist/actions/Actions.module.js.map +1 -0
  20. package/dist/actions/ConfirmDialog.d.ts +15 -0
  21. package/dist/actions/ConfirmDialog.d.ts.map +1 -0
  22. package/dist/actions/ConfirmDialog.js +157 -0
  23. package/dist/actions/ConfirmDialog.js.map +1 -0
  24. package/dist/actions/RowActions.d.ts +17 -0
  25. package/dist/actions/RowActions.d.ts.map +1 -0
  26. package/dist/actions/RowActions.js +95 -0
  27. package/dist/actions/RowActions.js.map +1 -0
  28. package/dist/actions/actions.d.ts +23 -0
  29. package/dist/actions/actions.d.ts.map +1 -0
  30. package/dist/actions/actions.js +56 -0
  31. package/dist/actions/actions.js.map +1 -0
  32. package/dist/actions/icons.d.ts +5 -0
  33. package/dist/actions/icons.d.ts.map +1 -0
  34. package/dist/actions/icons.js +23 -0
  35. package/dist/actions/icons.js.map +1 -0
  36. package/dist/cx.d.ts +3 -0
  37. package/dist/cx.d.ts.map +1 -0
  38. package/dist/cx.js +9 -0
  39. package/dist/cx.js.map +1 -0
  40. package/dist/displays/Displays.css +71 -0
  41. package/dist/displays/Displays.module.js +30 -0
  42. package/dist/displays/Displays.module.js.map +1 -0
  43. package/dist/displays/displays.d.ts +36 -0
  44. package/dist/displays/displays.d.ts.map +1 -0
  45. package/dist/displays/displays.js +570 -0
  46. package/dist/displays/displays.js.map +1 -0
  47. package/dist/filters/Filters.css +71 -0
  48. package/dist/filters/Filters.d.ts +38 -0
  49. package/dist/filters/Filters.d.ts.map +1 -0
  50. package/dist/filters/Filters.js +240 -0
  51. package/dist/filters/Filters.js.map +1 -0
  52. package/dist/filters/Filters.module.js +24 -0
  53. package/dist/filters/Filters.module.js.map +1 -0
  54. package/dist/filters/controls.d.ts +23 -0
  55. package/dist/filters/controls.d.ts.map +1 -0
  56. package/dist/filters/controls.js +405 -0
  57. package/dist/filters/controls.js.map +1 -0
  58. package/dist/filters/format.d.ts +16 -0
  59. package/dist/filters/format.d.ts.map +1 -0
  60. package/dist/filters/format.js +43 -0
  61. package/dist/filters/format.js.map +1 -0
  62. package/dist/index.d.ts +18 -10
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +17 -66
  65. package/dist/layouts/CardsLayout.css +72 -0
  66. package/dist/layouts/CardsLayout.d.ts +4 -0
  67. package/dist/layouts/CardsLayout.d.ts.map +1 -0
  68. package/dist/layouts/CardsLayout.js +111 -0
  69. package/dist/layouts/CardsLayout.js.map +1 -0
  70. package/dist/layouts/CardsLayout.module.js +24 -0
  71. package/dist/layouts/CardsLayout.module.js.map +1 -0
  72. package/dist/layouts/ItemTitle.d.ts +10 -0
  73. package/dist/layouts/ItemTitle.d.ts.map +1 -0
  74. package/dist/layouts/ItemTitle.js +30 -0
  75. package/dist/layouts/ItemTitle.js.map +1 -0
  76. package/dist/layouts/TableLayout.css +177 -0
  77. package/dist/layouts/TableLayout.d.ts +9 -0
  78. package/dist/layouts/TableLayout.d.ts.map +1 -0
  79. package/dist/layouts/TableLayout.js +208 -0
  80. package/dist/layouts/TableLayout.js.map +1 -0
  81. package/dist/layouts/TableLayout.module.js +32 -0
  82. package/dist/layouts/TableLayout.module.js.map +1 -0
  83. package/dist/layouts/builtIn.d.ts +6 -0
  84. package/dist/layouts/builtIn.d.ts.map +1 -0
  85. package/dist/layouts/builtIn.js +12 -0
  86. package/dist/layouts/builtIn.js.map +1 -0
  87. package/dist/layouts/link.css +16 -0
  88. package/dist/layouts/link.module.js +8 -0
  89. package/dist/layouts/link.module.js.map +1 -0
  90. package/dist/messages.d.ts +2 -0
  91. package/dist/messages.d.ts.map +1 -0
  92. package/dist/messages.js +1 -0
  93. package/dist/plugin.d.ts +13 -0
  94. package/dist/plugin.d.ts.map +1 -0
  95. package/dist/plugin.js +19 -0
  96. package/dist/plugin.js.map +1 -0
  97. package/dist/query.d.ts +21 -0
  98. package/dist/query.d.ts.map +1 -0
  99. package/dist/query.js +65 -0
  100. package/dist/query.js.map +1 -0
  101. package/dist/selection.d.ts +9 -0
  102. package/dist/selection.d.ts.map +1 -0
  103. package/dist/selection.js +19 -0
  104. package/dist/selection.js.map +1 -0
  105. package/dist/toolbar/LayoutSwitch.d.ts +8 -0
  106. package/dist/toolbar/LayoutSwitch.d.ts.map +1 -0
  107. package/dist/toolbar/LayoutSwitch.js +108 -0
  108. package/dist/toolbar/LayoutSwitch.js.map +1 -0
  109. package/dist/toolbar/Pagination.d.ts +13 -0
  110. package/dist/toolbar/Pagination.d.ts.map +1 -0
  111. package/dist/toolbar/Pagination.js +62 -0
  112. package/dist/toolbar/Pagination.js.map +1 -0
  113. package/dist/toolbar/SearchField.d.ts +9 -0
  114. package/dist/toolbar/SearchField.d.ts.map +1 -0
  115. package/dist/toolbar/SearchField.js +64 -0
  116. package/dist/toolbar/SearchField.js.map +1 -0
  117. package/dist/toolbar/SortSelect.d.ts +9 -0
  118. package/dist/toolbar/SortSelect.d.ts.map +1 -0
  119. package/dist/toolbar/SortSelect.js +90 -0
  120. package/dist/toolbar/SortSelect.js.map +1 -0
  121. package/dist/toolbar/Toolbar.css +72 -0
  122. package/dist/toolbar/Toolbar.module.js +22 -0
  123. package/dist/toolbar/Toolbar.module.js.map +1 -0
  124. package/dist/types.d.ts +105 -0
  125. package/dist/types.d.ts.map +1 -0
  126. package/dist/useDraft.d.ts +11 -0
  127. package/dist/useDraft.d.ts.map +1 -0
  128. package/dist/useDraft.js +77 -0
  129. package/dist/useDraft.js.map +1 -0
  130. package/dist/useListState.d.ts +4 -0
  131. package/dist/useListState.d.ts.map +1 -0
  132. package/dist/useListState.js +10 -0
  133. package/dist/useListState.js.map +1 -0
  134. package/dist/values.d.ts +21 -0
  135. package/dist/values.d.ts.map +1 -0
  136. package/dist/values.js +52 -0
  137. package/dist/values.js.map +1 -0
  138. package/package.json +27 -57
@@ -0,0 +1,570 @@
1
+ import { messages } from "../messages.js";
2
+ import { getFieldOptions, getOptionLabel, toText } from "../values.js";
3
+ import Displays_module_default from "./Displays.module.js";
4
+ import { c } from "react/compiler-runtime";
5
+ import { Badge, Icon, usePanneauIntl } from "@panneau/ui";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Check, Minus } from "lucide-react";
8
+ import { toReferences } from "@panneau/fields";
9
+ //#region src/displays/displays.tsx
10
+ /** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */
11
+ function EmptyValue() {
12
+ const $ = c(1);
13
+ let t0;
14
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
15
+ t0 = /* @__PURE__ */ jsx("span", {
16
+ className: Displays_module_default.empty,
17
+ "aria-hidden": "true",
18
+ children: "—"
19
+ });
20
+ $[0] = t0;
21
+ } else t0 = $[0];
22
+ return t0;
23
+ }
24
+ function isEmpty(value) {
25
+ return value === null || value === void 0 || value === "" || Array.isArray(value) && value.length === 0;
26
+ }
27
+ /** Text, on two lines at most. The default display. */
28
+ function TextDisplay(t0) {
29
+ const $ = c(5);
30
+ const { value } = t0;
31
+ const intl = usePanneauIntl();
32
+ let t1;
33
+ if ($[0] !== intl.locale || $[1] !== value) {
34
+ t1 = toText(value, intl.locale);
35
+ $[0] = intl.locale;
36
+ $[1] = value;
37
+ $[2] = t1;
38
+ } else t1 = $[2];
39
+ const text = t1;
40
+ let t2;
41
+ if ($[3] !== text) {
42
+ t2 = text === "" ? /* @__PURE__ */ jsx(EmptyValue, {}) : /* @__PURE__ */ jsx("span", {
43
+ className: Displays_module_default.text,
44
+ children: text
45
+ });
46
+ $[3] = text;
47
+ $[4] = t2;
48
+ } else t2 = $[4];
49
+ return t2;
50
+ }
51
+ /** HTML as plain text. */
52
+ function RichTextDisplay(t0) {
53
+ const $ = c(4);
54
+ const { value } = t0;
55
+ let t1;
56
+ if ($[0] !== value) {
57
+ t1 = typeof value === "string" ? value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim() : "";
58
+ $[0] = value;
59
+ $[1] = t1;
60
+ } else t1 = $[1];
61
+ const text = t1;
62
+ let t2;
63
+ if ($[2] !== text) {
64
+ t2 = text === "" ? /* @__PURE__ */ jsx(EmptyValue, {}) : /* @__PURE__ */ jsx("span", {
65
+ className: Displays_module_default.text,
66
+ children: text
67
+ });
68
+ $[2] = text;
69
+ $[3] = t2;
70
+ } else t2 = $[3];
71
+ return t2;
72
+ }
73
+ /** A number, in the format of the locale. */
74
+ function NumberDisplay(t0) {
75
+ const $ = c(6);
76
+ const { value } = t0;
77
+ const intl = usePanneauIntl();
78
+ const number = typeof value === "number" ? value : typeof value === "string" ? Number(value) : NaN;
79
+ if (Number.isNaN(number) || isEmpty(value)) {
80
+ let t1;
81
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
82
+ t1 = /* @__PURE__ */ jsx(EmptyValue, {});
83
+ $[0] = t1;
84
+ } else t1 = $[0];
85
+ return t1;
86
+ }
87
+ let t1;
88
+ if ($[1] !== intl || $[2] !== number) {
89
+ t1 = intl.formatNumber(number);
90
+ $[1] = intl;
91
+ $[2] = number;
92
+ $[3] = t1;
93
+ } else t1 = $[3];
94
+ let t2;
95
+ if ($[4] !== t1) {
96
+ t2 = /* @__PURE__ */ jsx("span", {
97
+ className: Displays_module_default.number,
98
+ children: t1
99
+ });
100
+ $[4] = t1;
101
+ $[5] = t2;
102
+ } else t2 = $[5];
103
+ return t2;
104
+ }
105
+ /** Yes or no, as an icon with its label. */
106
+ function BooleanDisplay(t0) {
107
+ const $ = c(10);
108
+ const { value } = t0;
109
+ const intl = usePanneauIntl();
110
+ if (value === null || value === void 0) {
111
+ let t1;
112
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
113
+ t1 = /* @__PURE__ */ jsx(EmptyValue, {});
114
+ $[0] = t1;
115
+ } else t1 = $[0];
116
+ return t1;
117
+ }
118
+ const checked = value === true || value === 1 || value === "true" || value === "1";
119
+ const t1 = `${Displays_module_default.boolean} ${checked ? Displays_module_default.true : Displays_module_default.false}`;
120
+ const t2 = checked ? Check : Minus;
121
+ let t3;
122
+ if ($[1] !== checked || $[2] !== intl) {
123
+ t3 = intl.formatMessage(checked ? messages.yes : messages.no);
124
+ $[1] = checked;
125
+ $[2] = intl;
126
+ $[3] = t3;
127
+ } else t3 = $[3];
128
+ let t4;
129
+ if ($[4] !== t2 || $[5] !== t3) {
130
+ t4 = /* @__PURE__ */ jsx(Icon, {
131
+ icon: t2,
132
+ label: t3
133
+ });
134
+ $[4] = t2;
135
+ $[5] = t3;
136
+ $[6] = t4;
137
+ } else t4 = $[6];
138
+ let t5;
139
+ if ($[7] !== t1 || $[8] !== t4) {
140
+ t5 = /* @__PURE__ */ jsx("span", {
141
+ className: t1,
142
+ children: t4
143
+ });
144
+ $[7] = t1;
145
+ $[8] = t4;
146
+ $[9] = t5;
147
+ } else t5 = $[9];
148
+ return t5;
149
+ }
150
+ var DATE_ONLY = /^(\d{4})-(\d{2})-(\d{2})$/;
151
+ var TIME_ONLY = /^(\d{2}):(\d{2})(?::(\d{2}))?$/;
152
+ /** A date (`2026-10-15`) as a local date, so that it doesn't move with the time zone. */
153
+ function parseDate(value) {
154
+ if (typeof value !== "string" || value === "") return null;
155
+ const day = DATE_ONLY.exec(value);
156
+ const date = day !== null ? new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3])) : new Date(value);
157
+ return Number.isNaN(date.getTime()) ? null : date;
158
+ }
159
+ /** A date, in the format of the locale. */
160
+ function DateDisplay(t0) {
161
+ const $ = c(9);
162
+ const { value } = t0;
163
+ const intl = usePanneauIntl();
164
+ let t1;
165
+ let t2;
166
+ let t3;
167
+ if ($[0] !== intl || $[1] !== value) {
168
+ t3 = Symbol.for("react.early_return_sentinel");
169
+ bb0: {
170
+ const date = parseDate(value);
171
+ if (date === null) {
172
+ let t4;
173
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
174
+ t4 = /* @__PURE__ */ jsx(EmptyValue, {});
175
+ $[5] = t4;
176
+ } else t4 = $[5];
177
+ t3 = t4;
178
+ break bb0;
179
+ }
180
+ t1 = String(value);
181
+ t2 = intl.formatDate(date, { dateStyle: "medium" });
182
+ }
183
+ $[0] = intl;
184
+ $[1] = value;
185
+ $[2] = t1;
186
+ $[3] = t2;
187
+ $[4] = t3;
188
+ } else {
189
+ t1 = $[2];
190
+ t2 = $[3];
191
+ t3 = $[4];
192
+ }
193
+ if (t3 !== Symbol.for("react.early_return_sentinel")) return t3;
194
+ let t4;
195
+ if ($[6] !== t1 || $[7] !== t2) {
196
+ t4 = /* @__PURE__ */ jsx("time", {
197
+ dateTime: t1,
198
+ children: t2
199
+ });
200
+ $[6] = t1;
201
+ $[7] = t2;
202
+ $[8] = t4;
203
+ } else t4 = $[8];
204
+ return t4;
205
+ }
206
+ /** A date and a time, in the format and the time zone of the user. */
207
+ function DateTimeDisplay(t0) {
208
+ const $ = c(9);
209
+ const { value } = t0;
210
+ const intl = usePanneauIntl();
211
+ let t1;
212
+ let t2;
213
+ let t3;
214
+ if ($[0] !== intl || $[1] !== value) {
215
+ t3 = Symbol.for("react.early_return_sentinel");
216
+ bb0: {
217
+ const date = parseDate(value);
218
+ if (date === null) {
219
+ let t4;
220
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
221
+ t4 = /* @__PURE__ */ jsx(EmptyValue, {});
222
+ $[5] = t4;
223
+ } else t4 = $[5];
224
+ t3 = t4;
225
+ break bb0;
226
+ }
227
+ t1 = String(value);
228
+ t2 = intl.formatDate(date, {
229
+ dateStyle: "medium",
230
+ timeStyle: "short"
231
+ });
232
+ }
233
+ $[0] = intl;
234
+ $[1] = value;
235
+ $[2] = t1;
236
+ $[3] = t2;
237
+ $[4] = t3;
238
+ } else {
239
+ t1 = $[2];
240
+ t2 = $[3];
241
+ t3 = $[4];
242
+ }
243
+ if (t3 !== Symbol.for("react.early_return_sentinel")) return t3;
244
+ let t4;
245
+ if ($[6] !== t1 || $[7] !== t2) {
246
+ t4 = /* @__PURE__ */ jsx("time", {
247
+ dateTime: t1,
248
+ children: t2
249
+ });
250
+ $[6] = t1;
251
+ $[7] = t2;
252
+ $[8] = t4;
253
+ } else t4 = $[8];
254
+ return t4;
255
+ }
256
+ /** A time of day (`14:30`), in the format of the locale. */
257
+ function TimeDisplay(t0) {
258
+ const $ = c(13);
259
+ const { value } = t0;
260
+ const intl = usePanneauIntl();
261
+ let t1;
262
+ if ($[0] !== value) {
263
+ t1 = typeof value === "string" ? TIME_ONLY.exec(value) : null;
264
+ $[0] = value;
265
+ $[1] = t1;
266
+ } else t1 = $[1];
267
+ const match = t1;
268
+ if (match === null) {
269
+ let t2;
270
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
271
+ t2 = /* @__PURE__ */ jsx(EmptyValue, {});
272
+ $[2] = t2;
273
+ } else t2 = $[2];
274
+ return t2;
275
+ }
276
+ let t2;
277
+ let t3;
278
+ if ($[3] !== intl || $[4] !== match[1] || $[5] !== match[2] || $[6] !== match[3] || $[7] !== value) {
279
+ const date = new Date(2e3, 0, 1, Number(match[1]), Number(match[2]), Number(match[3] ?? 0));
280
+ t2 = String(value);
281
+ t3 = intl.formatTime(date, { timeStyle: "short" });
282
+ $[3] = intl;
283
+ $[4] = match[1];
284
+ $[5] = match[2];
285
+ $[6] = match[3];
286
+ $[7] = value;
287
+ $[8] = t2;
288
+ $[9] = t3;
289
+ } else {
290
+ t2 = $[8];
291
+ t3 = $[9];
292
+ }
293
+ let t4;
294
+ if ($[10] !== t2 || $[11] !== t3) {
295
+ t4 = /* @__PURE__ */ jsx("time", {
296
+ dateTime: t2,
297
+ children: t3
298
+ });
299
+ $[10] = t2;
300
+ $[11] = t3;
301
+ $[12] = t4;
302
+ } else t4 = $[12];
303
+ return t4;
304
+ }
305
+ /** The labels of the selected options, as badges. */
306
+ function SelectDisplay(t0) {
307
+ const $ = c(9);
308
+ const { value, field } = t0;
309
+ let t1;
310
+ let t2;
311
+ let t3;
312
+ if ($[0] !== field || $[1] !== value) {
313
+ t3 = Symbol.for("react.early_return_sentinel");
314
+ bb0: {
315
+ const options = getFieldOptions(field);
316
+ const values = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];
317
+ if (values.length === 0) {
318
+ let t4;
319
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
320
+ t4 = /* @__PURE__ */ jsx(EmptyValue, {});
321
+ $[5] = t4;
322
+ } else t4 = $[5];
323
+ t3 = t4;
324
+ break bb0;
325
+ }
326
+ t1 = Displays_module_default.badges;
327
+ t2 = values.map((entry) => /* @__PURE__ */ jsx(Badge, { children: getOptionLabel(options, entry) ?? String(entry) }, String(entry)));
328
+ }
329
+ $[0] = field;
330
+ $[1] = value;
331
+ $[2] = t1;
332
+ $[3] = t2;
333
+ $[4] = t3;
334
+ } else {
335
+ t1 = $[2];
336
+ t2 = $[3];
337
+ t3 = $[4];
338
+ }
339
+ if (t3 !== Symbol.for("react.early_return_sentinel")) return t3;
340
+ let t4;
341
+ if ($[6] !== t1 || $[7] !== t2) {
342
+ t4 = /* @__PURE__ */ jsx("span", {
343
+ className: t1,
344
+ children: t2
345
+ });
346
+ $[6] = t1;
347
+ $[7] = t2;
348
+ $[8] = t4;
349
+ } else t4 = $[8];
350
+ return t4;
351
+ }
352
+ /** The labels of related items. */
353
+ function RelationDisplay(t0) {
354
+ const $ = c(8);
355
+ const { value } = t0;
356
+ let t1;
357
+ let t2;
358
+ let t3;
359
+ if ($[0] !== value) {
360
+ t3 = Symbol.for("react.early_return_sentinel");
361
+ bb0: {
362
+ const references = toReferences(value);
363
+ if (references.length === 0) {
364
+ let t4;
365
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
366
+ t4 = /* @__PURE__ */ jsx(EmptyValue, {});
367
+ $[4] = t4;
368
+ } else t4 = $[4];
369
+ t3 = t4;
370
+ break bb0;
371
+ }
372
+ t1 = Displays_module_default.text;
373
+ t2 = references.map(_temp).join(", ");
374
+ }
375
+ $[0] = value;
376
+ $[1] = t1;
377
+ $[2] = t2;
378
+ $[3] = t3;
379
+ } else {
380
+ t1 = $[1];
381
+ t2 = $[2];
382
+ t3 = $[3];
383
+ }
384
+ if (t3 !== Symbol.for("react.early_return_sentinel")) return t3;
385
+ let t4;
386
+ if ($[5] !== t1 || $[6] !== t2) {
387
+ t4 = /* @__PURE__ */ jsx("span", {
388
+ className: t1,
389
+ children: t2
390
+ });
391
+ $[5] = t1;
392
+ $[6] = t2;
393
+ $[7] = t4;
394
+ } else t4 = $[7];
395
+ return t4;
396
+ }
397
+ /** A link that opens the URL. */
398
+ function _temp(reference) {
399
+ return reference.label;
400
+ }
401
+ function UrlDisplay(t0) {
402
+ const $ = c(7);
403
+ const { value } = t0;
404
+ if (typeof value !== "string" || value === "") {
405
+ let t1;
406
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
407
+ t1 = /* @__PURE__ */ jsx(EmptyValue, {});
408
+ $[0] = t1;
409
+ } else t1 = $[0];
410
+ return t1;
411
+ }
412
+ let t1;
413
+ if ($[1] !== value) {
414
+ let t2;
415
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
416
+ t2 = /^https?:\/\//;
417
+ $[3] = t2;
418
+ } else t2 = $[3];
419
+ t1 = value.replace(t2, "");
420
+ $[1] = value;
421
+ $[2] = t1;
422
+ } else t1 = $[2];
423
+ let t2;
424
+ if ($[4] !== t1 || $[5] !== value) {
425
+ t2 = /* @__PURE__ */ jsx("a", {
426
+ className: Displays_module_default.link,
427
+ href: value,
428
+ target: "_blank",
429
+ rel: "noreferrer",
430
+ children: t1
431
+ });
432
+ $[4] = t1;
433
+ $[5] = value;
434
+ $[6] = t2;
435
+ } else t2 = $[6];
436
+ return t2;
437
+ }
438
+ /** A link that writes an email. */
439
+ function EmailDisplay(t0) {
440
+ const $ = c(4);
441
+ const { value } = t0;
442
+ if (typeof value !== "string" || value === "") {
443
+ let t1;
444
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
445
+ t1 = /* @__PURE__ */ jsx(EmptyValue, {});
446
+ $[0] = t1;
447
+ } else t1 = $[0];
448
+ return t1;
449
+ }
450
+ const t1 = `mailto:${value}`;
451
+ let t2;
452
+ if ($[1] !== t1 || $[2] !== value) {
453
+ t2 = /* @__PURE__ */ jsx("a", {
454
+ className: Displays_module_default.link,
455
+ href: t1,
456
+ children: value
457
+ });
458
+ $[1] = t1;
459
+ $[2] = value;
460
+ $[3] = t2;
461
+ } else t2 = $[3];
462
+ return t2;
463
+ }
464
+ /** A swatch, with the color's code. */
465
+ function ColorDisplay(t0) {
466
+ const $ = c(6);
467
+ const { value } = t0;
468
+ if (typeof value !== "string" || value === "") {
469
+ let t1;
470
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
471
+ t1 = /* @__PURE__ */ jsx(EmptyValue, {});
472
+ $[0] = t1;
473
+ } else t1 = $[0];
474
+ return t1;
475
+ }
476
+ let t1;
477
+ if ($[1] !== value) {
478
+ t1 = /* @__PURE__ */ jsx("span", {
479
+ className: Displays_module_default.swatch,
480
+ style: { backgroundColor: value },
481
+ "aria-hidden": "true"
482
+ });
483
+ $[1] = value;
484
+ $[2] = t1;
485
+ } else t1 = $[2];
486
+ let t2;
487
+ if ($[3] !== t1 || $[4] !== value) {
488
+ t2 = /* @__PURE__ */ jsxs("span", {
489
+ className: Displays_module_default.color,
490
+ children: [t1, value]
491
+ });
492
+ $[3] = t1;
493
+ $[4] = value;
494
+ $[5] = t2;
495
+ } else t2 = $[5];
496
+ return t2;
497
+ }
498
+ /** A thumbnail and the name of a media item (or of the first one). */
499
+ function MediaDisplay(t0) {
500
+ const $ = c(8);
501
+ const { value } = t0;
502
+ const media = Array.isArray(value) ? value[0] : value;
503
+ if (media === null || typeof media !== "object") {
504
+ let t1;
505
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
506
+ t1 = /* @__PURE__ */ jsx(EmptyValue, {});
507
+ $[0] = t1;
508
+ } else t1 = $[0];
509
+ return t1;
510
+ }
511
+ const { thumbnailUrl, url, name, filename } = media;
512
+ const source = typeof thumbnailUrl === "string" ? thumbnailUrl : typeof url === "string" ? url : null;
513
+ const label = typeof name === "string" ? name : typeof filename === "string" ? filename : "";
514
+ let t1;
515
+ if ($[1] !== source) {
516
+ t1 = source !== null ? /* @__PURE__ */ jsx("img", {
517
+ className: Displays_module_default.thumbnail,
518
+ src: source,
519
+ alt: ""
520
+ }) : null;
521
+ $[1] = source;
522
+ $[2] = t1;
523
+ } else t1 = $[2];
524
+ let t2;
525
+ if ($[3] !== label) {
526
+ t2 = label !== "" ? /* @__PURE__ */ jsx("span", {
527
+ className: Displays_module_default.text,
528
+ children: label
529
+ }) : null;
530
+ $[3] = label;
531
+ $[4] = t2;
532
+ } else t2 = $[4];
533
+ let t3;
534
+ if ($[5] !== t1 || $[6] !== t2) {
535
+ t3 = /* @__PURE__ */ jsxs("span", {
536
+ className: Displays_module_default.media,
537
+ children: [t1, t2]
538
+ });
539
+ $[5] = t1;
540
+ $[6] = t2;
541
+ $[7] = t3;
542
+ } else t3 = $[7];
543
+ return t3;
544
+ }
545
+ /**
546
+ * The built-in displays, by name. A column's display is its `display`, its field's `display`, or
547
+ * its field's type: field types are display names. Values without a known display are shown as
548
+ * text.
549
+ */
550
+ var builtInDisplays = {
551
+ text: TextDisplay,
552
+ textarea: TextDisplay,
553
+ slug: TextDisplay,
554
+ richtext: RichTextDisplay,
555
+ number: NumberDisplay,
556
+ boolean: BooleanDisplay,
557
+ date: DateDisplay,
558
+ datetime: DateTimeDisplay,
559
+ time: TimeDisplay,
560
+ select: SelectDisplay,
561
+ relation: RelationDisplay,
562
+ url: UrlDisplay,
563
+ email: EmailDisplay,
564
+ color: ColorDisplay,
565
+ media: MediaDisplay
566
+ };
567
+ //#endregion
568
+ export { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, EmailDisplay, EmptyValue, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays };
569
+
570
+ //# sourceMappingURL=displays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displays.js","names":["text","value","source","label","_c","styles"],"sources":["../../src/displays/displays.tsx"],"sourcesContent":["import { Check, Minus } from 'lucide-react';\n\nimport { toReferences } from '@panneau/fields';\nimport { Badge, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { DisplayEntry, DisplayProps } from '../types';\nimport { getFieldOptions, getOptionLabel, toText } from '../values';\nimport styles from './Displays.module.css';\n\n/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */\nexport function EmptyValue() {\n return (\n <span className={styles.empty} aria-hidden=\"true\">\n —\n </span>\n );\n}\n\nfunction isEmpty(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n );\n}\n\n/** Text, on two lines at most. The default display. */\nexport function TextDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const text = toText(value, intl.locale);\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** HTML as plain text. */\nexport function RichTextDisplay({ value }: DisplayProps) {\n const text =\n typeof value === 'string'\n ? value\n .replace(/<[^>]*>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : '';\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** A number, in the format of the locale. */\nexport function NumberDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const number =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : NaN;\n if (Number.isNaN(number) || isEmpty(value)) {\n return <EmptyValue />;\n }\n return <span className={styles.number}>{intl.formatNumber(number)}</span>;\n}\n\n/** Yes or no, as an icon with its label. */\nexport function BooleanDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || value === undefined) {\n return <EmptyValue />;\n }\n const checked = value === true || value === 1 || value === 'true' || value === '1';\n return (\n <span className={`${styles.boolean} ${checked ? styles.true : styles.false}`}>\n <Icon\n icon={checked ? Check : Minus}\n label={intl.formatMessage(checked ? messages.yes : messages.no)}\n />\n </span>\n );\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst TIME_ONLY = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n\n/** A date (`2026-10-15`) as a local date, so that it doesn't move with the time zone. */\nfunction parseDate(value: unknown): Date | null {\n if (typeof value !== 'string' || value === '') {\n return null;\n }\n const day = DATE_ONLY.exec(value);\n const date =\n day !== null\n ? new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3]))\n : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n/** A date, in the format of the locale. */\nexport function DateDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return <time dateTime={String(value)}>{intl.formatDate(date, { dateStyle: 'medium' })}</time>;\n}\n\n/** A date and a time, in the format and the time zone of the user. */\nexport function DateTimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return (\n <time dateTime={String(value)}>\n {intl.formatDate(date, { dateStyle: 'medium', timeStyle: 'short' })}\n </time>\n );\n}\n\n/** A time of day (`14:30`), in the format of the locale. */\nexport function TimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const match = typeof value === 'string' ? TIME_ONLY.exec(value) : null;\n if (match === null) {\n return <EmptyValue />;\n }\n const date = new Date(2000, 0, 1, Number(match[1]), Number(match[2]), Number(match[3] ?? 0));\n return <time dateTime={String(value)}>{intl.formatTime(date, { timeStyle: 'short' })}</time>;\n}\n\n/** The labels of the selected options, as badges. */\nexport function SelectDisplay({ value, field }: DisplayProps) {\n const options = getFieldOptions(field);\n const values: unknown[] = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];\n if (values.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.badges}>\n {values.map((entry) => (\n <Badge key={String(entry)}>{getOptionLabel(options, entry) ?? String(entry)}</Badge>\n ))}\n </span>\n );\n}\n\n/** The labels of related items. */\nexport function RelationDisplay({ value }: DisplayProps) {\n const references = toReferences(value);\n if (references.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.text}>\n {references.map((reference) => reference.label).join(', ')}\n </span>\n );\n}\n\n/** A link that opens the URL. */\nexport function UrlDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={value} target=\"_blank\" rel=\"noreferrer\">\n {value.replace(/^https?:\\/\\//, '')}\n </a>\n );\n}\n\n/** A link that writes an email. */\nexport function EmailDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`mailto:${value}`}>\n {value}\n </a>\n );\n}\n\n/** A swatch, with the color's code. */\nexport function ColorDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <span className={styles.color}>\n <span className={styles.swatch} style={{ backgroundColor: value }} aria-hidden=\"true\" />\n {value}\n </span>\n );\n}\n\n/** A thumbnail and the name of a media item (or of the first one). */\nexport function MediaDisplay({ value }: DisplayProps) {\n const media: unknown = Array.isArray(value) ? value[0] : value;\n if (media === null || typeof media !== 'object') {\n return <EmptyValue />;\n }\n const { thumbnailUrl, url, name, filename } = media as Record<string, unknown>;\n const source =\n typeof thumbnailUrl === 'string' ? thumbnailUrl : typeof url === 'string' ? url : null;\n const label = typeof name === 'string' ? name : typeof filename === 'string' ? filename : '';\n return (\n <span className={styles.media}>\n {source !== null ? <img className={styles.thumbnail} src={source} alt=\"\" /> : null}\n {label !== '' ? <span className={styles.text}>{label}</span> : null}\n </span>\n );\n}\n\n/**\n * The built-in displays, by name. A column's display is its `display`, its field's `display`, or\n * its field's type: field types are display names. Values without a known display are shown as\n * text.\n */\nexport const builtInDisplays: Readonly<Record<string, DisplayEntry>> = {\n text: TextDisplay,\n textarea: TextDisplay,\n slug: TextDisplay,\n richtext: RichTextDisplay,\n number: NumberDisplay,\n boolean: BooleanDisplay,\n date: DateDisplay,\n datetime: DateTimeDisplay,\n time: TimeDisplay,\n select: SelectDisplay,\n relation: RelationDisplay,\n url: UrlDisplay,\n email: EmailDisplay,\n color: ColorDisplay,\n media: MediaDisplay,\n};\n"],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ .panneau-filters-9H41r8 {
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ align-items: flex-end;
5
+ gap: var(--panneau-space-3);
6
+ }
7
+
8
+ .panneau-control-vD-jl2 {
9
+ width: 12rem;
10
+ max-width: 100%;
11
+ }
12
+
13
+ .panneau-toggle-aBWzSX {
14
+ align-self: center;
15
+ min-height: var(--panneau-control-height);
16
+ display: flex;
17
+ align-items: center;
18
+ }
19
+
20
+ .panneau-range-lY9OdJ {
21
+ display: flex;
22
+ flex-wrap: wrap;
23
+ gap: var(--panneau-space-2);
24
+ max-width: 100%;
25
+ }
26
+
27
+ .panneau-range-lY9OdJ > :not(legend) {
28
+ width: 11rem;
29
+ max-width: 100%;
30
+ }
31
+
32
+ .panneau-chips-zPj5hD {
33
+ display: flex;
34
+ flex-wrap: wrap;
35
+ align-items: center;
36
+ gap: var(--panneau-space-2);
37
+ margin: 0;
38
+ padding: 0;
39
+ list-style: none;
40
+ }
41
+
42
+ .panneau-chip-RQRPo6 {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ gap: var(--panneau-space-1);
46
+ max-width: 100%;
47
+ padding-inline-start: var(--panneau-space-3);
48
+ font-size: var(--panneau-font-size-sm);
49
+ background-color: var(--panneau-color-surface-sunken);
50
+ border: var(--panneau-border-width) solid var(--panneau-color-border);
51
+ border-radius: var(--panneau-radius-full);
52
+ }
53
+
54
+ .panneau-chipText-Uofas9 {
55
+ overflow: hidden;
56
+ text-overflow: ellipsis;
57
+ white-space: nowrap;
58
+ }
59
+
60
+ .panneau-chipLabel-QsALcI {
61
+ color: var(--panneau-color-text-muted);
62
+ }
63
+
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) {
69
+ width: 100%;
70
+ }
71
+ }