@oxyhq/bloom 0.3.12 → 0.5.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/README.md +133 -90
- package/lib/commonjs/bottom-sheet/index.js +341 -98
- package/lib/commonjs/bottom-sheet/index.js.map +1 -1
- package/lib/commonjs/context-menu/index.js +18 -19
- package/lib/commonjs/context-menu/index.js.map +1 -1
- package/lib/commonjs/dialog/BloomDialogProvider.js +61 -0
- package/lib/commonjs/dialog/BloomDialogProvider.js.map +1 -0
- package/lib/commonjs/dialog/BloomDialogProvider.web.js +45 -0
- package/lib/commonjs/dialog/BloomDialogProvider.web.js.map +1 -0
- package/lib/commonjs/dialog/Dialog.js +197 -100
- package/lib/commonjs/dialog/Dialog.js.map +1 -1
- package/lib/commonjs/dialog/Dialog.web.js +194 -84
- package/lib/commonjs/dialog/Dialog.web.js.map +1 -1
- package/lib/commonjs/dialog/SheetShell.js +149 -0
- package/lib/commonjs/dialog/SheetShell.js.map +1 -0
- package/lib/commonjs/dialog/alert-store.js +116 -0
- package/lib/commonjs/dialog/alert-store.js.map +1 -0
- package/lib/commonjs/dialog/alert.js +38 -0
- package/lib/commonjs/dialog/alert.js.map +1 -0
- package/lib/commonjs/dialog/context.js +10 -2
- package/lib/commonjs/dialog/context.js.map +1 -1
- package/lib/commonjs/dialog/index.js +8 -24
- package/lib/commonjs/dialog/index.js.map +1 -1
- package/lib/commonjs/dialog/index.web.js +10 -20
- package/lib/commonjs/dialog/index.web.js.map +1 -1
- package/lib/commonjs/index.js +101 -66
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +101 -66
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/menu/index.js +21 -23
- package/lib/commonjs/menu/index.js.map +1 -1
- package/lib/commonjs/select/index.js +26 -27
- package/lib/commonjs/select/index.js.map +1 -1
- package/lib/commonjs/toast/index.js +42 -13
- package/lib/commonjs/toast/index.js.map +1 -1
- package/lib/commonjs/toast/index.web.js +19 -15
- package/lib/commonjs/toast/index.web.js.map +1 -1
- package/lib/module/bottom-sheet/index.js +341 -98
- package/lib/module/bottom-sheet/index.js.map +1 -1
- package/lib/module/context-menu/index.js +15 -16
- package/lib/module/context-menu/index.js.map +1 -1
- package/lib/module/dialog/BloomDialogProvider.js +57 -0
- package/lib/module/dialog/BloomDialogProvider.js.map +1 -0
- package/lib/module/dialog/BloomDialogProvider.web.js +41 -0
- package/lib/module/dialog/BloomDialogProvider.web.js.map +1 -0
- package/lib/module/dialog/Dialog.js +199 -87
- package/lib/module/dialog/Dialog.js.map +1 -1
- package/lib/module/dialog/Dialog.web.js +195 -70
- package/lib/module/dialog/Dialog.web.js.map +1 -1
- package/lib/module/dialog/SheetShell.js +143 -0
- package/lib/module/dialog/SheetShell.js.map +1 -0
- package/lib/module/dialog/alert-store.js +107 -0
- package/lib/module/dialog/alert-store.js.map +1 -0
- package/lib/module/dialog/alert.js +35 -0
- package/lib/module/dialog/alert.js.map +1 -0
- package/lib/module/dialog/context.js +10 -2
- package/lib/module/dialog/context.js.map +1 -1
- package/lib/module/dialog/index.js +3 -1
- package/lib/module/dialog/index.js.map +1 -1
- package/lib/module/dialog/index.web.js +9 -7
- package/lib/module/dialog/index.web.js.map +1 -1
- package/lib/module/index.js +2 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +2 -3
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/menu/index.js +11 -13
- package/lib/module/menu/index.js.map +1 -1
- package/lib/module/select/index.js +27 -28
- package/lib/module/select/index.js.map +1 -1
- package/lib/module/toast/index.js +41 -11
- package/lib/module/toast/index.js.map +1 -1
- package/lib/module/toast/index.web.js +18 -13
- package/lib/module/toast/index.web.js.map +1 -1
- package/lib/typescript/commonjs/__tests__/Dialog.test.d.ts +2 -0
- package/lib/typescript/commonjs/__tests__/Dialog.test.d.ts.map +1 -0
- package/lib/typescript/commonjs/bottom-sheet/index.d.ts +47 -1
- package/lib/typescript/commonjs/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/context-menu/index.d.ts +4 -3
- package/lib/typescript/commonjs/context-menu/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/BloomDialogProvider.d.ts +27 -0
- package/lib/typescript/commonjs/dialog/BloomDialogProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/dialog/BloomDialogProvider.web.d.ts +15 -0
- package/lib/typescript/commonjs/dialog/BloomDialogProvider.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/dialog/Dialog.d.ts +37 -10
- package/lib/typescript/commonjs/dialog/Dialog.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/Dialog.web.d.ts +26 -10
- package/lib/typescript/commonjs/dialog/Dialog.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/SheetShell.d.ts +31 -0
- package/lib/typescript/commonjs/dialog/SheetShell.d.ts.map +1 -0
- package/lib/typescript/commonjs/dialog/alert-store.d.ts +70 -0
- package/lib/typescript/commonjs/dialog/alert-store.d.ts.map +1 -0
- package/lib/typescript/commonjs/dialog/alert.d.ts +27 -0
- package/lib/typescript/commonjs/dialog/alert.d.ts.map +1 -0
- package/lib/typescript/commonjs/dialog/context.d.ts +7 -0
- package/lib/typescript/commonjs/dialog/context.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/index.d.ts +5 -2
- package/lib/typescript/commonjs/dialog/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/index.web.d.ts +5 -2
- package/lib/typescript/commonjs/dialog/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/dialog/types.d.ts +70 -15
- package/lib/typescript/commonjs/dialog/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +3 -3
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +3 -3
- package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/menu/index.d.ts +4 -4
- package/lib/typescript/commonjs/menu/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/select/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/toast/index.d.ts +32 -3
- package/lib/typescript/commonjs/toast/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/toast/index.web.d.ts +14 -7
- package/lib/typescript/commonjs/toast/index.web.d.ts.map +1 -1
- package/lib/typescript/module/__tests__/Dialog.test.d.ts +2 -0
- package/lib/typescript/module/__tests__/Dialog.test.d.ts.map +1 -0
- package/lib/typescript/module/bottom-sheet/index.d.ts +47 -1
- package/lib/typescript/module/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/module/context-menu/index.d.ts +4 -3
- package/lib/typescript/module/context-menu/index.d.ts.map +1 -1
- package/lib/typescript/module/dialog/BloomDialogProvider.d.ts +27 -0
- package/lib/typescript/module/dialog/BloomDialogProvider.d.ts.map +1 -0
- package/lib/typescript/module/dialog/BloomDialogProvider.web.d.ts +15 -0
- package/lib/typescript/module/dialog/BloomDialogProvider.web.d.ts.map +1 -0
- package/lib/typescript/module/dialog/Dialog.d.ts +37 -10
- package/lib/typescript/module/dialog/Dialog.d.ts.map +1 -1
- package/lib/typescript/module/dialog/Dialog.web.d.ts +26 -10
- package/lib/typescript/module/dialog/Dialog.web.d.ts.map +1 -1
- package/lib/typescript/module/dialog/SheetShell.d.ts +31 -0
- package/lib/typescript/module/dialog/SheetShell.d.ts.map +1 -0
- package/lib/typescript/module/dialog/alert-store.d.ts +70 -0
- package/lib/typescript/module/dialog/alert-store.d.ts.map +1 -0
- package/lib/typescript/module/dialog/alert.d.ts +27 -0
- package/lib/typescript/module/dialog/alert.d.ts.map +1 -0
- package/lib/typescript/module/dialog/context.d.ts +7 -0
- package/lib/typescript/module/dialog/context.d.ts.map +1 -1
- package/lib/typescript/module/dialog/index.d.ts +5 -2
- package/lib/typescript/module/dialog/index.d.ts.map +1 -1
- package/lib/typescript/module/dialog/index.web.d.ts +5 -2
- package/lib/typescript/module/dialog/index.web.d.ts.map +1 -1
- package/lib/typescript/module/dialog/types.d.ts +70 -15
- package/lib/typescript/module/dialog/types.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +3 -3
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/index.web.d.ts +3 -3
- package/lib/typescript/module/index.web.d.ts.map +1 -1
- package/lib/typescript/module/menu/index.d.ts +4 -4
- package/lib/typescript/module/menu/index.d.ts.map +1 -1
- package/lib/typescript/module/select/index.d.ts.map +1 -1
- package/lib/typescript/module/toast/index.d.ts +32 -3
- package/lib/typescript/module/toast/index.d.ts.map +1 -1
- package/lib/typescript/module/toast/index.web.d.ts +14 -7
- package/lib/typescript/module/toast/index.web.d.ts.map +1 -1
- package/package.json +3 -14
- package/src/__tests__/BottomSheet.test.tsx +149 -2
- package/src/__tests__/Dialog.test.tsx +177 -0
- package/src/bottom-sheet/index.tsx +367 -83
- package/src/context-menu/index.tsx +12 -12
- package/src/dialog/BloomDialogProvider.tsx +61 -0
- package/src/dialog/BloomDialogProvider.web.tsx +46 -0
- package/src/dialog/Dialog.tsx +217 -64
- package/src/dialog/Dialog.web.tsx +240 -75
- package/src/dialog/SheetShell.tsx +154 -0
- package/src/dialog/alert-store.ts +126 -0
- package/src/dialog/alert.ts +42 -0
- package/src/dialog/context.ts +14 -3
- package/src/dialog/index.ts +14 -2
- package/src/dialog/index.web.ts +20 -8
- package/src/dialog/types.ts +73 -16
- package/src/index.ts +17 -3
- package/src/index.web.ts +17 -3
- package/src/menu/index.tsx +13 -17
- package/src/select/index.tsx +30 -30
- package/src/toast/index.tsx +55 -11
- package/src/toast/index.web.tsx +33 -13
- package/lib/commonjs/prompt/Prompt.js +0 -267
- package/lib/commonjs/prompt/Prompt.js.map +0 -1
- package/lib/commonjs/prompt/index.js +0 -61
- package/lib/commonjs/prompt/index.js.map +0 -1
- package/lib/module/prompt/Prompt.js +0 -250
- package/lib/module/prompt/Prompt.js.map +0 -1
- package/lib/module/prompt/index.js +0 -4
- package/lib/module/prompt/index.js.map +0 -1
- package/lib/typescript/commonjs/prompt/Prompt.d.ts +0 -42
- package/lib/typescript/commonjs/prompt/Prompt.d.ts.map +0 -1
- package/lib/typescript/commonjs/prompt/index.d.ts +0 -3
- package/lib/typescript/commonjs/prompt/index.d.ts.map +0 -1
- package/lib/typescript/module/prompt/Prompt.d.ts +0 -42
- package/lib/typescript/module/prompt/Prompt.d.ts.map +0 -1
- package/lib/typescript/module/prompt/index.d.ts +0 -3
- package/lib/typescript/module/prompt/index.d.ts.map +0 -1
- package/src/prompt/Prompt.tsx +0 -247
- package/src/prompt/index.ts +0 -13
|
@@ -3,22 +3,24 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* ContextMenu — Native implementation
|
|
5
5
|
*
|
|
6
|
-
* Opens a bottom-sheet menu
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Opens a bottom-sheet menu when the user long-presses the trigger. The
|
|
7
|
+
* menu body uses bloom's internal `SheetShell` (a `BottomSheet`
|
|
8
|
+
* presentation primitive with the same drag-handle + close-on-tap
|
|
9
|
+
* semantics shared by `Menu` and `Select`).
|
|
9
10
|
*/
|
|
10
11
|
import React, { createContext, useCallback, useContext, useMemo } from 'react';
|
|
11
12
|
import { Pressable, StyleSheet, View } from 'react-native';
|
|
12
13
|
import { useTheme } from "../theme/use-theme.js";
|
|
13
14
|
import { Text } from "../typography/index.js";
|
|
14
|
-
import
|
|
15
|
+
import { useDialogControl } from "../dialog/context.js";
|
|
16
|
+
import { SheetShell } from "../dialog/SheetShell.js";
|
|
15
17
|
import { useInteractionState } from "../hooks/useInteractionState.js";
|
|
16
18
|
import { ItemCtx, useItemContext } from "./context.js";
|
|
17
19
|
|
|
18
20
|
// ---------------------------------------------------------------------------
|
|
19
21
|
// Native-specific context (extends base with Dialog control)
|
|
20
22
|
// ---------------------------------------------------------------------------
|
|
21
|
-
import { jsx as _jsx
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
22
24
|
const NativeContextMenuContext = /*#__PURE__*/createContext(null);
|
|
23
25
|
NativeContextMenuContext.displayName = 'NativeContextMenuContext';
|
|
24
26
|
function useNativeContextMenuContext() {
|
|
@@ -36,7 +38,7 @@ function useNativeContextMenuContext() {
|
|
|
36
38
|
export function Root({
|
|
37
39
|
children
|
|
38
40
|
}) {
|
|
39
|
-
const control =
|
|
41
|
+
const control = useDialogControl();
|
|
40
42
|
const ctx = useMemo(() => ({
|
|
41
43
|
isOpen: false,
|
|
42
44
|
open: () => control.open(),
|
|
@@ -99,24 +101,21 @@ export function Outer({
|
|
|
99
101
|
const {
|
|
100
102
|
control
|
|
101
103
|
} = useNativeContextMenuContext();
|
|
102
|
-
return /*#__PURE__*/
|
|
104
|
+
return /*#__PURE__*/_jsx(SheetShell, {
|
|
103
105
|
control: control,
|
|
104
|
-
|
|
105
|
-
children:
|
|
106
|
+
label: "Context menu",
|
|
107
|
+
children: /*#__PURE__*/_jsx(NativeContextMenuContext.Provider, {
|
|
106
108
|
value: {
|
|
107
109
|
isOpen: true,
|
|
108
110
|
open: () => control.open(),
|
|
109
111
|
close: () => control.close(),
|
|
110
112
|
control
|
|
111
113
|
},
|
|
112
|
-
children: /*#__PURE__*/_jsx(
|
|
113
|
-
|
|
114
|
-
children:
|
|
115
|
-
style: [styles.outerContent, style],
|
|
116
|
-
children: children
|
|
117
|
-
})
|
|
114
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
115
|
+
style: [styles.outerContent, style],
|
|
116
|
+
children: children
|
|
118
117
|
})
|
|
119
|
-
})
|
|
118
|
+
})
|
|
120
119
|
});
|
|
121
120
|
}
|
|
122
121
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","createContext","useCallback","useContext","useMemo","Pressable","StyleSheet","View","useTheme","Text","
|
|
1
|
+
{"version":3,"names":["React","createContext","useCallback","useContext","useMemo","Pressable","StyleSheet","View","useTheme","Text","useDialogControl","SheetShell","useInteractionState","ItemCtx","useItemContext","jsx","_jsx","NativeContextMenuContext","displayName","useNativeContextMenuContext","ctx","Error","Root","children","control","isOpen","open","close","Provider","value","Trigger","label","hint","style","state","focused","onIn","onFocus","onOut","onBlur","hovered","pressed","props","onPress","onLongPress","accessibilityLabel","accessibilityHint","Outer","styles","outerContent","Item","disabled","theme","onPressIn","onPressOut","isHighlighted","handlePress","itemCtx","accessibilityState","item","backgroundColor","colors","contrast50","borderColor","borderLight","backgroundSecondary","ItemText","numberOfLines","ellipsizeMode","itemText","color","textTertiary","text","ItemIcon","icon","Comp","size","fill","textSecondary","Group","Divider","divider","borderTopColor","create","gap","flexDirection","alignItems","paddingHorizontal","borderRadius","overflow","borderWidth","minHeight","paddingVertical","flex","fontSize","fontWeight","borderTopWidth","hairlineWidth","marginVertical"],"sourceRoot":"../../../src","sources":["context-menu/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useState } from 'react';
|
|
4
|
+
import { AutoMountedDialog } from './Dialog';
|
|
5
|
+
import { buttonToAction, dismissAlert, subscribeAlerts } from "./alert-store.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Mounts the imperative `alert()` host inside your app.
|
|
9
|
+
*
|
|
10
|
+
* Wrap your app root once (after `BloomThemeProvider`, so the dialog's
|
|
11
|
+
* colours come from the active theme) and you can call `alert()` from
|
|
12
|
+
* anywhere — including from code that runs before the provider mounts
|
|
13
|
+
* (alerts are queued and drained on subscribe).
|
|
14
|
+
*
|
|
15
|
+
* ```tsx
|
|
16
|
+
* import { BloomDialogProvider } from '@oxyhq/bloom';
|
|
17
|
+
*
|
|
18
|
+
* <BloomThemeProvider mode="system" colorPreset="oxy">
|
|
19
|
+
* <BloomDialogProvider>
|
|
20
|
+
* <App />
|
|
21
|
+
* </BloomDialogProvider>
|
|
22
|
+
* </BloomThemeProvider>
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Alerts are presented one at a time. While one is on screen, subsequent
|
|
26
|
+
* `alert()` calls enqueue and present in FIFO order once their predecessor
|
|
27
|
+
* has finished closing.
|
|
28
|
+
*/
|
|
29
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
30
|
+
export function BloomDialogProvider({
|
|
31
|
+
children
|
|
32
|
+
}) {
|
|
33
|
+
const [queue, setQueue] = useState([]);
|
|
34
|
+
useEffect(() => subscribeAlerts(setQueue), []);
|
|
35
|
+
|
|
36
|
+
// Only the head of the queue is presented; this keeps the bottom-sheet
|
|
37
|
+
// exit/enter animations clean and matches the platform `Alert.alert`
|
|
38
|
+
// behaviour our consumers expect.
|
|
39
|
+
const head = queue[0];
|
|
40
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
41
|
+
children: [children, head ? /*#__PURE__*/_jsx(AlertHost, {
|
|
42
|
+
entry: head
|
|
43
|
+
}, head.id) : null]
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function AlertHost({
|
|
47
|
+
entry
|
|
48
|
+
}) {
|
|
49
|
+
const actions = entry.buttons.map(buttonToAction);
|
|
50
|
+
return /*#__PURE__*/_jsx(AutoMountedDialog, {
|
|
51
|
+
title: entry.title,
|
|
52
|
+
description: entry.message,
|
|
53
|
+
actions: actions,
|
|
54
|
+
onResolve: () => dismissAlert(entry.id)
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=BloomDialogProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","AutoMountedDialog","buttonToAction","dismissAlert","subscribeAlerts","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","BloomDialogProvider","children","queue","setQueue","head","AlertHost","entry","id","actions","buttons","map","title","description","message","onResolve"],"sourceRoot":"../../../src","sources":["dialog/BloomDialogProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAElD,SAASC,iBAAiB,QAAQ,UAAU;AAC5C,SACEC,cAAc,EACdC,YAAY,EACZC,eAAe,QAEV,kBAAe;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAsBA,OAAO,SAASC,mBAAmBA,CAAC;EAAEC;AAAwC,CAAC,EAAE;EAC/E,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGd,QAAQ,CAAwB,EAAE,CAAC;EAE7DD,SAAS,CAAC,MAAMK,eAAe,CAACU,QAAQ,CAAC,EAAE,EAAE,CAAC;;EAE9C;EACA;EACA;EACA,MAAMC,IAAI,GAAGF,KAAK,CAAC,CAAC,CAAC;EAErB,oBACEH,KAAA,CAAAF,SAAA;IAAAI,QAAA,GACGA,QAAQ,EACRG,IAAI,gBAAGT,IAAA,CAACU,SAAS;MAAeC,KAAK,EAAEF;IAAK,GAArBA,IAAI,CAACG,EAAkB,CAAC,GAAG,IAAI;EAAA,CACvD,CAAC;AAEP;AAEA,SAASF,SAASA,CAAC;EAAEC;AAA6B,CAAC,EAAE;EACnD,MAAME,OAAO,GAAGF,KAAK,CAACG,OAAO,CAACC,GAAG,CAACnB,cAAc,CAAC;EACjD,oBACEI,IAAA,CAACL,iBAAiB;IAChBqB,KAAK,EAAEL,KAAK,CAACK,KAAM;IACnBC,WAAW,EAAEN,KAAK,CAACO,OAAQ;IAC3BL,OAAO,EAAEA,OAAQ;IACjBM,SAAS,EAAEA,CAAA,KAAMtB,YAAY,CAACc,KAAK,CAACC,EAAE;EAAE,CACzC,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useState } from 'react';
|
|
4
|
+
import { AutoMountedDialog } from "./Dialog.web.js";
|
|
5
|
+
import { buttonToAction, dismissAlert, subscribeAlerts } from "./alert-store.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Web variant of `BloomDialogProvider`. Identical surface area to the
|
|
9
|
+
* native version — it just uses the web-fork `Dialog` (`Dialog.web.tsx`)
|
|
10
|
+
* underneath instead of the bottom-sheet variant.
|
|
11
|
+
*
|
|
12
|
+
* See the native file (`./BloomDialogProvider.tsx`) for the full design
|
|
13
|
+
* notes; this fork exists purely so the bundler's `browser` condition can
|
|
14
|
+
* resolve to a `Dialog` that doesn't pull in the native gesture-handler /
|
|
15
|
+
* reanimated stack.
|
|
16
|
+
*/
|
|
17
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
export function BloomDialogProvider({
|
|
19
|
+
children
|
|
20
|
+
}) {
|
|
21
|
+
const [queue, setQueue] = useState([]);
|
|
22
|
+
useEffect(() => subscribeAlerts(setQueue), []);
|
|
23
|
+
const head = queue[0];
|
|
24
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
25
|
+
children: [children, head ? /*#__PURE__*/_jsx(AlertHost, {
|
|
26
|
+
entry: head
|
|
27
|
+
}, head.id) : null]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function AlertHost({
|
|
31
|
+
entry
|
|
32
|
+
}) {
|
|
33
|
+
const actions = entry.buttons.map(buttonToAction);
|
|
34
|
+
return /*#__PURE__*/_jsx(AutoMountedDialog, {
|
|
35
|
+
title: entry.title,
|
|
36
|
+
description: entry.message,
|
|
37
|
+
actions: actions,
|
|
38
|
+
onResolve: () => dismissAlert(entry.id)
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=BloomDialogProvider.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","AutoMountedDialog","buttonToAction","dismissAlert","subscribeAlerts","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","BloomDialogProvider","children","queue","setQueue","head","AlertHost","entry","id","actions","buttons","map","title","description","message","onResolve"],"sourceRoot":"../../../src","sources":["dialog/BloomDialogProvider.web.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAElD,SAASC,iBAAiB,QAAQ,iBAAc;AAChD,SACEC,cAAc,EACdC,YAAY,EACZC,eAAe,QAEV,kBAAe;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAUA,OAAO,SAASC,mBAAmBA,CAAC;EAAEC;AAAwC,CAAC,EAAE;EAC/E,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGd,QAAQ,CAAwB,EAAE,CAAC;EAE7DD,SAAS,CAAC,MAAMK,eAAe,CAACU,QAAQ,CAAC,EAAE,EAAE,CAAC;EAE9C,MAAMC,IAAI,GAAGF,KAAK,CAAC,CAAC,CAAC;EAErB,oBACEH,KAAA,CAAAF,SAAA;IAAAI,QAAA,GACGA,QAAQ,EACRG,IAAI,gBAAGT,IAAA,CAACU,SAAS;MAAeC,KAAK,EAAEF;IAAK,GAArBA,IAAI,CAACG,EAAkB,CAAC,GAAG,IAAI;EAAA,CACvD,CAAC;AAEP;AAEA,SAASF,SAASA,CAAC;EAAEC;AAA6B,CAAC,EAAE;EACnD,MAAME,OAAO,GAAGF,KAAK,CAACG,OAAO,CAACC,GAAG,CAACnB,cAAc,CAAC;EACjD,oBACEI,IAAA,CAACL,iBAAiB;IAChBqB,KAAK,EAAEL,KAAK,CAACK,KAAM;IACnBC,WAAW,EAAEN,KAAK,CAACO,OAAQ;IAC3BL,OAAO,EAAEA,OAAQ;IACjBM,SAAS,EAAEA,CAAA,KAAMtB,YAAY,CAACc,KAAK,CAACC,EAAE;EAAE,CACzC,CAAC;AAEN","ignoreList":[]}
|
|
@@ -1,30 +1,65 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useCallback, useImperativeHandle, useMemo, useRef } from 'react';
|
|
4
|
-
import {
|
|
3
|
+
import React, { useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef } from 'react';
|
|
4
|
+
import { Text, TouchableOpacity, View } from 'react-native';
|
|
5
5
|
import { BottomSheet } from "../bottom-sheet/index.js";
|
|
6
6
|
import { useTheme } from "../theme/use-theme.js";
|
|
7
|
-
import { Context, useDialogContext } from "./context.js";
|
|
8
|
-
import { jsx as _jsx,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
import { Context, useDialogContext, useDialogControl } from "./context.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
/**
|
|
10
|
+
* Native variant of `<Dialog>`.
|
|
11
|
+
*
|
|
12
|
+
* Uses bloom's own `BottomSheet` in `detached` mode as the underlying
|
|
13
|
+
* surface — a floating, dynamically-sized, content-hugging card that
|
|
14
|
+
* gracefully degrades from sheet (phone) to centered card (tablet, via the
|
|
15
|
+
* 500px max-width cap).
|
|
16
|
+
*
|
|
17
|
+
* The component accepts three rendering modes simultaneously:
|
|
18
|
+
*
|
|
19
|
+
* 1. Declarative — `title`, `description`, `actions`. Bloom renders a
|
|
20
|
+
* standard confirm/destructive/cancel layout.
|
|
21
|
+
* 2. Custom children — caller passes JSX, bloom renders the chrome (title
|
|
22
|
+
* + close behaviour) and the children fill the body.
|
|
23
|
+
* 3. Pure children — no `title`/`description`/`actions`; caller owns
|
|
24
|
+
* every pixel.
|
|
25
|
+
*
|
|
26
|
+
* All three share the same dismissal semantics: tapping the backdrop, the
|
|
27
|
+
* drag handle, swiping down, or `control.close()` runs the queued close
|
|
28
|
+
* callbacks once the sheet's exit animation has settled.
|
|
29
|
+
*/
|
|
30
|
+
export function Dialog({
|
|
12
31
|
control,
|
|
13
32
|
onClose,
|
|
14
|
-
testID
|
|
33
|
+
testID,
|
|
34
|
+
title,
|
|
35
|
+
description,
|
|
36
|
+
actions,
|
|
37
|
+
style,
|
|
38
|
+
label,
|
|
39
|
+
children
|
|
15
40
|
}) {
|
|
16
41
|
const theme = useTheme();
|
|
17
42
|
const ref = useRef(null);
|
|
18
43
|
const closeCallbacks = useRef([]);
|
|
44
|
+
const titleId = useId();
|
|
45
|
+
const descriptionId = useId();
|
|
46
|
+
|
|
47
|
+
// Drain queued close callbacks atomically — capturing the list and
|
|
48
|
+
// resetting it before invocation ensures a callback that synchronously
|
|
49
|
+
// re-opens the dialog (and queues fresh callbacks) does not see the old
|
|
50
|
+
// ones replayed against the new session.
|
|
19
51
|
const callQueuedCallbacks = useCallback(() => {
|
|
20
|
-
|
|
52
|
+
const queued = closeCallbacks.current;
|
|
53
|
+
closeCallbacks.current = [];
|
|
54
|
+
for (const cb of queued) {
|
|
21
55
|
try {
|
|
22
56
|
cb();
|
|
23
57
|
} catch (e) {
|
|
24
|
-
|
|
58
|
+
if (typeof console !== 'undefined' && console.error) {
|
|
59
|
+
console.error('Dialog close callback error:', e);
|
|
60
|
+
}
|
|
25
61
|
}
|
|
26
62
|
}
|
|
27
|
-
closeCallbacks.current = [];
|
|
28
63
|
}, []);
|
|
29
64
|
const open = useCallback(() => {
|
|
30
65
|
ref.current?.present();
|
|
@@ -35,11 +70,6 @@ export function Outer({
|
|
|
35
70
|
}
|
|
36
71
|
ref.current?.dismiss();
|
|
37
72
|
}, []);
|
|
38
|
-
|
|
39
|
-
// onDismiss fires after the BottomSheet's close animation finishes — this is
|
|
40
|
-
// the integration point for the closeCallbacks queue. Consumers (e.g.
|
|
41
|
-
// Prompt.Action) rely on the queued callback running AFTER the sheet has
|
|
42
|
-
// visually closed so the screen transition feels natural.
|
|
43
73
|
const handleDismiss = useCallback(() => {
|
|
44
74
|
callQueuedCallbacks();
|
|
45
75
|
onClose?.();
|
|
@@ -55,9 +85,9 @@ export function Outer({
|
|
|
55
85
|
const sheetStyle = useMemo(() => ({
|
|
56
86
|
maxWidth: 500,
|
|
57
87
|
backgroundColor: theme.colors.background,
|
|
58
|
-
// All four corners rounded —
|
|
59
|
-
//
|
|
60
|
-
//
|
|
88
|
+
// All four corners rounded — bloom's BottomSheet defaults to top-only
|
|
89
|
+
// radius in flush mode, but we use `detached` so the whole card is
|
|
90
|
+
// floating and rounded uniformly.
|
|
61
91
|
borderRadius: 20
|
|
62
92
|
}), [theme.colors.background]);
|
|
63
93
|
return /*#__PURE__*/_jsx(BottomSheet, {
|
|
@@ -65,95 +95,177 @@ export function Outer({
|
|
|
65
95
|
onDismiss: handleDismiss,
|
|
66
96
|
enablePanDownToClose: true,
|
|
67
97
|
detached: true
|
|
68
|
-
// Stronger dim
|
|
69
|
-
//
|
|
98
|
+
// Stronger dim when a Dialog is stacked over another sheet so the
|
|
99
|
+
// underlying sheet's handle/content doesn't bleed through.
|
|
70
100
|
,
|
|
71
101
|
backdropOpacity: 0.7,
|
|
72
102
|
style: sheetStyle,
|
|
73
103
|
children: /*#__PURE__*/_jsx(Context.Provider, {
|
|
74
104
|
value: context,
|
|
75
|
-
children: /*#__PURE__*/
|
|
105
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
76
106
|
testID: testID,
|
|
77
|
-
|
|
107
|
+
accessibilityLabel: label,
|
|
108
|
+
"aria-labelledby": title ? titleId : undefined,
|
|
109
|
+
"aria-describedby": description ? descriptionId : undefined,
|
|
110
|
+
style: [
|
|
111
|
+
// Detached BottomSheet already adds `marginBottom: insets.bottom + 16`
|
|
112
|
+
// to the sheet container — the floating card sits ABOVE the
|
|
113
|
+
// system gesture bar, so we don't add `insets.bottom` here.
|
|
114
|
+
{
|
|
115
|
+
paddingTop: 20,
|
|
116
|
+
paddingHorizontal: 20,
|
|
117
|
+
paddingBottom: 20
|
|
118
|
+
}, {
|
|
78
119
|
backgroundColor: theme.colors.background
|
|
79
|
-
},
|
|
80
|
-
children:
|
|
120
|
+
}, style],
|
|
121
|
+
children: [title ? /*#__PURE__*/_jsx(Text, {
|
|
122
|
+
nativeID: titleId,
|
|
123
|
+
style: {
|
|
124
|
+
fontSize: 22,
|
|
125
|
+
fontWeight: '600',
|
|
126
|
+
color: theme.colors.text,
|
|
127
|
+
paddingBottom: description ? 4 : 16,
|
|
128
|
+
lineHeight: 30
|
|
129
|
+
},
|
|
130
|
+
children: title
|
|
131
|
+
}) : null, description ? /*#__PURE__*/_jsx(Text, {
|
|
132
|
+
nativeID: descriptionId,
|
|
133
|
+
style: {
|
|
134
|
+
fontSize: 16,
|
|
135
|
+
color: theme.colors.textSecondary,
|
|
136
|
+
paddingBottom: 16,
|
|
137
|
+
lineHeight: 22
|
|
138
|
+
},
|
|
139
|
+
children: description
|
|
140
|
+
}) : null, children, actions && actions.length > 0 ? /*#__PURE__*/_jsx(ActionRow, {
|
|
141
|
+
actions: actions
|
|
142
|
+
}) : null]
|
|
81
143
|
})
|
|
82
144
|
})
|
|
83
145
|
});
|
|
84
146
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
style,
|
|
88
|
-
header,
|
|
89
|
-
contentContainerStyle
|
|
147
|
+
function ActionRow({
|
|
148
|
+
actions
|
|
90
149
|
}) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
paddingBottom: 20
|
|
101
|
-
}, contentContainerStyle, style],
|
|
102
|
-
children: children
|
|
103
|
-
})]
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
export function ScrollableInner(props) {
|
|
107
|
-
return /*#__PURE__*/_jsx(Inner, {
|
|
108
|
-
...props
|
|
150
|
+
return /*#__PURE__*/_jsx(View, {
|
|
151
|
+
style: {
|
|
152
|
+
width: '100%',
|
|
153
|
+
gap: 8,
|
|
154
|
+
justifyContent: 'flex-end'
|
|
155
|
+
},
|
|
156
|
+
children: actions.map((action, idx) => /*#__PURE__*/_jsx(ActionButton, {
|
|
157
|
+
action: action
|
|
158
|
+
}, `${action.label}-${idx}`))
|
|
109
159
|
});
|
|
110
160
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
width: '100%',
|
|
115
|
-
alignItems: 'center',
|
|
116
|
-
zIndex: 10,
|
|
117
|
-
height: 20
|
|
118
|
-
},
|
|
119
|
-
bar: {
|
|
120
|
-
top: 8,
|
|
121
|
-
width: 35,
|
|
122
|
-
height: 5,
|
|
123
|
-
borderRadius: 3,
|
|
124
|
-
alignSelf: 'center',
|
|
125
|
-
opacity: 0.5
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
export function Handle() {
|
|
129
|
-
const theme = useTheme();
|
|
161
|
+
function ActionButton({
|
|
162
|
+
action
|
|
163
|
+
}) {
|
|
130
164
|
const {
|
|
131
165
|
close
|
|
132
166
|
} = useDialogContext();
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
167
|
+
const theme = useTheme();
|
|
168
|
+
const color = action.color ?? 'default';
|
|
169
|
+
const shouldCloseOnPress = action.shouldCloseOnPress ?? true;
|
|
170
|
+
const {
|
|
171
|
+
background,
|
|
172
|
+
foreground
|
|
173
|
+
} = getActionPalette(color, theme.colors);
|
|
174
|
+
const handlePress = useCallback(e => {
|
|
175
|
+
const onPress = action.onPress;
|
|
176
|
+
if (color === 'cancel') {
|
|
177
|
+
// Cancel always dismisses; consumer's onPress (rare) runs after.
|
|
178
|
+
close(onPress ? () => onPress(e) : undefined);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (shouldCloseOnPress) {
|
|
182
|
+
close(onPress ? () => onPress(e) : undefined);
|
|
183
|
+
} else {
|
|
184
|
+
onPress?.(e);
|
|
185
|
+
}
|
|
186
|
+
}, [action.onPress, close, color, shouldCloseOnPress]);
|
|
187
|
+
return /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
188
|
+
style: {
|
|
189
|
+
borderRadius: 9999,
|
|
190
|
+
alignItems: 'center',
|
|
191
|
+
justifyContent: 'center',
|
|
192
|
+
backgroundColor: background,
|
|
193
|
+
opacity: action.disabled ? 0.5 : 1,
|
|
194
|
+
paddingVertical: 12,
|
|
195
|
+
paddingHorizontal: 24
|
|
196
|
+
},
|
|
197
|
+
onPress: handlePress,
|
|
198
|
+
disabled: action.disabled,
|
|
199
|
+
activeOpacity: 0.7,
|
|
200
|
+
testID: action.testID,
|
|
201
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
202
|
+
style: {
|
|
203
|
+
fontSize: 16,
|
|
204
|
+
fontWeight: '500',
|
|
205
|
+
color: foreground
|
|
144
206
|
},
|
|
145
|
-
children:
|
|
146
|
-
style: [handleStyles.bar, {
|
|
147
|
-
backgroundColor: theme.colors.text
|
|
148
|
-
}]
|
|
149
|
-
})
|
|
207
|
+
children: action.label
|
|
150
208
|
})
|
|
151
209
|
});
|
|
152
210
|
}
|
|
153
|
-
|
|
154
|
-
|
|
211
|
+
function getActionPalette(color, colors) {
|
|
212
|
+
switch (color) {
|
|
213
|
+
case 'destructive':
|
|
214
|
+
return {
|
|
215
|
+
background: colors.negative,
|
|
216
|
+
foreground: colors.negativeForeground
|
|
217
|
+
};
|
|
218
|
+
case 'cancel':
|
|
219
|
+
return {
|
|
220
|
+
background: colors.contrast50,
|
|
221
|
+
foreground: colors.text
|
|
222
|
+
};
|
|
223
|
+
case 'default':
|
|
224
|
+
return {
|
|
225
|
+
background: colors.primary,
|
|
226
|
+
foreground: '#FFFFFF'
|
|
227
|
+
};
|
|
228
|
+
/* c8 ignore next 2 -- TS exhaustiveness check guards this branch */
|
|
229
|
+
default:
|
|
230
|
+
{
|
|
231
|
+
const _exhaustive = color;
|
|
232
|
+
return {
|
|
233
|
+
background: colors.primary,
|
|
234
|
+
foreground: '#FFFFFF'
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
155
238
|
}
|
|
156
|
-
|
|
157
|
-
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Helper used by the imperative `alert()` API. Mounts a `<Dialog>` against
|
|
242
|
+
* a fresh control and presents it immediately. `onResolve` is invoked
|
|
243
|
+
* exactly once when the dialog finishes closing (regardless of how the
|
|
244
|
+
* dismissal happened).
|
|
245
|
+
*
|
|
246
|
+
* Kept private to the dialog module — `alert()` is the public surface.
|
|
247
|
+
*/
|
|
248
|
+
export function AutoMountedDialog({
|
|
249
|
+
title,
|
|
250
|
+
description,
|
|
251
|
+
actions,
|
|
252
|
+
onResolve
|
|
253
|
+
}) {
|
|
254
|
+
const control = useDialogControl();
|
|
255
|
+
|
|
256
|
+
// `control` is referentially stable for the lifetime of the component
|
|
257
|
+
// (memoised by `useDialogControl` on `[id]`), so this effect runs exactly
|
|
258
|
+
// once per mount — present-on-mount semantics for an `alert()` call
|
|
259
|
+
// without re-presenting on subsequent renders.
|
|
260
|
+
useEffect(() => {
|
|
261
|
+
control.open();
|
|
262
|
+
}, [control]);
|
|
263
|
+
return /*#__PURE__*/_jsx(Dialog, {
|
|
264
|
+
control: control,
|
|
265
|
+
title: title,
|
|
266
|
+
description: description,
|
|
267
|
+
actions: actions,
|
|
268
|
+
onClose: onResolve
|
|
269
|
+
});
|
|
158
270
|
}
|
|
159
271
|
//# sourceMappingURL=Dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useImperativeHandle","useMemo","useRef","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useId","useImperativeHandle","useMemo","useRef","Text","TouchableOpacity","View","BottomSheet","useTheme","Context","useDialogContext","useDialogControl","jsx","_jsx","jsxs","_jsxs","Dialog","control","onClose","testID","title","description","actions","style","label","children","theme","ref","closeCallbacks","titleId","descriptionId","callQueuedCallbacks","queued","current","cb","e","console","error","open","present","close","push","dismiss","handleDismiss","context","isWithinDialog","sheetStyle","maxWidth","backgroundColor","colors","background","borderRadius","onDismiss","enablePanDownToClose","detached","backdropOpacity","Provider","value","accessibilityLabel","undefined","paddingTop","paddingHorizontal","paddingBottom","nativeID","fontSize","fontWeight","color","text","lineHeight","textSecondary","length","ActionRow","width","gap","justifyContent","map","action","idx","ActionButton","shouldCloseOnPress","foreground","getActionPalette","handlePress","onPress","alignItems","opacity","disabled","paddingVertical","activeOpacity","negative","negativeForeground","contrast50","primary","_exhaustive","AutoMountedDialog","onResolve"],"sourceRoot":"../../../src","sources":["dialog/Dialog.tsx"],"mappings":"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","ignoreList":[]}
|