@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.
- package/README.md +7 -3
- package/dist/ItemDetails.css +34 -0
- package/dist/ItemDetails.d.ts +18 -0
- package/dist/ItemDetails.d.ts.map +1 -0
- package/dist/ItemDetails.js +104 -0
- package/dist/ItemDetails.js.map +1 -0
- package/dist/ItemDetails.module.js +16 -0
- package/dist/ItemDetails.module.js.map +1 -0
- package/dist/List.d.ts +2 -2
- package/dist/List.js +54 -12
- package/dist/List.js.map +1 -1
- package/dist/ListSkeleton.d.ts +17 -0
- package/dist/ListSkeleton.d.ts.map +1 -0
- package/dist/ListSkeleton.js +111 -0
- package/dist/ListSkeleton.js.map +1 -0
- package/dist/ListView.css +16 -16
- package/dist/ListView.d.ts +40 -5
- package/dist/ListView.d.ts.map +1 -1
- package/dist/ListView.js +547 -211
- package/dist/ListView.js.map +1 -1
- package/dist/ListView.module.js +10 -10
- package/dist/actions/ActionButton.d.ts +4 -1
- package/dist/actions/ActionButton.d.ts.map +1 -1
- package/dist/actions/ActionButton.js +91 -23
- package/dist/actions/ActionButton.js.map +1 -1
- package/dist/actions/Actions.css +9 -9
- package/dist/actions/Actions.module.js +6 -6
- package/dist/actions/ConfirmDialog.d.ts +15 -3
- package/dist/actions/ConfirmDialog.d.ts.map +1 -1
- package/dist/actions/ConfirmDialog.js +103 -89
- package/dist/actions/ConfirmDialog.js.map +1 -1
- package/dist/actions/RowActions.d.ts +8 -6
- package/dist/actions/RowActions.d.ts.map +1 -1
- package/dist/actions/RowActions.js +40 -30
- package/dist/actions/RowActions.js.map +1 -1
- package/dist/actions/actions.d.ts +5 -4
- package/dist/actions/actions.d.ts.map +1 -1
- package/dist/actions/actions.js +7 -14
- package/dist/actions/actions.js.map +1 -1
- package/dist/actions/icons.d.ts +8 -3
- package/dist/actions/icons.d.ts.map +1 -1
- package/dist/actions/icons.js +11 -7
- package/dist/actions/icons.js.map +1 -1
- package/dist/cx.js.map +1 -1
- package/dist/displays/Displays.css +25 -13
- package/dist/displays/Displays.module.js +18 -14
- package/dist/displays/Displays.module.js.map +1 -1
- package/dist/displays/displays.d.ts +18 -3
- package/dist/displays/displays.d.ts.map +1 -1
- package/dist/displays/displays.js +355 -12
- package/dist/displays/displays.js.map +1 -1
- package/dist/filters/Filters.css +34 -20
- package/dist/filters/Filters.d.ts +1 -1
- package/dist/filters/Filters.js.map +1 -1
- package/dist/filters/Filters.module.js +13 -9
- package/dist/filters/Filters.module.js.map +1 -1
- package/dist/filters/controls.d.ts +3 -3
- package/dist/filters/controls.d.ts.map +1 -1
- package/dist/filters/controls.js +171 -123
- package/dist/filters/controls.js.map +1 -1
- package/dist/filters/format.d.ts +1 -1
- package/dist/filters/format.d.ts.map +1 -1
- package/dist/filters/format.js +4 -1
- package/dist/filters/format.js.map +1 -1
- package/dist/index.d.ts +19 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/layouts/CardsLayout.css +22 -11
- package/dist/layouts/CardsLayout.d.ts +2 -2
- package/dist/layouts/CardsLayout.d.ts.map +1 -1
- package/dist/layouts/CardsLayout.js +39 -35
- package/dist/layouts/CardsLayout.js.map +1 -1
- package/dist/layouts/CardsLayout.module.js +8 -8
- package/dist/layouts/CardsLayout.module.js.map +1 -1
- package/dist/layouts/ItemTitle.d.ts +4 -2
- package/dist/layouts/ItemTitle.d.ts.map +1 -1
- package/dist/layouts/ItemTitle.js +12 -8
- package/dist/layouts/ItemTitle.js.map +1 -1
- package/dist/layouts/TableLayout.css +51 -35
- package/dist/layouts/TableLayout.d.ts +2 -2
- package/dist/layouts/TableLayout.d.ts.map +1 -1
- package/dist/layouts/TableLayout.js +38 -33
- package/dist/layouts/TableLayout.js.map +1 -1
- package/dist/layouts/TableLayout.module.js +14 -14
- package/dist/layouts/TableLayout.module.js.map +1 -1
- package/dist/layouts/builtIn.d.ts +1 -1
- package/dist/layouts/builtIn.js.map +1 -1
- package/dist/layouts/link.css +3 -3
- package/dist/layouts/link.module.js +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/query.d.ts +3 -3
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +7 -2
- package/dist/query.js.map +1 -1
- package/dist/selection.d.ts +1 -1
- package/dist/selection.js.map +1 -1
- package/dist/toolbar/LayoutSwitch.js.map +1 -1
- package/dist/toolbar/Pagination.d.ts +33 -0
- package/dist/toolbar/Pagination.d.ts.map +1 -1
- package/dist/toolbar/Pagination.js +282 -42
- package/dist/toolbar/Pagination.js.map +1 -1
- package/dist/toolbar/SearchField.js.map +1 -1
- package/dist/toolbar/SortSelect.d.ts +1 -1
- package/dist/toolbar/SortSelect.js.map +1 -1
- package/dist/toolbar/Toolbar.css +12 -12
- package/dist/toolbar/Toolbar.module.js +7 -7
- package/dist/types.d.ts +18 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/useDraft.js.map +1 -1
- package/dist/useListState.js.map +1 -1
- package/dist/useRenderValue.d.ts +8 -0
- package/dist/useRenderValue.d.ts.map +1 -0
- package/dist/useRenderValue.js +64 -0
- package/dist/useRenderValue.js.map +1 -0
- package/dist/values.d.ts +3 -1
- package/dist/values.d.ts.map +1 -1
- package/dist/values.js +6 -2
- package/dist/values.js.map +1 -1
- package/package.json +9 -9
package/dist/filters/controls.js
CHANGED
|
@@ -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
|
|
210
|
-
*
|
|
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(
|
|
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 =
|
|
222
|
+
t1 = isFilterRange(value) ? value : {};
|
|
219
223
|
$[0] = value;
|
|
220
224
|
$[1] = t1;
|
|
221
225
|
} else t1 = $[1];
|
|
222
|
-
const
|
|
223
|
-
const from =
|
|
224
|
-
const to =
|
|
225
|
-
let
|
|
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
|
-
|
|
231
|
+
t2 = (nextFrom, nextTo) => onChange(nextFrom === "" && nextTo === "" ? void 0 : {
|
|
232
|
+
...nextFrom !== "" ? { from: nextFrom } : {},
|
|
233
|
+
...nextTo !== "" ? { to: nextTo } : {}
|
|
234
|
+
});
|
|
228
235
|
$[2] = onChange;
|
|
229
|
-
$[3] =
|
|
230
|
-
} else
|
|
231
|
-
const set =
|
|
232
|
-
let
|
|
236
|
+
$[3] = t2;
|
|
237
|
+
} else t2 = $[3];
|
|
238
|
+
const set = t2;
|
|
239
|
+
let t3;
|
|
233
240
|
if ($[4] !== intl) {
|
|
234
|
-
|
|
241
|
+
t3 = intl.formatMessage(messages.from);
|
|
235
242
|
$[4] = intl;
|
|
236
|
-
$[5] =
|
|
237
|
-
} else
|
|
238
|
-
const
|
|
239
|
-
let
|
|
243
|
+
$[5] = t3;
|
|
244
|
+
} else t3 = $[5];
|
|
245
|
+
const t4 = from !== "" ? from : null;
|
|
246
|
+
let t5;
|
|
240
247
|
if ($[6] !== set || $[7] !== to) {
|
|
241
|
-
|
|
248
|
+
t5 = (next) => set(next ?? "", to);
|
|
242
249
|
$[6] = set;
|
|
243
250
|
$[7] = to;
|
|
244
|
-
$[8] =
|
|
245
|
-
} else
|
|
246
|
-
let
|
|
247
|
-
if ($[9] !==
|
|
248
|
-
|
|
249
|
-
label:
|
|
250
|
-
value:
|
|
251
|
-
onChange:
|
|
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] =
|
|
254
|
-
$[10] =
|
|
255
|
-
$[11] =
|
|
256
|
-
$[12] =
|
|
257
|
-
} else
|
|
258
|
-
let
|
|
259
|
-
if ($[13]
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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 ($[
|
|
267
|
-
t11 =
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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 ($[
|
|
274
|
-
t12 = /* @__PURE__ */
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
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
|
-
$[
|
|
280
|
-
$[
|
|
281
|
-
$[
|
|
282
|
-
|
|
283
|
-
} else t12 = $[21];
|
|
310
|
+
$[23] = t11;
|
|
311
|
+
$[24] = t6;
|
|
312
|
+
$[25] = t12;
|
|
313
|
+
} else t12 = $[25];
|
|
284
314
|
let t13;
|
|
285
|
-
if ($[
|
|
286
|
-
t13 = /* @__PURE__ */
|
|
315
|
+
if ($[26] !== label || $[27] !== t12) {
|
|
316
|
+
t13 = /* @__PURE__ */ jsx(Fieldset, {
|
|
287
317
|
legend: label,
|
|
288
318
|
className: Filters_module_default.range,
|
|
289
|
-
children:
|
|
319
|
+
children: t12
|
|
290
320
|
});
|
|
291
|
-
$[
|
|
292
|
-
$[
|
|
293
|
-
$[
|
|
294
|
-
|
|
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(
|
|
333
|
+
const $ = c(27);
|
|
305
334
|
const { filter, label, value, onChange, onLabel, getValueLabel } = t0;
|
|
306
|
-
|
|
335
|
+
const resource = filter.resource ?? filter.id;
|
|
336
|
+
const t1 = useFieldsContext().relationSource;
|
|
337
|
+
let t2;
|
|
307
338
|
if ($[0] !== getValueLabel || $[1] !== value) {
|
|
308
|
-
let
|
|
339
|
+
let t3;
|
|
309
340
|
if ($[3] !== getValueLabel) {
|
|
310
|
-
|
|
341
|
+
t3 = (id) => ({
|
|
311
342
|
id,
|
|
312
343
|
label: getValueLabel(id) ?? id
|
|
313
344
|
});
|
|
314
345
|
$[3] = getValueLabel;
|
|
315
|
-
$[4] =
|
|
316
|
-
} else
|
|
317
|
-
|
|
346
|
+
$[4] = t3;
|
|
347
|
+
} else t3 = $[4];
|
|
348
|
+
t2 = asStrings(value).map(t3);
|
|
318
349
|
$[0] = getValueLabel;
|
|
319
350
|
$[1] = value;
|
|
320
|
-
$[2] =
|
|
321
|
-
} else
|
|
322
|
-
const references = t1;
|
|
323
|
-
let
|
|
351
|
+
$[2] = t2;
|
|
352
|
+
} else t2 = $[2];
|
|
353
|
+
const references = useRelationReferences(t1, resource, t2);
|
|
354
|
+
let t3;
|
|
324
355
|
if ($[5] !== onLabel) {
|
|
325
|
-
|
|
356
|
+
t3 = (next) => next.forEach((reference) => onLabel(reference.id, reference.label));
|
|
326
357
|
$[5] = onLabel;
|
|
327
|
-
$[6] =
|
|
328
|
-
} else
|
|
329
|
-
const remember =
|
|
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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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(
|
|
382
|
+
const ids = next_0 !== null && next_0.length > 0 ? next_0.map(_temp3) : void 0;
|
|
337
383
|
onChange(ids);
|
|
338
384
|
};
|
|
339
|
-
$[
|
|
340
|
-
$[
|
|
341
|
-
$[
|
|
342
|
-
} else
|
|
343
|
-
let
|
|
344
|
-
if ($[
|
|
345
|
-
|
|
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
|
|
394
|
+
resource,
|
|
349
395
|
value: references,
|
|
350
|
-
onChange:
|
|
396
|
+
onChange: t6,
|
|
351
397
|
className: Filters_module_default.control
|
|
352
398
|
});
|
|
353
|
-
$[
|
|
354
|
-
$[
|
|
355
|
-
$[
|
|
356
|
-
$[
|
|
357
|
-
$[
|
|
358
|
-
} else
|
|
359
|
-
return
|
|
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
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
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
|
-
$[
|
|
370
|
-
$[
|
|
371
|
-
$[
|
|
372
|
-
} else
|
|
373
|
-
let
|
|
374
|
-
if ($[
|
|
375
|
-
|
|
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
|
|
378
|
-
value:
|
|
379
|
-
onChange:
|
|
422
|
+
resource,
|
|
423
|
+
value: t6,
|
|
424
|
+
onChange: t7,
|
|
380
425
|
className: Filters_module_default.control
|
|
381
426
|
});
|
|
382
|
-
$[
|
|
383
|
-
$[
|
|
384
|
-
$[
|
|
385
|
-
$[
|
|
386
|
-
$[
|
|
387
|
-
} else
|
|
388
|
-
return
|
|
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":";;;;;;;;;;;;AAcA,SAASkB,UAAUC,OAA0B;CACzC,IAAIb,cAAca,KAAK,GACnB,OAAO,CAAA;CAEX,IAAIC,MAAMC,QAAQF,KAAK,GACnB,OAAOA,MAAMG,IAAIC,MAAM;CAE3B,OAAOJ,UAAUK,KAAAA,KAAaL,UAAU,QAAQA,UAAU,KAAK,CAAA,IAAK,CAACI,OAAOJ,KAAK,CAAC;AACtF;;AAGA,SAAOM,WAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAoB,MAAA,EAAAC,OAAAV,OAAAW,aAAAJ;CACvB,MAAAK,UAAgB,OAAOZ,UAAU,YAAY,OAAOA,UAAU,WAAWI,OAAOJ,KAAU,IAA1E;CAA4E,IAAAa;CAAA,IAAAL,EAAA,OAAAG,UAAA;EACvCE,MAAAC,SACjDH,SAASG,SAAS,KAATA,OAAAT,KAAAA,CAA8B;EAACG,EAAA,KAAAG;EAAAH,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAD5C,MAAA,EAAAO,OAAAC,UAAAC,UAAmCpB,SAASe,SAASC,EAErD;CAAE,IAAAK;CAAA,IAAAV,EAAA,OAAAS,OAAA;EAMiBC,MAAAC,UAAA;GACP,IAAIA,MAAKC,QAAS,SACdH,MAAM;EACT;EACJT,EAAA,KAAAS;EAAAT,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,OAAAO,SAAAP,EAAA,OAAAS,SAAAT,EAAA,OAAAE,SAAAF,EAAA,OAAAQ,YAAAR,EAAA,OAAAU,IAAA;EARLG,KAAA,oBAAC,WAAD;GACWX;GACAK,OAAAA;GACGC,UAAAA;GACC,WAAAE;GAKHD,QAAAA;GACG,WAAAnB,uBAAMwB;EAAQ,CAAA;EAC3Bd,EAAA,KAAAO;EAAAP,EAAA,KAAAS;EAAAT,EAAA,KAAAE;EAAAF,EAAA,KAAAQ;EAAAR,EAAA,KAAAU;EAAAV,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,OAXFa;AAWE;;AAKV,SAAOE,aAAAhB,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAsB,MAAA,EAAAe,QAAAd,OAAAe,SAAAzB,OAAAW,aAAAJ;CACzB,MAAAmB,OAAajC,eAAe;CAAE,IAAAkC;CAAA,IAAAd;CAAA,IAAAK;CAAA,IAAAG;CAAA,IAAAO;CAAA,IAAAC;CAAA,IAAArB,EAAA,OAAAgB,OAAAM,YAAAtB,EAAA,OAAAkB,QAAAlB,EAAA,OAAAE,SAAAF,EAAA,OAAAG,YAAAH,EAAA,OAAAiB,WAAAjB,EAAA,OAAAR,OAAA;EAUtB6B,KAAAE,OAQEC,IARF,6BAQC;EAACC,KAAA;GAjBV,MAAAC,WAAiBnC,UAAUC,KAAK;GAAE,IAAAmC;GAAA,IAAA3B,EAAA,QAAAiB,SAAA;IAEhBU,MAAAC,WACdX,QAAOD,QACKa,WAAYD,OAAME,SAAUlC,OAAOiC,OAAMrC,KAAM,CAAC,CAAC,CAAC,CAAAG,IACrDoC,KAAwB;IAAC/B,EAAA,MAAAiB;IAAAjB,EAAA,MAAA2B;GAAA,OAAAA,KAAA3B,EAAA;GAHtC,MAAAgC,YAAkBL;GAGqB,IAAAM;GAAA,IAAAjC,EAAA,QAAAkB,MAAA;IACnBe,KAAAf,KAAIgB,cAAehD,SAAQiD,GAAI;IAACnC,EAAA,MAAAkB;IAAAlB,EAAA,MAAAiC;GAAA,OAAAA,KAAAjC,EAAA;GAApD,MAAAoC,cAAoBH;GACpB,IAAIjB,OAAMM,aAAc,MAAI;IAAA,IAAAe;IAAA,IAAArC,EAAA,QAAAG,UAAA;KAQNkC,MAAA/B,SAAUH,SAASG,KAAIgC,SAAU,IAAdhC,OAAAT,KAAAA,CAAkC;KAACG,EAAA,MAAAG;KAAAH,EAAA,MAAAqC;IAAA,OAAAA,KAAArC,EAAA;IANpEqB,KAAA,oBAAC,QAAD;KACI,UAAA;KACOnB;KACEe;KACImB;KACN,OAAAJ,UAAUN,QAAQ;KACf,UAAAW;KACC,WAAA/C,uBAAMwB;IAAQ,CAAA;IAP7B,MAAAW;GAQE;GAILN,KAAArC;GACUoB,KAAAA;GACEe,KAAAA;GACImB,KAAAA;GACNhB,KAAAY,UAAUN,QAAQ,CAAC,CAAA,MAAnB;EAA8B;EAAA1B,EAAA,KAAAgB,OAAAM;EAAAtB,EAAA,KAAAkB;EAAAlB,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAiB;EAAAjB,EAAA,KAAAR;EAAAQ,EAAA,KAAAmB;EAAAnB,EAAA,KAAAK;EAAAL,EAAA,KAAAU;EAAAV,EAAA,KAAAa;EAAAb,EAAA,MAAAoB;EAAApB,EAAA,MAAAqB;CAAA,OAAA;EAAAF,KAAAnB,EAAA;EAAAK,KAAAL,EAAA;EAAAU,KAAAV,EAAA;EAAAa,KAAAb,EAAA;EAAAoB,KAAApB,EAAA;EAAAqB,KAAArB,EAAA;CAAA;CAAA,IAAAqB,OAAAE,OAAAC,IAAA,6BAAA,GAAA,OAAAH;CAAA,IAAAM;CAAA,IAAA3B,EAAA,QAAAG,UAAA;EAC3BwB,MAAAY,WAAUpC,SAASoC,UAAA1C,KAAAA,CAAiB;EAACG,EAAA,MAAAG;EAAAH,EAAA,MAAA2B;CAAA,OAAAA,KAAA3B,EAAA;CAAA,IAAAiC;CAAA,IAAAjC,EAAA,QAAAmB,MAAAnB,EAAA,QAAAK,MAAAL,EAAA,QAAAU,MAAAV,EAAA,QAAAa,MAAAb,EAAA,QAAAoB,MAAApB,EAAA,QAAA2B,IAAA;EALnDM,KAAA,oBAAC,IAAD;GACW/B,OAAAA;GACEe,SAAAA;GACImB,aAAAA;GACN,OAAAhB;GACG,UAAAO;GACC,WAAArC,uBAAMwB;EAAQ,CAAA;EAC3Bd,EAAA,MAAAmB;EAAAnB,EAAA,MAAAK;EAAAL,EAAA,MAAAU;EAAAV,EAAA,MAAAa;EAAAb,EAAA,MAAAoB;EAAApB,EAAA,MAAA2B;EAAA3B,EAAA,MAAAiC;CAAA,OAAAA,KAAAjC,EAAA;CAAA,OAPFiC;AAOE;;AA9BH,SAAAF,MAAAS,UAAA;CAAA,OAOsBX,SAAMrC;AAAM;AA4BzC,SAAOiD,aAAA1C,IAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAsB,MAAA,EAAAC,OAAAV,OAAAW,aAAAJ;CAGL,MAAAM,KAAAT,OAAOJ,KAAK,MAAM;CAAM,IAAAkB;CAAA,IAAAV,EAAA,OAAAG,UAAA;EAC1BO,MAAAgC,YAAavC,SAASuC,UAAA,OAAA7C,KAAAA,CAA0B;EAACG,EAAA,KAAAG;EAAAH,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,OAAAE,SAAAF,EAAA,OAAAK,MAAAL,EAAA,OAAAU,IAAA;EAF/DG,KAAA,oBAAC,QAAD;GACgB,YAAAR;GACF,UAAAK;GACC,WAAApB,uBAAMqD;GAEhBzC,UAAAA;EALE,CAAA;EAMEF,EAAA,KAAAE;EAAAF,EAAA,KAAAK;EAAAL,EAAA,KAAAU;EAAAV,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,OANTa;AAMS;;AAKjB,SAAO+B,WAAA7C,IAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAoB,MAAA,EAAAC,OAAAV,OAAAW,aAAAJ;CAIR,MAAAM,KAAA,OAAOb,UAAU,YAAYA,UAAU,KAAvCA,QAAA;CAAwD,IAAAkB;CAAA,IAAAV,EAAA,OAAAG,UAAA;EACrDO,MAAAJ,SAAUH,SAASG,QAAAT,KAAAA,CAAiB;EAACG,EAAA,KAAAG;EAAAH,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,OAAAE,SAAAF,EAAA,OAAAK,MAAAL,EAAA,OAAAU,IAAA;EAHnDG,KAAA,oBAAC,WAAD;GACWX;GACA,OAAAG;GACG,UAAAK;GACC,WAAApB,uBAAMwB;EAAQ,CAAA;EAC3Bd,EAAA,KAAAE;EAAAF,EAAA,KAAAK;EAAAL,EAAA,KAAAU;EAAAV,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,OALFa;AAKE;;;;;AAQV,SAAOgC,gBAAA9C,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAyB,MAAA,EAAAC,OAAAV,OAAAW,aAAAJ;CAC5B,MAAAmB,OAAajC,eAAe;CAAE,IAAAoB;CAAA,IAAAL,EAAA,OAAAR,OAAA;EAChBa,KAAA1B,cAAca,KAAkB,IAAhCA,QAAA,CAAgC;EAACQ,EAAA,KAAAR;EAAAQ,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAA/C,MAAA8C,QAAczC;CACd,MAAA0C,OAAaD,MAAKC,SAAUlD,KAAAA,IAAYD,OAAOkD,MAAKC,IAAU,IAAjD;CACb,MAAAC,KAAWF,MAAKE,OAAQnD,KAAAA,IAAYD,OAAOkD,MAAKE,EAAQ,IAA7C;CAA+C,IAAAtC;CAAA,IAAAV,EAAA,OAAAG,UAAA;EAC9CO,MAAAuC,UAAAC,WACR/C,SACI8C,aAAa,MAAMC,WAAW,KAA9BrD,KAAAA,IAAA;GAAA,GAGcoD,aAAa,KAAb,EAAAF,MAA0BE,SAAc,IAAxC,CAAwC;GAAC,GACzCC,WAAW,KAAX,EAAAF,IAAsBE,OAAY,IAAlC,CAAkC;EAC1C,CACV;EAAClD,EAAA,KAAAG;EAAAH,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CARL,MAAAmD,MAAYzC;CAQN,IAAAG;CAAA,IAAAb,EAAA,OAAAkB,MAAA;EAOsBL,KAAAK,KAAIgB,cAAehD,SAAQ6D,IAAK;EAAC/C,EAAA,KAAAkB;EAAAlB,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CACtC,MAAAoB,KAAA2B,SAAS,KAATA,OAAA;CAAyB,IAAA1B;CAAA,IAAArB,EAAA,OAAAmD,OAAAnD,EAAA,OAAAgD,IAAA;EACtB3B,MAAAf,SAAU6C,IAAI7C,QAAA,IAAY0C,EAAE;EAAChD,EAAA,KAAAmD;EAAAnD,EAAA,KAAAgD;EAAAhD,EAAA,KAAAqB;CAAA,OAAAA,KAAArB,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,OAAAa,MAAAb,EAAA,QAAAoB,MAAApB,EAAA,QAAAqB,IAAA;EAH3CM,KAAA,oBAAC,WAAD;GACgB,cAAAd;GACL,OAAAO;GACG,UAAAC;EAA6B,CAAA;EACzCrB,EAAA,KAAAa;EAAAb,EAAA,MAAAoB;EAAApB,EAAA,MAAAqB;EAAArB,EAAA,MAAA2B;CAAA,OAAAA,KAAA3B,EAAA;CAAA,IAAAiC;CAAA,IAAAjC,EAAA,QAAAuB,OAAAC,IAAA,2BAAA,GAAA;EACFS,KAAA,oBAAA,QAAA;GAAiB,WAAA3C,uBAAM8D;GAAwB,eAAA;GAAO,UAAA;EAE/C,CAAA;EAAApD,EAAA,MAAAiC;CAAA,OAAAA,KAAAjC,EAAA;CAAA,IAAAqC;CAAA,IAAArC,EAAA,QAAAkB,MAAA;EAESmB,KAAAnB,KAAIgB,cAAehD,SAAQ8D,EAAG;EAAChD,EAAA,MAAAkB;EAAAlB,EAAA,MAAAqC;CAAA,OAAAA,KAAArC,EAAA;CACpC,MAAAqD,KAAAL,OAAO,KAAPA,KAAA;CAAqB,IAAAM;CAAA,IAAAtD,EAAA,QAAA+C,QAAA/C,EAAA,QAAAmD,KAAA;EAClBG,OAAAf,WAAUY,IAAIJ,MAAMR,UAAA,EAAU;EAACvC,EAAA,MAAA+C;EAAA/C,EAAA,MAAAmD;EAAAnD,EAAA,MAAAsD;CAAA,OAAAA,MAAAtD,EAAA;CAAA,IAAAuD;CAAA,IAAAvD,EAAA,QAAAsD,OAAAtD,EAAA,QAAAqC,MAAArC,EAAA,QAAAqD,IAAA;EAH7CE,MAAA,oBAAC,WAAD;GACgB,cAAAlB;GACL,OAAAgB;GACG,UAAAC;EAA+B,CAAA;EAC3CtD,EAAA,MAAAsD;EAAAtD,EAAA,MAAAqC;EAAArC,EAAA,MAAAqD;EAAArD,EAAA,MAAAuD;CAAA,OAAAA,MAAAvD,EAAA;CAAA,IAAAwD;CAAA,IAAAxD,EAAA,QAAAuD,OAAAvD,EAAA,QAAA2B,IAAA;EAbN6B,MAAA,qBAAA,OAAA;GAAgB,WAAAlE,uBAAMmE;GAAtB,UAAA;IACI9B;IAKAM;IAGAsB;GAKE;;EAAAvD,EAAA,MAAAuD;EAAAvD,EAAA,MAAA2B;EAAA3B,EAAA,MAAAwD;CAAA,OAAAA,MAAAxD,EAAA;CAAA,IAAA0D;CAAA,IAAA1D,EAAA,QAAAE,SAAAF,EAAA,QAAAwD,KAAA;EAjBVE,MAAA,oBAAC,UAAD;GAAkBxD,QAAAA;GAAkB,WAAAZ,uBAAMwD;GAGtCU,UAAAA;EAHK,CAAA;EAkBExD,EAAA,MAAAE;EAAAF,EAAA,MAAAwD;EAAAxD,EAAA,MAAA0D;CAAA,OAAAA,MAAA1D,EAAA;CAAA,OAlBX0D;AAkBW;;;;;;AASnB,SAAOC,eAAA5D,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAwB,MAAA,EAAAe,QAAAd,OAAAV,OAAAW,UAAAyD,SAAAC,kBAAA9D;CAQ3B,MAAA+D,WAAiB9C,OAAM8C,YAAa9C,OAAM+C;CAGtC,MAAA1D,KAAA/B,iBAAiB,CAAC,CAAA0F;CAAe,IAAAtD;CAAA,IAAAV,EAAA,OAAA6D,iBAAA7D,EAAA,OAAAR,OAAA;EAAA,IAAAqB;EAAA,IAAAb,EAAA,OAAA6D,eAAA;GAEZhD,MAAAkD,QAAS;IAAAA;IAAA7D,OAAa2D,cAAcE,EAAQ,KAAtBA;GAAwB;GAAE/D,EAAA,KAAA6D;GAAA7D,EAAA,KAAAa;EAAA,OAAAA,KAAAb,EAAA;EAArEU,KAAAnB,UAAUC,KAAK,CAAC,CAAAG,IAAKkB,EAAgD;EAACb,EAAA,KAAA6D;EAAA7D,EAAA,KAAAR;EAAAQ,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAH1E,MAAAiE,aAAmBxF,sBACf4B,IACAyD,UACApD,EACJ;CAAE,IAAAG;CAAA,IAAAb,EAAA,OAAA4D,SAAA;EACe/C,MAAAP,SACbA,KAAI4D,SAASC,cAAeP,QAAQO,UAASJ,IAAKI,UAASjE,KAAM,CAAC;EAACF,EAAA,KAAA4D;EAAA5D,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CADvE,MAAAoE,WAAiBvD;CACuD,IAAAO;CAAA,IAAAC;CAAA,IAAArB,EAAA,OAAA4D,WAAA5D,EAAA,OAAAiE,YAAA;EAC9D7C,WAAA;GACN6C,WAAUjD,OACEqD,MAA+C,CAAC,CAAAH,SAC/CI,gBAAeV,QAAQO,YAASJ,IAAKI,YAASjE,KAAM,CAAC;EAAC;EACpEmB,KAAA,CAAC4C,YAAYL,OAAO;EAAC5D,EAAA,KAAA4D;EAAA5D,EAAA,KAAAiE;EAAAjE,EAAA,KAAAoB;EAAApB,EAAA,MAAAqB;CAAA,OAAA;EAAAD,KAAApB,EAAA;EAAAqB,KAAArB,EAAA;CAAA;CAJxB3B,UAAU+C,IAIPC,EAAqB;CACxB,IAAIL,OAAMM,aAAc,MAAI;EAAA,IAAAK;EAAA,IAAA3B,EAAA,QAAAG,YAAAH,EAAA,QAAAoE,UAAA;GAONzC,MAAAY,WAAA;IACN6B,SAAS7B,UAAA,CAAA,CAAU;IACnB,MAAAgC,MACIjE,WAAS,QAAQA,OAAIgC,SAAU,IACzBhC,OAAIX,IAAK6E,MACD,IAFd3E,KAAAA;IAGJM,SAASoE,GAAG;GAAC;GAChBvE,EAAA,MAAAG;GAAAH,EAAA,MAAAoE;GAAApE,EAAA,MAAA2B;EAAA,OAAAA,KAAA3B,EAAA;EAAA,IAAAiC;EAAA,IAAAjC,EAAA,QAAAE,SAAAF,EAAA,QAAAiE,cAAAjE,EAAA,QAAA8D,YAAA9D,EAAA,QAAA2B,IAAA;GAZLM,KAAA,oBAAC,eAAD;IACI,UAAA;IACO/B;IACG4D;IACHG,OAAAA;IACG,UAAAtC;IAQC,WAAArC,uBAAMwB;GAAQ,CAAA;GAC3Bd,EAAA,MAAAE;GAAAF,EAAA,MAAAiE;GAAAjE,EAAA,MAAA8D;GAAA9D,EAAA,MAAA2B;GAAA3B,EAAA,MAAAiC;EAAA,OAAAA,KAAAjC,EAAA;EAAA,OAdFiC;CAcE;CAOK,MAAAN,KAAAsC,WAAU,MAAV;CAAqB,IAAAhC;CAAA,IAAAjC,EAAA,QAAAG,YAAAH,EAAA,QAAAoE,UAAA;EAClBnC,MAAAwC,WAAA;GACNL,SAAS9D,WAAS,OAAT,CAAiBA,MAAI,IAArB,CAAA,CAA2B;GACpCH,SAASG,QAAIyD,EAAI;EAAC;EACrB/D,EAAA,MAAAG;EAAAH,EAAA,MAAAoE;EAAApE,EAAA,MAAAiC;CAAA,OAAAA,KAAAjC,EAAA;CAAA,IAAAqC;CAAA,IAAArC,EAAA,QAAAE,SAAAF,EAAA,QAAA8D,YAAA9D,EAAA,QAAA2B,MAAA3B,EAAA,QAAAiC,IAAA;EAPLI,KAAA,oBAAC,eAAD;GACWnC;GACG4D;GACH,OAAAnC;GACG,UAAAM;GAIC,WAAA3C,uBAAMwB;EAAQ,CAAA;EAC3Bd,EAAA,MAAAE;EAAAF,EAAA,MAAA8D;EAAA9D,EAAA,MAAA2B;EAAA3B,EAAA,MAAAiC;EAAAjC,EAAA,MAAAqC;CAAA,OAAAA,KAAArC,EAAA;CAAA,OATFqC;AASE;;AAnDH,SAAAmC,OAAAE,aAAA;CAAA,OAiC+CP,YAASJ;AAAG;AAjC3D,SAAAM,OAAAM,aAAA;CAAA,OAmB4BR,YAASjE,UAAWiE,YAASJ;AAAG;AAqCnE,IAAaa,iBAAwD;CACjEG,MAAMjF;CACNkF,QAAQjE;CACR4B,QAAQF;CACRwC,MAAMrC;CACN,cAAcC;CACdqC,UAAUvB;AACd"}
|
package/dist/filters/format.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/filters/format.js
CHANGED
|
@@ -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
|
|
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
|
|
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 {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACH,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,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 };
|