@multiplatform.one/frappe-ui 7.40.0 → 7.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/FrappeTable.cjs +6 -3
- package/dist/cjs/FrappeTable.native.js +8 -3
- package/dist/cjs/FrappeTable.native.js.map +1 -1
- package/dist/cjs/list/listColumns.cjs +41 -4
- package/dist/cjs/list/listColumns.native.js +51 -8
- package/dist/cjs/list/listColumns.native.js.map +1 -1
- package/dist/cjs/list/listFields.cjs +2 -0
- package/dist/cjs/list/listFields.native.js +5 -0
- package/dist/cjs/list/listFields.native.js.map +1 -1
- package/dist/cjs/schemaForm/index.cjs +21 -2
- package/dist/cjs/schemaForm/index.native.js +43 -3
- package/dist/cjs/schemaForm/index.native.js.map +1 -1
- package/dist/esm/FrappeTable.mjs +6 -3
- package/dist/esm/FrappeTable.mjs.map +1 -1
- package/dist/esm/FrappeTable.native.js +8 -3
- package/dist/esm/FrappeTable.native.js.map +1 -1
- package/dist/esm/list/listColumns.mjs +43 -7
- package/dist/esm/list/listColumns.mjs.map +1 -1
- package/dist/esm/list/listColumns.native.js +53 -11
- package/dist/esm/list/listColumns.native.js.map +1 -1
- package/dist/esm/list/listFields.mjs +2 -0
- package/dist/esm/list/listFields.mjs.map +1 -1
- package/dist/esm/list/listFields.native.js +5 -0
- package/dist/esm/list/listFields.native.js.map +1 -1
- package/dist/esm/schemaForm/index.mjs +20 -2
- package/dist/esm/schemaForm/index.mjs.map +1 -1
- package/dist/esm/schemaForm/index.native.js +42 -3
- package/dist/esm/schemaForm/index.native.js.map +1 -1
- package/dist/jsx/FrappeTable.mjs +6 -3
- package/dist/jsx/FrappeTable.mjs.map +1 -1
- package/dist/jsx/FrappeTable.native.js +8 -3
- package/dist/jsx/FrappeTable.native.js.map +1 -1
- package/dist/jsx/list/listColumns.mjs +43 -7
- package/dist/jsx/list/listColumns.mjs.map +1 -1
- package/dist/jsx/list/listColumns.native.js +51 -8
- package/dist/jsx/list/listColumns.native.js.map +1 -1
- package/dist/jsx/list/listFields.mjs +2 -0
- package/dist/jsx/list/listFields.mjs.map +1 -1
- package/dist/jsx/list/listFields.native.js +5 -0
- package/dist/jsx/list/listFields.native.js.map +1 -1
- package/dist/jsx/schemaForm/index.mjs +20 -2
- package/dist/jsx/schemaForm/index.mjs.map +1 -1
- package/dist/jsx/schemaForm/index.native.js +43 -3
- package/dist/jsx/schemaForm/index.native.js.map +1 -1
- package/package.json +16 -16
- package/src/FrappeTable.tsx +17 -12
- package/src/list/listColumns.spec.tsx +37 -1
- package/src/list/listColumns.tsx +67 -21
- package/src/list/listFields.spec.ts +15 -0
- package/src/list/listFields.ts +5 -0
- package/src/schemaForm/SchemaForm.flat.spec.tsx +27 -1
- package/src/schemaForm/index.tsx +32 -1
- package/types/FrappeTable.d.ts +1 -1
- package/types/FrappeTable.d.ts.map +1 -1
- package/types/list/listColumns.d.ts +9 -1
- package/types/list/listColumns.d.ts.map +1 -1
- package/types/list/listFields.d.ts.map +1 -1
- package/types/schemaForm/index.d.ts +5 -0
- package/types/schemaForm/index.d.ts.map +1 -1
package/src/list/listColumns.tsx
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
Avatar,
|
|
15
15
|
Anchor,
|
|
16
16
|
Chip,
|
|
17
|
+
Image,
|
|
17
18
|
Text,
|
|
18
19
|
XStack,
|
|
19
20
|
isWeb,
|
|
@@ -25,7 +26,7 @@ import {
|
|
|
25
26
|
import { Button } from "@multiplatform.one/forms";
|
|
26
27
|
import { ChatCircleIcon, HeartIcon } from "@phosphor-icons/react";
|
|
27
28
|
import type { DataTableColumn } from "@multiplatform.one/table";
|
|
28
|
-
import { formatAbsoluteDateTime } from "@multiplatform.one/theme";
|
|
29
|
+
import { formatAbsoluteDateTime, useLayoutSizeClass } from "@multiplatform.one/theme";
|
|
29
30
|
import type { PermLevelMatrix } from "../formEngine/fieldPermissions";
|
|
30
31
|
import type { DocFieldMeta, DoctypeMeta } from "../formEngine/doctypeMeta";
|
|
31
32
|
// Field selection + permlevel pruning live in the pure listFields module
|
|
@@ -70,6 +71,19 @@ export interface BuildListColumnsArgs {
|
|
|
70
71
|
* remaining values add (or toggle off) a tuple instead of opening the doc.
|
|
71
72
|
*/
|
|
72
73
|
onFilterClick?: (fieldname: string, value: string) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Site origin for relative `/files/...` image paths. With `meta.image_field`
|
|
76
|
+
* set, the list gets a `media` column: the document list's leading
|
|
77
|
+
* thumbnail (desk list_view fetches the image field the same way).
|
|
78
|
+
*/
|
|
79
|
+
baseURL?: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** A relative Frappe file path joined to the site origin. */
|
|
83
|
+
export function absoluteFileUrl(value: unknown, baseURL?: string): string | undefined {
|
|
84
|
+
if (typeof value !== "string" || value === "") return undefined;
|
|
85
|
+
if (/^(?:https?:|data:|blob:)/.test(value) || !baseURL) return value;
|
|
86
|
+
return `${baseURL.replace(/\/$/, "")}${value.startsWith("/") ? "" : "/"}${value}`;
|
|
73
87
|
}
|
|
74
88
|
|
|
75
89
|
const NUMERIC_FIELDTYPES = new Set(["Currency", "Float", "Int", "Percent", "Duration"]);
|
|
@@ -273,6 +287,7 @@ function ActivityCluster({
|
|
|
273
287
|
onToggleLike?: (name: string, nextLiked: boolean) => void;
|
|
274
288
|
likeOverrides?: Record<string, boolean>;
|
|
275
289
|
}) {
|
|
290
|
+
const compact = useLayoutSizeClass() === "compact";
|
|
276
291
|
const assignees = parseUserListField(doc._assign);
|
|
277
292
|
const comments = commentCount(doc);
|
|
278
293
|
const modified = doc.modified ? String(doc.modified) : "";
|
|
@@ -285,9 +300,13 @@ function ActivityCluster({
|
|
|
285
300
|
minWidth={0}
|
|
286
301
|
testID="list-activity"
|
|
287
302
|
>
|
|
288
|
-
{assignees
|
|
289
|
-
|
|
290
|
-
|
|
303
|
+
{/* Desk hides assignees, comments and likes on phones
|
|
304
|
+
(list_view.js `list-row-activity hidden-xs`). */}
|
|
305
|
+
{compact
|
|
306
|
+
? null
|
|
307
|
+
: assignees
|
|
308
|
+
.slice(0, 3)
|
|
309
|
+
.map((user) => <Avatar key={user} name={user} size={20} circular aria-label={user} />)}
|
|
291
310
|
{modified ? (
|
|
292
311
|
<Text
|
|
293
312
|
fontSize="$2"
|
|
@@ -297,23 +316,27 @@ function ActivityCluster({
|
|
|
297
316
|
{formatTimeAgo(modified)}
|
|
298
317
|
</Text>
|
|
299
318
|
) : null}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
319
|
+
{compact ? null : (
|
|
320
|
+
<XStack
|
|
321
|
+
alignItems="center"
|
|
322
|
+
gap="$1"
|
|
323
|
+
{...({ "aria-label": t("list.comments", "Comments") } as Record<string, unknown>)}
|
|
324
|
+
>
|
|
325
|
+
<ChatCircleIcon size={14} />
|
|
326
|
+
<Text fontSize="$2" color="$color9">
|
|
327
|
+
{comments}
|
|
328
|
+
</Text>
|
|
329
|
+
</XStack>
|
|
330
|
+
)}
|
|
331
|
+
{compact ? null : (
|
|
332
|
+
<LikeControl
|
|
333
|
+
doc={doc}
|
|
334
|
+
t={t}
|
|
335
|
+
sessionUser={sessionUser}
|
|
336
|
+
onToggleLike={onToggleLike}
|
|
337
|
+
likeOverrides={likeOverrides}
|
|
338
|
+
/>
|
|
339
|
+
)}
|
|
317
340
|
</XStack>
|
|
318
341
|
);
|
|
319
342
|
}
|
|
@@ -409,9 +432,14 @@ export function buildListColumns({
|
|
|
409
432
|
permMatrix,
|
|
410
433
|
getDocHref,
|
|
411
434
|
onFilterClick,
|
|
435
|
+
baseURL,
|
|
412
436
|
}: BuildListColumnsArgs): DataTableColumn<ListRow>[] {
|
|
413
437
|
const titleField = meta?.title_field || "name";
|
|
414
438
|
const columns: DataTableColumn<ListRow>[] = [];
|
|
439
|
+
const imageField = meta?.image_field;
|
|
440
|
+
const imageMeta = imageField
|
|
441
|
+
? meta?.fields?.find((field) => field.fieldname === imageField)
|
|
442
|
+
: undefined;
|
|
415
443
|
|
|
416
444
|
const titleMeta = meta?.fields?.find((field) => field.fieldname === titleField);
|
|
417
445
|
columns.push({
|
|
@@ -457,7 +485,25 @@ export function buildListColumns({
|
|
|
457
485
|
},
|
|
458
486
|
});
|
|
459
487
|
|
|
488
|
+
if (imageField) {
|
|
489
|
+
const label = imageMeta?.label || imageField;
|
|
490
|
+
columns.push({
|
|
491
|
+
id: imageField,
|
|
492
|
+
header: label,
|
|
493
|
+
accessorKey: imageField,
|
|
494
|
+
meta: { role: "media", label },
|
|
495
|
+
sortable: false,
|
|
496
|
+
filterable: false,
|
|
497
|
+
enableHiding: true,
|
|
498
|
+
cell: ({ getValue }) => {
|
|
499
|
+
const src = absoluteFileUrl(getValue(), baseURL);
|
|
500
|
+
return src ? <Image src={src} alt="" size="extraSmall" framed /> : null;
|
|
501
|
+
},
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
|
|
460
505
|
for (const field of listViewFields(meta, titleField, permMatrix)) {
|
|
506
|
+
if (field.fieldname === imageField) continue;
|
|
461
507
|
columns.push({
|
|
462
508
|
id: field.fieldname,
|
|
463
509
|
header: field.label || field.fieldname,
|
|
@@ -145,3 +145,18 @@ describe("listDocumentColumnIds desk list anatomy", () => {
|
|
|
145
145
|
]);
|
|
146
146
|
});
|
|
147
147
|
});
|
|
148
|
+
|
|
149
|
+
describe("listFieldsToFetch image field", () => {
|
|
150
|
+
it("fetches the doctype's image field like desk's list_view", () => {
|
|
151
|
+
const withImage: DoctypeMeta = {
|
|
152
|
+
name: "Pokemon",
|
|
153
|
+
title_field: "pokemon_name",
|
|
154
|
+
image_field: "sprite_front",
|
|
155
|
+
fields: [
|
|
156
|
+
{ fieldname: "pokemon_name", fieldtype: "Data", label: "Pokemon Name", in_list_view: 1 },
|
|
157
|
+
{ fieldname: "sprite_front", fieldtype: "Attach Image", label: "Sprite (Front)" },
|
|
158
|
+
],
|
|
159
|
+
};
|
|
160
|
+
expect(listFieldsToFetch(withImage)).toContain("sprite_front");
|
|
161
|
+
});
|
|
162
|
+
});
|
package/src/list/listFields.ts
CHANGED
|
@@ -26,6 +26,11 @@ export function listFieldsToFetch(meta?: DoctypeMeta, permMatrix?: PermLevelMatr
|
|
|
26
26
|
"_comments",
|
|
27
27
|
]);
|
|
28
28
|
if (meta?.title_field) fields.add(meta.title_field);
|
|
29
|
+
// Desk list_view.js fetches the image field beside the title field.
|
|
30
|
+
const image = meta?.image_field
|
|
31
|
+
? meta.fields?.find((field) => field.fieldname === meta.image_field)
|
|
32
|
+
: undefined;
|
|
33
|
+
if (image && fieldLevelReadable(image, permMatrix)) fields.add(image.fieldname);
|
|
29
34
|
for (const field of meta?.fields ?? []) {
|
|
30
35
|
if (field.in_list_view && field.fieldname && fieldLevelReadable(field, permMatrix)) {
|
|
31
36
|
fields.add(field.fieldname);
|
|
@@ -8,7 +8,7 @@ import { screen } from "@testing-library/react";
|
|
|
8
8
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
9
9
|
import { describe, expect, it, vi } from "vitest";
|
|
10
10
|
import type { FieldSchema } from "../fieldRegistry";
|
|
11
|
-
import { SchemaForm, type FormSchema } from "./index";
|
|
11
|
+
import { SchemaForm, hugRuns, type FormSchema } from "./index";
|
|
12
12
|
|
|
13
13
|
const vitals: FieldSchema[] = [
|
|
14
14
|
{ type: "Data", name: "pokemon_name", label: "Name" },
|
|
@@ -189,4 +189,30 @@ describe("flat columns", () => {
|
|
|
189
189
|
expect(columns[0].textContent).toContain("Weight");
|
|
190
190
|
expect(columns[1].textContent).toContain("Front");
|
|
191
191
|
});
|
|
192
|
+
|
|
193
|
+
it("puts adjacent number fields in one wrapping row", () => {
|
|
194
|
+
renderCompact();
|
|
195
|
+
const runs = document.querySelectorAll("[data-mpo-schema-form-hug-run]");
|
|
196
|
+
expect(runs.length).toBe(1);
|
|
197
|
+
expect(runs[0].textContent).toContain("Height");
|
|
198
|
+
expect(runs[0].textContent).toContain("Weight");
|
|
199
|
+
expect(runs[0].textContent).not.toContain("Name");
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
describe("hugRuns", () => {
|
|
204
|
+
it("groups consecutive numbers and leaves other fields alone", () => {
|
|
205
|
+
const runs = hugRuns([
|
|
206
|
+
{ type: "Int", name: "a", label: "A" },
|
|
207
|
+
{ type: "Data", name: "b", label: "B" },
|
|
208
|
+
{ type: "Int", name: "c", label: "C" },
|
|
209
|
+
{ type: "Float", name: "d", label: "D" },
|
|
210
|
+
{ type: "Currency", name: "e", label: "E" },
|
|
211
|
+
]);
|
|
212
|
+
expect(runs.map((run) => run.map((field) => field.name))).toEqual([
|
|
213
|
+
["a"],
|
|
214
|
+
["b"],
|
|
215
|
+
["c", "d", "e"],
|
|
216
|
+
]);
|
|
217
|
+
});
|
|
192
218
|
});
|
package/src/schemaForm/index.tsx
CHANGED
|
@@ -436,7 +436,21 @@ function SchemaFormSectionCard({
|
|
|
436
436
|
data-mpo-schema-form-col=""
|
|
437
437
|
data-mpo-schema-form-col-hug=""
|
|
438
438
|
>
|
|
439
|
-
{column.fields.map((
|
|
439
|
+
{hugRuns(column.fields).map((run) =>
|
|
440
|
+
run.length > 1 ? (
|
|
441
|
+
<XStack
|
|
442
|
+
key={run[0].name}
|
|
443
|
+
{...knobProps.gapLg}
|
|
444
|
+
flexWrap="wrap"
|
|
445
|
+
alignItems="flex-start"
|
|
446
|
+
data-mpo-schema-form-hug-run=""
|
|
447
|
+
>
|
|
448
|
+
{run.map((field) => renderField(field))}
|
|
449
|
+
</XStack>
|
|
450
|
+
) : (
|
|
451
|
+
renderField(run[0])
|
|
452
|
+
),
|
|
453
|
+
)}
|
|
440
454
|
</YStack>
|
|
441
455
|
))}
|
|
442
456
|
</XStack>
|
|
@@ -470,6 +484,23 @@ function SchemaFormSectionCard({
|
|
|
470
484
|
);
|
|
471
485
|
}
|
|
472
486
|
|
|
487
|
+
/**
|
|
488
|
+
* A flat column's adjacent number fields share one wrapping row: each hugs
|
|
489
|
+
* its value, so stacking them one per line leaves the row mostly empty.
|
|
490
|
+
*/
|
|
491
|
+
export function hugRuns(fields: FieldSchema[]): FieldSchema[][] {
|
|
492
|
+
const runs: FieldSchema[][] = [];
|
|
493
|
+
for (const field of fields) {
|
|
494
|
+
const last = runs[runs.length - 1];
|
|
495
|
+
if (numericFieldTypes.has(field.type) && last && numericFieldTypes.has(last[0].type)) {
|
|
496
|
+
last.push(field);
|
|
497
|
+
} else {
|
|
498
|
+
runs.push([field]);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return runs;
|
|
502
|
+
}
|
|
503
|
+
|
|
473
504
|
// Even columns split the row and stack under ~250px each (DG-FORM-09).
|
|
474
505
|
const evenColumn = { flex: 1, flexBasis: 250, minWidth: 250, maxWidth: "100%" } as const;
|
|
475
506
|
// Hugging columns take their fields' width and wrap when the row runs out;
|
package/types/FrappeTable.d.ts
CHANGED
|
@@ -91,7 +91,7 @@ export interface FrappeTableProps<TDoc extends {
|
|
|
91
91
|
* Requires onStateChange for state sync; fetches data based on table state.
|
|
92
92
|
*/
|
|
93
93
|
serverSide?: boolean;
|
|
94
|
-
/**
|
|
94
|
+
/** Ask the server for a total (default true). Off when the host owns the count; either page mode then skips get_count. */
|
|
95
95
|
fetchTotalCount?: boolean;
|
|
96
96
|
/**
|
|
97
97
|
* Callback when filters, sort, or pagination change.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrappeTable.d.ts","sourceRoot":"","sources":["../src/FrappeTable.tsx"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAQ7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,gBAAgB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAE,SAAQ,IAAI,CAC5F,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAC7B,MAAM,GAAG,SAAS,CACnB;IACC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE;QACL,0CAA0C;QAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,sFAAsF;QACtF,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,oDAAoD;QACpD,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,kDAAkD;IAClD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC3C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC1C,+BAA+B;IAC/B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC;IAC1C,mCAAmC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"FrappeTable.d.ts","sourceRoot":"","sources":["../src/FrappeTable.tsx"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAQ7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,gBAAgB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAE,SAAQ,IAAI,CAC5F,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAC7B,MAAM,GAAG,SAAS,CACnB;IACC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,IAAI,CAAC,EAAE;QACL,0CAA0C;QAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,sFAAsF;QACtF,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,oDAAoD;QACpD,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,kDAAkD;IAClD,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC3C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC1C,+BAA+B;IAC/B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC;IAC1C,mCAAmC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0HAA0H;IAC1H,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;CACzD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,GACvB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA6ClC;AAkED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,WAAW,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1E,OAAO,EACP,IAAI,EACJ,WAAW,EACX,OAAO,EACP,OAAO,EAAE,WAAW,EACpB,MAAM,EACN,OAAO,EAAE,cAAc,EACvB,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAoB,EACpB,sBAA8B,EAC9B,MAAM,EACN,UAAkB,EAClB,eAAsB,EACtB,aAAa,EAAE,iBAAiB,EAChC,YAAY,EACZ,cAAwB,EACxB,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,oBAAoB,EACtC,MAAM,EAAE,UAAU,EAClB,MAAM,EACN,YAAY,EACZ,GAAG,cAAc,EAClB,EAAE,gBAAgB,CAAC,IAAI,CAAC,2CAylBxB"}
|
|
@@ -34,8 +34,16 @@ export interface BuildListColumnsArgs {
|
|
|
34
34
|
* remaining values add (or toggle off) a tuple instead of opening the doc.
|
|
35
35
|
*/
|
|
36
36
|
onFilterClick?: (fieldname: string, value: string) => void;
|
|
37
|
+
/**
|
|
38
|
+
* Site origin for relative `/files/...` image paths. With `meta.image_field`
|
|
39
|
+
* set, the list gets a `media` column: the document list's leading
|
|
40
|
+
* thumbnail (desk list_view fetches the image field the same way).
|
|
41
|
+
*/
|
|
42
|
+
baseURL?: string;
|
|
37
43
|
}
|
|
44
|
+
/** A relative Frappe file path joined to the site origin. */
|
|
45
|
+
export declare function absoluteFileUrl(value: unknown, baseURL?: string): string | undefined;
|
|
38
46
|
/** Build the DataTable columns for a doctype list from its meta. */
|
|
39
|
-
export declare function buildListColumns({ meta, t, sessionUser, onToggleLike, likeOverrides, permMatrix, getDocHref, onFilterClick, }: BuildListColumnsArgs): DataTableColumn<ListRow>[];
|
|
47
|
+
export declare function buildListColumns({ meta, t, sessionUser, onToggleLike, likeOverrides, permMatrix, getDocHref, onFilterClick, baseURL, }: BuildListColumnsArgs): DataTableColumn<ListRow>[];
|
|
40
48
|
export {};
|
|
41
49
|
//# sourceMappingURL=listColumns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listColumns.d.ts","sourceRoot":"","sources":["../../src/list/listColumns.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"listColumns.d.ts","sourceRoot":"","sources":["../../src/list/listColumns.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO3E,6EAA6E;AAC7E,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,CAAC,EAAE,SAAS,CAAC;IACb,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIpF;AAkVD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,CAAC,EACD,WAAW,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,OAAO,GACR,EAAE,oBAAoB,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,CAgHnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listFields.d.ts","sourceRoot":"","sources":["../../src/list/listFields.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO3E,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"listFields.d.ts","sourceRoot":"","sources":["../../src/list/listFields.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO3E,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAsB5F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,eAAe,GAC3B,YAAY,EAAE,CAShB;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,CAOhG"}
|
|
@@ -99,4 +99,9 @@ export interface SchemaFormProps {
|
|
|
99
99
|
layout?: "cards" | "flat";
|
|
100
100
|
}
|
|
101
101
|
export declare function SchemaForm({ schema, doc, setValue, errors, disabled, overrides, hideFields, readOnlyFields, requiredMarking, sectionHeadingLevel, renderFieldWrapper, order, layout, }: SchemaFormProps): import("react/jsx-runtime").JSX.Element;
|
|
102
|
+
/**
|
|
103
|
+
* A flat column's adjacent number fields share one wrapping row: each hugs
|
|
104
|
+
* its value, so stacking them one per line leaves the row mostly empty.
|
|
105
|
+
*/
|
|
106
|
+
export declare function hugRuns(fields: FieldSchema[]): FieldSchema[][];
|
|
102
107
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemaForm/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAkB,MAAM,OAAO,CAAC;AAKvC,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAMxE,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,gEAAgE;IAChE,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,MAAM,aAAa,GACrB,CAAC,CAAC,KAAK,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,GAC9C;IAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAA;CAAE,GACpD;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,MAAM,EAAE,UAAU,CAAC;IACnB,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,YAAY,CAAC;IACnC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,KAAK,KAAK,CAAC,SAAS,CAAC;IACxF;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B;AAmCD,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,GAAG,EACH,QAAQ,EACR,MAAW,EACX,QAAgB,EAChB,SAAc,EACd,UAAe,EACf,cAAmB,EACnB,eAAwB,EACxB,mBAAuB,EACvB,kBAAkB,EAClB,KAAK,EACL,MAAgB,GACjB,EAAE,eAAe,2CAuKjB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemaForm/index.tsx"],"names":[],"mappings":"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"}
|