@oxyhq/bloom 0.6.9 → 0.6.10

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 (75) hide show
  1. package/lib/commonjs/dialog/CenteredDialog.js +242 -0
  2. package/lib/commonjs/dialog/CenteredDialog.js.map +1 -0
  3. package/lib/commonjs/dialog/CenteredDialog.web.js +326 -0
  4. package/lib/commonjs/dialog/CenteredDialog.web.js.map +1 -0
  5. package/lib/commonjs/dialog/centered-dialog-tokens.js +62 -0
  6. package/lib/commonjs/dialog/centered-dialog-tokens.js.map +1 -0
  7. package/lib/commonjs/dialog/centered-dialog-types.js +6 -0
  8. package/lib/commonjs/dialog/centered-dialog-types.js.map +1 -0
  9. package/lib/commonjs/dialog/index.js +13 -0
  10. package/lib/commonjs/dialog/index.js.map +1 -1
  11. package/lib/commonjs/dialog/index.web.js +19 -0
  12. package/lib/commonjs/dialog/index.web.js.map +1 -1
  13. package/lib/commonjs/index.js +14 -0
  14. package/lib/commonjs/index.js.map +1 -1
  15. package/lib/commonjs/index.web.js +14 -0
  16. package/lib/commonjs/index.web.js.map +1 -1
  17. package/lib/module/dialog/CenteredDialog.js +236 -0
  18. package/lib/module/dialog/CenteredDialog.js.map +1 -0
  19. package/lib/module/dialog/CenteredDialog.web.js +320 -0
  20. package/lib/module/dialog/CenteredDialog.web.js.map +1 -0
  21. package/lib/module/dialog/centered-dialog-tokens.js +58 -0
  22. package/lib/module/dialog/centered-dialog-tokens.js.map +1 -0
  23. package/lib/module/dialog/centered-dialog-types.js +4 -0
  24. package/lib/module/dialog/centered-dialog-types.js.map +1 -0
  25. package/lib/module/dialog/index.js +1 -0
  26. package/lib/module/dialog/index.js.map +1 -1
  27. package/lib/module/dialog/index.web.js +1 -0
  28. package/lib/module/dialog/index.web.js.map +1 -1
  29. package/lib/module/index.js +1 -1
  30. package/lib/module/index.js.map +1 -1
  31. package/lib/module/index.web.js +1 -1
  32. package/lib/module/index.web.js.map +1 -1
  33. package/lib/typescript/commonjs/dialog/CenteredDialog.d.ts +20 -0
  34. package/lib/typescript/commonjs/dialog/CenteredDialog.d.ts.map +1 -0
  35. package/lib/typescript/commonjs/dialog/CenteredDialog.web.d.ts +29 -0
  36. package/lib/typescript/commonjs/dialog/CenteredDialog.web.d.ts.map +1 -0
  37. package/lib/typescript/commonjs/dialog/centered-dialog-tokens.d.ts +47 -0
  38. package/lib/typescript/commonjs/dialog/centered-dialog-tokens.d.ts.map +1 -0
  39. package/lib/typescript/commonjs/dialog/centered-dialog-types.d.ts +70 -0
  40. package/lib/typescript/commonjs/dialog/centered-dialog-types.d.ts.map +1 -0
  41. package/lib/typescript/commonjs/dialog/index.d.ts +2 -0
  42. package/lib/typescript/commonjs/dialog/index.d.ts.map +1 -1
  43. package/lib/typescript/commonjs/dialog/index.web.d.ts +2 -0
  44. package/lib/typescript/commonjs/dialog/index.web.d.ts.map +1 -1
  45. package/lib/typescript/commonjs/index.d.ts +2 -2
  46. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/index.web.d.ts +2 -2
  48. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  49. package/lib/typescript/module/dialog/CenteredDialog.d.ts +20 -0
  50. package/lib/typescript/module/dialog/CenteredDialog.d.ts.map +1 -0
  51. package/lib/typescript/module/dialog/CenteredDialog.web.d.ts +29 -0
  52. package/lib/typescript/module/dialog/CenteredDialog.web.d.ts.map +1 -0
  53. package/lib/typescript/module/dialog/centered-dialog-tokens.d.ts +47 -0
  54. package/lib/typescript/module/dialog/centered-dialog-tokens.d.ts.map +1 -0
  55. package/lib/typescript/module/dialog/centered-dialog-types.d.ts +70 -0
  56. package/lib/typescript/module/dialog/centered-dialog-types.d.ts.map +1 -0
  57. package/lib/typescript/module/dialog/index.d.ts +2 -0
  58. package/lib/typescript/module/dialog/index.d.ts.map +1 -1
  59. package/lib/typescript/module/dialog/index.web.d.ts +2 -0
  60. package/lib/typescript/module/dialog/index.web.d.ts.map +1 -1
  61. package/lib/typescript/module/index.d.ts +2 -2
  62. package/lib/typescript/module/index.d.ts.map +1 -1
  63. package/lib/typescript/module/index.web.d.ts +2 -2
  64. package/lib/typescript/module/index.web.d.ts.map +1 -1
  65. package/package.json +1 -1
  66. package/src/__tests__/CenteredDialog.test.tsx +108 -0
  67. package/src/dialog/CenteredDialog.stories.tsx +125 -0
  68. package/src/dialog/CenteredDialog.tsx +295 -0
  69. package/src/dialog/CenteredDialog.web.tsx +370 -0
  70. package/src/dialog/centered-dialog-tokens.ts +68 -0
  71. package/src/dialog/centered-dialog-types.ts +70 -0
  72. package/src/dialog/index.ts +2 -0
  73. package/src/dialog/index.web.ts +6 -0
  74. package/src/index.ts +3 -0
  75. package/src/index.web.ts +3 -0
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CENTERED_DIALOG_BACKDROP_TESTID = void 0;
7
+ exports.CenteredDialog = CenteredDialog;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactNative = require("react-native");
10
+ var _useInteractionState = require("../hooks/useInteractionState.js");
11
+ var _Times = require("../icons/Times.js");
12
+ var _useTheme = require("../theme/use-theme.js");
13
+ var _index = require("../typography/index.js");
14
+ var _centeredDialogTokens = require("./centered-dialog-tokens.js");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ const CLOSE_HIT_SLOP = {
18
+ top: 8,
19
+ bottom: 8,
20
+ left: 8,
21
+ right: 8
22
+ };
23
+
24
+ /** Stable testID for the dimmed backdrop. Overridden when a `testID` is set. */
25
+ const CENTERED_DIALOG_BACKDROP_TESTID = exports.CENTERED_DIALOG_BACKDROP_TESTID = 'bloom-centered-dialog-backdrop';
26
+
27
+ /**
28
+ * Native variant of `<CenteredDialog>`.
29
+ *
30
+ * A controlled, centered modal: a transparent RN `Modal` (fade animation,
31
+ * own native window) hosting a dimmed full-screen backdrop and a centered,
32
+ * rounded card styled entirely from Bloom theme tokens.
33
+ *
34
+ * The backdrop is a sibling `Pressable` rendered BEHIND the card (absolute
35
+ * filled), never a parent of it — so a tap on the card never bubbles to the
36
+ * backdrop's close handler and the card never ends up nested inside the
37
+ * backdrop's pressable on web.
38
+ *
39
+ * Dismissal: backdrop tap (when `dismissible`), the header close button, and
40
+ * the Android hardware back button (`onRequestClose`) all call `onClose`.
41
+ */
42
+ function CenteredDialog({
43
+ visible,
44
+ onClose,
45
+ title,
46
+ dismissible = true,
47
+ maxWidth = _centeredDialogTokens.DEFAULT_MAX_WIDTH,
48
+ compact = true,
49
+ showClose,
50
+ children,
51
+ footer,
52
+ accessibilityLabel,
53
+ closeAccessibilityLabel = 'Close dialog',
54
+ backdropAccessibilityLabel = 'Dismiss dialog',
55
+ cardStyle,
56
+ contentStyle,
57
+ testID
58
+ }) {
59
+ const theme = (0, _useTheme.useTheme)();
60
+ const backdropPress = (0, _useInteractionState.useInteractionState)();
61
+ const spacing = (0, _react.useMemo)(() => (0, _centeredDialogTokens.resolveSpacing)(compact), [compact]);
62
+ const resolvedShowClose = showClose ?? Boolean(title);
63
+ const hasHeader = Boolean(title) || resolvedShowClose;
64
+ const handleBackdropPress = dismissible ? onClose : undefined;
65
+ // Android's hardware back must always be answerable; when the dialog is
66
+ // non-dismissible we still need a handler (RN requires one for transparent
67
+ // modals) — make it a no-op so back does nothing rather than crash.
68
+ const handleRequestClose = dismissible ? onClose : noop;
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
70
+ visible: visible,
71
+ transparent: true,
72
+ animationType: "fade",
73
+ statusBarTranslucent: true,
74
+ onRequestClose: handleRequestClose,
75
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
76
+ style: [styles.root, {
77
+ padding: _centeredDialogTokens.VIEWPORT_GUTTER
78
+ }],
79
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
80
+ testID: testID ? `${testID}-backdrop` : CENTERED_DIALOG_BACKDROP_TESTID,
81
+ style: [styles.backdrop, {
82
+ backgroundColor: theme.colors.overlay
83
+ }, backdropPress.state && styles.backdropPressed],
84
+ onPress: handleBackdropPress,
85
+ onPressIn: backdropPress.onIn,
86
+ onPressOut: backdropPress.onOut,
87
+ disabled: !dismissible,
88
+ accessibilityRole: "button",
89
+ accessibilityLabel: backdropAccessibilityLabel
90
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
91
+ testID: testID,
92
+ accessibilityLabel: accessibilityLabel ?? title,
93
+ style: [styles.card, {
94
+ maxWidth,
95
+ maxHeight: `${_centeredDialogTokens.MAX_HEIGHT_FRACTION * 100}%`,
96
+ backgroundColor: theme.colors.card,
97
+ borderColor: theme.colors.border,
98
+ shadowColor: theme.colors.shadow
99
+ }, cardStyle],
100
+ children: [hasHeader ? /*#__PURE__*/(0, _jsxRuntime.jsx)(DialogHeader, {
101
+ title: title,
102
+ showClose: resolvedShowClose,
103
+ padding: spacing.pad,
104
+ gap: spacing.headerGap,
105
+ closeAccessibilityLabel: closeAccessibilityLabel,
106
+ onClose: onClose
107
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
108
+ style: styles.bodyScroll,
109
+ contentContainerStyle: [{
110
+ padding: spacing.pad,
111
+ paddingTop: hasHeader ? spacing.headerGap : spacing.pad,
112
+ gap: spacing.contentGap
113
+ }, contentStyle],
114
+ showsVerticalScrollIndicator: false,
115
+ keyboardShouldPersistTaps: "handled",
116
+ children: children
117
+ }), footer ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
118
+ style: [styles.footer, {
119
+ padding: spacing.pad,
120
+ paddingTop: spacing.footerGap,
121
+ borderTopColor: theme.colors.borderLight
122
+ }],
123
+ children: footer
124
+ }) : null]
125
+ })]
126
+ })
127
+ });
128
+ }
129
+ function DialogHeader({
130
+ title,
131
+ showClose,
132
+ padding,
133
+ gap,
134
+ closeAccessibilityLabel,
135
+ onClose
136
+ }) {
137
+ const theme = (0, _useTheme.useTheme)();
138
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
139
+ style: [styles.header, {
140
+ paddingHorizontal: padding,
141
+ paddingTop: padding,
142
+ gap
143
+ }],
144
+ children: [title ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.Text, {
145
+ accessibilityRole: "header",
146
+ numberOfLines: 2,
147
+ style: [styles.title, {
148
+ color: theme.colors.text
149
+ }],
150
+ children: title
151
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
152
+ style: styles.titleSpacer
153
+ }), showClose ? /*#__PURE__*/(0, _jsxRuntime.jsx)(CloseButton, {
154
+ accessibilityLabel: closeAccessibilityLabel,
155
+ onPress: onClose
156
+ }) : null]
157
+ });
158
+ }
159
+ function CloseButton({
160
+ accessibilityLabel,
161
+ onPress
162
+ }) {
163
+ const theme = (0, _useTheme.useTheme)();
164
+ const press = (0, _useInteractionState.useInteractionState)();
165
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
166
+ onPress: onPress,
167
+ onPressIn: press.onIn,
168
+ onPressOut: press.onOut,
169
+ hitSlop: CLOSE_HIT_SLOP,
170
+ accessibilityRole: "button",
171
+ accessibilityLabel: accessibilityLabel,
172
+ style: [styles.closeButton, {
173
+ backgroundColor: theme.colors.contrast50
174
+ }, press.state && styles.closeButtonPressed],
175
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Times.TimesLarge_Stroke2_Corner0_Rounded, {
176
+ size: "sm",
177
+ fill: theme.colors.textSecondary
178
+ })
179
+ });
180
+ }
181
+ function noop() {
182
+ /* non-dismissible: hardware back is intentionally inert */
183
+ }
184
+ const styles = _reactNative.StyleSheet.create({
185
+ root: {
186
+ flex: 1,
187
+ alignItems: 'center',
188
+ justifyContent: 'center'
189
+ },
190
+ backdrop: {
191
+ ..._reactNative.StyleSheet.absoluteFillObject
192
+ },
193
+ // A subtle deepening on press confirms the tap-to-dismiss affordance.
194
+ backdropPressed: {
195
+ opacity: 0.92
196
+ },
197
+ card: {
198
+ width: '100%',
199
+ borderRadius: _centeredDialogTokens.CARD_RADIUS,
200
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
201
+ overflow: 'hidden',
202
+ shadowOpacity: 0.18,
203
+ shadowRadius: 24,
204
+ shadowOffset: {
205
+ width: 0,
206
+ height: 8
207
+ },
208
+ elevation: 12
209
+ },
210
+ header: {
211
+ flexDirection: 'row',
212
+ alignItems: 'flex-start',
213
+ justifyContent: 'space-between'
214
+ },
215
+ title: {
216
+ flex: 1,
217
+ fontSize: 17,
218
+ fontWeight: '700',
219
+ lineHeight: 22
220
+ },
221
+ titleSpacer: {
222
+ flex: 1
223
+ },
224
+ closeButton: {
225
+ width: 28,
226
+ height: 28,
227
+ borderRadius: 14,
228
+ alignItems: 'center',
229
+ justifyContent: 'center'
230
+ },
231
+ closeButtonPressed: {
232
+ opacity: 0.7
233
+ },
234
+ bodyScroll: {
235
+ flexGrow: 0,
236
+ flexShrink: 1
237
+ },
238
+ footer: {
239
+ borderTopWidth: _reactNative.StyleSheet.hairlineWidth
240
+ }
241
+ });
242
+ //# sourceMappingURL=CenteredDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useInteractionState","_Times","_useTheme","_index","_centeredDialogTokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CLOSE_HIT_SLOP","top","bottom","left","right","CENTERED_DIALOG_BACKDROP_TESTID","exports","CenteredDialog","visible","onClose","title","dismissible","maxWidth","DEFAULT_MAX_WIDTH","compact","showClose","children","footer","accessibilityLabel","closeAccessibilityLabel","backdropAccessibilityLabel","cardStyle","contentStyle","testID","theme","useTheme","backdropPress","useInteractionState","spacing","useMemo","resolveSpacing","resolvedShowClose","Boolean","hasHeader","handleBackdropPress","undefined","handleRequestClose","noop","jsx","Modal","transparent","animationType","statusBarTranslucent","onRequestClose","jsxs","View","style","styles","root","padding","VIEWPORT_GUTTER","Pressable","backdrop","backgroundColor","colors","overlay","state","backdropPressed","onPress","onPressIn","onIn","onPressOut","onOut","disabled","accessibilityRole","card","maxHeight","MAX_HEIGHT_FRACTION","borderColor","border","shadowColor","shadow","DialogHeader","pad","gap","headerGap","ScrollView","bodyScroll","contentContainerStyle","paddingTop","contentGap","showsVerticalScrollIndicator","keyboardShouldPersistTaps","footerGap","borderTopColor","borderLight","header","paddingHorizontal","Text","numberOfLines","color","text","titleSpacer","CloseButton","press","hitSlop","closeButton","contrast50","closeButtonPressed","TimesLarge_Stroke2_Corner0_Rounded","size","fill","textSecondary","StyleSheet","create","flex","alignItems","justifyContent","absoluteFillObject","opacity","width","borderRadius","CARD_RADIUS","borderWidth","hairlineWidth","overflow","shadowOpacity","shadowRadius","shadowOffset","height","elevation","flexDirection","fontSize","fontWeight","lineHeight","flexGrow","flexShrink","borderTopWidth"],"sourceRoot":"../../../src","sources":["dialog/CenteredDialog.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CENTERED_DIALOG_BACKDROP_TESTID = exports.BLOOM_CENTERED_DIALOG_CSS = void 0;
7
+ exports.CenteredDialog = CenteredDialog;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactNative = require("react-native");
10
+ var _reactRemoveScrollBar = require("react-remove-scroll-bar");
11
+ var _useInteractionState = require("../hooks/useInteractionState.js");
12
+ var _Times = require("../icons/Times.js");
13
+ var _indexWeb = require("../portal/index.web.js");
14
+ var _useTheme = require("../theme/use-theme.js");
15
+ var _index = require("../typography/index.js");
16
+ var _centeredDialogTokens = require("./centered-dialog-tokens.js");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
19
+ const FADE_OUT_DURATION = 150;
20
+ const CLOSE_HIT_SLOP = {
21
+ top: 8,
22
+ bottom: 8,
23
+ left: 8,
24
+ right: 8
25
+ };
26
+
27
+ /** Stable testID for the dimmed backdrop. Overridden when a `testID` is set. */
28
+ const CENTERED_DIALOG_BACKDROP_TESTID = exports.CENTERED_DIALOG_BACKDROP_TESTID = 'bloom-centered-dialog-backdrop';
29
+ const stopPropagation = e => e.stopPropagation();
30
+
31
+ /**
32
+ * Web variant of `<CenteredDialog>`.
33
+ *
34
+ * A centered modal card rendered into the Bloom Portal at the end of
35
+ * `document.body`. Identical prop surface to native — `visible`, `onClose`,
36
+ * `title`, `compact`, etc. — so call sites are platform agnostic.
37
+ *
38
+ * Differences from the native fork (necessary, not behavioural):
39
+ * - Portal + `RemoveScrollBar` lock the underlying page while open.
40
+ * - `Escape` dismisses (when `dismissible`).
41
+ * - A `role="dialog"` panel with `aria-label`/`aria-modal` for a11y.
42
+ * - A CSS fade/zoom keyframe matches the native modal's `fade` animation;
43
+ * the keyframes are injected once (idempotent) into `<head>`.
44
+ *
45
+ * The backdrop is a sibling element BEHIND the card, and the card stops
46
+ * click/press propagation so a tap on the card never dismisses.
47
+ */
48
+ function CenteredDialog({
49
+ visible,
50
+ onClose,
51
+ title,
52
+ dismissible = true,
53
+ maxWidth = _centeredDialogTokens.DEFAULT_MAX_WIDTH,
54
+ compact = true,
55
+ showClose,
56
+ children,
57
+ footer,
58
+ accessibilityLabel,
59
+ closeAccessibilityLabel = 'Close dialog',
60
+ backdropAccessibilityLabel = 'Dismiss dialog',
61
+ cardStyle,
62
+ contentStyle,
63
+ testID
64
+ }) {
65
+ const theme = (0, _useTheme.useTheme)();
66
+ // `rendered` keeps the dialog mounted through its fade-out so a controlled
67
+ // `visible` flip to `false` still plays an exit animation (matching the
68
+ // native `Modal animationType="fade"`, which animates both directions).
69
+ const [rendered, setRendered] = (0, _react.useState)(visible);
70
+ const isClosing = rendered && !visible;
71
+ useKeyframes();
72
+
73
+ // Mount immediately when opened; defer unmount until the exit animation
74
+ // has played when closed.
75
+ (0, _react.useEffect)(() => {
76
+ if (visible) {
77
+ setRendered(true);
78
+ return;
79
+ }
80
+ if (!rendered) return;
81
+ const timer = setTimeout(() => setRendered(false), FADE_OUT_DURATION);
82
+ return () => clearTimeout(timer);
83
+ }, [visible, rendered]);
84
+
85
+ // Escape-to-close while open. Scoped to the open lifetime so stacked
86
+ // dialogs don't fight for the keydown — the top-most one wins via
87
+ // document-level event order.
88
+ (0, _react.useEffect)(() => {
89
+ if (!visible || !dismissible || typeof document === 'undefined') return;
90
+ const handler = e => {
91
+ if (e.key === 'Escape') {
92
+ e.stopPropagation();
93
+ onClose();
94
+ }
95
+ };
96
+ document.addEventListener('keydown', handler);
97
+ return () => document.removeEventListener('keydown', handler);
98
+ }, [visible, dismissible, onClose]);
99
+ const spacing = (0, _react.useMemo)(() => (0, _centeredDialogTokens.resolveSpacing)(compact), [compact]);
100
+ const resolvedShowClose = showClose ?? Boolean(title);
101
+ const hasHeader = Boolean(title) || resolvedShowClose;
102
+ if (!rendered) return null;
103
+
104
+ // While closing, the backdrop must not re-trigger onClose (it's mid-exit).
105
+ const handleBackdropPress = dismissible && !isClosing ? onClose : undefined;
106
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_indexWeb.Portal, {
107
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRemoveScrollBar.RemoveScrollBar, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
108
+ style: [styles.root, {
109
+ padding: _centeredDialogTokens.VIEWPORT_GUTTER
110
+ }],
111
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
112
+ testID: testID ? `${testID}-backdrop` : CENTERED_DIALOG_BACKDROP_TESTID,
113
+ onPress: handleBackdropPress,
114
+ disabled: !dismissible,
115
+ accessibilityRole: "button",
116
+ accessibilityLabel: backdropAccessibilityLabel,
117
+ style: [styles.backdrop, {
118
+ backgroundColor: theme.colors.overlay
119
+ }, backdropAnimation(isClosing)]
120
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
121
+ testID: testID,
122
+ role: "dialog",
123
+ "aria-modal": true,
124
+ "aria-label": accessibilityLabel ?? title,
125
+ onStartShouldSetResponder: returnsTrue,
126
+ onResponderRelease: stopPropagation,
127
+ onClick: stopPropagation,
128
+ style: [styles.card, {
129
+ maxWidth,
130
+ maxHeight: `${_centeredDialogTokens.MAX_HEIGHT_FRACTION * 100}%`,
131
+ backgroundColor: theme.colors.card,
132
+ borderColor: theme.colors.border,
133
+ shadowColor: theme.colors.shadow
134
+ }, cardAnimation(isClosing), cardStyle],
135
+ children: [hasHeader ? /*#__PURE__*/(0, _jsxRuntime.jsx)(DialogHeader, {
136
+ title: title,
137
+ showClose: resolvedShowClose,
138
+ padding: spacing.pad,
139
+ gap: spacing.headerGap,
140
+ closeAccessibilityLabel: closeAccessibilityLabel,
141
+ onClose: onClose
142
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
143
+ style: styles.bodyScroll,
144
+ contentContainerStyle: [{
145
+ padding: spacing.pad,
146
+ paddingTop: hasHeader ? spacing.headerGap : spacing.pad,
147
+ gap: spacing.contentGap
148
+ }, contentStyle],
149
+ showsVerticalScrollIndicator: false,
150
+ keyboardShouldPersistTaps: "handled",
151
+ children: children
152
+ }), footer ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
153
+ style: [styles.footer, {
154
+ padding: spacing.pad,
155
+ paddingTop: spacing.footerGap,
156
+ borderTopColor: theme.colors.borderLight
157
+ }],
158
+ children: footer
159
+ }) : null]
160
+ })]
161
+ })]
162
+ });
163
+ }
164
+ function DialogHeader({
165
+ title,
166
+ showClose,
167
+ padding,
168
+ gap,
169
+ closeAccessibilityLabel,
170
+ onClose
171
+ }) {
172
+ const theme = (0, _useTheme.useTheme)();
173
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
174
+ style: [styles.header, {
175
+ paddingHorizontal: padding,
176
+ paddingTop: padding,
177
+ gap
178
+ }],
179
+ children: [title ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.Text, {
180
+ accessibilityRole: "header",
181
+ numberOfLines: 2,
182
+ style: [styles.title, {
183
+ color: theme.colors.text
184
+ }],
185
+ children: title
186
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
187
+ style: styles.titleSpacer
188
+ }), showClose ? /*#__PURE__*/(0, _jsxRuntime.jsx)(CloseButton, {
189
+ accessibilityLabel: closeAccessibilityLabel,
190
+ onPress: onClose
191
+ }) : null]
192
+ });
193
+ }
194
+ function CloseButton({
195
+ accessibilityLabel,
196
+ onPress
197
+ }) {
198
+ const theme = (0, _useTheme.useTheme)();
199
+ const {
200
+ hovered,
201
+ pressed,
202
+ hoverHandlers,
203
+ pressHandlers
204
+ } = (0, _useInteractionState.useInteractionStates)();
205
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
206
+ onPress: onPress,
207
+ ...hoverHandlers,
208
+ ...pressHandlers,
209
+ hitSlop: CLOSE_HIT_SLOP,
210
+ accessibilityRole: "button",
211
+ accessibilityLabel: accessibilityLabel,
212
+ style: [styles.closeButton, {
213
+ backgroundColor: theme.colors.contrast50
214
+ }, (hovered || pressed) && styles.closeButtonActive],
215
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Times.TimesLarge_Stroke2_Corner0_Rounded, {
216
+ size: "sm",
217
+ fill: theme.colors.textSecondary
218
+ })
219
+ });
220
+ }
221
+ const returnsTrue = () => true;
222
+ function backdropAnimation(isClosing) {
223
+ return isClosing ? {
224
+ animation: `bloomCenteredDialogFadeOut ease-in ${FADE_OUT_DURATION}ms forwards`
225
+ } : {
226
+ animation: 'bloomCenteredDialogFadeIn ease-out 150ms'
227
+ };
228
+ }
229
+ function cardAnimation(isClosing) {
230
+ return isClosing ? {
231
+ animation: `bloomCenteredDialogZoomOut ease-in ${FADE_OUT_DURATION}ms forwards`
232
+ } : {
233
+ animation: 'bloomCenteredDialogZoomIn cubic-bezier(0.16, 1, 0.3, 1) 200ms'
234
+ };
235
+ }
236
+ const KEYFRAMES_ID = 'bloom-centered-dialog-keyframes';
237
+
238
+ /**
239
+ * CSS keyframes powering the web enter/exit animation. Injected once into
240
+ * `<head>` on first mount (keyed by id so re-mounts and multiple dialogs
241
+ * don't duplicate the rule). Mirrors the native modal's `fade` feel with a
242
+ * subtle zoom on the card.
243
+ */
244
+ const BLOOM_CENTERED_DIALOG_CSS = exports.BLOOM_CENTERED_DIALOG_CSS = `
245
+ @keyframes bloomCenteredDialogFadeIn { from { opacity: 0; } to { opacity: 1; } }
246
+ @keyframes bloomCenteredDialogFadeOut { from { opacity: 1; } to { opacity: 0; } }
247
+ @keyframes bloomCenteredDialogZoomIn { from { opacity: 0; transform: scale(0.96); } to { opacity: 1; transform: scale(1); } }
248
+ @keyframes bloomCenteredDialogZoomOut { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.96); } }
249
+ `;
250
+ function useKeyframes() {
251
+ (0, _react.useEffect)(() => {
252
+ if (typeof document === 'undefined') return;
253
+ if (document.getElementById(KEYFRAMES_ID)) return;
254
+ const style = document.createElement('style');
255
+ style.id = KEYFRAMES_ID;
256
+ style.textContent = BLOOM_CENTERED_DIALOG_CSS;
257
+ document.head.appendChild(style);
258
+ }, []);
259
+ }
260
+ const styles = _reactNative.StyleSheet.create({
261
+ root: {
262
+ position: 'fixed',
263
+ top: 0,
264
+ left: 0,
265
+ right: 0,
266
+ bottom: 0,
267
+ zIndex: 50,
268
+ alignItems: 'center',
269
+ justifyContent: 'center',
270
+ pointerEvents: 'auto'
271
+ },
272
+ backdrop: {
273
+ position: 'fixed',
274
+ top: 0,
275
+ left: 0,
276
+ right: 0,
277
+ bottom: 0
278
+ },
279
+ card: {
280
+ position: 'relative',
281
+ width: '100%',
282
+ borderRadius: _centeredDialogTokens.CARD_RADIUS,
283
+ borderWidth: 1,
284
+ overflow: 'hidden',
285
+ shadowOpacity: 0.18,
286
+ shadowRadius: 24,
287
+ shadowOffset: {
288
+ width: 0,
289
+ height: 8
290
+ },
291
+ zIndex: 60
292
+ },
293
+ header: {
294
+ flexDirection: 'row',
295
+ alignItems: 'flex-start',
296
+ justifyContent: 'space-between'
297
+ },
298
+ title: {
299
+ flex: 1,
300
+ fontSize: 17,
301
+ fontWeight: '700',
302
+ lineHeight: 22
303
+ },
304
+ titleSpacer: {
305
+ flex: 1
306
+ },
307
+ closeButton: {
308
+ width: 28,
309
+ height: 28,
310
+ borderRadius: 14,
311
+ alignItems: 'center',
312
+ justifyContent: 'center',
313
+ cursor: 'pointer'
314
+ },
315
+ closeButtonActive: {
316
+ opacity: 0.7
317
+ },
318
+ bodyScroll: {
319
+ flexGrow: 0,
320
+ flexShrink: 1
321
+ },
322
+ footer: {
323
+ borderTopWidth: 1
324
+ }
325
+ });
326
+ //# sourceMappingURL=CenteredDialog.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactRemoveScrollBar","_useInteractionState","_Times","_indexWeb","_useTheme","_index","_centeredDialogTokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","FADE_OUT_DURATION","CLOSE_HIT_SLOP","top","bottom","left","right","CENTERED_DIALOG_BACKDROP_TESTID","exports","stopPropagation","CenteredDialog","visible","onClose","title","dismissible","maxWidth","DEFAULT_MAX_WIDTH","compact","showClose","children","footer","accessibilityLabel","closeAccessibilityLabel","backdropAccessibilityLabel","cardStyle","contentStyle","testID","theme","useTheme","rendered","setRendered","useState","isClosing","useKeyframes","useEffect","timer","setTimeout","clearTimeout","document","handler","key","addEventListener","removeEventListener","spacing","useMemo","resolveSpacing","resolvedShowClose","Boolean","hasHeader","handleBackdropPress","undefined","jsxs","Portal","jsx","RemoveScrollBar","View","style","styles","root","padding","VIEWPORT_GUTTER","Pressable","onPress","disabled","accessibilityRole","backdrop","backgroundColor","colors","overlay","backdropAnimation","role","onStartShouldSetResponder","returnsTrue","onResponderRelease","onClick","card","maxHeight","MAX_HEIGHT_FRACTION","borderColor","border","shadowColor","shadow","cardAnimation","DialogHeader","pad","gap","headerGap","ScrollView","bodyScroll","contentContainerStyle","paddingTop","contentGap","showsVerticalScrollIndicator","keyboardShouldPersistTaps","footerGap","borderTopColor","borderLight","header","paddingHorizontal","Text","numberOfLines","color","text","titleSpacer","CloseButton","hovered","pressed","hoverHandlers","pressHandlers","useInteractionStates","hitSlop","closeButton","contrast50","closeButtonActive","TimesLarge_Stroke2_Corner0_Rounded","size","fill","textSecondary","animation","KEYFRAMES_ID","BLOOM_CENTERED_DIALOG_CSS","getElementById","createElement","id","textContent","head","appendChild","StyleSheet","create","position","zIndex","alignItems","justifyContent","pointerEvents","width","borderRadius","CARD_RADIUS","borderWidth","overflow","shadowOpacity","shadowRadius","shadowOffset","height","flexDirection","flex","fontSize","fontWeight","lineHeight","cursor","opacity","flexGrow","flexShrink","borderTopWidth"],"sourceRoot":"../../../src","sources":["dialog/CenteredDialog.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VIEWPORT_GUTTER = exports.MAX_HEIGHT_FRACTION = exports.DEFAULT_MAX_WIDTH = exports.COZY_SPACING = exports.COMPACT_SPACING = exports.CARD_RADIUS = void 0;
7
+ exports.resolveSpacing = resolveSpacing;
8
+ var _tokens = require("../styles/tokens.js");
9
+ /**
10
+ * Shared layout constants for `<CenteredDialog>`, kept in one module so the
11
+ * native and web forks render identically. All values are Bloom theme tokens
12
+ * (`styles/tokens`) — no ad-hoc magic numbers.
13
+ *
14
+ * COMPACT is the priority: the `compact` spacing set is the default and is
15
+ * deliberately tight (≈`space.md`), so the card reads snug out of the box.
16
+ * The `cozy` set is the opt-out (`compact={false}`) for roomier dialogs.
17
+ */
18
+
19
+ /** Default max card width — comfortable for a compact dialog. */
20
+ const DEFAULT_MAX_WIDTH = exports.DEFAULT_MAX_WIDTH = 440;
21
+
22
+ /** Card height is capped at this fraction of the viewport; body scrolls. */
23
+ const MAX_HEIGHT_FRACTION = exports.MAX_HEIGHT_FRACTION = 0.8;
24
+
25
+ /** Card corner radius (token: `borderRadius.lg` = 16). */
26
+ const CARD_RADIUS = exports.CARD_RADIUS = _tokens.borderRadius.lg;
27
+
28
+ /** Outer gutter between the card edge and the viewport edge (token `space.lg`). */
29
+ const VIEWPORT_GUTTER = exports.VIEWPORT_GUTTER = _tokens.space.lg;
30
+ /**
31
+ * Compact (default) — tight, snug spacing built on `space.md` (12).
32
+ *
33
+ * pad = space.md (12)
34
+ * headerGap = space.sm (8)
35
+ * footerGap = space.md (12)
36
+ * contentGap = space.sm (8)
37
+ */
38
+ const COMPACT_SPACING = exports.COMPACT_SPACING = {
39
+ pad: _tokens.space.md,
40
+ headerGap: _tokens.space.sm,
41
+ footerGap: _tokens.space.md,
42
+ contentGap: _tokens.space.sm
43
+ };
44
+
45
+ /**
46
+ * Cozy (`compact={false}`) — roomier spacing built on `space.xl` (20).
47
+ *
48
+ * pad = space.xl (20)
49
+ * headerGap = space.md (12)
50
+ * footerGap = space.lg (16)
51
+ * contentGap = space.md (12)
52
+ */
53
+ const COZY_SPACING = exports.COZY_SPACING = {
54
+ pad: _tokens.space.xl,
55
+ headerGap: _tokens.space.md,
56
+ footerGap: _tokens.space.lg,
57
+ contentGap: _tokens.space.md
58
+ };
59
+ function resolveSpacing(compact) {
60
+ return compact ? COMPACT_SPACING : COZY_SPACING;
61
+ }
62
+ //# sourceMappingURL=centered-dialog-tokens.js.map