@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.
@@ -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
- formatAbsoluteDateTime,
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
- /** The record page's top bar: back to the list, then the heart and the menu. */
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
- <Surface bar>
93
- <XStack
94
- alignItems="center"
95
- {...knobProps.gapSm}
96
- paddingHorizontal={knobProps.gapSm.gap}
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
- {listName}
112
- </Button>
113
- {trailing ? (
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 noPadding gap={0}>
337
- <RecordTopBar
338
- listName={listName}
339
- onBack={() => navigate(route)}
340
- slug={slug}
341
- trailing={trailing}
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
- <H1 margin={0} size="$10">
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":"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"}
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
- /** The record page's top bar: back to the list, then the heart and the menu. */
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":"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"}
1
+ {"version":3,"file":"RecordPage.d.ts","sourceRoot":"","sources":["../../src/record/RecordPage.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,EAAe,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAOxE,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE7E;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CAQ5D;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB,CAAC,IAAI;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC,MAAM,WAAW,eAAe,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;IAC7E,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACzC,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,EAAE,SAAS,eAAe,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,OAAO,EAAE,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,2CAgBA;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EACzE,GAAG,EACH,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,KAAK,EACL,OAAO,EACP,OAAO,EACP,IAAI,EACJ,SAAS,EACT,OAAO,EACP,OAAO,EACP,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAO,GACR,EAAE,eAAe,CAAC,IAAI,CAAC,2CAsPvB"}