@panneau/lists 5.0.0-alpha.0 → 5.0.0-alpha.10

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 (120) hide show
  1. package/README.md +7 -3
  2. package/dist/ItemDetails.css +34 -0
  3. package/dist/ItemDetails.d.ts +18 -0
  4. package/dist/ItemDetails.d.ts.map +1 -0
  5. package/dist/ItemDetails.js +104 -0
  6. package/dist/ItemDetails.js.map +1 -0
  7. package/dist/ItemDetails.module.js +16 -0
  8. package/dist/ItemDetails.module.js.map +1 -0
  9. package/dist/List.d.ts +2 -2
  10. package/dist/List.js +54 -12
  11. package/dist/List.js.map +1 -1
  12. package/dist/ListSkeleton.d.ts +17 -0
  13. package/dist/ListSkeleton.d.ts.map +1 -0
  14. package/dist/ListSkeleton.js +111 -0
  15. package/dist/ListSkeleton.js.map +1 -0
  16. package/dist/ListView.css +16 -16
  17. package/dist/ListView.d.ts +40 -5
  18. package/dist/ListView.d.ts.map +1 -1
  19. package/dist/ListView.js +547 -211
  20. package/dist/ListView.js.map +1 -1
  21. package/dist/ListView.module.js +10 -10
  22. package/dist/actions/ActionButton.d.ts +4 -1
  23. package/dist/actions/ActionButton.d.ts.map +1 -1
  24. package/dist/actions/ActionButton.js +91 -23
  25. package/dist/actions/ActionButton.js.map +1 -1
  26. package/dist/actions/Actions.css +9 -9
  27. package/dist/actions/Actions.module.js +6 -6
  28. package/dist/actions/ConfirmDialog.d.ts +15 -3
  29. package/dist/actions/ConfirmDialog.d.ts.map +1 -1
  30. package/dist/actions/ConfirmDialog.js +103 -89
  31. package/dist/actions/ConfirmDialog.js.map +1 -1
  32. package/dist/actions/RowActions.d.ts +8 -6
  33. package/dist/actions/RowActions.d.ts.map +1 -1
  34. package/dist/actions/RowActions.js +40 -30
  35. package/dist/actions/RowActions.js.map +1 -1
  36. package/dist/actions/actions.d.ts +5 -4
  37. package/dist/actions/actions.d.ts.map +1 -1
  38. package/dist/actions/actions.js +7 -14
  39. package/dist/actions/actions.js.map +1 -1
  40. package/dist/actions/icons.d.ts +8 -3
  41. package/dist/actions/icons.d.ts.map +1 -1
  42. package/dist/actions/icons.js +11 -7
  43. package/dist/actions/icons.js.map +1 -1
  44. package/dist/cx.js.map +1 -1
  45. package/dist/displays/Displays.css +25 -13
  46. package/dist/displays/Displays.module.js +18 -14
  47. package/dist/displays/Displays.module.js.map +1 -1
  48. package/dist/displays/displays.d.ts +18 -3
  49. package/dist/displays/displays.d.ts.map +1 -1
  50. package/dist/displays/displays.js +355 -12
  51. package/dist/displays/displays.js.map +1 -1
  52. package/dist/filters/Filters.css +34 -20
  53. package/dist/filters/Filters.d.ts +1 -1
  54. package/dist/filters/Filters.js.map +1 -1
  55. package/dist/filters/Filters.module.js +13 -9
  56. package/dist/filters/Filters.module.js.map +1 -1
  57. package/dist/filters/controls.d.ts +3 -3
  58. package/dist/filters/controls.d.ts.map +1 -1
  59. package/dist/filters/controls.js +171 -123
  60. package/dist/filters/controls.js.map +1 -1
  61. package/dist/filters/format.d.ts +1 -1
  62. package/dist/filters/format.d.ts.map +1 -1
  63. package/dist/filters/format.js +4 -1
  64. package/dist/filters/format.js.map +1 -1
  65. package/dist/index.d.ts +19 -17
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +5 -3
  68. package/dist/layouts/CardsLayout.css +22 -11
  69. package/dist/layouts/CardsLayout.d.ts +2 -2
  70. package/dist/layouts/CardsLayout.d.ts.map +1 -1
  71. package/dist/layouts/CardsLayout.js +39 -35
  72. package/dist/layouts/CardsLayout.js.map +1 -1
  73. package/dist/layouts/CardsLayout.module.js +8 -8
  74. package/dist/layouts/CardsLayout.module.js.map +1 -1
  75. package/dist/layouts/ItemTitle.d.ts +4 -2
  76. package/dist/layouts/ItemTitle.d.ts.map +1 -1
  77. package/dist/layouts/ItemTitle.js +12 -8
  78. package/dist/layouts/ItemTitle.js.map +1 -1
  79. package/dist/layouts/TableLayout.css +51 -35
  80. package/dist/layouts/TableLayout.d.ts +2 -2
  81. package/dist/layouts/TableLayout.d.ts.map +1 -1
  82. package/dist/layouts/TableLayout.js +38 -33
  83. package/dist/layouts/TableLayout.js.map +1 -1
  84. package/dist/layouts/TableLayout.module.js +14 -14
  85. package/dist/layouts/TableLayout.module.js.map +1 -1
  86. package/dist/layouts/builtIn.d.ts +1 -1
  87. package/dist/layouts/builtIn.js.map +1 -1
  88. package/dist/layouts/link.css +3 -3
  89. package/dist/layouts/link.module.js +1 -1
  90. package/dist/plugin.d.ts +1 -1
  91. package/dist/plugin.js.map +1 -1
  92. package/dist/query.d.ts +3 -3
  93. package/dist/query.d.ts.map +1 -1
  94. package/dist/query.js +7 -2
  95. package/dist/query.js.map +1 -1
  96. package/dist/selection.d.ts +1 -1
  97. package/dist/selection.js.map +1 -1
  98. package/dist/toolbar/LayoutSwitch.js.map +1 -1
  99. package/dist/toolbar/Pagination.d.ts +33 -0
  100. package/dist/toolbar/Pagination.d.ts.map +1 -1
  101. package/dist/toolbar/Pagination.js +282 -42
  102. package/dist/toolbar/Pagination.js.map +1 -1
  103. package/dist/toolbar/SearchField.js.map +1 -1
  104. package/dist/toolbar/SortSelect.d.ts +1 -1
  105. package/dist/toolbar/SortSelect.js.map +1 -1
  106. package/dist/toolbar/Toolbar.css +12 -12
  107. package/dist/toolbar/Toolbar.module.js +7 -7
  108. package/dist/types.d.ts +18 -2
  109. package/dist/types.d.ts.map +1 -1
  110. package/dist/useDraft.js.map +1 -1
  111. package/dist/useListState.js.map +1 -1
  112. package/dist/useRenderValue.d.ts +8 -0
  113. package/dist/useRenderValue.d.ts.map +1 -0
  114. package/dist/useRenderValue.js +64 -0
  115. package/dist/useRenderValue.js.map +1 -0
  116. package/dist/values.d.ts +3 -1
  117. package/dist/values.d.ts.map +1 -1
  118. package/dist/values.js +6 -2
  119. package/dist/values.js.map +1 -1
  120. package/package.json +9 -9
