@oxyhq/bloom 0.49.0 → 0.50.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/lib/commonjs/bottom-sheet/BottomSheetBase.js.map +1 -1
- package/lib/commonjs/dialog/Dialog.js +5 -0
- package/lib/commonjs/dialog/Dialog.js.map +1 -1
- package/lib/commonjs/dialog/DialogBottomSheet.js.map +1 -1
- package/lib/commonjs/dialog/DialogHeader.js +248 -31
- package/lib/commonjs/dialog/DialogHeader.js.map +1 -1
- package/lib/module/bottom-sheet/BottomSheetBase.js.map +1 -1
- package/lib/module/dialog/Dialog.js +5 -0
- package/lib/module/dialog/Dialog.js.map +1 -1
- package/lib/module/dialog/DialogBottomSheet.js.map +1 -1
- package/lib/module/dialog/DialogHeader.js +245 -28
- package/lib/module/dialog/DialogHeader.js.map +1 -1
- package/lib/typescript/commonjs/bottom-sheet/BottomSheetBase.d.ts +2 -2
- package/lib/typescript/commonjs/bottom-sheet/BottomSheetBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/Dialog.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/DialogBottomSheet.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/DialogHeader.d.ts +6 -0
- package/lib/typescript/commonjs/dialog/DialogHeader.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/DialogMorph.d.ts +2 -2
- package/lib/typescript/commonjs/dialog/types.d.ts +67 -0
- package/lib/typescript/commonjs/dialog/types.d.ts.map +1 -1
- package/lib/typescript/module/bottom-sheet/BottomSheetBase.d.ts +2 -2
- package/lib/typescript/module/bottom-sheet/BottomSheetBase.d.ts.map +1 -1
- package/lib/typescript/module/dialog/Dialog.d.ts.map +1 -1
- package/lib/typescript/module/dialog/DialogBottomSheet.d.ts.map +1 -1
- package/lib/typescript/module/dialog/DialogHeader.d.ts +6 -0
- package/lib/typescript/module/dialog/DialogHeader.d.ts.map +1 -1
- package/lib/typescript/module/dialog/DialogMorph.d.ts +2 -2
- package/lib/typescript/module/dialog/types.d.ts +67 -0
- package/lib/typescript/module/dialog/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/Dialog.test.tsx +77 -0
- package/src/bottom-sheet/BottomSheetBase.tsx +2 -1
- package/src/dialog/Dialog.tsx +6 -1
- package/src/dialog/DialogBottomSheet.tsx +2 -1
- package/src/dialog/DialogHeader.tsx +301 -27
- package/src/dialog/types.ts +81 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogHeader.d.ts","sourceRoot":"","sources":["../../../../src/dialog/DialogHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAiB,EAKf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"DialogHeader.d.ts","sourceRoot":"","sources":["../../../../src/dialog/DialogHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAiB,EAKf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAoBjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAiBlD,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAKxC,uDAAuD;AACvD,eAAO,MAAM,4BAA4B,QAAwC,CAAC;AAElF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAA+B,CAAC;AAQtE;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAgBlD,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;CACjD;AA0CD;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,IAAI,sBAAsB,CAQlE;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,QAAQ,GACT,EAAE;IACD,UAAU,EAAE,sBAAsB,CAAC;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,GAAG,KAAK,CAAC,YAAY,CAMrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CA2BnF;AAoID;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe;gBAOd,sBAAsB;YAC1B,kBAAkB;eACf,MAAM,IAAI;IACrB;;;;;OAKG;eACQ,OAAO;YACV,SAAS,CAAC,SAAS,CAAC;EAmI5B,CAAC;AAIH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;gBAIf,sBAAsB;YAC1B,kBAAkB;EA0F1B,CAAC"}
|
|
@@ -127,8 +127,8 @@ export declare function useDialogMorph({ enabled, measurable, maxHeight, maxWidt
|
|
|
127
127
|
channel: DialogFrameChannel;
|
|
128
128
|
onPanelLayout: (event: LayoutChangeEvent) => void;
|
|
129
129
|
onContentLayout: (event: LayoutChangeEvent) => void;
|
|
130
|
-
panelStyle: ViewStyle
|
|
131
|
-
contentStyle: ViewStyle
|
|
130
|
+
panelStyle: import("react-native-reanimated/lib/typescript/hook/commonTypes").AnimatedStyleHandle<ViewStyle>;
|
|
131
|
+
contentStyle: import("react-native-reanimated/lib/typescript/hook/commonTypes").AnimatedStyleHandle<ViewStyle>;
|
|
132
132
|
};
|
|
133
133
|
export type DialogMorph = ReturnType<typeof useDialogMorph>;
|
|
134
134
|
/**
|
|
@@ -50,6 +50,73 @@ export interface DialogHeaderConfig {
|
|
|
50
50
|
* affordance entirely (e.g. a blocking surface).
|
|
51
51
|
*/
|
|
52
52
|
showClose?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* The ONE trailing call-to-action (Upload / Use photo / Save / Done) — a
|
|
55
|
+
* proper Bloom `Button` rendered at the trailing edge of the nav row, AFTER
|
|
56
|
+
* any `actions`. Standardizes what screens used to cram into `right`; supports
|
|
57
|
+
* `disabled` and a `loading` spinner (async submit). When set (and no explicit
|
|
58
|
+
* `right`), the default close affordance moves to the leading edge if the
|
|
59
|
+
* screen has no `onBack`, so there is always exactly one dismiss control.
|
|
60
|
+
*/
|
|
61
|
+
primaryAction?: {
|
|
62
|
+
label: string;
|
|
63
|
+
onPress: () => void;
|
|
64
|
+
disabled?: boolean;
|
|
65
|
+
loading?: boolean;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Trailing icon buttons (share / more / sort), rendered as frosted circles
|
|
69
|
+
* BEFORE `primaryAction`. Past {@link DIALOG_HEADER_MAX_INLINE_ACTIONS} the
|
|
70
|
+
* surplus collapses into a "more" overflow menu (Material pattern) built on
|
|
71
|
+
* Bloom's `Menu` — never hand-rolled. Each item's `accessibilityLabel` is also
|
|
72
|
+
* its overflow-menu row text.
|
|
73
|
+
*/
|
|
74
|
+
actions?: Array<{
|
|
75
|
+
icon: ReactNode;
|
|
76
|
+
accessibilityLabel: string;
|
|
77
|
+
onPress: () => void;
|
|
78
|
+
disabled?: boolean;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* A search field in the collapsing large-title zone (iOS `.searchable` style:
|
|
82
|
+
* sits under the title and scrolls away with it). Requires a scrolling surface
|
|
83
|
+
* (`scrollable !== false`) — it lives in the same in-content block as the large
|
|
84
|
+
* title. Built on Bloom's `Search`.
|
|
85
|
+
*/
|
|
86
|
+
search?: {
|
|
87
|
+
value: string;
|
|
88
|
+
onChangeText: (text: string) => void;
|
|
89
|
+
placeholder?: string;
|
|
90
|
+
onSubmit?: () => void;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* A segmented control row UNDER the title (Material secondary row) for view
|
|
94
|
+
* switching. Requires a scrolling surface (lives in the large-title zone).
|
|
95
|
+
* Built on Bloom's `SegmentedControl` (`type="tabs"`).
|
|
96
|
+
*/
|
|
97
|
+
segments?: {
|
|
98
|
+
items: Array<{
|
|
99
|
+
key: string;
|
|
100
|
+
label: string;
|
|
101
|
+
}>;
|
|
102
|
+
value: string;
|
|
103
|
+
onChange: (key: string) => void;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Over a banner / dark media canvas, `'onImage'` strengthens the gradient
|
|
107
|
+
* scrim and forces light-content title + default icon buttons so the chrome
|
|
108
|
+
* stays legible over the media. `'default'` (the default) is unchanged.
|
|
109
|
+
*/
|
|
110
|
+
tone?: 'default' | 'onImage';
|
|
111
|
+
/**
|
|
112
|
+
* A thin step/progress indicator for wizards, rendered in the large-title zone
|
|
113
|
+
* below any title/search/segments. `step` is 1-based; the bar fills
|
|
114
|
+
* `step / total`.
|
|
115
|
+
*/
|
|
116
|
+
progress?: {
|
|
117
|
+
step: number;
|
|
118
|
+
total: number;
|
|
119
|
+
};
|
|
53
120
|
}
|
|
54
121
|
/**
|
|
55
122
|
* Side-sheet inset (px) from the root overlay's edges. Lets a host place a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dialog/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dialog/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
import { type LayoutChangeEvent, type ViewStyle, type StyleProp } from 'react-native';
|
|
3
|
-
import { type SharedValue } from 'react-native-reanimated';
|
|
3
|
+
import { type AnimatedStyle, type SharedValue } from 'react-native-reanimated';
|
|
4
4
|
export interface BottomSheetRef {
|
|
5
5
|
present: () => void;
|
|
6
6
|
dismiss: () => void;
|
|
@@ -36,7 +36,7 @@ export interface BottomSheetProps {
|
|
|
36
36
|
* background color, border radius, etc. Composed AFTER the internal sheet
|
|
37
37
|
* styles so it can override them.
|
|
38
38
|
*/
|
|
39
|
-
style?: StyleProp<ViewStyle
|
|
39
|
+
style?: StyleProp<AnimatedStyle<ViewStyle>>;
|
|
40
40
|
enableHandlePanningGesture?: boolean;
|
|
41
41
|
onDismissAttempt?: () => boolean;
|
|
42
42
|
detached?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomSheetBase.d.ts","sourceRoot":"","sources":["../../../../src/bottom-sheet/BottomSheetBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAMH,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAiB,
|
|
1
|
+
{"version":3,"file":"BottomSheetBase.d.ts","sourceRoot":"","sources":["../../../../src/bottom-sheet/BottomSheetBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAMH,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAiB,EACb,KAAK,aAAa,EAGlB,KAAK,WAAW,EAMnB,MAAM,yBAAyB,CAAC;AAwBjC,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;KAAE,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7F,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IACjH;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACxC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IAClC,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;OAGG;IACH,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC1D,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;CACrD;AAED,eAAO,MAAM,eAAe,6FAmmB1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../../src/dialog/Dialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../../src/dialog/Dialog.tsx"],"names":[],"mappings":"AA0CA,OAAO,EAIL,4BAA4B,EAK7B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,YAAY,EAGZ,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,4BAA4B,EAAE,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,WAAW,2CAab;AA4fD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,GACV,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,2CAoBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogBottomSheet.d.ts","sourceRoot":"","sources":["../../../../src/dialog/DialogBottomSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DialogBottomSheet.d.ts","sourceRoot":"","sources":["../../../../src/dialog/DialogBottomSheet.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAsB,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,IAAI,EAAE,cAAc,EACpB,SAAS,EACT,OAAO,EACP,MAAM,EACN,KAAK,EACL,WAAW,EACX,OAAO,EACP,MAAM,EACN,cAAyC,EACzC,UAAiB,EACjB,iBAAwB,EACxB,cAA+C,EAC/C,UAAU,EACV,KAAK,EACL,KAAK,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,QAAQ,GACT,EAAE,sBAAsB,2CAmPxB;AAED;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,WAAW,EACT,SAAS,GACT,MAAM,GACN,WAAW,GACX,SAAS,GACT,QAAQ,GACR,OAAO,GACP,aAAa,GACb,SAAS,GACT,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,mBAAmB,GACnB,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,OAAO,GACP,UAAU,CACb,CAAC"}
|
|
@@ -12,6 +12,12 @@ export declare const DIALOG_HEADER_OVERLAY_HEIGHT: number;
|
|
|
12
12
|
* BELOW the whole gradient overlay (fully clear at rest, then scrolls under it).
|
|
13
13
|
*/
|
|
14
14
|
export declare const DIALOG_HEADER_CONTENT_TOP: number;
|
|
15
|
+
/**
|
|
16
|
+
* Trailing icon `actions` shown inline before they collapse into a "more"
|
|
17
|
+
* overflow menu (Material overflow pattern). Kept small so the nav row never
|
|
18
|
+
* crowds the title.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DIALOG_HEADER_MAX_INLINE_ACTIONS = 3;
|
|
15
21
|
interface HeaderStore {
|
|
16
22
|
getSnapshot: () => DialogHeaderConfig | null;
|
|
17
23
|
setOverride: (next: DialogHeaderConfig | null) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogHeader.d.ts","sourceRoot":"","sources":["../../../../src/dialog/DialogHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAiB,EAKf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"DialogHeader.d.ts","sourceRoot":"","sources":["../../../../src/dialog/DialogHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAiB,EAKf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAoBjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAiBlD,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAKxC,uDAAuD;AACvD,eAAO,MAAM,4BAA4B,QAAwC,CAAC;AAElF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAA+B,CAAC;AAQtE;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAgBlD,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;CACjD;AA0CD;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,IAAI,sBAAsB,CAQlE;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,QAAQ,GACT,EAAE;IACD,UAAU,EAAE,sBAAsB,CAAC;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,GAAG,KAAK,CAAC,YAAY,CAMrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CA2BnF;AAoID;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe;gBAOd,sBAAsB;YAC1B,kBAAkB;eACf,MAAM,IAAI;IACrB;;;;;OAKG;eACQ,OAAO;YACV,SAAS,CAAC,SAAS,CAAC;EAmI5B,CAAC;AAIH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;gBAIf,sBAAsB;YAC1B,kBAAkB;EA0F1B,CAAC"}
|
|
@@ -127,8 +127,8 @@ export declare function useDialogMorph({ enabled, measurable, maxHeight, maxWidt
|
|
|
127
127
|
channel: DialogFrameChannel;
|
|
128
128
|
onPanelLayout: (event: LayoutChangeEvent) => void;
|
|
129
129
|
onContentLayout: (event: LayoutChangeEvent) => void;
|
|
130
|
-
panelStyle: ViewStyle
|
|
131
|
-
contentStyle: ViewStyle
|
|
130
|
+
panelStyle: import("react-native-reanimated/lib/typescript/hook/commonTypes").AnimatedStyleHandle<ViewStyle>;
|
|
131
|
+
contentStyle: import("react-native-reanimated/lib/typescript/hook/commonTypes").AnimatedStyleHandle<ViewStyle>;
|
|
132
132
|
};
|
|
133
133
|
export type DialogMorph = ReturnType<typeof useDialogMorph>;
|
|
134
134
|
/**
|
|
@@ -50,6 +50,73 @@ export interface DialogHeaderConfig {
|
|
|
50
50
|
* affordance entirely (e.g. a blocking surface).
|
|
51
51
|
*/
|
|
52
52
|
showClose?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* The ONE trailing call-to-action (Upload / Use photo / Save / Done) — a
|
|
55
|
+
* proper Bloom `Button` rendered at the trailing edge of the nav row, AFTER
|
|
56
|
+
* any `actions`. Standardizes what screens used to cram into `right`; supports
|
|
57
|
+
* `disabled` and a `loading` spinner (async submit). When set (and no explicit
|
|
58
|
+
* `right`), the default close affordance moves to the leading edge if the
|
|
59
|
+
* screen has no `onBack`, so there is always exactly one dismiss control.
|
|
60
|
+
*/
|
|
61
|
+
primaryAction?: {
|
|
62
|
+
label: string;
|
|
63
|
+
onPress: () => void;
|
|
64
|
+
disabled?: boolean;
|
|
65
|
+
loading?: boolean;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Trailing icon buttons (share / more / sort), rendered as frosted circles
|
|
69
|
+
* BEFORE `primaryAction`. Past {@link DIALOG_HEADER_MAX_INLINE_ACTIONS} the
|
|
70
|
+
* surplus collapses into a "more" overflow menu (Material pattern) built on
|
|
71
|
+
* Bloom's `Menu` — never hand-rolled. Each item's `accessibilityLabel` is also
|
|
72
|
+
* its overflow-menu row text.
|
|
73
|
+
*/
|
|
74
|
+
actions?: Array<{
|
|
75
|
+
icon: ReactNode;
|
|
76
|
+
accessibilityLabel: string;
|
|
77
|
+
onPress: () => void;
|
|
78
|
+
disabled?: boolean;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* A search field in the collapsing large-title zone (iOS `.searchable` style:
|
|
82
|
+
* sits under the title and scrolls away with it). Requires a scrolling surface
|
|
83
|
+
* (`scrollable !== false`) — it lives in the same in-content block as the large
|
|
84
|
+
* title. Built on Bloom's `Search`.
|
|
85
|
+
*/
|
|
86
|
+
search?: {
|
|
87
|
+
value: string;
|
|
88
|
+
onChangeText: (text: string) => void;
|
|
89
|
+
placeholder?: string;
|
|
90
|
+
onSubmit?: () => void;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* A segmented control row UNDER the title (Material secondary row) for view
|
|
94
|
+
* switching. Requires a scrolling surface (lives in the large-title zone).
|
|
95
|
+
* Built on Bloom's `SegmentedControl` (`type="tabs"`).
|
|
96
|
+
*/
|
|
97
|
+
segments?: {
|
|
98
|
+
items: Array<{
|
|
99
|
+
key: string;
|
|
100
|
+
label: string;
|
|
101
|
+
}>;
|
|
102
|
+
value: string;
|
|
103
|
+
onChange: (key: string) => void;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Over a banner / dark media canvas, `'onImage'` strengthens the gradient
|
|
107
|
+
* scrim and forces light-content title + default icon buttons so the chrome
|
|
108
|
+
* stays legible over the media. `'default'` (the default) is unchanged.
|
|
109
|
+
*/
|
|
110
|
+
tone?: 'default' | 'onImage';
|
|
111
|
+
/**
|
|
112
|
+
* A thin step/progress indicator for wizards, rendered in the large-title zone
|
|
113
|
+
* below any title/search/segments. `step` is 1-based; the bar fills
|
|
114
|
+
* `step / total`.
|
|
115
|
+
*/
|
|
116
|
+
progress?: {
|
|
117
|
+
step: number;
|
|
118
|
+
total: number;
|
|
119
|
+
};
|
|
53
120
|
}
|
|
54
121
|
/**
|
|
55
122
|
* Side-sheet inset (px) from the root overlay's edges. Lets a host place a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dialog/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dialog/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -175,3 +175,80 @@ describe('alert() helper', () => {
|
|
|
175
175
|
expect(onPress).toHaveBeenCalledTimes(1);
|
|
176
176
|
});
|
|
177
177
|
});
|
|
178
|
+
|
|
179
|
+
describe('Dialog nav header (rich fields)', () => {
|
|
180
|
+
function openHeader(header: React.ComponentProps<typeof Dialog>['header']) {
|
|
181
|
+
let control: ReturnType<typeof useDialogControl> | undefined;
|
|
182
|
+
const utils = renderWithTheme(
|
|
183
|
+
<Harness onControl={(c) => { control = c; }}>
|
|
184
|
+
{(c) => (
|
|
185
|
+
<Dialog control={c} header={header} scrollable>
|
|
186
|
+
<Text>Screen body</Text>
|
|
187
|
+
</Dialog>
|
|
188
|
+
)}
|
|
189
|
+
</Harness>,
|
|
190
|
+
);
|
|
191
|
+
act(() => { control?.open(); });
|
|
192
|
+
return utils;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
it('renders primaryAction, actions, search and segments', () => {
|
|
196
|
+
const { getByText, getByLabelText, getByPlaceholderText } = openHeader({
|
|
197
|
+
title: 'Rich title',
|
|
198
|
+
primaryAction: { label: 'Save', onPress: jest.fn() },
|
|
199
|
+
actions: [
|
|
200
|
+
{ icon: <Text>·</Text>, accessibilityLabel: 'Share', onPress: jest.fn() },
|
|
201
|
+
{ icon: <Text>·</Text>, accessibilityLabel: 'Star', onPress: jest.fn() },
|
|
202
|
+
],
|
|
203
|
+
search: { value: '', onChangeText: jest.fn(), placeholder: 'Find items' },
|
|
204
|
+
segments: {
|
|
205
|
+
items: [
|
|
206
|
+
{ key: 'all', label: 'All' },
|
|
207
|
+
{ key: 'photos', label: 'Photos' },
|
|
208
|
+
],
|
|
209
|
+
value: 'all',
|
|
210
|
+
onChange: jest.fn(),
|
|
211
|
+
},
|
|
212
|
+
progress: { step: 2, total: 5 },
|
|
213
|
+
});
|
|
214
|
+
expect(getByText('Save')).toBeTruthy();
|
|
215
|
+
expect(getByLabelText('Share')).toBeTruthy();
|
|
216
|
+
expect(getByLabelText('Star')).toBeTruthy();
|
|
217
|
+
expect(getByPlaceholderText('Find items')).toBeTruthy();
|
|
218
|
+
expect(getByText('All')).toBeTruthy();
|
|
219
|
+
expect(getByText('Photos')).toBeTruthy();
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it('fires primaryAction.onPress when the CTA is pressed', () => {
|
|
223
|
+
const onSave = jest.fn();
|
|
224
|
+
const { getByText } = openHeader({
|
|
225
|
+
title: 'T',
|
|
226
|
+
primaryAction: { label: 'Save', onPress: onSave },
|
|
227
|
+
});
|
|
228
|
+
act(() => { fireEvent.press(getByText('Save')); });
|
|
229
|
+
expect(onSave).toHaveBeenCalledTimes(1);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it('collapses surplus actions into a "More" overflow trigger', () => {
|
|
233
|
+
const { getByLabelText } = openHeader({
|
|
234
|
+
title: 'T',
|
|
235
|
+
actions: [
|
|
236
|
+
{ icon: <Text>a</Text>, accessibilityLabel: 'A1', onPress: jest.fn() },
|
|
237
|
+
{ icon: <Text>b</Text>, accessibilityLabel: 'A2', onPress: jest.fn() },
|
|
238
|
+
{ icon: <Text>c</Text>, accessibilityLabel: 'A3', onPress: jest.fn() },
|
|
239
|
+
{ icon: <Text>d</Text>, accessibilityLabel: 'A4', onPress: jest.fn() },
|
|
240
|
+
],
|
|
241
|
+
});
|
|
242
|
+
// 4 actions > the inline max (3): the first two stay inline + a "More" trigger.
|
|
243
|
+
expect(getByLabelText('A1')).toBeTruthy();
|
|
244
|
+
expect(getByLabelText('A2')).toBeTruthy();
|
|
245
|
+
expect(getByLabelText('More')).toBeTruthy();
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it('backward-compat: a title-only header still renders the default close', () => {
|
|
249
|
+
const { getAllByText, getByLabelText } = openHeader({ title: 'Just a title' });
|
|
250
|
+
// Title renders in both the large title and the (collapsed) bar title.
|
|
251
|
+
expect(getAllByText('Just a title').length).toBeGreaterThanOrEqual(1);
|
|
252
|
+
expect(getByLabelText('Close')).toBeTruthy();
|
|
253
|
+
});
|
|
254
|
+
});
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
import { Gesture, GestureDetector, type GestureType } from 'react-native-gesture-handler';
|
|
14
14
|
import { Z_INDEX } from '../styles/z-index';
|
|
15
15
|
import Animated, {
|
|
16
|
+
type AnimatedStyle,
|
|
16
17
|
interpolate,
|
|
17
18
|
runOnJS,
|
|
18
19
|
type SharedValue,
|
|
@@ -76,7 +77,7 @@ export interface BottomSheetProps {
|
|
|
76
77
|
* background color, border radius, etc. Composed AFTER the internal sheet
|
|
77
78
|
* styles so it can override them.
|
|
78
79
|
*/
|
|
79
|
-
style?: StyleProp<ViewStyle
|
|
80
|
+
style?: StyleProp<AnimatedStyle<ViewStyle>>;
|
|
80
81
|
enableHandlePanningGesture?: boolean;
|
|
81
82
|
onDismissAttempt?: () => boolean;
|
|
82
83
|
detached?: boolean; // If true, shows with margins and rounded corners. If false, full width with rounded top only.
|
package/src/dialog/Dialog.tsx
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
type ViewStyle,
|
|
17
17
|
} from 'react-native';
|
|
18
18
|
import Animated, {
|
|
19
|
+
type AnimatedStyle,
|
|
19
20
|
cancelAnimation,
|
|
20
21
|
Easing,
|
|
21
22
|
runOnJS,
|
|
@@ -238,7 +239,11 @@ function CenteredOrSideDialog({
|
|
|
238
239
|
[close],
|
|
239
240
|
);
|
|
240
241
|
|
|
241
|
-
|
|
242
|
+
// The array composes the plain surface styles with the morph's reanimated
|
|
243
|
+
// animated style (`morphState.panelStyle` from `useAnimatedStyle`), so the
|
|
244
|
+
// element type must admit an animated style, not just a plain `ViewStyle`.
|
|
245
|
+
// It flows to `<BottomSheet style>`, which applies it to its outer Animated.View.
|
|
246
|
+
const sheetStyle = useMemo<StyleProp<AnimatedStyle<ViewStyle>>>(
|
|
242
247
|
() => [
|
|
243
248
|
{
|
|
244
249
|
maxWidth: 500,
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
type StyleProp,
|
|
13
13
|
type ViewStyle,
|
|
14
14
|
} from 'react-native';
|
|
15
|
+
import { type AnimatedStyle } from 'react-native-reanimated';
|
|
15
16
|
|
|
16
17
|
import { BottomSheet, type BottomSheetRef } from '../bottom-sheet';
|
|
17
18
|
import { useTheme } from '../theme/use-theme';
|
|
@@ -179,7 +180,7 @@ export function DialogBottomSheet({
|
|
|
179
180
|
// `panelStyle` paints the sheet surface (e.g. a brand background). It composes
|
|
180
181
|
// AFTER the BottomSheet's internal background so a host palette wins; the
|
|
181
182
|
// shape (radius, max height) is supplied here and remains overridable.
|
|
182
|
-
const sheetStyle = useMemo<StyleProp<ViewStyle
|
|
183
|
+
const sheetStyle = useMemo<StyleProp<AnimatedStyle<ViewStyle>>>(() => {
|
|
183
184
|
const maxHeightPercent: `${number}%` = `${Math.round(maxHeightRatio * 100)}%`;
|
|
184
185
|
return [
|
|
185
186
|
{
|