@multiplatform.one/frappe-ui 7.50.2 → 7.51.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/FrappeRecordView.cjs +12 -9
- package/dist/cjs/FrappeRecordView.native.js +12 -9
- package/dist/cjs/FrappeRecordView.native.js.map +1 -1
- package/dist/cjs/record/RecordPage.cjs +32 -39
- package/dist/cjs/record/RecordPage.native.js +33 -39
- package/dist/cjs/record/RecordPage.native.js.map +1 -1
- package/dist/esm/FrappeRecordView.mjs +13 -10
- package/dist/esm/FrappeRecordView.mjs.map +1 -1
- package/dist/esm/FrappeRecordView.native.js +13 -10
- package/dist/esm/FrappeRecordView.native.js.map +1 -1
- package/dist/esm/record/RecordPage.mjs +35 -43
- package/dist/esm/record/RecordPage.mjs.map +1 -1
- package/dist/esm/record/RecordPage.native.js +36 -43
- package/dist/esm/record/RecordPage.native.js.map +1 -1
- package/dist/jsx/FrappeRecordView.mjs +13 -10
- package/dist/jsx/FrappeRecordView.mjs.map +1 -1
- package/dist/jsx/FrappeRecordView.native.js +12 -9
- package/dist/jsx/FrappeRecordView.native.js.map +1 -1
- package/dist/jsx/record/RecordPage.mjs +35 -43
- package/dist/jsx/record/RecordPage.mjs.map +1 -1
- package/dist/jsx/record/RecordPage.native.js +33 -39
- package/dist/jsx/record/RecordPage.native.js.map +1 -1
- package/package.json +16 -16
- package/src/FrappeRecordView.tsx +3 -6
- package/src/record/RecordLargeTitle.spec.tsx +58 -0
- package/src/record/RecordPage.tsx +47 -57
- package/types/FrappeRecordView.d.ts.map +1 -1
- package/types/record/RecordPage.d.ts +13 -1
- package/types/record/RecordPage.d.ts.map +1 -1
|
@@ -2,28 +2,21 @@ import {
|
|
|
2
2
|
Avatar,
|
|
3
3
|
DropdownMenu,
|
|
4
4
|
H1,
|
|
5
|
+
PageBackButton,
|
|
5
6
|
PageSection,
|
|
6
7
|
Quote,
|
|
7
8
|
Screen,
|
|
9
|
+
ScreenToolbar,
|
|
8
10
|
Tabs,
|
|
9
11
|
Text,
|
|
10
12
|
XStack,
|
|
11
13
|
YStack,
|
|
14
|
+
useLargeTitle,
|
|
12
15
|
type DropdownMenuEntry,
|
|
13
16
|
} from "@multiplatform.one/components";
|
|
14
17
|
import { Button } from "@multiplatform.one/forms";
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
hairline,
|
|
18
|
-
Surface,
|
|
19
|
-
useResolvedKnobs,
|
|
20
|
-
} from "@multiplatform.one/theme";
|
|
21
|
-
import {
|
|
22
|
-
CaretLeftIcon,
|
|
23
|
-
DotsThreeOutlineIcon,
|
|
24
|
-
HeartIcon,
|
|
25
|
-
PencilSimpleIcon,
|
|
26
|
-
} from "@phosphor-icons/react";
|
|
18
|
+
import { formatAbsoluteDateTime, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
19
|
+
import { DotsThreeOutlineIcon, HeartIcon, PencilSimpleIcon } from "@phosphor-icons/react";
|
|
27
20
|
import type { ComponentType, ReactNode } from "react";
|
|
28
21
|
import { useTranslation } from "react-i18next";
|
|
29
22
|
import { frappeRouteHref } from "../frappeNavigation";
|
|
@@ -40,6 +33,22 @@ import { RecordPager, type RecordPagerEntry } from "./RecordPager";
|
|
|
40
33
|
import { RecordGroup, RecordRows } from "./RecordRows";
|
|
41
34
|
import type { FrappeRecordSection, FrappeRecordTab } from "./recordSections";
|
|
42
35
|
|
|
36
|
+
/**
|
|
37
|
+
* LC-157: the record's name is the page's large title, at the page-title
|
|
38
|
+
* token, and the top bar takes it once it scrolls away. It registers from
|
|
39
|
+
* inside the Screen: RecordPage renders the Screen, so a hook in its own body
|
|
40
|
+
* would sit above the scroll scope and never reach the bar.
|
|
41
|
+
*/
|
|
42
|
+
export function RecordLargeTitle({ title }: { title: string }) {
|
|
43
|
+
const { knobProps } = useResolvedKnobs();
|
|
44
|
+
const largeTitle = useLargeTitle(title);
|
|
45
|
+
return (
|
|
46
|
+
<H1 margin={0} {...largeTitle} {...knobProps.pageTitle} {...knobProps.heading}>
|
|
47
|
+
{title}
|
|
48
|
+
</H1>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
43
52
|
/** A hop from the record to another page of it (the backoffice form). */
|
|
44
53
|
export interface FrappeRecordAction<TDoc> {
|
|
45
54
|
label: string;
|
|
@@ -73,7 +82,10 @@ export interface RecordPageProps<TDoc extends { name: string; doctype: string }>
|
|
|
73
82
|
canEdit: boolean;
|
|
74
83
|
}
|
|
75
84
|
|
|
76
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* The record page's top bar: back to the list, then the heart and the menu.
|
|
87
|
+
* It is the Screen's pinned bar (LC-157): pass it as `Screen`'s `topBar`.
|
|
88
|
+
*/
|
|
77
89
|
export function RecordTopBar({
|
|
78
90
|
listName,
|
|
79
91
|
onBack,
|
|
@@ -86,43 +98,19 @@ export function RecordTopBar({
|
|
|
86
98
|
trailing?: ReactNode;
|
|
87
99
|
}) {
|
|
88
100
|
const { t } = useTranslation();
|
|
89
|
-
const { knobProps } = useResolvedKnobs();
|
|
90
|
-
// LC-153: the top bar's neutral buttons (back, heart, menu) paint plain.
|
|
91
101
|
return (
|
|
92
|
-
<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
paddingVertical="$1"
|
|
98
|
-
{...hairline.bottom}
|
|
99
|
-
borderColor="$borderColor"
|
|
100
|
-
testID={`${slug}-detail-header`}
|
|
101
|
-
>
|
|
102
|
-
<Button
|
|
103
|
-
chromeless
|
|
104
|
-
minHeight={knobProps.sizeToken}
|
|
102
|
+
<ScreenToolbar
|
|
103
|
+
testID={`${slug}-detail-header`}
|
|
104
|
+
leading={
|
|
105
|
+
<PageBackButton
|
|
106
|
+
label={listName}
|
|
105
107
|
onPress={onBack}
|
|
106
|
-
icon={CaretLeftIcon}
|
|
107
|
-
flexShrink={1}
|
|
108
108
|
aria-label={t("Back to {{title}}", { title: listName })}
|
|
109
109
|
testID={`${slug}-detail-back`}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
<XStack
|
|
115
|
-
alignItems="center"
|
|
116
|
-
justifyContent="flex-end"
|
|
117
|
-
gap="$1"
|
|
118
|
-
flexGrow={1}
|
|
119
|
-
flexShrink={0}
|
|
120
|
-
>
|
|
121
|
-
{trailing}
|
|
122
|
-
</XStack>
|
|
123
|
-
) : null}
|
|
124
|
-
</XStack>
|
|
125
|
-
</Surface>
|
|
110
|
+
/>
|
|
111
|
+
}
|
|
112
|
+
trailing={trailing}
|
|
113
|
+
/>
|
|
126
114
|
);
|
|
127
115
|
}
|
|
128
116
|
|
|
@@ -333,14 +321,18 @@ export function RecordPage<TDoc extends { name: string; doctype: string }>({
|
|
|
333
321
|
);
|
|
334
322
|
|
|
335
323
|
return (
|
|
336
|
-
<Screen
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
324
|
+
<Screen
|
|
325
|
+
noPadding
|
|
326
|
+
gap={0}
|
|
327
|
+
topBar={
|
|
328
|
+
<RecordTopBar
|
|
329
|
+
listName={listName}
|
|
330
|
+
onBack={() => navigate(route)}
|
|
331
|
+
slug={slug}
|
|
332
|
+
trailing={trailing}
|
|
333
|
+
/>
|
|
334
|
+
}
|
|
335
|
+
>
|
|
344
336
|
<RecordHeroFrame tint={tint} testID={`${slug}-detail-stage`}>
|
|
345
337
|
<YStack testID={`${slug}-hero-art`}>
|
|
346
338
|
<RecordGallery images={images} slides={slides} alt={title} />
|
|
@@ -366,9 +358,7 @@ export function RecordPage<TDoc extends { name: string; doctype: string }>({
|
|
|
366
358
|
/>
|
|
367
359
|
))}
|
|
368
360
|
</XStack>
|
|
369
|
-
<
|
|
370
|
-
{title}
|
|
371
|
-
</H1>
|
|
361
|
+
<RecordLargeTitle title={title} />
|
|
372
362
|
{look?.subtitle?.(doc) ? (
|
|
373
363
|
<Text {...nested.body} color="$color11">
|
|
374
364
|
{look.subtitle(doc)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrappeRecordView.d.ts","sourceRoot":"","sources":["../src/FrappeRecordView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,YAAY,EACV,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,kFAAkF;IAClF,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;QAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtE,iEAAiE;IACjE,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IAC9D,+EAA+E;IAC/E,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,kEAAkE;IAClE,OAAO,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC1C,qCAAqC;IACrC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC9E,IAAI,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/E,OAAO,EACP,KAAK,EACL,IAAI,EAAE,QAAQ,EACd,SAAS,EACT,UAAU,EACV,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,WAAW,EACX,IAAI,EACJ,UAAU,EACV,KAAK,EACL,OAAY,EACZ,OAAO,EACP,IAAa,EACb,SAAS,EACT,OAAY,EACZ,OAAc,EACd,MAAM,GACP,EAAE,qBAAqB,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"FrappeRecordView.d.ts","sourceRoot":"","sources":["../src/FrappeRecordView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,YAAY,EACV,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,kFAAkF;IAClF,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;QAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtE,iEAAiE;IACjE,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IAC9D,+EAA+E;IAC/E,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,kEAAkE;IAClE,OAAO,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC1C,qCAAqC;IACrC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC9E,IAAI,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/E,OAAO,EACP,KAAK,EACL,IAAI,EAAE,QAAQ,EACd,SAAS,EACT,UAAU,EACV,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,WAAW,EACX,IAAI,EACJ,UAAU,EACV,KAAK,EACL,OAAY,EACZ,OAAO,EACP,IAAa,EACb,SAAS,EACT,OAAY,EACZ,OAAc,EACd,MAAM,GACP,EAAE,qBAAqB,CAAC,IAAI,CAAC,2CA6F7B"}
|
|
@@ -3,6 +3,15 @@ import { type FrappeInsightsMetric } from "../insights/insightsRecord";
|
|
|
3
3
|
import type { FrappeListFacet } from "../list/listState";
|
|
4
4
|
import { type FrappeRecordLook } from "../list/recordLook";
|
|
5
5
|
import type { FrappeRecordTab } from "./recordSections";
|
|
6
|
+
/**
|
|
7
|
+
* LC-157: the record's name is the page's large title, at the page-title
|
|
8
|
+
* token, and the top bar takes it once it scrolls away. It registers from
|
|
9
|
+
* inside the Screen: RecordPage renders the Screen, so a hook in its own body
|
|
10
|
+
* would sit above the scroll scope and never reach the bar.
|
|
11
|
+
*/
|
|
12
|
+
export declare function RecordLargeTitle({ title }: {
|
|
13
|
+
title: string;
|
|
14
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
6
15
|
/** A hop from the record to another page of it (the backoffice form). */
|
|
7
16
|
export interface FrappeRecordAction<TDoc> {
|
|
8
17
|
label: string;
|
|
@@ -41,7 +50,10 @@ export interface RecordPageProps<TDoc extends {
|
|
|
41
50
|
/** The session may write this record: Edit shows. */
|
|
42
51
|
canEdit: boolean;
|
|
43
52
|
}
|
|
44
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* The record page's top bar: back to the list, then the heart and the menu.
|
|
55
|
+
* It is the Screen's pinned bar (LC-157): pass it as `Screen`'s `topBar`.
|
|
56
|
+
*/
|
|
45
57
|
export declare function RecordTopBar({ listName, onBack, slug, trailing, }: {
|
|
46
58
|
listName: string;
|
|
47
59
|
onBack: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordPage.d.ts","sourceRoot":"","sources":["../../src/record/RecordPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RecordPage.d.ts","sourceRoot":"","sources":["../../src/record/RecordPage.tsx"],"names":[],"mappings":"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"}
|