@oxyhq/bloom 0.4.0 → 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.
Files changed (186) hide show
  1. package/README.md +105 -90
  2. package/lib/commonjs/bottom-sheet/index.js +2 -2
  3. package/lib/commonjs/context-menu/index.js +18 -19
  4. package/lib/commonjs/context-menu/index.js.map +1 -1
  5. package/lib/commonjs/dialog/BloomDialogProvider.js +61 -0
  6. package/lib/commonjs/dialog/BloomDialogProvider.js.map +1 -0
  7. package/lib/commonjs/dialog/BloomDialogProvider.web.js +45 -0
  8. package/lib/commonjs/dialog/BloomDialogProvider.web.js.map +1 -0
  9. package/lib/commonjs/dialog/Dialog.js +197 -100
  10. package/lib/commonjs/dialog/Dialog.js.map +1 -1
  11. package/lib/commonjs/dialog/Dialog.web.js +194 -84
  12. package/lib/commonjs/dialog/Dialog.web.js.map +1 -1
  13. package/lib/commonjs/dialog/SheetShell.js +149 -0
  14. package/lib/commonjs/dialog/SheetShell.js.map +1 -0
  15. package/lib/commonjs/dialog/alert-store.js +116 -0
  16. package/lib/commonjs/dialog/alert-store.js.map +1 -0
  17. package/lib/commonjs/dialog/alert.js +38 -0
  18. package/lib/commonjs/dialog/alert.js.map +1 -0
  19. package/lib/commonjs/dialog/context.js +10 -2
  20. package/lib/commonjs/dialog/context.js.map +1 -1
  21. package/lib/commonjs/dialog/index.js +8 -24
  22. package/lib/commonjs/dialog/index.js.map +1 -1
  23. package/lib/commonjs/dialog/index.web.js +10 -20
  24. package/lib/commonjs/dialog/index.web.js.map +1 -1
  25. package/lib/commonjs/index.js +101 -66
  26. package/lib/commonjs/index.js.map +1 -1
  27. package/lib/commonjs/index.web.js +101 -66
  28. package/lib/commonjs/index.web.js.map +1 -1
  29. package/lib/commonjs/menu/index.js +21 -23
  30. package/lib/commonjs/menu/index.js.map +1 -1
  31. package/lib/commonjs/select/index.js +26 -27
  32. package/lib/commonjs/select/index.js.map +1 -1
  33. package/lib/commonjs/toast/index.js +42 -13
  34. package/lib/commonjs/toast/index.js.map +1 -1
  35. package/lib/commonjs/toast/index.web.js +19 -15
  36. package/lib/commonjs/toast/index.web.js.map +1 -1
  37. package/lib/module/bottom-sheet/index.js +2 -2
  38. package/lib/module/context-menu/index.js +15 -16
  39. package/lib/module/context-menu/index.js.map +1 -1
  40. package/lib/module/dialog/BloomDialogProvider.js +57 -0
  41. package/lib/module/dialog/BloomDialogProvider.js.map +1 -0
  42. package/lib/module/dialog/BloomDialogProvider.web.js +41 -0
  43. package/lib/module/dialog/BloomDialogProvider.web.js.map +1 -0
  44. package/lib/module/dialog/Dialog.js +199 -87
  45. package/lib/module/dialog/Dialog.js.map +1 -1
  46. package/lib/module/dialog/Dialog.web.js +195 -70
  47. package/lib/module/dialog/Dialog.web.js.map +1 -1
  48. package/lib/module/dialog/SheetShell.js +143 -0
  49. package/lib/module/dialog/SheetShell.js.map +1 -0
  50. package/lib/module/dialog/alert-store.js +107 -0
  51. package/lib/module/dialog/alert-store.js.map +1 -0
  52. package/lib/module/dialog/alert.js +35 -0
  53. package/lib/module/dialog/alert.js.map +1 -0
  54. package/lib/module/dialog/context.js +10 -2
  55. package/lib/module/dialog/context.js.map +1 -1
  56. package/lib/module/dialog/index.js +3 -1
  57. package/lib/module/dialog/index.js.map +1 -1
  58. package/lib/module/dialog/index.web.js +9 -7
  59. package/lib/module/dialog/index.web.js.map +1 -1
  60. package/lib/module/index.js +2 -3
  61. package/lib/module/index.js.map +1 -1
  62. package/lib/module/index.web.js +2 -3
  63. package/lib/module/index.web.js.map +1 -1
  64. package/lib/module/menu/index.js +11 -13
  65. package/lib/module/menu/index.js.map +1 -1
  66. package/lib/module/select/index.js +27 -28
  67. package/lib/module/select/index.js.map +1 -1
  68. package/lib/module/toast/index.js +41 -11
  69. package/lib/module/toast/index.js.map +1 -1
  70. package/lib/module/toast/index.web.js +18 -13
  71. package/lib/module/toast/index.web.js.map +1 -1
  72. package/lib/typescript/commonjs/__tests__/Dialog.test.d.ts +2 -0
  73. package/lib/typescript/commonjs/__tests__/Dialog.test.d.ts.map +1 -0
  74. package/lib/typescript/commonjs/bottom-sheet/index.d.ts +1 -1
  75. package/lib/typescript/commonjs/context-menu/index.d.ts +4 -3
  76. package/lib/typescript/commonjs/context-menu/index.d.ts.map +1 -1
  77. package/lib/typescript/commonjs/dialog/BloomDialogProvider.d.ts +27 -0
  78. package/lib/typescript/commonjs/dialog/BloomDialogProvider.d.ts.map +1 -0
  79. package/lib/typescript/commonjs/dialog/BloomDialogProvider.web.d.ts +15 -0
  80. package/lib/typescript/commonjs/dialog/BloomDialogProvider.web.d.ts.map +1 -0
  81. package/lib/typescript/commonjs/dialog/Dialog.d.ts +37 -10
  82. package/lib/typescript/commonjs/dialog/Dialog.d.ts.map +1 -1
  83. package/lib/typescript/commonjs/dialog/Dialog.web.d.ts +26 -10
  84. package/lib/typescript/commonjs/dialog/Dialog.web.d.ts.map +1 -1
  85. package/lib/typescript/commonjs/dialog/SheetShell.d.ts +31 -0
  86. package/lib/typescript/commonjs/dialog/SheetShell.d.ts.map +1 -0
  87. package/lib/typescript/commonjs/dialog/alert-store.d.ts +70 -0
  88. package/lib/typescript/commonjs/dialog/alert-store.d.ts.map +1 -0
  89. package/lib/typescript/commonjs/dialog/alert.d.ts +27 -0
  90. package/lib/typescript/commonjs/dialog/alert.d.ts.map +1 -0
  91. package/lib/typescript/commonjs/dialog/context.d.ts +7 -0
  92. package/lib/typescript/commonjs/dialog/context.d.ts.map +1 -1
  93. package/lib/typescript/commonjs/dialog/index.d.ts +5 -2
  94. package/lib/typescript/commonjs/dialog/index.d.ts.map +1 -1
  95. package/lib/typescript/commonjs/dialog/index.web.d.ts +5 -2
  96. package/lib/typescript/commonjs/dialog/index.web.d.ts.map +1 -1
  97. package/lib/typescript/commonjs/dialog/types.d.ts +70 -15
  98. package/lib/typescript/commonjs/dialog/types.d.ts.map +1 -1
  99. package/lib/typescript/commonjs/index.d.ts +3 -3
  100. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  101. package/lib/typescript/commonjs/index.web.d.ts +3 -3
  102. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  103. package/lib/typescript/commonjs/menu/index.d.ts +4 -4
  104. package/lib/typescript/commonjs/menu/index.d.ts.map +1 -1
  105. package/lib/typescript/commonjs/select/index.d.ts.map +1 -1
  106. package/lib/typescript/commonjs/toast/index.d.ts +32 -3
  107. package/lib/typescript/commonjs/toast/index.d.ts.map +1 -1
  108. package/lib/typescript/commonjs/toast/index.web.d.ts +14 -7
  109. package/lib/typescript/commonjs/toast/index.web.d.ts.map +1 -1
  110. package/lib/typescript/module/__tests__/Dialog.test.d.ts +2 -0
  111. package/lib/typescript/module/__tests__/Dialog.test.d.ts.map +1 -0
  112. package/lib/typescript/module/bottom-sheet/index.d.ts +1 -1
  113. package/lib/typescript/module/context-menu/index.d.ts +4 -3
  114. package/lib/typescript/module/context-menu/index.d.ts.map +1 -1
  115. package/lib/typescript/module/dialog/BloomDialogProvider.d.ts +27 -0
  116. package/lib/typescript/module/dialog/BloomDialogProvider.d.ts.map +1 -0
  117. package/lib/typescript/module/dialog/BloomDialogProvider.web.d.ts +15 -0
  118. package/lib/typescript/module/dialog/BloomDialogProvider.web.d.ts.map +1 -0
  119. package/lib/typescript/module/dialog/Dialog.d.ts +37 -10
  120. package/lib/typescript/module/dialog/Dialog.d.ts.map +1 -1
  121. package/lib/typescript/module/dialog/Dialog.web.d.ts +26 -10
  122. package/lib/typescript/module/dialog/Dialog.web.d.ts.map +1 -1
  123. package/lib/typescript/module/dialog/SheetShell.d.ts +31 -0
  124. package/lib/typescript/module/dialog/SheetShell.d.ts.map +1 -0
  125. package/lib/typescript/module/dialog/alert-store.d.ts +70 -0
  126. package/lib/typescript/module/dialog/alert-store.d.ts.map +1 -0
  127. package/lib/typescript/module/dialog/alert.d.ts +27 -0
  128. package/lib/typescript/module/dialog/alert.d.ts.map +1 -0
  129. package/lib/typescript/module/dialog/context.d.ts +7 -0
  130. package/lib/typescript/module/dialog/context.d.ts.map +1 -1
  131. package/lib/typescript/module/dialog/index.d.ts +5 -2
  132. package/lib/typescript/module/dialog/index.d.ts.map +1 -1
  133. package/lib/typescript/module/dialog/index.web.d.ts +5 -2
  134. package/lib/typescript/module/dialog/index.web.d.ts.map +1 -1
  135. package/lib/typescript/module/dialog/types.d.ts +70 -15
  136. package/lib/typescript/module/dialog/types.d.ts.map +1 -1
  137. package/lib/typescript/module/index.d.ts +3 -3
  138. package/lib/typescript/module/index.d.ts.map +1 -1
  139. package/lib/typescript/module/index.web.d.ts +3 -3
  140. package/lib/typescript/module/index.web.d.ts.map +1 -1
  141. package/lib/typescript/module/menu/index.d.ts +4 -4
  142. package/lib/typescript/module/menu/index.d.ts.map +1 -1
  143. package/lib/typescript/module/select/index.d.ts.map +1 -1
  144. package/lib/typescript/module/toast/index.d.ts +32 -3
  145. package/lib/typescript/module/toast/index.d.ts.map +1 -1
  146. package/lib/typescript/module/toast/index.web.d.ts +14 -7
  147. package/lib/typescript/module/toast/index.web.d.ts.map +1 -1
  148. package/package.json +3 -14
  149. package/src/__tests__/Dialog.test.tsx +177 -0
  150. package/src/bottom-sheet/index.tsx +3 -3
  151. package/src/context-menu/index.tsx +12 -12
  152. package/src/dialog/BloomDialogProvider.tsx +61 -0
  153. package/src/dialog/BloomDialogProvider.web.tsx +46 -0
  154. package/src/dialog/Dialog.tsx +217 -64
  155. package/src/dialog/Dialog.web.tsx +240 -75
  156. package/src/dialog/SheetShell.tsx +154 -0
  157. package/src/dialog/alert-store.ts +126 -0
  158. package/src/dialog/alert.ts +42 -0
  159. package/src/dialog/context.ts +14 -3
  160. package/src/dialog/index.ts +14 -2
  161. package/src/dialog/index.web.ts +20 -8
  162. package/src/dialog/types.ts +73 -16
  163. package/src/index.ts +17 -3
  164. package/src/index.web.ts +17 -3
  165. package/src/menu/index.tsx +13 -17
  166. package/src/select/index.tsx +30 -30
  167. package/src/toast/index.tsx +55 -11
  168. package/src/toast/index.web.tsx +33 -13
  169. package/lib/commonjs/prompt/Prompt.js +0 -267
  170. package/lib/commonjs/prompt/Prompt.js.map +0 -1
  171. package/lib/commonjs/prompt/index.js +0 -61
  172. package/lib/commonjs/prompt/index.js.map +0 -1
  173. package/lib/module/prompt/Prompt.js +0 -250
  174. package/lib/module/prompt/Prompt.js.map +0 -1
  175. package/lib/module/prompt/index.js +0 -4
  176. package/lib/module/prompt/index.js.map +0 -1
  177. package/lib/typescript/commonjs/prompt/Prompt.d.ts +0 -42
  178. package/lib/typescript/commonjs/prompt/Prompt.d.ts.map +0 -1
  179. package/lib/typescript/commonjs/prompt/index.d.ts +0 -3
  180. package/lib/typescript/commonjs/prompt/index.d.ts.map +0 -1
  181. package/lib/typescript/module/prompt/Prompt.d.ts +0 -42
  182. package/lib/typescript/module/prompt/Prompt.d.ts.map +0 -1
  183. package/lib/typescript/module/prompt/index.d.ts +0 -3
  184. package/lib/typescript/module/prompt/index.d.ts.map +0 -1
  185. package/src/prompt/Prompt.tsx +0 -247
  186. package/src/prompt/index.ts +0 -13
