@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
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { getColumnValue } from "./values.js";
|
|
2
|
+
import { builtInDisplays } from "./displays/displays.js";
|
|
3
|
+
import { usePlugins } from "@panneau/core";
|
|
4
|
+
import { c } from "react/compiler-runtime";
|
|
5
|
+
import { usePanneauIntl } from "@panneau/ui";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
//#region src/useRenderValue.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Renders the value of a column for an item with its display: those given, over those of the
|
|
10
|
+
* plugins, over the built-in ones. Columns without a known display show their value as text.
|
|
11
|
+
*/
|
|
12
|
+
function useRenderValue(t0) {
|
|
13
|
+
const $ = c(10);
|
|
14
|
+
let t1;
|
|
15
|
+
if ($[0] !== t0) {
|
|
16
|
+
t1 = t0 === void 0 ? {} : t0;
|
|
17
|
+
$[0] = t0;
|
|
18
|
+
$[1] = t1;
|
|
19
|
+
} else t1 = $[1];
|
|
20
|
+
const displays = t1;
|
|
21
|
+
const intl = usePanneauIntl();
|
|
22
|
+
const plugins = usePlugins();
|
|
23
|
+
let t2;
|
|
24
|
+
if ($[2] !== plugins.displays) {
|
|
25
|
+
t2 = Object.fromEntries(plugins.displays);
|
|
26
|
+
$[2] = plugins.displays;
|
|
27
|
+
$[3] = t2;
|
|
28
|
+
} else t2 = $[3];
|
|
29
|
+
const t3 = t2;
|
|
30
|
+
let t4;
|
|
31
|
+
if ($[4] !== displays || $[5] !== t3) {
|
|
32
|
+
t4 = {
|
|
33
|
+
...builtInDisplays,
|
|
34
|
+
...t3,
|
|
35
|
+
...displays
|
|
36
|
+
};
|
|
37
|
+
$[4] = displays;
|
|
38
|
+
$[5] = t3;
|
|
39
|
+
$[6] = t4;
|
|
40
|
+
} else t4 = $[6];
|
|
41
|
+
const allDisplays = t4;
|
|
42
|
+
let t5;
|
|
43
|
+
if ($[7] !== allDisplays || $[8] !== intl) {
|
|
44
|
+
t5 = (item, column) => {
|
|
45
|
+
if (column.render !== void 0) return column.render(item);
|
|
46
|
+
const Display = (column.display !== void 0 && column.display !== null ? allDisplays[column.display] : void 0) ?? builtInDisplays.text;
|
|
47
|
+
if (Display === void 0) return null;
|
|
48
|
+
return /* @__PURE__ */ jsx(Display, {
|
|
49
|
+
value: getColumnValue(item, column, intl.locale),
|
|
50
|
+
item,
|
|
51
|
+
column,
|
|
52
|
+
field: column.field ?? null
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
$[7] = allDisplays;
|
|
56
|
+
$[8] = intl;
|
|
57
|
+
$[9] = t5;
|
|
58
|
+
} else t5 = $[9];
|
|
59
|
+
return t5;
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { useRenderValue };
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=useRenderValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRenderValue.js","names":["ReactNode","usePlugins","usePanneauIntl","builtInDisplays","DisplayEntry","ListColumn","ListItem","getColumnValue","useRenderValue","t0","$","_c","t1","undefined","displays","intl","plugins","t2","Object","fromEntries","t3","Record","t4","allDisplays","t5","item","column","render","Display","display","text","locale","field","_c"],"sources":["../src/useRenderValue.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { usePlugins } from '@panneau/core';\nimport { usePanneauIntl } from '@panneau/ui';\n\nimport { builtInDisplays } from './displays/displays';\nimport type { DisplayEntry, ListColumn, ListItem } from './types';\nimport { getColumnValue } from './values';\n\n/**\n * Renders the value of a column for an item with its display: those given, over those of the\n * plugins, over the built-in ones. Columns without a known display show their value as text.\n */\nexport function useRenderValue(\n displays: Readonly<Record<string, DisplayEntry>> = {},\n): (item: ListItem, column: ListColumn) => ReactNode {\n const intl = usePanneauIntl();\n const plugins = usePlugins();\n const allDisplays: Record<string, DisplayEntry> = {\n ...builtInDisplays,\n ...(Object.fromEntries(plugins.displays) as Record<string, DisplayEntry>),\n ...displays,\n };\n return (item, column) => {\n if (column.render !== undefined) {\n return column.render(item);\n }\n const Display =\n (column.display !== undefined && column.display !== null\n ? allDisplays[column.display]\n : undefined) ?? builtInDisplays.text;\n if (Display === undefined) {\n return null;\n }\n return (\n <Display\n value={getColumnValue(item, column, intl.locale)}\n item={item}\n column={column}\n field={column.field ?? null}\n />\n );\n };\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAOQ,eAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAD,IAAA;EACHG,KAAAH,OAAAI,KAAAA,IAAA,CAAoD,IAApDJ;EAAqDC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAArD,MAAAI,WAAAF;CAEA,MAAAG,OAAab,eAAe;CAC5B,MAAAc,UAAgBf,WAAW;CAAE,IAAAgB;CAAA,IAAAP,EAAA,OAAAM,QAAAF,UAAA;EAGrBG,KAAAC,OAAMC,YAAaH,QAAOF,QAAS;EAACJ,EAAA,KAAAM,QAAAF;EAAAJ,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAApC,MAAAU,KAAAH;CAAoE,IAAAK;CAAA,IAAAZ,EAAA,OAAAI,YAAAJ,EAAA,OAAAU,IAAA;EAF1BE,KAAA;GAAA,GAC3CnB;GAAe,GACdiB;GAAoE,GACrEN;EACP;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAU;EAAAV,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAJD,MAAAa,cAAkDD;CAIhD,IAAAE;CAAA,IAAAd,EAAA,OAAAa,eAAAb,EAAA,OAAAK,MAAA;EACKS,MAAAC,MAAAC,WAAA;GACH,IAAIA,OAAMC,WAAYd,KAAAA,GAAS,OACpBa,OAAMC,OAAQF,IAAI;GAE7B,MAAAG,WACKF,OAAMG,YAAahB,KAAAA,KAAaa,OAAMG,YAAa,OAC9CN,YAAYG,OAAMG,WADvBhB,KAAAA,MAEmBV,gBAAe2B;GACvC,IAAIF,YAAYf,KAAAA,GAAS,OACd;GACV,OAEG,oBAAC,SAAD;IACW,OAAAN,eAAekB,MAAMC,QAAQX,KAAIgB,MAAO;IACzCN;IACEC;IACD,OAAAA,OAAMM,SAAN;GAAoB,CAAA;EAC7B;EAETtB,EAAA,KAAAa;EAAAb,EAAA,KAAAK;EAAAL,EAAA,KAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,OAnBMc;AAmBN"}
|
package/dist/values.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Field, Option } from '@panneau/protocol';
|
|
2
|
-
import type { ListColumn, ListItem } from './types';
|
|
2
|
+
import type { ListColumn, ListItem } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* The value of a localized field in a locale: the locale (`fr-CA`), its language (`fr`), then the
|
|
5
5
|
* first filled locale. Other values are returned as they are.
|
|
@@ -16,6 +16,8 @@ export declare function getColumnValue(item: ListItem, column: ListColumn, local
|
|
|
16
16
|
export declare function toText(value: unknown, locale: string): string;
|
|
17
17
|
/** The options of a field, or none. */
|
|
18
18
|
export declare function getFieldOptions(field: Field | null | undefined): readonly Option[];
|
|
19
|
+
/** The option of a value, matched as a string (values from the URL are strings). */
|
|
20
|
+
export declare function findOption(options: readonly Option[], value: unknown): Option | undefined;
|
|
19
21
|
/** The label of an option value, matched as a string (values from the URL are strings). */
|
|
20
22
|
export declare function getOptionLabel(options: readonly Option[], value: unknown): string | null;
|
|
21
23
|
//# sourceMappingURL=values.d.ts.map
|
package/dist/values.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAczE;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG1F;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB7D;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAElF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAczE;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG1F;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB7D;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAElF;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEzF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAExF"}
|
package/dist/values.js
CHANGED
|
@@ -42,11 +42,15 @@ function toText(value, locale) {
|
|
|
42
42
|
function getFieldOptions(field) {
|
|
43
43
|
return field?.options ?? [];
|
|
44
44
|
}
|
|
45
|
+
/** The option of a value, matched as a string (values from the URL are strings). */
|
|
46
|
+
function findOption(options, value) {
|
|
47
|
+
return options.find((candidate) => String(candidate.value) === String(value));
|
|
48
|
+
}
|
|
45
49
|
/** The label of an option value, matched as a string (values from the URL are strings). */
|
|
46
50
|
function getOptionLabel(options, value) {
|
|
47
|
-
return options
|
|
51
|
+
return findOption(options, value)?.label ?? null;
|
|
48
52
|
}
|
|
49
53
|
//#endregion
|
|
50
|
-
export { getColumnValue, getFieldOptions, getLocalizedValue, getOptionLabel, isLocalized, toText };
|
|
54
|
+
export { findOption, getColumnValue, getFieldOptions, getLocalizedValue, getOptionLabel, isLocalized, toText };
|
|
51
55
|
|
|
52
56
|
//# sourceMappingURL=values.js.map
|
package/dist/values.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.js","names":[],"sources":["../src/values.ts"],"sourcesContent":["import type { Field, Option } from '@panneau/protocol';\n\nimport type { ListColumn, ListItem } from './types';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * The value of a localized field in a locale: the locale (`fr-CA`), its language (`fr`), then the\n * first filled locale. Other values are returned as they are.\n */\nexport function getLocalizedValue(value: unknown, locale: string): unknown {\n if (!isRecord(value)) {\n return value;\n }\n const language = locale.split('-')[0] ?? locale;\n const filled = (candidate: unknown) =>\n candidate !== undefined && candidate !== null && candidate !== '';\n if (filled(value[locale])) {\n return value[locale];\n }\n if (filled(value[language])) {\n return value[language];\n }\n return Object.values(value).find(filled) ?? null;\n}\n\n/** Whether a field's values are keyed by locale. */\nexport function isLocalized(field: Field | null | undefined): boolean {\n return field?.localized === true;\n}\n\n/** The value of a column for an item: `item[id]`, in the locale for a localized field. */\nexport function getColumnValue(item: ListItem, column: ListColumn, locale: string): unknown {\n const value = item[column.field?.name ?? column.id];\n return isLocalized(column.field) ? getLocalizedValue(value, locale) : value;\n}\n\n/**\n * A value as plain text: strings and numbers as they are, references by their label, localized\n * values in the locale, lists joined with commas. For labels of items and for search.\n */\nexport function toText(value: unknown, locale: string): string {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value\n .map((entry) => toText(entry, locale))\n .filter((text) => text !== '')\n .join(', ');\n }\n if (isRecord(value)) {\n if (typeof value.label === 'string') {\n return value.label;\n }\n return toText(getLocalizedValue(value, locale), locale);\n }\n return '';\n}\n\n/** The options of a field, or none. */\nexport function getFieldOptions(field: Field | null | undefined): readonly Option[] {\n return field?.options ?? [];\n}\n\n/** The
|
|
1
|
+
{"version":3,"file":"values.js","names":["Field","Option","ListColumn","ListItem","isRecord","value","Record","Array","isArray","getLocalizedValue","locale","language","split","filled","candidate","undefined","Object","values","find","isLocalized","field","localized","getColumnValue","item","column","name","id","toText","String","map","entry","filter","text","join","label","getFieldOptions","options","findOption","getOptionLabel"],"sources":["../src/values.ts"],"sourcesContent":["import type { Field, Option } from '@panneau/protocol';\n\nimport type { ListColumn, ListItem } from './types';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * The value of a localized field in a locale: the locale (`fr-CA`), its language (`fr`), then the\n * first filled locale. Other values are returned as they are.\n */\nexport function getLocalizedValue(value: unknown, locale: string): unknown {\n if (!isRecord(value)) {\n return value;\n }\n const language = locale.split('-')[0] ?? locale;\n const filled = (candidate: unknown) =>\n candidate !== undefined && candidate !== null && candidate !== '';\n if (filled(value[locale])) {\n return value[locale];\n }\n if (filled(value[language])) {\n return value[language];\n }\n return Object.values(value).find(filled) ?? null;\n}\n\n/** Whether a field's values are keyed by locale. */\nexport function isLocalized(field: Field | null | undefined): boolean {\n return field?.localized === true;\n}\n\n/** The value of a column for an item: `item[id]`, in the locale for a localized field. */\nexport function getColumnValue(item: ListItem, column: ListColumn, locale: string): unknown {\n const value = item[column.field?.name ?? column.id];\n return isLocalized(column.field) ? getLocalizedValue(value, locale) : value;\n}\n\n/**\n * A value as plain text: strings and numbers as they are, references by their label, localized\n * values in the locale, lists joined with commas. For labels of items and for search.\n */\nexport function toText(value: unknown, locale: string): string {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value\n .map((entry) => toText(entry, locale))\n .filter((text) => text !== '')\n .join(', ');\n }\n if (isRecord(value)) {\n if (typeof value.label === 'string') {\n return value.label;\n }\n return toText(getLocalizedValue(value, locale), locale);\n }\n return '';\n}\n\n/** The options of a field, or none. */\nexport function getFieldOptions(field: Field | null | undefined): readonly Option[] {\n return field?.options ?? [];\n}\n\n/** The option of a value, matched as a string (values from the URL are strings). */\nexport function findOption(options: readonly Option[], value: unknown): Option | undefined {\n return options.find((candidate) => String(candidate.value) === String(value));\n}\n\n/** The label of an option value, matched as a string (values from the URL are strings). */\nexport function getOptionLabel(options: readonly Option[], value: unknown): string | null {\n return findOption(options, value)?.label ?? null;\n}\n"],"mappings":";AAIA,SAASI,SAASC,OAAkD;CAChE,OAAOA,UAAU,QAAQ,OAAOA,UAAU,YAAY,CAACE,MAAMC,QAAQH,KAAK;AAC9E;;;;;AAMA,SAAgBI,kBAAkBJ,OAAgBK,QAAyB;CACvE,IAAI,CAACN,SAASC,KAAK,GACf,OAAOA;CAEX,MAAMM,WAAWD,OAAOE,MAAM,GAAG,CAAC,CAAC,MAAMF;CACzC,MAAMG,UAAUC,cACZA,cAAcC,KAAAA,KAAaD,cAAc,QAAQA,cAAc;CACnE,IAAID,OAAOR,MAAMK,OAAO,GACpB,OAAOL,MAAMK;CAEjB,IAAIG,OAAOR,MAAMM,SAAS,GACtB,OAAON,MAAMM;CAEjB,OAAOK,OAAOC,OAAOZ,KAAK,CAAC,CAACa,KAAKL,MAAM,KAAK;AAChD;;AAGA,SAAgBM,YAAYC,OAA0C;CAClE,OAAOA,OAAOC,cAAc;AAChC;;AAGA,SAAgBC,eAAeC,MAAgBC,QAAoBd,QAAyB;CACxF,MAAML,QAAQkB,KAAKC,OAAOJ,OAAOK,QAAQD,OAAOE;CAChD,OAAOP,YAAYK,OAAOJ,KAAK,IAAIX,kBAAkBJ,OAAOK,MAAM,IAAIL;AAC1E;;;;;AAMA,SAAgBsB,OAAOtB,OAAgBK,QAAwB;CAC3D,IAAIL,UAAU,QAAQA,UAAUU,KAAAA,GAC5B,OAAO;CAEX,IAAI,OAAOV,UAAU,UACjB,OAAOA;CAEX,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,WAC9C,OAAOuB,OAAOvB,KAAK;CAEvB,IAAIE,MAAMC,QAAQH,KAAK,GACnB,OAAOA,MACFwB,KAAKC,UAAUH,OAAOG,OAAOpB,MAAM,CAAC,CAAC,CACrCqB,QAAQC,SAASA,SAAS,EAAE,CAAC,CAC7BC,KAAK,IAAI;CAElB,IAAI7B,SAASC,KAAK,GAAG;EACjB,IAAI,OAAOA,MAAM6B,UAAU,UACvB,OAAO7B,MAAM6B;EAEjB,OAAOP,OAAOlB,kBAAkBJ,OAAOK,MAAM,GAAGA,MAAM;CAC1D;CACA,OAAO;AACX;;AAGA,SAAgByB,gBAAgBf,OAAoD;CAChF,OAAOA,OAAOgB,WAAW,CAAA;AAC7B;;AAGA,SAAgBC,WAAWD,SAA4B/B,OAAoC;CACvF,OAAO+B,QAAQlB,MAAMJ,cAAcc,OAAOd,UAAUT,KAAK,MAAMuB,OAAOvB,KAAK,CAAC;AAChF;;AAGA,SAAgBiC,eAAeF,SAA4B/B,OAA+B;CACtF,OAAOgC,WAAWD,SAAS/B,KAAK,CAAC,EAAE6B,SAAS;AAChD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@panneau/lists",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.10",
|
|
4
4
|
"description": "Lists of Panneau: columns with displays, table and cards layouts, sorting, filters, search, pagination, selection and actions, driven by the list state of @panneau/core.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
|
-
"build": "vite build &&
|
|
27
|
+
"build": "vite build && node ../../scripts/declarations.js",
|
|
28
28
|
"typecheck": "tsc --noEmit",
|
|
29
|
-
"api": "
|
|
29
|
+
"api": "node ../../scripts/declarations.js && node ../../scripts/api-report.js"
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"react-intl": "^12.0.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@panneau/core": "5.0.0-alpha.
|
|
41
|
-
"@panneau/fields": "5.0.0-alpha.
|
|
42
|
-
"@panneau/intl": "5.0.0-alpha.
|
|
43
|
-
"@panneau/protocol": "5.0.0-alpha.
|
|
44
|
-
"@panneau/ui": "5.0.0-alpha.
|
|
40
|
+
"@panneau/core": "5.0.0-alpha.10",
|
|
41
|
+
"@panneau/fields": "5.0.0-alpha.10",
|
|
42
|
+
"@panneau/intl": "5.0.0-alpha.10",
|
|
43
|
+
"@panneau/protocol": "5.0.0-alpha.10",
|
|
44
|
+
"@panneau/ui": "5.0.0-alpha.10",
|
|
45
45
|
"lucide-react": "^1.57.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@panneau/data": "5.0.0-alpha.
|
|
48
|
+
"@panneau/data": "5.0.0-alpha.10"
|
|
49
49
|
}
|
|
50
50
|
}
|