@@ -4,10 +4,14 @@ import Filters_module_default from "./Filters.module.js";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { Fieldset, Select, Switch, TextInput, usePanneauIntl } from "@panneau/ui";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { useFieldsContext } from "@panneau/fields";
8
+ import { useEffect } from "react";
7
9
  import { DateField } from "@panneau/fields/date";
8
- import { RelationField } from "@panneau/fields/relation";
10
+ import { RelationField, useRelationReferences } from "@panneau/fields/relation";
11
+ import { isFilterRange } from "@panneau/protocol/runtime";
9
12
  //#region src/filters/controls.tsx
10
13
  function asStrings(value) {
14
+ if (isFilterRange(value)) return [];
11
15
  if (Array.isArray(value)) return value.map(String);
12
16
  return value === void 0 || value === null || value === "" ? [] : [String(value)];
13
17
  }
@@ -206,93 +210,118 @@ function DateFilter(t0) {
206
210
  return t3;
207
211
  }
208
212
  /**
209
- * A range of days, sent as `[from, to]` (`filter[published_at][]=2026-01-01&…`). An open end is an
210
- * empty string.
213
+ * A range of days, sent as its bounds (`filter[published_at][from]=2026-01-01&…[to]=…`). Either end
214
+ * can be open: it is left out.
211
215
  */
212
216
  function DateRangeFilter(t0) {
213
- const $ = c(26);
217
+ const $ = c(29);
214
218
  const { label, value, onChange } = t0;
215
219
  const intl = usePanneauIntl();
216
220
  let t1;
217
221
  if ($[0] !== value) {
218
- t1 = asStrings(value);
222
+ t1 = isFilterRange(value) ? value : {};
219
223
  $[0] = value;
220
224
  $[1] = t1;
221
225
  } else t1 = $[1];
222
- const [t2, t3] = t1;
223
- const from = t2 === void 0 ? "" : t2;
224
- const to = t3 === void 0 ? "" : t3;
225
- let t4;
226
+ const range = t1;
227
+ const from = range.from !== void 0 ? String(range.from) : "";
228
+ const to = range.to !== void 0 ? String(range.to) : "";
229
+ let t2;
226
230
  if ($[2] !== onChange) {
227
- t4 = (nextFrom, nextTo) => onChange(nextFrom === "" && nextTo === "" ? void 0 : [nextFrom, nextTo]);
231
+ t2 = (nextFrom, nextTo) => onChange(nextFrom === "" && nextTo === "" ? void 0 : {
232
+ ...nextFrom !== "" ? { from: nextFrom } : {},
233
+ ...nextTo !== "" ? { to: nextTo } : {}
234
+ });
228
235
  $[2] = onChange;
229
- $[3] = t4;
230
- } else t4 = $[3];
231
- const set = t4;
232
- let t5;
236
+ $[3] = t2;
237
+ } else t2 = $[3];
238
+ const set = t2;
239
+ let t3;
233
240
  if ($[4] !== intl) {
234
- t5 = intl.formatMessage(messages.from);
241
+ t3 = intl.formatMessage(messages.from);
235
242
  $[4] = intl;
236
- $[5] = t5;
237
- } else t5 = $[5];
238
- const t6 = from !== "" ? from : null;
239
- let t7;
243
+ $[5] = t3;
244
+ } else t3 = $[5];
245
+ const t4 = from !== "" ? from : null;
246
+ let t5;
240
247
  if ($[6] !== set || $[7] !== to) {
241
- t7 = (next) => set(next ?? "", to);
248
+ t5 = (next) => set(next ?? "", to);
242
249
  $[6] = set;
243
250
  $[7] = to;
244
- $[8] = t7;
245
- } else t7 = $[8];
246
- let t8;
247
- if ($[9] !== t5 || $[10] !== t6 || $[11] !== t7) {
248
- t8 = /* @__PURE__ */ jsx(DateField, {
249
- label: t5,
250
- value: t6,
251
- onChange: t7
251
+ $[8] = t5;
252
+ } else t5 = $[8];
253
+ let t6;
254
+ if ($[9] !== t3 || $[10] !== t4 || $[11] !== t5) {
255
+ t6 = /* @__PURE__ */ jsx(DateField, {
256
+ "aria-label": t3,
257
+ value: t4,
258
+ onChange: t5
252
259
  });
253
- $[9] = t5;
254
- $[10] = t6;
255
- $[11] = t7;
256
- $[12] = t8;
257
- } else t8 = $[12];
258
- let t9;
259
- if ($[13] !== intl) {
260
- t9 = intl.formatMessage(messages.to);
261
- $[13] = intl;
262
- $[14] = t9;
263
- } else t9 = $[14];
264
- const t10 = to !== "" ? to : null;
260
+ $[9] = t3;
261
+ $[10] = t4;
262
+ $[11] = t5;
263
+ $[12] = t6;
264
+ } else t6 = $[12];
265
+ let t7;
266
+ if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
267
+ t7 = /* @__PURE__ */ jsx("span", {
268
+ className: Filters_module_default.rangeDash,
269
+ "aria-hidden": "true",
270
+ children: "–"
271
+ });
272
+ $[13] = t7;
273
+ } else t7 = $[13];
274
+ let t8;
275
+ if ($[14] !== intl) {
276
+ t8 = intl.formatMessage(messages.to);
277
+ $[14] = intl;
278
+ $[15] = t8;
279
+ } else t8 = $[15];
280
+ const t9 = to !== "" ? to : null;
281
+ let t10;
282
+ if ($[16] !== from || $[17] !== set) {
283
+ t10 = (next_0) => set(from, next_0 ?? "");
284
+ $[16] = from;
285
+ $[17] = set;
286
+ $[18] = t10;
287
+ } else t10 = $[18];
265
288
  let t11;
266
- if ($[15] !== from || $[16] !== set) {
267
- t11 = (next_0) => set(from, next_0 ?? "");
268
- $[15] = from;
269
- $[16] = set;
270
- $[17] = t11;
271
- } else t11 = $[17];
289
+ if ($[19] !== t10 || $[20] !== t8 || $[21] !== t9) {
290
+ t11 = /* @__PURE__ */ jsx(DateField, {
291
+ "aria-label": t8,
292
+ value: t9,
293
+ onChange: t10
294
+ });
295
+ $[19] = t10;
296
+ $[20] = t8;
297
+ $[21] = t9;
298
+ $[22] = t11;
299
+ } else t11 = $[22];
272
300
  let t12;