@@ -1,22 +1,39 @@
1
1
  "use strict";
2
2
 
3
- import React, { createContext, useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
4
- import { Pressable, Text, View } from 'react-native';
3
+ import React, { createContext, useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState } from 'react';
4
+ import { Pressable, Text, TouchableOpacity, View } from 'react-native';
5
5
  import { RemoveScrollBar } from 'react-remove-scroll-bar';
6
- import { useTheme } from "../theme/use-theme.js";
7
6
  import { Portal } from "../portal/index.web.js";
8
- import { Context, useDialogContext } from "./context.js";
7
+ import { useTheme } from "../theme/use-theme.js";
8
+ import { Context, useDialogContext, useDialogControl } from "./context.js";
9
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
- export { useDialogContext, useDialogControl } from "./context.js";
11
10
  const FADE_OUT_DURATION = 150;
12
11
  const stopPropagation = e => e.stopPropagation();
13
12
  const ClosingContext = /*#__PURE__*/createContext(false);
14
- export function Outer({
15
- children,
13
+
14
+ /**
15
+ * Web variant of `<Dialog>`.
16
+ *
17
+ * A centered modal card rendered into the bloom Portal at the end of
18
+ * `document.body`. Same prop API as native — `title`, `description`,
19
+ * `actions`, or arbitrary `children` — so call sites are platform
20
+ * agnostic.
21
+ *
22
+ * Accessibility: the panel has `role="dialog"` and the `title`/`description`
23
+ * props (when provided) become the `aria-labelledby` / `aria-describedby`
24
+ * targets. Pressing the backdrop dismisses. Pressing `Escape` dismisses.
25
+ * Focus is locked inside the dialog while it's open.
26
+ */
27
+ export function Dialog({
16
28
  control,
17
29
  onClose,
18
30
  testID,
19
- webOptions
31
+ title,
32
+ description,
33
+ actions,
34
+ style,
35
+ label,
36
+ children
20
37
  }) {
21
38
  const [isOpen, setIsOpen] = useState(false);
22
39
  const [isClosing, setIsClosing] = useState(false);
@@ -36,18 +53,36 @@ export function Outer({
36
53
  const timer = setTimeout(() => {
37
54
  setIsOpen(false);
38
55
  setIsClosing(false);
39
- for (const cb of closeCallbacksRef.current) {
56
+ const queued = closeCallbacksRef.current;
57
+ closeCallbacksRef.current = [];
58
+ for (const cb of queued) {
40
59
  try {
41
60
  cb();
42
61
  } catch (e) {
43
- console.error('Dialog close callback error:', e);
62
+ if (typeof console !== 'undefined' && console.error) {
63
+ console.error('Dialog close callback error:', e);
64
+ }
44
65
  }
45
66
  }
46
- closeCallbacksRef.current = [];
47
67
  onClose?.();
48
68
  }, FADE_OUT_DURATION);
49
69
  return () => clearTimeout(timer);
50
70
  }, [isClosing, onClose]);
71
+
72
+ // Escape-to-close while open. The listener is intentionally scoped to the
73
+ // open lifetime so stacked dialogs don't fight for the keydown — the
74
+ // top-most one wins via document-level event order.
75
+ useEffect(() => {
76
+ if (!isOpen || typeof document === 'undefined') return;
77
+ const handler = e => {
78
+ if (e.key === 'Escape') {
79
+ e.stopPropagation();
80
+ close();
81
+ }
82
+ };
83
+ document.addEventListener('keydown', handler);
84
+ return () => document.removeEventListener('keydown', handler);
85
+ }, [close, isOpen]);
51
86
  useImperativeHandle(control.ref, () => ({
52
87
  open,
53
88
  close
@@ -72,23 +107,19 @@ export function Outer({
72
107
  bottom: 0,
73
108
  zIndex: 50,
74
109
  alignItems: 'center',
75
- justifyContent: webOptions?.alignCenter ? 'center' : undefined,
76
- paddingHorizontal: 20,
77
- paddingVertical: '10vh',
78
- ...{
79
- overflowY: 'auto'
80
- }
110
+ justifyContent: 'center',
111
+ paddingHorizontal: 20
81
112
  },
82
113
  children: [/*#__PURE__*/_jsx(DialogBackdrop, {
83
114
  isClosing: isClosing
84
- }), /*#__PURE__*/_jsx(View, {
115
+ }), /*#__PURE__*/_jsx(DialogPanel, {
85
116
  testID: testID,
86
- style: {
87
- width: '100%',
88
- zIndex: 60,
89
- alignItems: 'center',
90
- minHeight: webOptions?.alignCenter ? undefined : '60%'
91
- },
117
+ label: label,
118
+ title: title,
119
+ description: description,
120
+ actions: actions,
121
+ style: style,
122
+ isClosing: isClosing,
92
123
  children: children
93
124
  })]
94
125
  })]
@@ -96,26 +127,33 @@ export function Outer({
96
127
  })
97
128
  });
98
129
  }
99
- export function Inner({
100
- children,
101
- style,
130
+ function DialogPanel({
131
+ testID,
102
132
  label,
103
- header,
104
- contentContainerStyle
133
+ title,
134
+ description,
135
+ actions,
136
+ style,
137
+ isClosing,
138
+ children
105
139
  }) {
106
140
  const theme = useTheme();
107
- const isClosing = useContext(ClosingContext);
141
+ const titleId = useId();
142
+ const descriptionId = useId();
108
143
  return /*#__PURE__*/_jsxs(View, {
109
144
  role: "dialog",
110
145
  "aria-label": label,
146
+ "aria-labelledby": title ? titleId : undefined,
147
+ "aria-describedby": description ? descriptionId : undefined,
148
+ testID: testID,
111
149
  onStartShouldSetResponder: () => true,
112
150
  onResponderRelease: stopPropagation,
113
151
  onClick: stopPropagation,
114
152
  style: [{
115
153
  position: 'relative',
116
- borderRadius: 10,
154
+ borderRadius: 20,
117
155
  width: '100%',
118
- maxWidth: 600,
156
+ maxWidth: 480,
119
157
  backgroundColor: theme.colors.background,
120
158
  borderWidth: 1,
121
159
  borderColor: theme.isDark ? 'rgba(255,255,255,0.1)' : 'rgba(0,0,0,0.1)',
@@ -126,62 +164,128 @@ export function Inner({
126
164
  width: 0,
127
165
  height: 4
128
166
  },
129
- overflow: 'hidden'
167
+ padding: 20,
168
+ zIndex: 60
130
169
  }, isClosing ? {
131
170
  animation: `bloomDialogZoomFadeOut ease-in ${FADE_OUT_DURATION}ms forwards`
132
171
  } : {
133
172
  animation: 'bloomDialogZoomFadeIn cubic-bezier(0.16, 1, 0.3, 1) 0.3s'
134
173
  }, style],
135
- children: [header, /*#__PURE__*/_jsx(View, {
136
- style: [{
137
- padding: 20
138
- }, contentContainerStyle],
139
- children: children
140
- })]
174
+ children: [title ? /*#__PURE__*/_jsx(Text, {
175
+ nativeID: titleId,
176
+ style: {
177
+ fontSize: 22,
178
+ fontWeight: '600',
179
+ color: theme.colors.text,
180
+ paddingBottom: description ? 4 : 16,
181
+ lineHeight: 30
182
+ },
183
+ children: title
184
+ }) : null, description ? /*#__PURE__*/_jsx(Text, {
185
+ nativeID: descriptionId,
186
+ style: {
187
+ fontSize: 16,
188
+ color: theme.colors.textSecondary,
189
+ paddingBottom: 16,
190
+ lineHeight: 22
191
+ },
192
+ children: description
193
+ }) : null, children, actions && actions.length > 0 ? /*#__PURE__*/_jsx(ActionRow, {
194
+ actions: actions
195
+ }) : null]
141
196
  });
142
197
  }
143
- export function ScrollableInner(props) {
144
- return /*#__PURE__*/_jsx(Inner, {
145
- ...props
198
+ function ActionRow({
199
+ actions
200
+ }) {
201
+ return /*#__PURE__*/_jsx(View, {
202
+ style: {
203
+ width: '100%',
204
+ gap: 8,
205
+ justifyContent: 'flex-end'
206
+ },
207
+ children: actions.map((action, idx) => /*#__PURE__*/_jsx(ActionButton, {
208
+ action: action
209
+ }, `${action.label}-${idx}`))
146
210
  });
147
211
  }
148
- export function Handle() {
149
- return null;
150
- }
151
- export function Close() {
212
+ function ActionButton({
213
+ action
214
+ }) {
152
215
  const {
153
216
  close
154
217
  } = useDialogContext();
155
218
  const theme = useTheme();
156
- return /*#__PURE__*/_jsx(View, {
219
+ const color = action.color ?? 'default';
220
+ const shouldCloseOnPress = action.shouldCloseOnPress ?? true;
221
+ const {
222
+ background,
223
+ foreground
224
+ } = getActionPalette(color, theme.colors);
225
+ const handlePress = useCallback(e => {
226
+ const onPress = action.onPress;
227
+ if (color === 'cancel') {
228
+ close(onPress ? () => onPress(e) : undefined);
229
+ return;
230
+ }
231
+ if (shouldCloseOnPress) {
232
+ close(onPress ? () => onPress(e) : undefined);
233
+ } else {
234
+ onPress?.(e);
235
+ }
236
+ }, [action.onPress, close, color, shouldCloseOnPress]);
237
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
157
238
  style: {
158
- position: 'absolute',
159
- top: 10,
160
- right: 10,
161
- zIndex: 10
239
+ borderRadius: 9999,
240
+ alignItems: 'center',
241
+ justifyContent: 'center',
242
+ backgroundColor: background,
243
+ opacity: action.disabled ? 0.5 : 1,
244
+ paddingVertical: 12,
245
+ paddingHorizontal: 24
162
246
  },
163
- children: /*#__PURE__*/_jsx(Pressable, {
164
- onPress: () => close(),
165
- accessibilityLabel: "Close dialog",
247
+ onPress: handlePress,
248
+ disabled: action.disabled,
249
+ activeOpacity: 0.7,
250
+ testID: action.testID,
251
+ children: /*#__PURE__*/_jsx(Text, {
166
252
  style: {
167
- width: 34,
168
- height: 34,
169
- borderRadius: 17,
170
- backgroundColor: theme.isDark ? 'rgba(255,255,255,0.1)' : 'rgba(0,0,0,0.05)',
171
- alignItems: 'center',
172
- justifyContent: 'center'
253
+ fontSize: 16,
254
+ fontWeight: '500',
255
+ color: foreground
173
256
  },
174
- children: /*#__PURE__*/_jsx(Text, {
175
- style: {
176
- fontSize: 18,
177
- color: theme.colors.text,
178
- lineHeight: 20
179
- },
180
- children: '\u00D7'
181
- })
257
+ children: action.label
182
258
  })
183
259
  });
184
260
  }
261
+ function getActionPalette(color, colors) {
262
+ switch (color) {
263
+ case 'destructive':
264
+ return {
265
+ background: colors.negative,
266
+ foreground: colors.negativeForeground
267
+ };
268
+ case 'cancel':
269
+ return {
270
+ background: colors.contrast50,
271
+ foreground: colors.text
272
+ };
273
+ case 'default':
274
+ return {
275
+ background: colors.primary,
276
+ foreground: '#FFFFFF'
277
+ };
278
+ /* c8 ignore next 3 -- TS exhaustiveness guard */
279
+ default:
280
+ {
281
+ const _exhaustive = color;
282
+ return {
283
+ background: colors.primary,
284
+ foreground: '#FFFFFF'
285
+ };
286
+ }
287
+ }
288
+ }
185
289
  function DialogBackdrop({
186
290
  isClosing
187
291
  }) {
@@ -201,8 +305,29 @@ function DialogBackdrop({
201
305
  style: style
202
306
  });
203
307
  }
204
- export function Backdrop() {
205
- return null;
308
+
309
+ /**
310
+ * Inline imperative dialog used by `alert()`. Mounts and immediately
311
+ * presents; resolves the host's `onResolve` once the dialog has finished
312
+ * its exit animation.
313
+ */
314
+ export function AutoMountedDialog({
315
+ title,
316
+ description,
317
+ actions,
318
+ onResolve
319
+ }) {
320
+ const control = useDialogControl();
321
+ useEffect(() => {
322
+ control.open();
323
+ }, [control]);
324
+ return /*#__PURE__*/_jsx(Dialog, {
325
+ control: control,
326
+ title: title,
327
+ description: description,
328
+ actions: actions,
329
+ onClose: onResolve
330
+ });
206
331
  }
207
332
 
208
333
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useImperativeHandle","useMemo","useRef","useState","Pressable","Text","View","RemoveScrollBar","useTheme","Portal","Context","useDialogContext","jsx","_jsx","jsxs","_jsxs","useDialogControl","FADE_OUT_DURATION","stopPropagation","e","ClosingContext","Outer","children","control","onClose","testID","webOptions","isOpen","setIsOpen","isClosing","setIsClosing","closeCallbacksRef","open","close","cb","current","push","timer","setTimeout","console","error","clearTimeout","ref","context","isWithinDialog","Provider","value","onPress","style","position","top","left","right","bottom","zIndex","alignItems","justifyContent","alignCenter","undefined","paddingHorizontal","paddingVertical","overflowY","DialogBackdrop","width","minHeight","Inner","label","header","contentContainerStyle","theme","role","onStartShouldSetResponder","onResponderRelease","onClick","borderRadius","maxWidth","backgroundColor","colors","background","borderWidth","borderColor","isDark","shadowColor","shadowOpacity","shadowRadius","shadowOffset","height","overflow","animation","padding","ScrollableInner","props","Handle","Close","accessibilityLabel","fontSize","color","text","lineHeight","Backdrop","BLOOM_DIALOG_CSS"],"sourceRoot":"../../../src","sources":["dialog/Dialog.web.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useCallback","useEffect","useId","useImperativeHandle","useMemo","useRef","useState","Pressable","Text","TouchableOpacity","View","RemoveScrollBar","Portal","useTheme","Context","useDialogContext","useDialogControl","jsx","_jsx","jsxs","_jsxs","FADE_OUT_DURATION","stopPropagation","e","ClosingContext","Dialog","control","onClose","testID","title","description","actions","style","label","children","isOpen","setIsOpen","isClosing","setIsClosing","closeCallbacksRef","open","close","cb","current","push","timer","setTimeout","queued","console","error","clearTimeout","document","handler","key","addEventListener","removeEventListener","ref","context","isWithinDialog","Provider","value","onPress","position","top","left","right","bottom","zIndex","alignItems","justifyContent","paddingHorizontal","DialogBackdrop","DialogPanel","theme","titleId","descriptionId","role","undefined","onStartShouldSetResponder","onResponderRelease","onClick","borderRadius","width","maxWidth","backgroundColor","colors","background","borderWidth","borderColor","isDark","shadowColor","shadowOpacity","shadowRadius","shadowOffset","height","padding","animation","nativeID","fontSize","fontWeight","color","text","paddingBottom","lineHeight","textSecondary","length","ActionRow","gap","map","action","idx","ActionButton","shouldCloseOnPress","foreground","getActionPalette","handlePress","opacity","disabled","paddingVertical","activeOpacity","negative","negativeForeground","contrast50","primary","_exhaustive","AutoMountedDialog","onResolve","BLOOM_DIALOG_CSS"],"sourceRoot":"../../../src","sources":["dialog/Dialog.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Internal bottom-sheet shell shared by `Menu`, `Select` and `ContextMenu`.
5
+ *
6
+ * Not exported from the public `@oxyhq/bloom` surface — these three
7
+ * components historically used the low-level `Dialog.Outer / Inner /
8
+ * Handle` primitives, which are gone in 0.5.0. This shell captures the
9
+ * shared shape (BottomSheet + drag handle + close-on-tap context) in a
10
+ * single place so the three internal call sites stay symmetrical.
11
+ *
12
+ * Consumers needing the same behaviour for app code should use the public
13
+ * `BottomSheet` primitive directly.
14
+ */
15
+ import React, { useCallback, useImperativeHandle, useMemo, useRef } from 'react';
16
+ import { Pressable, StyleSheet, View } from 'react-native';
17
+ import { BottomSheet } from "../bottom-sheet/index.js";
18
+ import { useTheme } from "../theme/use-theme.js";
19
+ import { Context } from "./context.js";
20
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
21
+ /**
22
+ * Bottom-sheet shell with an embedded drag handle. Exposes the bloom
23
+ * dialog `close()` context to descendants — `Menu.Item`, `Select.Item`
24
+ * etc. rely on it to dismiss the sheet after selection.
25
+ */
26
+ export function SheetShell({
27
+ control,
28
+ label,
29
+ header,
30
+ onClose,
31
+ contentStyle,
32
+ children
33
+ }) {
34
+ const theme = useTheme();
35
+ const ref = useRef(null);
36
+ const closeCallbacks = useRef([]);
37
+ const callQueuedCallbacks = useCallback(() => {
38
+ const queued = closeCallbacks.current;
39
+ closeCallbacks.current = [];
40
+ for (const cb of queued) {
41
+ try {
42
+ cb();
43
+ } catch (e) {
44
+ if (typeof console !== 'undefined' && console.error) {
45
+ console.error('SheetShell close callback error:', e);
46
+ }
47
+ }
48
+ }
49
+ }, []);
50
+ const open = useCallback(() => {
51
+ ref.current?.present();
52
+ }, []);
53
+ const close = useCallback(cb => {
54
+ if (typeof cb === 'function') {
55
+ closeCallbacks.current.push(cb);
56
+ }
57
+ ref.current?.dismiss();
58
+ }, []);
59
+ const handleDismiss = useCallback(() => {
60
+ callQueuedCallbacks();
61
+ onClose?.();
62
+ }, [callQueuedCallbacks, onClose]);
63
+ useImperativeHandle(control.ref, () => ({
64
+ open,
65
+ close
66
+ }), [open, close]);
67
+ const context = useMemo(() => ({
68
+ close,
69
+ isWithinDialog: true
70
+ }), [close]);
71
+ const sheetStyle = useMemo(() => ({
72
+ maxWidth: 500,
73
+ backgroundColor: theme.colors.background,
74
+ borderRadius: 20
75
+ }), [theme.colors.background]);
76
+ return /*#__PURE__*/_jsx(BottomSheet, {
77
+ ref: ref,
78
+ onDismiss: handleDismiss,
79
+ enablePanDownToClose: true,
80
+ detached: true,
81
+ backdropOpacity: 0.7,
82
+ style: sheetStyle,
83
+ children: /*#__PURE__*/_jsxs(Context.Provider, {
84
+ value: context,
85
+ children: [/*#__PURE__*/_jsx(SheetHandle, {
86
+ onPress: () => close()
87
+ }), header, /*#__PURE__*/_jsx(View, {
88
+ accessibilityLabel: label,
89
+ style: [styles.body, {
90
+ backgroundColor: theme.colors.background
91
+ }, contentStyle],
92
+ children: children
93
+ })]
94
+ })
95
+ });
96
+ }
97
+ function SheetHandle({
98
+ onPress
99
+ }) {
100
+ const theme = useTheme();
101
+ return /*#__PURE__*/_jsx(View, {
102
+ style: styles.handleContainer,
103
+ children: /*#__PURE__*/_jsx(Pressable, {
104
+ onPress: onPress,
105
+ accessibilityLabel: "Dismiss",
106
+ accessibilityHint: "Tap to close",
107
+ hitSlop: {
108
+ top: 10,
109
+ bottom: 10,
110
+ left: 40,
111
+ right: 40
112
+ },
113
+ children: /*#__PURE__*/_jsx(View, {
114
+ style: [styles.handleBar, {
115
+ backgroundColor: theme.colors.text
116
+ }]
117
+ })
118
+ })
119
+ });
120
+ }
121
+ const styles = StyleSheet.create({
122
+ handleContainer: {
123
+ position: 'absolute',
124
+ width: '100%',
125
+ alignItems: 'center',
126
+ zIndex: 10,
127
+ height: 20
128
+ },
129
+ handleBar: {
130
+ top: 8,
131
+ width: 35,
132
+ height: 5,
133
+ borderRadius: 3,
134
+ alignSelf: 'center',
135
+ opacity: 0.5
136
+ },
137
+ body: {
138
+ paddingTop: 20,
139
+ paddingHorizontal: 20,
140
+ paddingBottom: 20
141
+ }
142
+ });
143
+ //# sourceMappingURL=SheetShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useImperativeHandle","useMemo","useRef","Pressable","StyleSheet","View","BottomSheet","useTheme","Context","jsx","_jsx","jsxs","_jsxs","SheetShell","control","label","header","onClose","contentStyle","children","theme","ref","closeCallbacks","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","style","Provider","value","SheetHandle","onPress","accessibilityLabel","styles","body","handleContainer","accessibilityHint","hitSlop","top","bottom","left","right","handleBar","text","create","position","width","alignItems","zIndex","height","alignSelf","opacity","paddingTop","paddingHorizontal","paddingBottom"],"sourceRoot":"../../../src","sources":["dialog/SheetShell.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ let idCounter = 0;
4
+ function genId() {
5
+ idCounter += 1;
6
+ return `bloom-alert-${idCounter}`;
7
+ }
8
+
9
+ /**
10
+ * Imperative-alert store.
11
+ *
12
+ * The store sits in module scope so `alert()` works from anywhere — event
13
+ * handlers, async callbacks, top-level helpers — without threading a
14
+ * provider context through every call site.
15
+ *
16
+ * The visible UI is owned by a single subscriber (the `<BloomDialogProvider>`
17
+ * mounted inside the app's React tree). When there is no subscriber yet —
18
+ * because `alert()` was called before the provider mounted, or because the
19
+ * app forgot to mount the provider — entries accumulate in the queue and
20
+ * drain as soon as a subscriber attaches.
21
+ *
22
+ * Multiple subscribers are not supported by design. Two providers would
23
+ * race for the same alert; we instead enforce a single listener and let
24
+ * the most recent subscription win (the older one falls back to no-op).
25
+ */
26
+
27
+ let queue = [];
28
+ let listener = null;
29
+ function emit() {
30
+ if (listener) listener(queue);
31
+ }
32
+
33
+ /**
34
+ * Enqueue an alert. Returns the generated id so callers can dismiss it
35
+ * imperatively (rare — usually the dialog dismisses itself via a button
36
+ * tap). The runtime guarantees this enqueues even before any provider
37
+ * mounts; the provider drains pending entries on subscribe.
38
+ */
39
+ export function enqueueAlert(entry) {
40
+ const id = genId();
41
+ queue = [...queue, {
42
+ ...entry,
43
+ id
44
+ }];
45
+ emit();
46
+ return id;
47
+ }
48
+
49
+ /**
50
+ * Remove an alert from the queue. Called by the provider once the bloom
51
+ * Dialog has finished closing for that entry.
52
+ */
53
+ export function dismissAlert(id) {
54
+ const next = queue.filter(e => e.id !== id);
55
+ if (next.length === queue.length) return;
56
+ queue = next;
57
+ emit();
58
+ }
59
+
60
+ /**
61
+ * Subscribe to queue changes. Replaces any previously-registered listener
62
+ * (single-subscriber model — see header). Returns an unsubscribe function.
63
+ *
64
+ * On subscribe, the current queue is delivered synchronously so the
65
+ * subscriber can render pending entries that arrived before mount.
66
+ */
67
+ export function subscribeAlerts(fn) {
68
+ listener = fn;
69
+ // Deliver the current queue immediately so a freshly-mounted provider
70
+ // catches up with whatever accumulated before it subscribed.
71
+ fn(queue);
72
+ return () => {
73
+ if (listener === fn) listener = null;
74
+ };
75
+ }
76
+
77
+ /** Inspect the current queue. Used internally and by tests. */
78
+ export function getAlertQueue() {
79
+ return queue;
80
+ }
81
+
82
+ /**
83
+ * Translate an alert button to the action shape the unified `Dialog`
84
+ * accepts. Pure — no React, no theme — so it can be reused on web and
85
+ * native without forking.
86
+ */
87
+ export function buttonToAction(button) {
88
+ return {
89
+ label: button.text,
90
+ onPress: button.onPress ? () => button.onPress?.() : undefined,
91
+ color: button.style === 'destructive' ? 'destructive' : button.style === 'cancel' ? 'cancel' : 'default'
92
+ };
93
+ }
94
+
95
+ /**
96
+ * Compute the effective button set for an alert. Mirrors React Native's
97
+ * `Alert.alert` semantics — an empty/omitted buttons array implies a
98
+ * single `OK` confirmation button.
99
+ */
100
+ export function resolveButtons(buttons) {
101
+ if (buttons && buttons.length > 0) return buttons;
102
+ return [{
103
+ text: 'OK',
104
+ style: 'default'
105
+ }];
106
+ }
107
+ //# sourceMappingURL=alert-store.js.map