273
- if ($[18] !== t10 || $[19] !== t11 || $[20] !== t9) {
274
- t12 = /* @__PURE__ */ jsx(DateField, {
275
- label: t9,
276
- value: t10,
277
- onChange: t11
301
+ if ($[23] !== t11 || $[24] !== t6) {
302
+ t12 = /* @__PURE__ */ jsxs("div", {
303
+ className: Filters_module_default.rangeInputs,
304
+ children: [
305
+ t6,
306
+ t7,
307
+ t11
308
+ ]
278
309
  });
279
- $[18] = t10;
280
- $[19] = t11;
281
- $[20] = t9;
282
- $[21] = t12;
283
- } else t12 = $[21];
310
+ $[23] = t11;
311
+ $[24] = t6;
312
+ $[25] = t12;
313
+ } else t12 = $[25];
284
314
  let t13;
285
- if ($[22] !== label || $[23] !== t12 || $[24] !== t8) {
286
- t13 = /* @__PURE__ */ jsxs(Fieldset, {
315
+ if ($[26] !== label || $[27] !== t12) {
316
+ t13 = /* @__PURE__ */ jsx(Fieldset, {
287
317
  legend: label,
288
318
  className: Filters_module_default.range,
289
- children: [t8, t12]
319
+ children: t12
290
320
  });
291
- $[22] = label;
292
- $[23] = t12;
293
- $[24] = t8;
294
- $[25] = t13;
295
- } else t13 = $[25];
321
+ $[26] = label;
322
+ $[27] = t12;
323
+ $[28] = t13;
324
+ } else t13 = $[28];
296
325
  return t13;
297
326
  }
298
327
  /**
@@ -301,95 +330,114 @@ function DateRangeFilter(t0) {
301
330
  * chips.
302
331
  */
303
332
  function RelationFilter(t0) {
304
- const $ = c(23);
333
+ const $ = c(27);
305
334
  const { filter, label, value, onChange, onLabel, getValueLabel } = t0;
306
- let t1;
335
+ const resource = filter.resource ?? filter.id;
336
+ const t1 = useFieldsContext().relationSource;
337
+ let t2;
307
338
  if ($[0] !== getValueLabel || $[1] !== value) {
308
- let t2;
339
+ let t3;
309
340
  if ($[3] !== getValueLabel) {
310
- t2 = (id) => ({
341
+ t3 = (id) => ({
311
342
  id,
312
343
  label: getValueLabel(id) ?? id
313
344
  });
314
345
  $[3] = getValueLabel;
315
- $[4] = t2;
316
- } else t2 = $[4];
317
- t1 = asStrings(value).map(t2);
346
+ $[4] = t3;
347
+ } else t3 = $[4];
348
+ t2 = asStrings(value).map(t3);
318
349
  $[0] = getValueLabel;
319
350
  $[1] = value;
320
- $[2] = t1;
321
- } else t1 = $[2];
322
- const references = t1;
323
- let t2;
351
+ $[2] = t2;
352
+ } else t2 = $[2];
353
+ const references = useRelationReferences(t1, resource, t2);
354
+ let t3;
324
355
  if ($[5] !== onLabel) {
325
- t2 = (next) => next.forEach((reference) => onLabel(reference.id, reference.label));
356
+ t3 = (next) => next.forEach((reference) => onLabel(reference.id, reference.label));
326
357
  $[5] = onLabel;
327
- $[6] = t2;
328
- } else t2 = $[6];
329
- const remember = t2;
358
+ $[6] = t3;
359
+ } else t3 = $[6];
360
+ const remember = t3;
361
+ let t4;
362
+ let t5;
363
+ if ($[7] !== onLabel || $[8] !== references) {
364
+ t4 = () => {
365
+ references.filter(_temp2).forEach((reference_1) => onLabel(reference_1.id, reference_1.label));
366
+ };
367
+ t5 = [references, onLabel];
368
+ $[7] = onLabel;
369
+ $[8] = references;
370
+ $[9] = t4;
371
+ $[10] = t5;
372
+ } else {
373
+ t4 = $[9];
374
+ t5 = $[10];
375
+ }
376
+ useEffect(t4, t5);
330
377
  if (filter.multiple === true) {
331
- const t3 = filter.resource ?? filter.id;
332
- let t4;
333
- if ($[7] !== onChange || $[8] !== remember) {
334
- t4 = (next_0) => {
378
+ let t6;
379
+ if ($[11] !== onChange || $[12] !== remember) {
380
+ t6 = (next_0) => {
335
381
  remember(next_0 ?? []);
336
- const ids = next_0 !== null && next_0.length > 0 ? next_0.map(_temp2) : void 0;
382
+ const ids = next_0 !== null && next_0.length > 0 ? next_0.map(_temp3) : void 0;
337
383
  onChange(ids);
338
384
  };
339
- $[7] = onChange;
340
- $[8] = remember;
341
- $[9] = t4;
342
- } else t4 = $[9];
343
- let t5;
344
- if ($[10] !== label || $[11] !== references || $[12] !== t3 || $[13] !== t4) {
345
- t5 = /* @__PURE__ */ jsx(RelationField, {
385
+ $[11] = onChange;
386
+ $[12] = remember;
387
+ $[13] = t6;
388
+ } else t6 = $[13];
389
+ let t7;
390
+ if ($[14] !== label || $[15] !== references || $[16] !== resource || $[17] !== t6) {
391
+ t7 = /* @__PURE__ */ jsx(RelationField, {
346
392
  multiple: true,
347
393
  label,
348
- resource: t3,
394
+ resource,
349
395
  value: references,
350
- onChange: t4,
396
+ onChange: t6,
351
397
  className: Filters_module_default.control
352
398
  });
353
- $[10] = label;
354
- $[11] = references;
355
- $[12] = t3;
356
- $[13] = t4;
357
- $[14] = t5;
358
- } else t5 = $[14];
359
- return t5;
399
+ $[14] = label;
400
+ $[15] = references;
401
+ $[16] = resource;
402
+ $[17] = t6;
403
+ $[18] = t7;
404
+ } else t7 = $[18];
405
+ return t7;
360
406
  }
361
- const t3 = filter.resource ?? filter.id;
362
- const t4 = references[0] ?? null;
363
- let t5;
364
- if ($[15] !== onChange || $[16] !== remember) {
365
- t5 = (next_1) => {
407
+ const t6 = references[0] ?? null;
408
+ let t7;
409
+ if ($[19] !== onChange || $[20] !== remember) {
410
+ t7 = (next_1) => {
366
411
  remember(next_1 !== null ? [next_1] : []);
367
412
  onChange(next_1?.id);
368
413
  };
369
- $[15] = onChange;
370
- $[16] = remember;
371
- $[17] = t5;
372
- } else t5 = $[17];
373
- let t6;
374
- if ($[18] !== label || $[19] !== t3 || $[20] !== t4 || $[21] !== t5) {
375
- t6 = /* @__PURE__ */ jsx(RelationField, {
414
+ $[19] = onChange;
415
+ $[20] = remember;
416
+ $[21] = t7;
417
+ } else t7 = $[21];
418
+ let t8;
419
+ if ($[22] !== label || $[23] !== resource || $[24] !== t6 || $[25] !== t7) {
420
+ t8 = /* @__PURE__ */ jsx(RelationField, {
376
421
  label,
377
- resource: t3,
378
- value: t4,
379
- onChange: t5,
422
+ resource,
423
+ value: t6,
424
+ onChange: t7,
380
425
  className: Filters_module_default.control
381
426
  });
382
- $[18] = label;
383
- $[19] = t3;
384
- $[20] = t4;
385
- $[21] = t5;
386
- $[22] = t6;
387
- } else t6 = $[22];
388
- return t6;
427
+ $[22] = label;
428
+ $[23] = resource;
429
+ $[24] = t6;
430
+ $[25] = t7;
431
+ $[26] = t8;
432
+ } else t8 = $[26];
433
+ return t8;
389
434
  }
390
435
  /** The built-in filter controls, by filter type. Unknown types are text filters. */
436
+ function _temp3(reference_2) {
437
+ return reference_2.id;
438
+ }
391
439
  function _temp2(reference_0) {
392
- return reference_0.id;
440
+ return reference_0.label !== reference_0.id;
393
441
  }
394
442
  var builtInFilters = {
395
443
  text: TextFilter,
@@ -1 +1 @@
1
- {"version":3,"file":"controls.js","names":["label","draft","setDraft","flush","options","placeholder","option","next","references","reference","_c","styles"],"sources":["../../src/filters/controls.tsx"],"sourcesContent":["import { DateField } from '@panneau/fields/date';\nimport { RelationField } from '@panneau/fields/relation';\nimport type { FilterValue } from '@panneau/protocol';\nimport { Fieldset, type OptionValue, Select, Switch, TextInput, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { FilterControlProps, FilterEntry } from '../types';\nimport { useDraft } from '../useDraft';\nimport styles from './Filters.module.css';\n\nfunction asStrings(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map(String);\n }\n return value === undefined || value === null || value === '' ? [] : [String(value)];\n}\n\n/** A text filter: the list changes once the user stops typing. */\nexport function TextFilter({ label, value, onChange }: FilterControlProps) {\n const current = typeof value === 'string' || typeof value === 'number' ? String(value) : '';\n const { draft, setDraft, flush } = useDraft(current, (next) =>\n onChange(next !== '' ? next : undefined),\n );\n return (\n <TextInput\n label={label}\n value={draft}\n onChange={setDraft}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n flush();\n }\n }}\n onBlur={flush}\n className={styles.control}\n />\n );\n}\n\n/** A choice among the options, or several with `multiple`. */\nexport function SelectFilter({ filter, label, options, value, onChange }: FilterControlProps) {\n const intl = usePanneauIntl();\n const selected = asStrings(value);\n // Values from the URL are strings: match them to the options' values.\n const toOptions = (values: readonly string[]): OptionValue[] =>\n options\n .filter((option) => values.includes(String(option.value)))\n .map((option) => option.value);\n const placeholder = intl.formatMessage(messages.any);\n if (filter.multiple === true) {\n return (\n <Select\n multiple\n label={label}\n options={options}\n placeholder={placeholder}\n value={toOptions(selected)}\n onChange={(next) => onChange(next.length > 0 ? next : undefined)}\n className={styles.control}\n />\n );\n }\n return (\n <Select\n label={label}\n options={options}\n placeholder={placeholder}\n value={toOptions(selected)[0] ?? null}\n onChange={(next) => onChange(next ?? undefined)}\n className={styles.control}\n />\n );\n}\n\n/** On or off: on filters with `true`, off removes the filter. */\nexport function ToggleFilter({ label, value, onChange }: FilterControlProps) {\n return (\n <Switch\n isSelected={String(value) === 'true'}\n onChange={(checked) => onChange(checked ? true : undefined)}\n className={styles.toggle}\n >\n {label}\n </Switch>\n );\n}\n\n/** A day (`2026-10-15`). */\nexport function DateFilter({ label, value, onChange }: FilterControlProps) {\n return (\n <DateField\n label={label}\n value={typeof value === 'string' && value !== '' ? value : null}\n onChange={(next) => onChange(next ?? undefined)}\n className={styles.control}\n />\n );\n}\n\n/**\n * A range of days, sent as `[from, to]` (`filter[published_at][]=2026-01-01&…`). An open end is an\n * empty string.\n */\nexport function DateRangeFilter({ label, value, onChange }: FilterControlProps) {\n const intl = usePanneauIntl();\n const [from = '', to = ''] = asStrings(value);\n const set = (nextFrom: string, nextTo: string) =>\n onChange(nextFrom === '' && nextTo === '' ? undefined : [nextFrom, nextTo]);\n return (\n <Fieldset legend={label} className={styles.range}>\n <DateField\n label={intl.formatMessage(messages.from)}\n value={from !== '' ? from : null}\n onChange={(next) => set(next ?? '', to)}\n />\n <DateField\n label={intl.formatMessage(messages.to)}\n value={to !== '' ? to : null}\n onChange={(next) => set(from, next ?? '')}\n />\n </Fieldset>\n );\n}\n\n/**\n * An item of another resource (`resource`), or several with `multiple`, picked with the relation\n * source of the fields context. The filter keeps their ids; their labels are remembered for the\n * chips.\n */\nexport function RelationFilter({\n filter,\n label,\n value,\n onChange,\n onLabel,\n getValueLabel,\n}: FilterControlProps) {\n const references = asStrings(value).map((id) => ({ id, label: getValueLabel(id) ?? id }));\n const remember = (next: readonly { id: string; label: string }[]) =>\n next.forEach((reference) => onLabel(reference.id, reference.label));\n if (filter.multiple === true) {\n return (\n <RelationField\n multiple\n label={label}\n resource={filter.resource ?? filter.id}\n value={references}\n onChange={(next) => {\n remember(next ?? []);\n const ids: FilterValue | undefined =\n next !== null && next.length > 0\n ? next.map((reference) => reference.id)\n : undefined;\n onChange(ids);\n }}\n className={styles.control}\n />\n );\n }\n return (\n <RelationField\n label={label}\n resource={filter.resource ?? filter.id}\n value={references[0] ?? null}\n onChange={(next) => {\n remember(next !== null ? [next] : []);\n onChange(next?.id);\n }}\n className={styles.control}\n />\n );\n}\n\n/** The built-in filter controls, by filter type. Unknown types are text filters. */\nexport const builtInFilters: Readonly<Record<string, FilterEntry>> = {\n text: TextFilter,\n select: SelectFilter,\n toggle: ToggleFilter,\n date: DateFilter,\n 'date-range': DateRangeFilter,\n relation: RelationFilter,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"controls.js","names":["useEffect","useFieldsContext","DateField","RelationField","useRelationReferences","FilterValue","isFilterRange","Fieldset","OptionValue","Select","Switch","TextInput","usePanneauIntl","messages","FilterControlProps","FilterEntry","useDraft","styles","asStrings","value","Array","isArray","map","String","undefined","TextFilter","t0","$","_c","label","onChange","current","t1","next","draft","setDraft","flush","t2","event","key","t3","control","SelectFilter","filter","options","intl","T0","t4","t5","multiple","Symbol","for","bb0","selected","t6","values","option","includes","_temp","toOptions","t7","formatMessage","any","placeholder","t8","length","next_0","option_0","ToggleFilter","checked","toggle","DateFilter","DateRangeFilter","range","from","to","nextFrom","nextTo","set","rangeDash","t9","t10","t11","t12","rangeInputs","t13","RelationFilter","onLabel","getValueLabel","resource","id","relationSource","references","forEach","reference","remember","_temp2","reference_1","ids","_temp3","next_1","reference_2","reference_0","builtInFilters","Readonly","Record","text","select","date","relation","_c","styles"],"sources":["../../src/filters/controls.tsx"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useFieldsContext } from '@panneau/fields';\nimport { DateField } from '@panneau/fields/date';\nimport { RelationField, useRelationReferences } from '@panneau/fields/relation';\nimport type { FilterValue } from '@panneau/protocol';\nimport { isFilterRange } from '@panneau/protocol/runtime';\nimport { Fieldset, type OptionValue, Select, Switch, TextInput, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { FilterControlProps, FilterEntry } from '../types';\nimport { useDraft } from '../useDraft';\nimport styles from './Filters.module.css';\n\nfunction asStrings(value: unknown): string[] {\n if (isFilterRange(value)) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.map(String);\n }\n return value === undefined || value === null || value === '' ? [] : [String(value)];\n}\n\n/** A text filter: the list changes once the user stops typing. */\nexport function TextFilter({ label, value, onChange }: FilterControlProps) {\n const current = typeof value === 'string' || typeof value === 'number' ? String(value) : '';\n const { draft, setDraft, flush } = useDraft(current, (next) =>\n onChange(next !== '' ? next : undefined),\n );\n return (\n <TextInput\n label={label}\n value={draft}\n onChange={setDraft}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n flush();\n }\n }}\n onBlur={flush}\n className={styles.control}\n />\n );\n}\n\n/** A choice among the options, or several with `multiple`. */\nexport function SelectFilter({ filter, label, options, value, onChange }: FilterControlProps) {\n const intl = usePanneauIntl();\n const selected = asStrings(value);\n // Values from the URL are strings: match them to the options' values.\n const toOptions = (values: readonly string[]): OptionValue[] =>\n options\n .filter((option) => values.includes(String(option.value)))\n .map((option) => option.value);\n const placeholder = intl.formatMessage(messages.any);\n if (filter.multiple === true) {\n return (\n <Select\n multiple\n label={label}\n options={options}\n placeholder={placeholder}\n value={toOptions(selected)}\n onChange={(next) => onChange(next.length > 0 ? next : undefined)}\n className={styles.control}\n />\n );\n }\n return (\n <Select\n label={label}\n options={options}\n placeholder={placeholder}\n value={toOptions(selected)[0] ?? null}\n onChange={(next) => onChange(next ?? undefined)}\n className={styles.control}\n />\n );\n}\n\n/** On or off: on filters with `true`, off removes the filter. */\nexport function ToggleFilter({ label, value, onChange }: FilterControlProps) {\n return (\n <Switch\n isSelected={String(value) === 'true'}\n onChange={(checked) => onChange(checked ? true : undefined)}\n className={styles.toggle}\n >\n {label}\n </Switch>\n );\n}\n\n/** A day (`2026-10-15`). */\nexport function DateFilter({ label, value, onChange }: FilterControlProps) {\n return (\n <DateField\n label={label}\n value={typeof value === 'string' && value !== '' ? value : null}\n onChange={(next) => onChange(next ?? undefined)}\n className={styles.control}\n />\n );\n}\n\n/**\n * A range of days, sent as its bounds (`filter[published_at][from]=2026-01-01&…[to]=…`). Either end\n * can be open: it is left out.\n */\nexport function DateRangeFilter({ label, value, onChange }: FilterControlProps) {\n const intl = usePanneauIntl();\n const range = isFilterRange(value) ? value : {};\n const from = range.from !== undefined ? String(range.from) : '';\n const to = range.to !== undefined ? String(range.to) : '';\n const set = (nextFrom: string, nextTo: string) =>\n onChange(\n nextFrom === '' && nextTo === ''\n ? undefined\n : {\n ...(nextFrom !== '' ? { from: nextFrom } : {}),\n ...(nextTo !== '' ? { to: nextTo } : {}),\n },\n );\n return (\n <Fieldset legend={label} className={styles.range}>\n {/* One row, like the other filters: the legend names the range, and each end is named\n for assistive technologies only. */}\n <div className={styles.rangeInputs}>\n <DateField\n aria-label={intl.formatMessage(messages.from)}\n value={from !== '' ? from : null}\n onChange={(next) => set(next ?? '', to)}\n />\n <span className={styles.rangeDash} aria-hidden=\"true\">\n –\n </span>\n <DateField\n aria-label={intl.formatMessage(messages.to)}\n value={to !== '' ? to : null}\n onChange={(next) => set(from, next ?? '')}\n />\n </div>\n </Fieldset>\n );\n}\n\n/**\n * An item of another resource (`resource`), or several with `multiple`, picked with the relation\n * source of the fields context. The filter keeps their ids; their labels are remembered for the\n * chips.\n */\nexport function RelationFilter({\n filter,\n label,\n value,\n onChange,\n onLabel,\n getValueLabel,\n}: FilterControlProps) {\n const resource = filter.resource ?? filter.id;\n // Ids from the URL have no label: the relation source resolves them, for the picker and chips.\n const references = useRelationReferences(\n useFieldsContext().relationSource,\n resource,\n asStrings(value).map((id) => ({ id, label: getValueLabel(id) ?? id })),\n );\n const remember = (next: readonly { id: string; label: string }[]) =>\n next.forEach((reference) => onLabel(reference.id, reference.label));\n useEffect(() => {\n references\n .filter((reference) => reference.label !== reference.id)\n .forEach((reference) => onLabel(reference.id, reference.label));\n }, [references, onLabel]);\n if (filter.multiple === true) {\n return (\n <RelationField\n multiple\n label={label}\n resource={resource}\n value={references}\n onChange={(next) => {\n remember(next ?? []);\n const ids: FilterValue | undefined =\n next !== null && next.length > 0\n ? next.map((reference) => reference.id)\n : undefined;\n onChange(ids);\n }}\n className={styles.control}\n />\n );\n }\n return (\n <RelationField\n label={label}\n resource={resource}\n value={references[0] ?? null}\n onChange={(next) => {\n remember(next !== null ? [next] : []);\n onChange(next?.id);\n }}\n className={styles.control}\n />\n );\n}\n\n/** The built-in filter controls, by filter type. Unknown types are text filters. */\nexport const builtInFilters: Readonly<Record<string, FilterEntry>> = {\n text: TextFilter,\n select: SelectFilter,\n toggle: ToggleFilter,\n date: DateFilter,\n 'date-range': DateRangeFilter,\n relation: RelationFilter,\n};\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { IntlShape } from 'react-intl';
2
2
  import type { Field, Filter, Option } from '@panneau/protocol';
3
- import type { ListColumn } from '../types';
3
+ import type { ListColumn } from '../types.js';
4
4
  /** The label of a filter: its `label`, the label of its field, or its id. */
5
5
  export declare function getFilterLabel(filter: Filter, columns: readonly ListColumn[], fields: readonly Field[]): string;
6
6
  /** The field a filter filters, when a column or the list's fields have one with its id. */
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/filters/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,6EAA6E;AAC7E,wBAAgB,cAAc,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,MAAM,CAMR;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,KAAK,GAAG,IAAI,CAMd;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,SAAS,MAAM,EAAE,CAEnB;AAcD,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,EACI,IAAI,EACJ,OAAO,EACP,aAAa,GAChB,EAAE;IACC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACnD,GACF,MAAM,CAqBR"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/filters/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,6EAA6E;AAC7E,wBAAgB,cAAc,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,MAAM,CAMR;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,KAAK,GAAG,IAAI,CAMd;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,SAAS,KAAK,EAAE,GACzB,SAAS,MAAM,EAAE,CAEnB;AAcD,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,EACI,IAAI,EACJ,OAAO,EACP,aAAa,GAChB,EAAE;IACC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACnD,GACF,MAAM,CAuBR"}
@@ -1,5 +1,6 @@
1
1
  import { messages } from "../messages.js";
2
2
  import { getFieldOptions, getOptionLabel } from "../values.js";
3
+ import { isFilterRange } from "@panneau/protocol/runtime";
3
4
  //#region src/filters/format.ts
4
5
  /** The label of a filter: its `label`, the label of its field, or its id. */
5
6
  function getFilterLabel(filter, columns, fields) {
@@ -27,7 +28,9 @@ function formatFilterValue(filter, value, { intl, options, getValueLabel }) {
27
28
  case "toggle": return intl.formatMessage(String(value) === "true" ? messages.yes : messages.no);
28
29
  case "date": return formatDay(String(value), intl);
29
30
  case "date-range": {
30
- const [from = "", to = ""] = values.map(String);
31
+ const range = isFilterRange(value) ? value : {};
32
+ const from = range.from !== void 0 ? String(range.from) : "";
33
+ const to = range.to !== void 0 ? String(range.to) : "";
31
34
  return intl.formatMessage(messages.dateRange, {
32
35
  from: from !== "" ? formatDay(from, intl) : "…",
33
36
  to: to !== "" ? formatDay(to, intl) : "…"
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","names":[],"sources":["../../src/filters/format.ts"],"sourcesContent":["import type { IntlShape } from 'react-intl';\n\nimport type { Field, Filter, Option } from '@panneau/protocol';\n\nimport { messages } from '../messages';\nimport type { ListColumn } from '../types';\nimport { getFieldOptions, getOptionLabel } from '../values';\n\n/** The label of a filter: its `label`, the label of its field, or its id. */\nexport function getFilterLabel(\n filter: Filter,\n columns: readonly ListColumn[],\n fields: readonly Field[],\n): string {\n if (filter.label !== undefined) {\n return filter.label;\n }\n const field = findFilterField(filter, columns, fields);\n return field?.label ?? filter.id;\n}\n\n/** The field a filter filters, when a column or the list's fields have one with its id. */\nexport function findFilterField(\n filter: Filter,\n columns: readonly ListColumn[],\n fields: readonly Field[],\n): Field | null {\n return (\n fields.find((field) => field.name === filter.id) ??\n columns.find((column) => column.field?.name === filter.id)?.field ??\n null\n );\n}\n\n/** The options of a filter: its own, or those of the field it filters. */\nexport function getFilterOptions(\n filter: Filter,\n columns: readonly ListColumn[],\n fields: readonly Field[],\n): readonly Option[] {\n return filter.options ?? getFieldOptions(findFilterField(filter, columns, fields));\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nfunction formatDay(value: string, intl: IntlShape): string {\n const match = DATE_ONLY.exec(value);\n if (match === null) {\n return value;\n }\n return intl.formatDate(new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3])), {\n dateStyle: 'medium',\n });\n}\n\n/** The value of an active filter, as the text of its chip. */\nexport function formatFilterValue(\n filter: Filter,\n value: unknown,\n {\n intl,\n options,\n getValueLabel,\n }: {\n intl: IntlShape;\n options: readonly Option[];\n getValueLabel: (value: string) => string | null;\n },\n): string {\n const values: unknown[] = Array.isArray(value) ? value : [value];\n switch (filter.type) {\n case 'toggle':\n return intl.formatMessage(String(value) === 'true' ? messages.yes : messages.no);\n case 'date':\n return formatDay(String(value), intl);\n case 'date-range': {\n const [from = '', to = ''] = values.map(String);\n return intl.formatMessage(messages.dateRange, {\n from: from !== '' ? formatDay(from, intl) : '…',\n to: to !== '' ? formatDay(to, intl) : '…',\n });\n }\n case 'relation':\n return values.map((entry) => getValueLabel(String(entry)) ?? String(entry)).join(', ');\n default:\n return values\n .map((entry) => getOptionLabel(options, entry) ?? String(entry))\n .join(', ');\n }\n}\n"],"mappings":";;;;AASA,SAAgB,eACZ,QACA,SACA,QACM;CACN,IAAI,OAAO,UAAU,KAAA,GACjB,OAAO,OAAO;CAGlB,OADc,gBAAgB,QAAQ,SAAS,MACxC,CAAA,EAAO,SAAS,OAAO;AAClC;;AAGA,SAAgB,gBACZ,QACA,SACA,QACY;CACZ,OACI,OAAO,MAAM,UAAU,MAAM,SAAS,OAAO,EAAE,KAC/C,QAAQ,MAAM,WAAW,OAAO,OAAO,SAAS,OAAO,EAAE,CAAC,EAAE,SAC5D;AAER;;AAGA,SAAgB,iBACZ,QACA,SACA,QACiB;CACjB,OAAO,OAAO,WAAW,gBAAgB,gBAAgB,QAAQ,SAAS,MAAM,CAAC;AACrF;AAEA,IAAM,YAAY;AAElB,SAAS,UAAU,OAAe,MAAyB;CACvD,MAAM,QAAQ,UAAU,KAAK,KAAK;CAClC,IAAI,UAAU,MACV,OAAO;CAEX,OAAO,KAAK,WAAW,IAAI,KAAK,OAAO,MAAM,EAAE,GAAG,OAAO,MAAM,EAAE,IAAI,GAAG,OAAO,MAAM,EAAE,CAAC,GAAG,EACvF,WAAW,SACf,CAAC;AACL;;AAGA,SAAgB,kBACZ,QACA,OACA,EACI,MACA,SACA,iBAME;CACN,MAAM,SAAoB,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;CAC/D,QAAQ,OAAO,MAAf;EACI,KAAK,UACD,OAAO,KAAK,cAAc,OAAO,KAAK,MAAM,SAAS,SAAS,MAAM,SAAS,EAAE;EACnF,KAAK,QACD,OAAO,UAAU,OAAO,KAAK,GAAG,IAAI;EACxC,KAAK,cAAc;GACf,MAAM,CAAC,OAAO,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM;GAC9C,OAAO,KAAK,cAAc,SAAS,WAAW;IAC1C,MAAM,SAAS,KAAK,UAAU,MAAM,IAAI,IAAI;IAC5C,IAAI,OAAO,KAAK,UAAU,IAAI,IAAI,IAAI;GAC1C,CAAC;EACL;EACA,KAAK,YACD,OAAO,OAAO,KAAK,UAAU,cAAc,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;EACzF,SACI,OAAO,OACF,KAAK,UAAU,eAAe,SAAS,KAAK,KAAK,OAAO,KAAK,CAAC,CAAC,CAC/D,KAAK,IAAI;CACtB;AACJ"}
1
+ {"version":3,"file":"format.js","names":["IntlShape","Field","Filter","Option","isFilterRange","messages","ListColumn","getFieldOptions","getOptionLabel","getFilterLabel","filter","columns","fields","label","undefined","field","findFilterField","id","find","name","column","getFilterOptions","options","DATE_ONLY","formatDay","value","intl","match","exec","formatDate","Date","Number","dateStyle","formatFilterValue","getValueLabel","values","Array","isArray","type","formatMessage","String","yes","no","range","from","to","dateRange","map","entry","join"],"sources":["../../src/filters/format.ts"],"sourcesContent":["import type { IntlShape } from 'react-intl';\n\nimport type { Field, Filter, Option } from '@panneau/protocol';\nimport { isFilterRange } from '@panneau/protocol/runtime';\n\nimport { messages } from '../messages';\nimport type { ListColumn } from '../types';\nimport { getFieldOptions, getOptionLabel } from '../values';\n\n/** The label of a filter: its `label`, the label of its field, or its id. */\nexport function getFilterLabel(\n filter: Filter,\n columns: readonly ListColumn[],\n fields: readonly Field[],\n): string {\n if (filter.label !== undefined) {\n return filter.label;\n }\n const field = findFilterField(filter, columns, fields);\n return field?.label ?? filter.id;\n}\n\n/** The field a filter filters, when a column or the list's fields have one with its id. */\nexport function findFilterField(\n filter: Filter,\n columns: readonly ListColumn[],\n fields: readonly Field[],\n): Field | null {\n return (\n fields.find((field) => field.name === filter.id) ??\n columns.find((column) => column.field?.name === filter.id)?.field ??\n null\n );\n}\n\n/** The options of a filter: its own, or those of the field it filters. */\nexport function getFilterOptions(\n filter: Filter,\n columns: readonly ListColumn[],\n fields: readonly Field[],\n): readonly Option[] {\n return filter.options ?? getFieldOptions(findFilterField(filter, columns, fields));\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nfunction formatDay(value: string, intl: IntlShape): string {\n const match = DATE_ONLY.exec(value);\n if (match === null) {\n return value;\n }\n return intl.formatDate(new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3])), {\n dateStyle: 'medium',\n });\n}\n\n/** The value of an active filter, as the text of its chip. */\nexport function formatFilterValue(\n filter: Filter,\n value: unknown,\n {\n intl,\n options,\n getValueLabel,\n }: {\n intl: IntlShape;\n options: readonly Option[];\n getValueLabel: (value: string) => string | null;\n },\n): string {\n const values: unknown[] = Array.isArray(value) ? value : [value];\n switch (filter.type) {\n case 'toggle':\n return intl.formatMessage(String(value) === 'true' ? messages.yes : messages.no);\n case 'date':\n return formatDay(String(value), intl);\n case 'date-range': {\n const range = isFilterRange(value) ? value : {};\n const from = range.from !== undefined ? String(range.from) : '';\n const to = range.to !== undefined ? String(range.to) : '';\n return intl.formatMessage(messages.dateRange, {\n from: from !== '' ? formatDay(from, intl) : '…',\n to: to !== '' ? formatDay(to, intl) : '…',\n });\n }\n case 'relation':\n return values.map((entry) => getValueLabel(String(entry)) ?? String(entry)).join(', ');\n default:\n return values\n .map((entry) => getOptionLabel(options, entry) ?? String(entry))\n .join(', ');\n }\n}\n"],"mappings":";;;;;AAUA,SAAgBS,eACZC,QACAC,SACAC,QACM;CACN,IAAIF,OAAOG,UAAUC,KAAAA,GACjB,OAAOJ,OAAOG;CAGlB,OADcG,gBAAgBN,QAAQC,SAASC,MACxCG,CAAAA,EAAOF,SAASH,OAAOO;AAClC;;AAGA,SAAgBD,gBACZN,QACAC,SACAC,QACY;CACZ,OACIA,OAAOM,MAAMH,UAAUA,MAAMI,SAAST,OAAOO,EAAE,KAC/CN,QAAQO,MAAME,WAAWA,OAAOL,OAAOI,SAAST,OAAOO,EAAE,CAAC,EAAEF,SAC5D;AAER;;AAGA,SAAgBM,iBACZX,QACAC,SACAC,QACiB;CACjB,OAAOF,OAAOY,WAAWf,gBAAgBS,gBAAgBN,QAAQC,SAASC,MAAM,CAAC;AACrF;AAEA,IAAMW,YAAY;AAElB,SAASC,UAAUC,OAAeC,MAAyB;CACvD,MAAMC,QAAQJ,UAAUK,KAAKH,KAAK;CAClC,IAAIE,UAAU,MACV,OAAOF;CAEX,OAAOC,KAAKG,WAAW,IAAIC,KAAKC,OAAOJ,MAAM,EAAE,GAAGI,OAAOJ,MAAM,EAAE,IAAI,GAAGI,OAAOJ,MAAM,EAAE,CAAC,GAAG,EACvFK,WAAW,SACf,CAAC;AACL;;AAGA,SAAgBC,kBACZvB,QACAe,OACA,EACIC,MACAJ,SACAY,iBAME;CACN,MAAMC,SAAoBC,MAAMC,QAAQZ,KAAK,IAAIA,QAAQ,CAACA,KAAK;CAC/D,QAAQf,OAAO4B,MAAf;EACI,KAAK,UACD,OAAOZ,KAAKa,cAAcC,OAAOf,KAAK,MAAM,SAASpB,SAASoC,MAAMpC,SAASqC,EAAE;EACnF,KAAK,QACD,OAAOlB,UAAUgB,OAAOf,KAAK,GAAGC,IAAI;EACxC,KAAK,cAAc;GACf,MAAMiB,QAAQvC,cAAcqB,KAAK,IAAIA,QAAQ,CAAC;GAC9C,MAAMmB,OAAOD,MAAMC,SAAS9B,KAAAA,IAAY0B,OAAOG,MAAMC,IAAI,IAAI;GAC7D,MAAMC,KAAKF,MAAME,OAAO/B,KAAAA,IAAY0B,OAAOG,MAAME,EAAE,IAAI;GACvD,OAAOnB,KAAKa,cAAclC,SAASyC,WAAW;IAC1CF,MAAMA,SAAS,KAAKpB,UAAUoB,MAAMlB,IAAI,IAAI;IAC5CmB,IAAIA,OAAO,KAAKrB,UAAUqB,IAAInB,IAAI,IAAI;GAC1C,CAAC;EACL;EACA,KAAK,YACD,OAAOS,OAAOY,KAAKC,UAAUd,cAAcM,OAAOQ,KAAK,CAAC,KAAKR,OAAOQ,KAAK,CAAC,CAAC,CAACC,KAAK,IAAI;EACzF,SACI,OAAOd,OACFY,KAAKC,UAAUxC,eAAec,SAAS0B,KAAK,KAAKR,OAAOQ,KAAK,CAAC,CAAC,CAC/DC,KAAK,IAAI;CACtB;AACJ"}
package/dist/index.d.ts CHANGED
@@ -1,18 +1,20 @@
1
- export { type ListActions, getActionHref, groupListActions, isAllowedOn } from './actions/actions';
2
- export { ConfirmDialog, type ConfirmDialogProps } from './actions/ConfirmDialog';
3
- export { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, EmailDisplay, EmptyValue, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays, } from './displays/displays';
4
- export { DateFilter, DateRangeFilter, RelationFilter, SelectFilter, TextFilter, ToggleFilter, builtInFilters, } from './filters/controls';
5
- export { CardsLayout } from './layouts/CardsLayout';
6
- export { TableLayout } from './layouts/TableLayout';
7
- export { builtInLayouts } from './layouts/builtIn';
8
- export { List, type ListProps } from './List';
9
- export { ListView, type ListViewProps } from './ListView';
10
- export { listsPlugin } from './plugin';
11
- export { type LocalQueryOptions, type LocalQueryResult, applyListQuery } from './query';
12
- export { countSelected, getPageSelection, isItemSelected } from './selection';
13
- export { Pagination, type PaginationProps } from './toolbar/Pagination';
14
- export { SearchField, type SearchFieldProps } from './toolbar/SearchField';
15
- export type { DisplayEntry, DisplayProps, FilterControlProps, FilterEntry, ListActionEvent, ListActionHandler, ListColumn, ListItem, ListLayoutEntry, ListLayoutProps, } from './types';
16
- export { useListState } from './useListState';
17
- export { getLocalizedValue, toText } from './values';
1
+ export { type ListActions, getActionHref, groupListActions, isAllowedOn } from './actions/actions.js';
2
+ export { ConfirmDialog, type ConfirmDialogProps, type ConfirmPreview, } from './actions/ConfirmDialog.js';
3
+ export { type ActionIcons, getActionIcon } from './actions/icons.js';
4
+ export { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, JsonDisplay, LocationDisplay, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TagsDisplay, TelDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays, } from './displays/displays.js';
5
+ export { DateFilter, DateRangeFilter, RelationFilter, SelectFilter, TextFilter, ToggleFilter, builtInFilters, } from './filters/controls.js';
6
+ export { CardsLayout } from './layouts/CardsLayout.js';
7
+ export { TableLayout } from './layouts/TableLayout.js';
8
+ export { builtInLayouts } from './layouts/builtIn.js';
9
+ export { ItemDetails, type ItemDetailsProps } from './ItemDetails.js';
10
+ export { List, type ListProps } from './List.js';
11
+ export { ListView, type ListViewProps } from './ListView.js';
12
+ export { listsPlugin } from './plugin.js';
13
+ export { type LocalQueryOptions, type LocalQueryResult, applyListQuery } from './query.js';
14
+ export { countSelected, getPageSelection, isItemSelected } from './selection.js';
15
+ export { CursorPagination, type CursorPaginationProps, Pagination, type PaginationProps, getPagingProps, } from './toolbar/Pagination.js';
16
+ export { SearchField, type SearchFieldProps } from './toolbar/SearchField.js';
17
+ export type { DisplayEntry, DisplayProps, FilterControlProps, FilterEntry, ListActionEvent, ListActionHandler, ListActionPreview, ListActionPreviewer, ListColumn, ListItem, ListLayoutEntry, ListLayoutProps, } from './types.js';
18
+ export { useListState } from './useListState.js';
19
+ export { getLocalizedValue, toText } from './values.js';
18
20
  //# 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,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,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,EACV,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,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,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,EACH,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,UAAU,EACV,KAAK,eAAe,EACpB,cAAc,GACjB,MAAM,sBAAsB,CAAC;AAC9B,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"}
package/dist/index.js CHANGED
@@ -1,17 +1,19 @@
1
1
  import { getActionHref, groupListActions, isAllowedOn } from "./actions/actions.js";
2
2
  import { ConfirmDialog } from "./actions/ConfirmDialog.js";
3
+ import { getActionIcon } from "./actions/icons.js";
3
4
  import { getLocalizedValue, toText } from "./values.js";
4
- import { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, EmailDisplay, EmptyValue, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays } from "./displays/displays.js";
5
+ import { BooleanDisplay, ColorDisplay, DateDisplay, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, JsonDisplay, LocationDisplay, MediaDisplay, NumberDisplay, RelationDisplay, RichTextDisplay, SelectDisplay, TagsDisplay, TelDisplay, TextDisplay, TimeDisplay, UrlDisplay, builtInDisplays } from "./displays/displays.js";
5
6
  import { DateFilter, DateRangeFilter, RelationFilter, SelectFilter, TextFilter, ToggleFilter, builtInFilters } from "./filters/controls.js";
6
7
  import { CardsLayout } from "./layouts/CardsLayout.js";
7
8
  import { TableLayout } from "./layouts/TableLayout.js";
8
9
  import { builtInLayouts } from "./layouts/builtIn.js";
10
+ import { ItemDetails } from "./ItemDetails.js";
9
11
  import { countSelected, getPageSelection, isItemSelected } from "./selection.js";
10
- import { Pagination } from "./toolbar/Pagination.js";
12
+ import { CursorPagination, Pagination, getPagingProps } from "./toolbar/Pagination.js";
11
13
  import { SearchField } from "./toolbar/SearchField.js";
12
14
  import { useListState } from "./useListState.js";
13
15
  import { ListView } from "./ListView.js";
14
16
  import { applyListQuery } from "./query.js";
15
17
  import { List } from "./List.js";
16
18
  import { listsPlugin } from "./plugin.js";
17
- export { BooleanDisplay, CardsLayout, ColorDisplay, ConfirmDialog, DateDisplay, DateFilter, DateRangeFilter, DateTimeDisplay, EmailDisplay, EmptyValue, List, ListView, MediaDisplay, NumberDisplay, Pagination, RelationDisplay, RelationFilter, RichTextDisplay, SearchField, SelectDisplay, SelectFilter, TableLayout, TextDisplay, TextFilter, TimeDisplay, ToggleFilter, UrlDisplay, applyListQuery, builtInDisplays, builtInFilters, builtInLayouts, countSelected, getActionHref, getLocalizedValue, getPageSelection, groupListActions, isAllowedOn, isItemSelected, listsPlugin, toText, useListState };
19
+ export { BooleanDisplay, CardsLayout, ColorDisplay, ConfirmDialog, CursorPagination, DateDisplay, DateFilter, DateRangeFilter, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, ItemDetails, JsonDisplay, List, ListView, LocationDisplay, MediaDisplay, NumberDisplay, Pagination, RelationDisplay, RelationFilter, RichTextDisplay, SearchField, SelectDisplay, SelectFilter, TableLayout, TagsDisplay, TelDisplay, TextDisplay, TextFilter, TimeDisplay, ToggleFilter, UrlDisplay, applyListQuery, builtInDisplays, builtInFilters, builtInLayouts, countSelected, getActionHref, getActionIcon, getLocalizedValue, getPageSelection, getPagingProps, groupListActions, isAllowedOn, isItemSelected, listsPlugin, toText, useListState };