@oxyhq/bloom 0.14.0 → 0.16.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 (212) hide show
  1. package/lib/commonjs/alert-dialog/AlertDialog.js +35 -27
  2. package/lib/commonjs/alert-dialog/AlertDialog.js.map +1 -1
  3. package/lib/commonjs/alert-dialog/index.js +1 -1
  4. package/lib/commonjs/alert-dialog/index.js.map +1 -1
  5. package/lib/commonjs/alert-dialog/index.web.js +1 -1
  6. package/lib/commonjs/alert-dialog/index.web.js.map +1 -1
  7. package/lib/commonjs/command/Command.js +27 -16
  8. package/lib/commonjs/command/Command.js.map +1 -1
  9. package/lib/commonjs/command/index.js +1 -1
  10. package/lib/commonjs/command/index.js.map +1 -1
  11. package/lib/commonjs/command/index.web.js +1 -1
  12. package/lib/commonjs/command/index.web.js.map +1 -1
  13. package/lib/commonjs/dialog/Dialog.js +336 -43
  14. package/lib/commonjs/dialog/Dialog.js.map +1 -1
  15. package/lib/commonjs/dialog/Dialog.web.js +420 -66
  16. package/lib/commonjs/dialog/Dialog.web.js.map +1 -1
  17. package/lib/commonjs/dialog/index.js +2 -9
  18. package/lib/commonjs/dialog/index.js.map +1 -1
  19. package/lib/commonjs/dialog/index.web.js +2 -15
  20. package/lib/commonjs/dialog/index.web.js.map +1 -1
  21. package/lib/commonjs/dialog/placement.js +104 -0
  22. package/lib/commonjs/dialog/placement.js.map +1 -0
  23. package/lib/commonjs/index.js +7 -29
  24. package/lib/commonjs/index.js.map +1 -1
  25. package/lib/commonjs/index.web.js +13 -35
  26. package/lib/commonjs/index.web.js.map +1 -1
  27. package/lib/module/alert-dialog/AlertDialog.js +35 -27
  28. package/lib/module/alert-dialog/AlertDialog.js.map +1 -1
  29. package/lib/module/alert-dialog/index.js +2 -2
  30. package/lib/module/alert-dialog/index.js.map +1 -1
  31. package/lib/module/alert-dialog/index.web.js +2 -2
  32. package/lib/module/alert-dialog/index.web.js.map +1 -1
  33. package/lib/module/command/Command.js +27 -16
  34. package/lib/module/command/Command.js.map +1 -1
  35. package/lib/module/command/index.js +2 -2
  36. package/lib/module/command/index.js.map +1 -1
  37. package/lib/module/command/index.web.js +2 -2
  38. package/lib/module/command/index.web.js.map +1 -1
  39. package/lib/module/dialog/Dialog.js +335 -46
  40. package/lib/module/dialog/Dialog.js.map +1 -1
  41. package/lib/module/dialog/Dialog.web.js +418 -68
  42. package/lib/module/dialog/Dialog.web.js.map +1 -1
  43. package/lib/module/dialog/index.js +1 -2
  44. package/lib/module/dialog/index.js.map +1 -1
  45. package/lib/module/dialog/index.web.js +1 -2
  46. package/lib/module/dialog/index.web.js.map +1 -1
  47. package/lib/module/dialog/placement.js +100 -0
  48. package/lib/module/dialog/placement.js.map +1 -0
  49. package/lib/module/index.js +1 -3
  50. package/lib/module/index.js.map +1 -1
  51. package/lib/module/index.web.js +1 -3
  52. package/lib/module/index.web.js.map +1 -1
  53. package/lib/typescript/commonjs/alert-dialog/AlertDialog.d.ts +13 -12
  54. package/lib/typescript/commonjs/alert-dialog/AlertDialog.d.ts.map +1 -1
  55. package/lib/typescript/commonjs/alert-dialog/index.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/alert-dialog/index.web.d.ts.map +1 -1
  57. package/lib/typescript/commonjs/command/Command.d.ts +8 -8
  58. package/lib/typescript/commonjs/command/Command.d.ts.map +1 -1
  59. package/lib/typescript/commonjs/command/index.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/command/index.web.d.ts.map +1 -1
  61. package/lib/typescript/commonjs/dialog/Dialog.d.ts +17 -15
  62. package/lib/typescript/commonjs/dialog/Dialog.d.ts.map +1 -1
  63. package/lib/typescript/commonjs/dialog/Dialog.web.d.ts +18 -5
  64. package/lib/typescript/commonjs/dialog/Dialog.web.d.ts.map +1 -1
  65. package/lib/typescript/commonjs/dialog/index.d.ts +2 -4
  66. package/lib/typescript/commonjs/dialog/index.d.ts.map +1 -1
  67. package/lib/typescript/commonjs/dialog/index.web.d.ts +2 -4
  68. package/lib/typescript/commonjs/dialog/index.web.d.ts.map +1 -1
  69. package/lib/typescript/commonjs/dialog/placement.d.ts +71 -0
  70. package/lib/typescript/commonjs/dialog/placement.d.ts.map +1 -0
  71. package/lib/typescript/commonjs/dialog/types.d.ts +66 -3
  72. package/lib/typescript/commonjs/dialog/types.d.ts.map +1 -1
  73. package/lib/typescript/commonjs/index.d.ts +2 -4
  74. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/index.web.d.ts +2 -4
  76. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  77. package/lib/typescript/module/alert-dialog/AlertDialog.d.ts +13 -12
  78. package/lib/typescript/module/alert-dialog/AlertDialog.d.ts.map +1 -1
  79. package/lib/typescript/module/alert-dialog/index.d.ts.map +1 -1
  80. package/lib/typescript/module/alert-dialog/index.web.d.ts.map +1 -1
  81. package/lib/typescript/module/command/Command.d.ts +8 -8
  82. package/lib/typescript/module/command/Command.d.ts.map +1 -1
  83. package/lib/typescript/module/command/index.d.ts.map +1 -1
  84. package/lib/typescript/module/command/index.web.d.ts.map +1 -1
  85. package/lib/typescript/module/dialog/Dialog.d.ts +17 -15
  86. package/lib/typescript/module/dialog/Dialog.d.ts.map +1 -1
  87. package/lib/typescript/module/dialog/Dialog.web.d.ts +18 -5
  88. package/lib/typescript/module/dialog/Dialog.web.d.ts.map +1 -1
  89. package/lib/typescript/module/dialog/index.d.ts +2 -4
  90. package/lib/typescript/module/dialog/index.d.ts.map +1 -1
  91. package/lib/typescript/module/dialog/index.web.d.ts +2 -4
  92. package/lib/typescript/module/dialog/index.web.d.ts.map +1 -1
  93. package/lib/typescript/module/dialog/placement.d.ts +71 -0
  94. package/lib/typescript/module/dialog/placement.d.ts.map +1 -0
  95. package/lib/typescript/module/dialog/types.d.ts +66 -3
  96. package/lib/typescript/module/dialog/types.d.ts.map +1 -1
  97. package/lib/typescript/module/index.d.ts +2 -4
  98. package/lib/typescript/module/index.d.ts.map +1 -1
  99. package/lib/typescript/module/index.web.d.ts +2 -4
  100. package/lib/typescript/module/index.web.d.ts.map +1 -1
  101. package/package.json +1 -18
  102. package/src/__tests__/AlertDialog.test.tsx +122 -0
  103. package/src/__tests__/Command.test.tsx +107 -0
  104. package/src/__tests__/DialogPlacement.test.tsx +144 -0
  105. package/src/alert-dialog/AlertDialog.tsx +46 -36
  106. package/src/alert-dialog/index.ts +2 -2
  107. package/src/alert-dialog/index.web.ts +2 -2
  108. package/src/command/Command.tsx +30 -19
  109. package/src/command/index.ts +2 -2
  110. package/src/command/index.web.ts +2 -2
  111. package/src/dialog/Dialog.tsx +406 -50
  112. package/src/dialog/Dialog.web.tsx +496 -78
  113. package/src/dialog/index.ts +4 -3
  114. package/src/dialog/index.web.ts +4 -7
  115. package/src/dialog/placement.ts +113 -0
  116. package/src/dialog/types.ts +69 -3
  117. package/src/index.ts +4 -11
  118. package/src/index.web.ts +4 -11
  119. package/lib/commonjs/dialog/CenteredDialog.js +0 -250
  120. package/lib/commonjs/dialog/CenteredDialog.js.map +0 -1
  121. package/lib/commonjs/dialog/CenteredDialog.web.js +0 -328
  122. package/lib/commonjs/dialog/CenteredDialog.web.js.map +0 -1
  123. package/lib/commonjs/dialog/centered-dialog-tokens.js +0 -62
  124. package/lib/commonjs/dialog/centered-dialog-tokens.js.map +0 -1
  125. package/lib/commonjs/dialog/centered-dialog-types.js +0 -6
  126. package/lib/commonjs/dialog/centered-dialog-types.js.map +0 -1
  127. package/lib/commonjs/responsive-sheet/ResponsiveSheet.js +0 -300
  128. package/lib/commonjs/responsive-sheet/ResponsiveSheet.js.map +0 -1
  129. package/lib/commonjs/responsive-sheet/ResponsiveSheet.native.js +0 -226
  130. package/lib/commonjs/responsive-sheet/ResponsiveSheet.native.js.map +0 -1
  131. package/lib/commonjs/responsive-sheet/const.js +0 -60
  132. package/lib/commonjs/responsive-sheet/const.js.map +0 -1
  133. package/lib/commonjs/responsive-sheet/index.js +0 -19
  134. package/lib/commonjs/responsive-sheet/index.js.map +0 -1
  135. package/lib/commonjs/responsive-sheet/index.web.js +0 -19
  136. package/lib/commonjs/responsive-sheet/index.web.js.map +0 -1
  137. package/lib/commonjs/responsive-sheet/types.js +0 -6
  138. package/lib/commonjs/responsive-sheet/types.js.map +0 -1
  139. package/lib/module/dialog/CenteredDialog.js +0 -244
  140. package/lib/module/dialog/CenteredDialog.js.map +0 -1
  141. package/lib/module/dialog/CenteredDialog.web.js +0 -322
  142. package/lib/module/dialog/CenteredDialog.web.js.map +0 -1
  143. package/lib/module/dialog/centered-dialog-tokens.js +0 -58
  144. package/lib/module/dialog/centered-dialog-tokens.js.map +0 -1
  145. package/lib/module/dialog/centered-dialog-types.js +0 -4
  146. package/lib/module/dialog/centered-dialog-types.js.map +0 -1
  147. package/lib/module/responsive-sheet/ResponsiveSheet.js +0 -293
  148. package/lib/module/responsive-sheet/ResponsiveSheet.js.map +0 -1
  149. package/lib/module/responsive-sheet/ResponsiveSheet.native.js +0 -219
  150. package/lib/module/responsive-sheet/ResponsiveSheet.native.js.map +0 -1
  151. package/lib/module/responsive-sheet/const.js +0 -56
  152. package/lib/module/responsive-sheet/const.js.map +0 -1
  153. package/lib/module/responsive-sheet/index.js +0 -4
  154. package/lib/module/responsive-sheet/index.js.map +0 -1
  155. package/lib/module/responsive-sheet/index.web.js +0 -14
  156. package/lib/module/responsive-sheet/index.web.js.map +0 -1
  157. package/lib/module/responsive-sheet/types.js +0 -4
  158. package/lib/module/responsive-sheet/types.js.map +0 -1
  159. package/lib/typescript/commonjs/dialog/CenteredDialog.d.ts +0 -20
  160. package/lib/typescript/commonjs/dialog/CenteredDialog.d.ts.map +0 -1
  161. package/lib/typescript/commonjs/dialog/CenteredDialog.web.d.ts +0 -29
  162. package/lib/typescript/commonjs/dialog/CenteredDialog.web.d.ts.map +0 -1
  163. package/lib/typescript/commonjs/dialog/centered-dialog-tokens.d.ts +0 -47
  164. package/lib/typescript/commonjs/dialog/centered-dialog-tokens.d.ts.map +0 -1
  165. package/lib/typescript/commonjs/dialog/centered-dialog-types.d.ts +0 -70
  166. package/lib/typescript/commonjs/dialog/centered-dialog-types.d.ts.map +0 -1
  167. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.d.ts +0 -26
  168. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.d.ts.map +0 -1
  169. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.native.d.ts +0 -20
  170. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.native.d.ts.map +0 -1
  171. package/lib/typescript/commonjs/responsive-sheet/const.d.ts +0 -43
  172. package/lib/typescript/commonjs/responsive-sheet/const.d.ts.map +0 -1
  173. package/lib/typescript/commonjs/responsive-sheet/index.d.ts +0 -3
  174. package/lib/typescript/commonjs/responsive-sheet/index.d.ts.map +0 -1
  175. package/lib/typescript/commonjs/responsive-sheet/index.web.d.ts +0 -3
  176. package/lib/typescript/commonjs/responsive-sheet/index.web.d.ts.map +0 -1
  177. package/lib/typescript/commonjs/responsive-sheet/types.d.ts +0 -55
  178. package/lib/typescript/commonjs/responsive-sheet/types.d.ts.map +0 -1
  179. package/lib/typescript/module/dialog/CenteredDialog.d.ts +0 -20
  180. package/lib/typescript/module/dialog/CenteredDialog.d.ts.map +0 -1
  181. package/lib/typescript/module/dialog/CenteredDialog.web.d.ts +0 -29
  182. package/lib/typescript/module/dialog/CenteredDialog.web.d.ts.map +0 -1
  183. package/lib/typescript/module/dialog/centered-dialog-tokens.d.ts +0 -47
  184. package/lib/typescript/module/dialog/centered-dialog-tokens.d.ts.map +0 -1
  185. package/lib/typescript/module/dialog/centered-dialog-types.d.ts +0 -70
  186. package/lib/typescript/module/dialog/centered-dialog-types.d.ts.map +0 -1
  187. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.d.ts +0 -26
  188. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.d.ts.map +0 -1
  189. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.native.d.ts +0 -20
  190. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.native.d.ts.map +0 -1
  191. package/lib/typescript/module/responsive-sheet/const.d.ts +0 -43
  192. package/lib/typescript/module/responsive-sheet/const.d.ts.map +0 -1
  193. package/lib/typescript/module/responsive-sheet/index.d.ts +0 -3
  194. package/lib/typescript/module/responsive-sheet/index.d.ts.map +0 -1
  195. package/lib/typescript/module/responsive-sheet/index.web.d.ts +0 -3
  196. package/lib/typescript/module/responsive-sheet/index.web.d.ts.map +0 -1
  197. package/lib/typescript/module/responsive-sheet/types.d.ts +0 -55
  198. package/lib/typescript/module/responsive-sheet/types.d.ts.map +0 -1
  199. package/src/__tests__/CenteredDialog.test.tsx +0 -108
  200. package/src/__tests__/ResponsiveSheet.test.tsx +0 -104
  201. package/src/dialog/CenteredDialog.stories.tsx +0 -125
  202. package/src/dialog/CenteredDialog.tsx +0 -303
  203. package/src/dialog/CenteredDialog.web.tsx +0 -372
  204. package/src/dialog/centered-dialog-tokens.ts +0 -68
  205. package/src/dialog/centered-dialog-types.ts +0 -70
  206. package/src/responsive-sheet/ResponsiveSheet.native.tsx +0 -257
  207. package/src/responsive-sheet/ResponsiveSheet.stories.tsx +0 -54
  208. package/src/responsive-sheet/ResponsiveSheet.tsx +0 -327
  209. package/src/responsive-sheet/const.ts +0 -53
  210. package/src/responsive-sheet/index.ts +0 -6
  211. package/src/responsive-sheet/index.web.ts +0 -16
  212. package/src/responsive-sheet/types.ts +0 -57
@@ -1,58 +0,0 @@
1
- "use strict";
2
-
3
- import { borderRadius, space } from "../styles/tokens.js";
4
-
5
- /**
6
- * Shared layout constants for `<CenteredDialog>`, kept in one module so the
7
- * native and web forks render identically. All values are Bloom theme tokens
8
- * (`styles/tokens`) — no ad-hoc magic numbers.
9
- *
10
- * COMPACT is the priority: the `compact` spacing set is the default and is
11
- * deliberately tight (≈`space.md`), so the card reads snug out of the box.
12
- * The `cozy` set is the opt-out (`compact={false}`) for roomier dialogs.
13
- */
14
-
15
- /** Default max card width — comfortable for a compact dialog. */
16
- export const DEFAULT_MAX_WIDTH = 440;
17
-
18
- /** Card height is capped at this fraction of the viewport; body scrolls. */
19
- export const MAX_HEIGHT_FRACTION = 0.8;
20
-
21
- /** Card corner radius (token: `borderRadius.lg` = 16). */
22
- export const CARD_RADIUS = borderRadius.lg;
23
-
24
- /** Outer gutter between the card edge and the viewport edge (token `space.lg`). */
25
- export const VIEWPORT_GUTTER = space.lg;
26
- /**
27
- * Compact (default) — tight, snug spacing built on `space.md` (12).
28
- *
29
- * pad = space.md (12)
30
- * headerGap = space.sm (8)
31
- * footerGap = space.md (12)
32
- * contentGap = space.sm (8)
33
- */
34
- export const COMPACT_SPACING = {
35
- pad: space.md,
36
- headerGap: space.sm,
37
- footerGap: space.md,
38
- contentGap: space.sm
39
- };
40
-
41
- /**
42
- * Cozy (`compact={false}`) — roomier spacing built on `space.xl` (20).
43
- *
44
- * pad = space.xl (20)
45
- * headerGap = space.md (12)
46
- * footerGap = space.lg (16)
47
- * contentGap = space.md (12)
48
- */
49
- export const COZY_SPACING = {
50
- pad: space.xl,
51
- headerGap: space.md,
52
- footerGap: space.lg,
53
- contentGap: space.md
54
- };
55
- export function resolveSpacing(compact) {
56
- return compact ? COMPACT_SPACING : COZY_SPACING;
57
- }
58
- //# sourceMappingURL=centered-dialog-tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["borderRadius","space","DEFAULT_MAX_WIDTH","MAX_HEIGHT_FRACTION","CARD_RADIUS","lg","VIEWPORT_GUTTER","COMPACT_SPACING","pad","md","headerGap","sm","footerGap","contentGap","COZY_SPACING","xl","resolveSpacing","compact"],"sourceRoot":"../../../src","sources":["dialog/centered-dialog-tokens.ts"],"mappings":";;AAAA,SAASA,YAAY,EAAEC,KAAK,QAAQ,qBAAkB;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMC,iBAAiB,GAAG,GAAG;;AAEpC;AACA,OAAO,MAAMC,mBAAmB,GAAG,GAAG;;AAEtC;AACA,OAAO,MAAMC,WAAW,GAAGJ,YAAY,CAACK,EAAE;;AAE1C;AACA,OAAO,MAAMC,eAAe,GAAGL,KAAK,CAACI,EAAE;AAavC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,eAA8B,GAAG;EAC5CC,GAAG,EAAEP,KAAK,CAACQ,EAAE;EACbC,SAAS,EAAET,KAAK,CAACU,EAAE;EACnBC,SAAS,EAAEX,KAAK,CAACQ,EAAE;EACnBI,UAAU,EAAEZ,KAAK,CAACU;AACpB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,YAA2B,GAAG;EACzCN,GAAG,EAAEP,KAAK,CAACc,EAAE;EACbL,SAAS,EAAET,KAAK,CAACQ,EAAE;EACnBG,SAAS,EAAEX,KAAK,CAACI,EAAE;EACnBQ,UAAU,EAAEZ,KAAK,CAACQ;AACpB,CAAC;AAED,OAAO,SAASO,cAAcA,CAACC,OAAgB,EAAiB;EAC9D,OAAOA,OAAO,GAAGV,eAAe,GAAGO,YAAY;AACjD","ignoreList":[]}
@@ -1,4 +0,0 @@
1
- "use strict";
2
-
3
- export {};
4
- //# sourceMappingURL=centered-dialog-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sourceRoot":"../../../src","sources":["dialog/centered-dialog-types.ts"],"mappings":"","ignoreList":[]}
@@ -1,293 +0,0 @@
1
- "use strict";
2
-
3
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
- import { Pressable, StyleSheet, useWindowDimensions, View } from 'react-native';
5
- import { Z_INDEX } from "../styles/z-index.js";
6
- import { useTheme } from "../theme/use-theme.js";
7
- import { ANIMATION_DURATION, BACKDROP_OPACITY, DEFAULT_BREAKPOINT, DEFAULT_LABEL, DEFAULT_MAX_HEIGHT_RATIO, DEFAULT_SIDE, DEFAULT_WIDTH, EASE_OUT, HANDLE_HEIGHT, HANDLE_RADIUS, HANDLE_WIDTH, PANEL_RADIUS, SIDE_SHEET_MIN_GUTTER } from "./const.js";
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
- /** Stable testID for the dimmed backdrop dismiss button. */
10
- export const RESPONSIVE_SHEET_BACKDROP_TESTID = 'bloom-responsive-sheet-backdrop';
11
-
12
- /**
13
- * Default / web variant of `<ResponsiveSheet>`.
14
- *
15
- * This file is BOTH the package's default entry (`react-native` export
16
- * condition resolves it for downstream `tsc`, and non-Metro web bundlers pick
17
- * it via the `browser` condition through `index.web`) AND the canonical web
18
- * implementation. It MUST NOT import `react-native-reanimated` — reanimated has
19
- * no web build and its worklets Babel plugin is native-only, so a static import
20
- * here would break every web bundler and downstream type-check. The native
21
- * fork (`ResponsiveSheet.native.tsx`, selected only by Metro) drives the same
22
- * motion with reanimated.
23
- *
24
- * Motion is pure CSS transitions: react-native-web emits `transition-*` style
25
- * props to the DOM, and the panel/backdrop toggle their transform/opacity by a
26
- * `shown` flag. Presence is handled with a `mounted` + `shown` pair so both the
27
- * open AND close directions animate while the node stays mounted through the
28
- * exit. We deliberately do NOT use reanimated `exiting` on web — concurrent
29
- * React unmounts there throw `Failed to execute 'removeChild' on 'Node'`, the
30
- * exact bug this component exists to avoid.
31
- */
32
- export function ResponsiveSheet({
33
- open,
34
- onClose,
35
- side = DEFAULT_SIDE,
36
- breakpoint = DEFAULT_BREAKPOINT,
37
- width = DEFAULT_WIDTH,
38
- maxHeightRatio = DEFAULT_MAX_HEIGHT_RATIO,
39
- inset,
40
- showHandle = true,
41
- dismissOnBackdrop = true,
42
- panelStyle,
43
- panelClassName,
44
- containerStyle,
45
- containerClassName,
46
- label = DEFAULT_LABEL,
47
- children
48
- }) {
49
- const theme = useTheme();
50
- const {
51
- width: viewportWidth,
52
- height: viewportHeight
53
- } = useWindowDimensions();
54
-
55
- // Presence: `mounted` keeps the node in the tree through the exit transition;
56
- // `shown` drives the enter/exit transform & opacity. On open we mount first,
57
- // then flip `shown` on the next frame so the browser registers the start
58
- // state and animates to the end. On close we flip `shown` off, then unmount
59
- // after the transition duration.
60
- const [mounted, setMounted] = useState(open);
61
- const [shown, setShown] = useState(false);
62
- const closeTimerRef = useRef(null);
63
- const frameRef = useRef(null);
64
- useEffect(() => {
65
- if (open) {
66
- if (closeTimerRef.current) {
67
- clearTimeout(closeTimerRef.current);
68
- closeTimerRef.current = null;
69
- }
70
- setMounted(true);
71
- // Defer to the next frame so the entry start state paints before we
72
- // transition to the shown state. Two frames guarantees the start
73
- // transform has committed before the toggle (a single frame can be
74
- // coalesced with the mount paint in some browsers).
75
- frameRef.current = scheduleFrame(() => {
76
- frameRef.current = scheduleFrame(() => setShown(true));
77
- });
78
- return () => {
79
- if (frameRef.current !== null) {
80
- cancelFrame(frameRef.current);
81
- frameRef.current = null;
82
- }
83
- };
84
- }
85
-
86
- // Closing: only run the exit if something is currently mounted.
87
- setShown(false);
88
- if (!mounted) return;
89
- closeTimerRef.current = setTimeout(() => {
90
- setMounted(false);
91
- closeTimerRef.current = null;
92
- }, ANIMATION_DURATION);
93
- return () => {
94
- if (closeTimerRef.current) {
95
- clearTimeout(closeTimerRef.current);
96
- closeTimerRef.current = null;
97
- }
98
- };
99
- }, [open, mounted]);
100
-
101
- // Escape-to-close while open (web only; document is undefined elsewhere).
102
- useEffect(() => {
103
- if (!open || typeof document === 'undefined') return;
104
- const handler = e => {
105
- if (e.key === 'Escape') {
106
- e.stopPropagation();
107
- onClose();
108
- }
109
- };
110
- document.addEventListener('keydown', handler);
111
- return () => document.removeEventListener('keydown', handler);
112
- }, [open, onClose]);
113
- const handleBackdropPress = useCallback(() => {
114
- if (dismissOnBackdrop) onClose();
115
- }, [dismissOnBackdrop, onClose]);
116
- const isBottom = viewportWidth < breakpoint;
117
- const panelBackground = theme.colors.background;
118
- const panelTransition = useMemo(() => ({
119
- transitionProperty: 'transform, opacity',
120
- transitionDuration: `${ANIMATION_DURATION}ms`,
121
- transitionTimingFunction: EASE_OUT
122
- }), []);
123
- const backdropTransition = useMemo(() => ({
124
- transitionProperty: 'opacity',
125
- transitionDuration: `${ANIMATION_DURATION}ms`,
126
- transitionTimingFunction: EASE_OUT
127
- }), []);
128
- const panelGeometry = useMemo(() => {
129
- if (isBottom) {
130
- return {
131
- left: 0,
132
- right: 0,
133
- bottom: 0,
134
- maxHeight: Math.round(viewportHeight * maxHeightRatio),
135
- borderTopLeftRadius: PANEL_RADIUS,
136
- borderTopRightRadius: PANEL_RADIUS,
137
- transform: [{
138
- translateY: shown ? 0 : '100%'
139
- }],
140
- opacity: shown ? 1 : 0
141
- };
142
- }
143
-
144
- // Side-sheet: full height minus top/bottom inset, anchored to `side`,
145
- // offset by the matching horizontal inset. Width is capped so the panel
146
- // always leaves a gutter on the opposite edge.
147
- const insetTop = inset?.top ?? 0;
148
- const insetBottom = inset?.bottom ?? 0;
149
- const insetLeft = inset?.left ?? 0;
150
- const insetRight = inset?.right ?? 0;
151
- const anchorInset = side === 'left' ? insetLeft : insetRight;
152
- const oppositeInset = side === 'left' ? insetRight : insetLeft;
153
- const available = viewportWidth - anchorInset - oppositeInset - SIDE_SHEET_MIN_GUTTER;
154
- const cappedWidth = Math.max(0, Math.min(width, available));
155
- const hiddenSign = side === 'left' ? '-100%' : '100%';
156
- return {
157
- top: insetTop,
158
- bottom: insetBottom,
159
- [side]: anchorInset,
160
- width: cappedWidth,
161
- borderRadius: PANEL_RADIUS,
162
- transform: [{
163
- translateX: shown ? 0 : hiddenSign
164
- }],
165
- opacity: shown ? 1 : 0
166
- };
167
- }, [isBottom, shown, side, width, inset, viewportWidth, viewportHeight, maxHeightRatio]);
168
- if (!mounted) return null;
169
- return /*#__PURE__*/_jsxs(View, {
170
- style: [styles.root, containerStyle]
171
- // NativeWind reads `className` at runtime; RN core does not type it on
172
- // View, so spread it conditionally (matching the Button/Fab pattern).
173
- ,
174
- ...(containerClassName ? {
175
- className: containerClassName
176
- } : {}),
177
- pointerEvents: "box-none",
178
- children: [/*#__PURE__*/_jsx(Pressable, {
179
- testID: RESPONSIVE_SHEET_BACKDROP_TESTID,
180
- accessibilityRole: "button",
181
- accessibilityLabel: `Dismiss ${label}`,
182
- onPress: handleBackdropPress,
183
- disabled: !dismissOnBackdrop,
184
- style: [styles.backdrop, backdropTransition, {
185
- opacity: shown ? BACKDROP_OPACITY : 0
186
- }, isWeb ? webBackdropBlur : null]
187
- }), /*#__PURE__*/_jsxs(View, {
188
- accessibilityViewIsModal: true,
189
- "aria-label": label,
190
- ...(panelClassName ? {
191
- className: panelClassName
192
- } : {}),
193
- style: [styles.panel, {
194
- backgroundColor: panelBackground,
195
- shadowColor: theme.colors.shadow
196
- }, panelGeometry, panelTransition, panelStyle],
197
- pointerEvents: "auto",
198
- children: [isBottom && showHandle ? /*#__PURE__*/_jsx(View, {
199
- style: styles.handleRow,
200
- pointerEvents: "none",
201
- children: /*#__PURE__*/_jsx(View, {
202
- style: [styles.handle, {
203
- backgroundColor: theme.colors.border
204
- }]
205
- })
206
- }) : null, children]
207
- })]
208
- });
209
- }
210
-
211
- // This module is the web/default impl, but it is also the fallback resolved by
212
- // a downstream consumer's `tsc` for the native target, so guard the web-only
213
- // `backdrop-blur` style behind a runtime check rather than assuming web.
214
- const isWeb = typeof document !== 'undefined';
215
-
216
- /**
217
- * Opaque token returned by `scheduleFrame`. `requestAnimationFrame` returns a
218
- * number; the `setTimeout` fallback returns a timer handle — both are kept so
219
- * `cancelFrame` can route to the matching canceller.
220
- */
221
-
222
- /**
223
- * Schedule a callback for the next paint. Uses `requestAnimationFrame` in the
224
- * browser; degrades to a 0ms timeout when rAF is unavailable (SSR/hydration,
225
- * non-DOM test envs) so the enter transition's `shown` flip still fires.
226
- */
227
- function scheduleFrame(cb) {
228
- if (typeof requestAnimationFrame === 'function') {
229
- return {
230
- raf: requestAnimationFrame(cb)
231
- };
232
- }
233
- return {
234
- timer: setTimeout(cb, 0)
235
- };
236
- }
237
- function cancelFrame(token) {
238
- if ('raf' in token) {
239
- if (typeof cancelAnimationFrame === 'function') cancelAnimationFrame(token.raf);
240
- return;
241
- }
242
- clearTimeout(token.timer);
243
- }
244
-
245
- // `backdrop-filter` is web-only; react-native-web passes it through to the DOM.
246
- const webBackdropBlur = {
247
- backdropFilter: 'blur(2px)'
248
- };
249
- const styles = StyleSheet.create({
250
- root: {
251
- // `position: fixed` pins the overlay to the viewport on web; react-native
252
- // does not type `'fixed'`, so cast to the RN-accepted `'absolute'`. On
253
- // native the `.native` fork uses `StyleSheet.absoluteFill` instead.
254
- position: 'fixed',
255
- top: 0,
256
- left: 0,
257
- right: 0,
258
- bottom: 0,
259
- zIndex: Z_INDEX.fullscreen
260
- },
261
- backdrop: {
262
- position: 'absolute',
263
- top: 0,
264
- left: 0,
265
- right: 0,
266
- bottom: 0,
267
- backgroundColor: '#000'
268
- },
269
- panel: {
270
- position: 'absolute',
271
- overflow: 'hidden',
272
- shadowOpacity: 0.18,
273
- shadowRadius: 24,
274
- shadowOffset: {
275
- width: 0,
276
- height: 8
277
- }
278
- },
279
- handleRow: {
280
- width: '100%',
281
- alignItems: 'center',
282
- paddingTop: 8,
283
- paddingBottom: 4
284
- },
285
- handle: {
286
- width: HANDLE_WIDTH,
287
- height: HANDLE_HEIGHT,
288
- borderRadius: HANDLE_RADIUS,
289
- opacity: 0.5
290
- }
291
- });
292
- export default ResponsiveSheet;
293
- //# sourceMappingURL=ResponsiveSheet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Pressable","StyleSheet","useWindowDimensions","View","Z_INDEX","useTheme","ANIMATION_DURATION","BACKDROP_OPACITY","DEFAULT_BREAKPOINT","DEFAULT_LABEL","DEFAULT_MAX_HEIGHT_RATIO","DEFAULT_SIDE","DEFAULT_WIDTH","EASE_OUT","HANDLE_HEIGHT","HANDLE_RADIUS","HANDLE_WIDTH","PANEL_RADIUS","SIDE_SHEET_MIN_GUTTER","jsx","_jsx","jsxs","_jsxs","RESPONSIVE_SHEET_BACKDROP_TESTID","ResponsiveSheet","open","onClose","side","breakpoint","width","maxHeightRatio","inset","showHandle","dismissOnBackdrop","panelStyle","panelClassName","containerStyle","containerClassName","label","children","theme","viewportWidth","height","viewportHeight","mounted","setMounted","shown","setShown","closeTimerRef","frameRef","current","clearTimeout","scheduleFrame","cancelFrame","setTimeout","document","handler","e","key","stopPropagation","addEventListener","removeEventListener","handleBackdropPress","isBottom","panelBackground","colors","background","panelTransition","transitionProperty","transitionDuration","transitionTimingFunction","backdropTransition","panelGeometry","left","right","bottom","maxHeight","Math","round","borderTopLeftRadius","borderTopRightRadius","transform","translateY","opacity","insetTop","top","insetBottom","insetLeft","insetRight","anchorInset","oppositeInset","available","cappedWidth","max","min","hiddenSign","borderRadius","translateX","style","styles","root","className","pointerEvents","testID","accessibilityRole","accessibilityLabel","onPress","disabled","backdrop","isWeb","webBackdropBlur","accessibilityViewIsModal","panel","backgroundColor","shadowColor","shadow","handleRow","handle","border","cb","requestAnimationFrame","raf","timer","token","cancelAnimationFrame","backdropFilter","create","position","zIndex","fullscreen","overflow","shadowOpacity","shadowRadius","shadowOffset","alignItems","paddingTop","paddingBottom"],"sourceRoot":"../../../src","sources":["responsive-sheet/ResponsiveSheet.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IACVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,SAAS,EACTC,UAAU,EACVC,mBAAmB,EACnBC,IAAI,QAEC,cAAc;AAErB,SAASC,OAAO,QAAQ,sBAAmB;AAC3C,SAASC,QAAQ,QAAQ,uBAAoB;AAC7C,SACEC,kBAAkB,EAClBC,gBAAgB,EAChBC,kBAAkB,EAClBC,aAAa,EACbC,wBAAwB,EACxBC,YAAY,EACZC,aAAa,EACbC,QAAQ,EACRC,aAAa,EACbC,aAAa,EACbC,YAAY,EACZC,YAAY,EACZC,qBAAqB,QAChB,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGjB;AACA,OAAO,MAAMC,gCAAgC,GAAG,iCAAiC;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAC;EAC9BC,IAAI;EACJC,OAAO;EACPC,IAAI,GAAGhB,YAAY;EACnBiB,UAAU,GAAGpB,kBAAkB;EAC/BqB,KAAK,GAAGjB,aAAa;EACrBkB,cAAc,GAAGpB,wBAAwB;EACzCqB,KAAK;EACLC,UAAU,GAAG,IAAI;EACjBC,iBAAiB,GAAG,IAAI;EACxBC,UAAU;EACVC,cAAc;EACdC,cAAc;EACdC,kBAAkB;EAClBC,KAAK,GAAG7B,aAAa;EACrB8B;AACoB,CAAC,EAAE;EACvB,MAAMC,KAAK,GAAGnC,QAAQ,CAAC,CAAC;EACxB,MAAM;IAAEwB,KAAK,EAAEY,aAAa;IAAEC,MAAM,EAAEC;EAAe,CAAC,GAAGzC,mBAAmB,CAAC,CAAC;;EAE9E;EACA;EACA;EACA;EACA;EACA,MAAM,CAAC0C,OAAO,EAAEC,UAAU,CAAC,GAAG9C,QAAQ,CAAC0B,IAAI,CAAC;EAC5C,MAAM,CAACqB,KAAK,EAAEC,QAAQ,CAAC,GAAGhD,QAAQ,CAAC,KAAK,CAAC;EACzC,MAAMiD,aAAa,GAAGlD,MAAM,CAAuC,IAAI,CAAC;EACxE,MAAMmD,QAAQ,GAAGnD,MAAM,CAAoB,IAAI,CAAC;EAEhDF,SAAS,CAAC,MAAM;IACd,IAAI6B,IAAI,EAAE;MACR,IAAIuB,aAAa,CAACE,OAAO,EAAE;QACzBC,YAAY,CAACH,aAAa,CAACE,OAAO,CAAC;QACnCF,aAAa,CAACE,OAAO,GAAG,IAAI;MAC9B;MACAL,UAAU,CAAC,IAAI,CAAC;MAChB;MACA;MACA;MACA;MACAI,QAAQ,CAACC,OAAO,GAAGE,aAAa,CAAC,MAAM;QACrCH,QAAQ,CAACC,OAAO,GAAGE,aAAa,CAAC,MAAML,QAAQ,CAAC,IAAI,CAAC,CAAC;MACxD,CAAC,CAAC;MACF,OAAO,MAAM;QACX,IAAIE,QAAQ,CAACC,OAAO,KAAK,IAAI,EAAE;UAC7BG,WAAW,CAACJ,QAAQ,CAACC,OAAO,CAAC;UAC7BD,QAAQ,CAACC,OAAO,GAAG,IAAI;QACzB;MACF,CAAC;IACH;;IAEA;IACAH,QAAQ,CAAC,KAAK,CAAC;IACf,IAAI,CAACH,OAAO,EAAE;IACdI,aAAa,CAACE,OAAO,GAAGI,UAAU,CAAC,MAAM;MACvCT,UAAU,CAAC,KAAK,CAAC;MACjBG,aAAa,CAACE,OAAO,GAAG,IAAI;IAC9B,CAAC,EAAE5C,kBAAkB,CAAC;IACtB,OAAO,MAAM;MACX,IAAI0C,aAAa,CAACE,OAAO,EAAE;QACzBC,YAAY,CAACH,aAAa,CAACE,OAAO,CAAC;QACnCF,aAAa,CAACE,OAAO,GAAG,IAAI;MAC9B;IACF,CAAC;EACH,CAAC,EAAE,CAACzB,IAAI,EAAEmB,OAAO,CAAC,CAAC;;EAEnB;EACAhD,SAAS,CAAC,MAAM;IACd,IAAI,CAAC6B,IAAI,IAAI,OAAO8B,QAAQ,KAAK,WAAW,EAAE;IAC9C,MAAMC,OAAO,GAAIC,CAAgB,IAAK;MACpC,IAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,EAAE;QACtBD,CAAC,CAACE,eAAe,CAAC,CAAC;QACnBjC,OAAO,CAAC,CAAC;MACX;IACF,CAAC;IACD6B,QAAQ,CAACK,gBAAgB,CAAC,SAAS,EAAEJ,OAAO,CAAC;IAC7C,OAAO,MAAMD,QAAQ,CAACM,mBAAmB,CAAC,SAAS,EAAEL,OAAO,CAAC;EAC/D,CAAC,EAAE,CAAC/B,IAAI,EAAEC,OAAO,CAAC,CAAC;EAEnB,MAAMoC,mBAAmB,GAAGnE,WAAW,CAAC,MAAM;IAC5C,IAAIsC,iBAAiB,EAAEP,OAAO,CAAC,CAAC;EAClC,CAAC,EAAE,CAACO,iBAAiB,EAAEP,OAAO,CAAC,CAAC;EAEhC,MAAMqC,QAAQ,GAAGtB,aAAa,GAAGb,UAAU;EAC3C,MAAMoC,eAAe,GAAGxB,KAAK,CAACyB,MAAM,CAACC,UAAU;EAE/C,MAAMC,eAAe,GAAGtE,OAAO,CAC7B,OACG;IACCuE,kBAAkB,EAAE,oBAAoB;IACxCC,kBAAkB,EAAE,GAAG/D,kBAAkB,IAAI;IAC7CgE,wBAAwB,EAAEzD;EAC5B,CAAC,CAAc,EACjB,EACF,CAAC;EAED,MAAM0D,kBAAkB,GAAG1E,OAAO,CAChC,OACG;IACCuE,kBAAkB,EAAE,SAAS;IAC7BC,kBAAkB,EAAE,GAAG/D,kBAAkB,IAAI;IAC7CgE,wBAAwB,EAAEzD;EAC5B,CAAC,CAAc,EACjB,EACF,CAAC;EAED,MAAM2D,aAAa,GAAG3E,OAAO,CAAY,MAAM;IAC7C,IAAIkE,QAAQ,EAAE;MACZ,OAAO;QACLU,IAAI,EAAE,CAAC;QACPC,KAAK,EAAE,CAAC;QACRC,MAAM,EAAE,CAAC;QACTC,SAAS,EAAEC,IAAI,CAACC,KAAK,CAACnC,cAAc,GAAGb,cAAc,CAAC;QACtDiD,mBAAmB,EAAE9D,YAAY;QACjC+D,oBAAoB,EAAE/D,YAAY;QAClCgE,SAAS,EAAE,CAAC;UAAEC,UAAU,EAAEpC,KAAK,GAAG,CAAC,GAAG;QAAO,CAAC,CAAC;QAC/CqC,OAAO,EAAErC,KAAK,GAAG,CAAC,GAAG;MACvB,CAAC;IACH;;IAEA;IACA;IACA;IACA,MAAMsC,QAAQ,GAAGrD,KAAK,EAAEsD,GAAG,IAAI,CAAC;IAChC,MAAMC,WAAW,GAAGvD,KAAK,EAAE4C,MAAM,IAAI,CAAC;IACtC,MAAMY,SAAS,GAAGxD,KAAK,EAAE0C,IAAI,IAAI,CAAC;IAClC,MAAMe,UAAU,GAAGzD,KAAK,EAAE2C,KAAK,IAAI,CAAC;IACpC,MAAMe,WAAW,GAAG9D,IAAI,KAAK,MAAM,GAAG4D,SAAS,GAAGC,UAAU;IAC5D,MAAME,aAAa,GAAG/D,IAAI,KAAK,MAAM,GAAG6D,UAAU,GAAGD,SAAS;IAC9D,MAAMI,SAAS,GAAGlD,aAAa,GAAGgD,WAAW,GAAGC,aAAa,GAAGxE,qBAAqB;IACrF,MAAM0E,WAAW,GAAGf,IAAI,CAACgB,GAAG,CAAC,CAAC,EAAEhB,IAAI,CAACiB,GAAG,CAACjE,KAAK,EAAE8D,SAAS,CAAC,CAAC;IAC3D,MAAMI,UAAU,GAAGpE,IAAI,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM;IAErD,OAAO;MACL0D,GAAG,EAAED,QAAQ;MACbT,MAAM,EAAEW,WAAW;MACnB,CAAC3D,IAAI,GAAG8D,WAAW;MACnB5D,KAAK,EAAE+D,WAAW;MAClBI,YAAY,EAAE/E,YAAY;MAC1BgE,SAAS,EAAE,CAAC;QAAEgB,UAAU,EAAEnD,KAAK,GAAG,CAAC,GAAGiD;MAAW,CAAC,CAAC;MACnDZ,OAAO,EAAErC,KAAK,GAAG,CAAC,GAAG;IACvB,CAAC;EACH,CAAC,EAAE,CAACiB,QAAQ,EAAEjB,KAAK,EAAEnB,IAAI,EAAEE,KAAK,EAAEE,KAAK,EAAEU,aAAa,EAAEE,cAAc,EAAEb,cAAc,CAAC,CAAC;EAExF,IAAI,CAACc,OAAO,EAAE,OAAO,IAAI;EAEzB,oBACEtB,KAAA,CAACnB,IAAI;IACH+F,KAAK,EAAE,CAACC,MAAM,CAACC,IAAI,EAAEhE,cAAc;IACnC;IACA;IAAA;IAAA,IACKC,kBAAkB,GAAI;MAAEgE,SAAS,EAAEhE;IAAmB,CAAC,GAA8B,CAAC,CAAC;IAC5FiE,aAAa,EAAC,UAAU;IAAA/D,QAAA,gBAExBnB,IAAA,CAACpB,SAAS;MACRuG,MAAM,EAAEhF,gCAAiC;MACzCiF,iBAAiB,EAAC,QAAQ;MAC1BC,kBAAkB,EAAE,WAAWnE,KAAK,EAAG;MACvCoE,OAAO,EAAE5C,mBAAoB;MAC7B6C,QAAQ,EAAE,CAAC1E,iBAAkB;MAC7BiE,KAAK,EAAE,CACLC,MAAM,CAACS,QAAQ,EACfrC,kBAAkB,EAClB;QAAEY,OAAO,EAAErC,KAAK,GAAGvC,gBAAgB,GAAG;MAAE,CAAC,EACzCsG,KAAK,GAAGC,eAAe,GAAG,IAAI;IAC9B,CACH,CAAC,eAEFxF,KAAA,CAACnB,IAAI;MACH4G,wBAAwB;MACxB,cAAYzE,KAAM;MAAA,IACbH,cAAc,GAAI;QAAEkE,SAAS,EAAElE;MAAe,CAAC,GAA8B,CAAC,CAAC;MACpF+D,KAAK,EAAE,CACLC,MAAM,CAACa,KAAK,EACZ;QAAEC,eAAe,EAAEjD,eAAe;QAAEkD,WAAW,EAAE1E,KAAK,CAACyB,MAAM,CAACkD;MAAO,CAAC,EACtE3C,aAAa,EACbL,eAAe,EACfjC,UAAU,CACV;MACFoE,aAAa,EAAC,MAAM;MAAA/D,QAAA,GAEnBwB,QAAQ,IAAI/B,UAAU,gBACrBZ,IAAA,CAACjB,IAAI;QAAC+F,KAAK,EAAEC,MAAM,CAACiB,SAAU;QAACd,aAAa,EAAC,MAAM;QAAA/D,QAAA,eACjDnB,IAAA,CAACjB,IAAI;UAAC+F,KAAK,EAAE,CAACC,MAAM,CAACkB,MAAM,EAAE;YAAEJ,eAAe,EAAEzE,KAAK,CAACyB,MAAM,CAACqD;UAAO,CAAC;QAAE,CAAE;MAAC,CACtE,CAAC,GACL,IAAI,EACP/E,QAAQ;IAAA,CACL,CAAC;EAAA,CACH,CAAC;AAEX;;AAEA;AACA;AACA;AACA,MAAMsE,KAAK,GAAG,OAAOtD,QAAQ,KAAK,WAAW;;AAE7C;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA,SAASH,aAAaA,CAACmE,EAAc,EAAc;EACjD,IAAI,OAAOC,qBAAqB,KAAK,UAAU,EAAE;IAC/C,OAAO;MAAEC,GAAG,EAAED,qBAAqB,CAACD,EAAE;IAAE,CAAC;EAC3C;EACA,OAAO;IAAEG,KAAK,EAAEpE,UAAU,CAACiE,EAAE,EAAE,CAAC;EAAE,CAAC;AACrC;AAEA,SAASlE,WAAWA,CAACsE,KAAiB,EAAQ;EAC5C,IAAI,KAAK,IAAIA,KAAK,EAAE;IAClB,IAAI,OAAOC,oBAAoB,KAAK,UAAU,EAAEA,oBAAoB,CAACD,KAAK,CAACF,GAAG,CAAC;IAC/E;EACF;EACAtE,YAAY,CAACwE,KAAK,CAACD,KAAK,CAAC;AAC3B;;AAEA;AACA,MAAMZ,eAAe,GAAG;EAAEe,cAAc,EAAE;AAAY,CAAyB;AAE/E,MAAM1B,MAAM,GAAGlG,UAAU,CAAC6H,MAAM,CAAC;EAC/B1B,IAAI,EAAE;IACJ;IACA;IACA;IACA2B,QAAQ,EAAE,OAAqB;IAC/B1C,GAAG,EAAE,CAAC;IACNZ,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACTqD,MAAM,EAAE5H,OAAO,CAAC6H;EAClB,CAAC;EACDrB,QAAQ,EAAE;IACRmB,QAAQ,EAAE,UAAU;IACpB1C,GAAG,EAAE,CAAC;IACNZ,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACTsC,eAAe,EAAE;EACnB,CAAC;EACDD,KAAK,EAAE;IACLe,QAAQ,EAAE,UAAU;IACpBG,QAAQ,EAAE,QAAQ;IAClBC,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE,EAAE;IAChBC,YAAY,EAAE;MAAExG,KAAK,EAAE,CAAC;MAAEa,MAAM,EAAE;IAAE;EACtC,CAAC;EACD0E,SAAS,EAAE;IACTvF,KAAK,EAAE,MAAM;IACbyG,UAAU,EAAE,QAAQ;IACpBC,UAAU,EAAE,CAAC;IACbC,aAAa,EAAE;EACjB,CAAC;EACDnB,MAAM,EAAE;IACNxF,KAAK,EAAEb,YAAY;IACnB0B,MAAM,EAAE5B,aAAa;IACrBkF,YAAY,EAAEjF,aAAa;IAC3BoE,OAAO,EAAE;EACX;AACF,CAAC,CAAC;AAEF,eAAe3D,eAAe","ignoreList":[]}
@@ -1,219 +0,0 @@
1
- "use strict";
2
-
3
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
4
- import { Pressable, StyleSheet, useWindowDimensions, View } from 'react-native';
5
- import Animated, { cancelAnimation, Easing, runOnJS, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
6
- import { Z_INDEX } from "../styles/z-index.js";
7
- import { useTheme } from "../theme/use-theme.js";
8
- import { ANIMATION_DURATION, BACKDROP_OPACITY, DEFAULT_BREAKPOINT, DEFAULT_LABEL, DEFAULT_MAX_HEIGHT_RATIO, DEFAULT_SIDE, DEFAULT_WIDTH, HANDLE_HEIGHT, HANDLE_RADIUS, HANDLE_WIDTH, PANEL_RADIUS, SIDE_SHEET_MIN_GUTTER } from "./const.js";
9
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
- /** Stable testID for the dimmed backdrop dismiss button. */
11
- export const RESPONSIVE_SHEET_BACKDROP_TESTID = 'bloom-responsive-sheet-backdrop';
12
-
13
- /**
14
- * Native variant of `<ResponsiveSheet>` (selected only by Metro).
15
- *
16
- * Uses `react-native-reanimated` to drive the same motion as the web/CSS
17
- * default fork: a shared `progress` value times 0 -> 1 on open and 1 -> 0 on
18
- * close, mapped to the panel translate/opacity and the backdrop opacity.
19
- * Native exit animations are safe here — the web-only `removeChild` crash does
20
- * not apply — so we keep the node mounted through the close timing and unmount
21
- * from the animation completion callback.
22
- *
23
- * The panel itself is measured (not percentage-translated): we offset by the
24
- * panel's own width/height so the hidden state sits fully off its side, which
25
- * is the reanimated-friendly equivalent of the web `translate(±100%)`.
26
- */
27
- export function ResponsiveSheet({
28
- open,
29
- onClose,
30
- side = DEFAULT_SIDE,
31
- breakpoint = DEFAULT_BREAKPOINT,
32
- width = DEFAULT_WIDTH,
33
- maxHeightRatio = DEFAULT_MAX_HEIGHT_RATIO,
34
- inset,
35
- showHandle = true,
36
- dismissOnBackdrop = true,
37
- panelStyle,
38
- panelClassName,
39
- containerStyle,
40
- containerClassName,
41
- label = DEFAULT_LABEL,
42
- children
43
- }) {
44
- const theme = useTheme();
45
- const {
46
- width: viewportWidth,
47
- height: viewportHeight
48
- } = useWindowDimensions();
49
-
50
- // Keep the tree mounted through the exit timing; unmount once it settles.
51
- const [mounted, setMounted] = useState(open);
52
- // `progress`: 0 = fully hidden, 1 = fully shown. Drives both transform and
53
- // opacity so a single timing controls the whole transition.
54
- const progress = useSharedValue(open ? 1 : 0);
55
- const isBottom = viewportWidth < breakpoint;
56
-
57
- // Measured panel extent along the travel axis. Falls back to the geometry
58
- // target so the very first frame is already off-screen before layout lands.
59
- const insetTop = inset?.top ?? 0;
60
- const insetBottom = inset?.bottom ?? 0;
61
- const insetLeft = inset?.left ?? 0;
62
- const insetRight = inset?.right ?? 0;
63
- const anchorInset = side === 'left' ? insetLeft : insetRight;
64
- const oppositeInset = side === 'left' ? insetRight : insetLeft;
65
- const sideWidth = useMemo(() => {
66
- const available = viewportWidth - anchorInset - oppositeInset - SIDE_SHEET_MIN_GUTTER;
67
- return Math.max(0, Math.min(width, available));
68
- }, [viewportWidth, anchorInset, oppositeInset, width]);
69
- const bottomMaxHeight = useMemo(() => Math.round(viewportHeight * maxHeightRatio), [viewportHeight, maxHeightRatio]);
70
-
71
- // Travel distance for the hidden state: the panel's measured extent (height
72
- // for the bottom-sheet, width for the side-sheet), with the geometry target
73
- // as the pre-measurement fallback.
74
- const travel = useSharedValue(isBottom ? bottomMaxHeight : sideWidth);
75
- useEffect(() => {
76
- travel.value = isBottom ? bottomMaxHeight : sideWidth;
77
- }, [isBottom, bottomMaxHeight, sideWidth, travel]);
78
- const finishClose = useCallback(() => {
79
- setMounted(false);
80
- }, []);
81
- useEffect(() => {
82
- cancelAnimation(progress);
83
- const timing = {
84
- duration: ANIMATION_DURATION,
85
- easing: Easing.out(Easing.cubic)
86
- };
87
- if (open) {
88
- setMounted(true);
89
- progress.value = withTiming(1, timing);
90
- return;
91
- }
92
- if (!mounted) return;
93
- progress.value = withTiming(0, timing, finished => {
94
- if (finished) runOnJS(finishClose)();
95
- });
96
- }, [open, mounted, progress, finishClose]);
97
- const handleBackdropPress = useCallback(() => {
98
- if (dismissOnBackdrop) onClose();
99
- }, [dismissOnBackdrop, onClose]);
100
- const backdropAnimatedStyle = useAnimatedStyle(() => ({
101
- opacity: progress.value * BACKDROP_OPACITY
102
- }));
103
- const hiddenSign = side === 'left' ? -1 : 1;
104
- const panelAnimatedStyle = useAnimatedStyle(() => {
105
- const hidden = 1 - progress.value;
106
- if (isBottom) {
107
- return {
108
- opacity: progress.value,
109
- transform: [{
110
- translateY: hidden * travel.value
111
- }]
112
- };
113
- }
114
- return {
115
- opacity: progress.value,
116
- transform: [{
117
- translateX: hidden * travel.value * hiddenSign
118
- }]
119
- };
120
- }, [isBottom, hiddenSign]);
121
- const measurePanel = useCallback(e => {
122
- const measured = isBottom ? e.nativeEvent.layout.height : e.nativeEvent.layout.width;
123
- if (measured > 0) travel.value = measured;
124
- }, [isBottom, travel]);
125
- const panelGeometry = useMemo(() => {
126
- if (isBottom) {
127
- return {
128
- left: 0,
129
- right: 0,
130
- bottom: 0,
131
- maxHeight: bottomMaxHeight,
132
- borderTopLeftRadius: PANEL_RADIUS,
133
- borderTopRightRadius: PANEL_RADIUS
134
- };
135
- }
136
- return {
137
- top: insetTop,
138
- bottom: insetBottom,
139
- [side]: anchorInset,
140
- width: sideWidth,
141
- borderRadius: PANEL_RADIUS
142
- };
143
- }, [isBottom, bottomMaxHeight, insetTop, insetBottom, side, anchorInset, sideWidth]);
144
- if (!mounted) return null;
145
- return /*#__PURE__*/_jsxs(View, {
146
- style: [styles.root, containerStyle],
147
- ...(containerClassName ? {
148
- className: containerClassName
149
- } : {}),
150
- pointerEvents: "box-none",
151
- children: [/*#__PURE__*/_jsx(Animated.View, {
152
- style: [styles.backdrop, backdropAnimatedStyle],
153
- pointerEvents: "auto",
154
- children: /*#__PURE__*/_jsx(Pressable, {
155
- testID: RESPONSIVE_SHEET_BACKDROP_TESTID,
156
- accessibilityRole: "button",
157
- accessibilityLabel: `Dismiss ${label}`,
158
- onPress: handleBackdropPress,
159
- disabled: !dismissOnBackdrop,
160
- style: StyleSheet.absoluteFill
161
- })
162
- }), /*#__PURE__*/_jsxs(Animated.View, {
163
- accessibilityViewIsModal: true,
164
- ...(panelClassName ? {
165
- className: panelClassName
166
- } : {}),
167
- onLayout: measurePanel,
168
- style: [styles.panel, {
169
- backgroundColor: theme.colors.background,
170
- shadowColor: theme.colors.shadow
171
- }, panelGeometry, panelAnimatedStyle, panelStyle],
172
- pointerEvents: "auto",
173
- children: [isBottom && showHandle ? /*#__PURE__*/_jsx(View, {
174
- style: styles.handleRow,
175
- pointerEvents: "none",
176
- children: /*#__PURE__*/_jsx(View, {
177
- style: [styles.handle, {
178
- backgroundColor: theme.colors.border
179
- }]
180
- })
181
- }) : null, children]
182
- })]
183
- });
184
- }
185
- const styles = StyleSheet.create({
186
- root: {
187
- ...StyleSheet.absoluteFill,
188
- zIndex: Z_INDEX.fullscreen
189
- },
190
- backdrop: {
191
- ...StyleSheet.absoluteFill,
192
- backgroundColor: '#000'
193
- },
194
- panel: {
195
- position: 'absolute',
196
- overflow: 'hidden',
197
- shadowOpacity: 0.18,
198
- shadowRadius: 24,
199
- shadowOffset: {
200
- width: 0,
201
- height: 8
202
- },
203
- elevation: 12
204
- },
205
- handleRow: {
206
- width: '100%',
207
- alignItems: 'center',
208
- paddingTop: 8,
209
- paddingBottom: 4
210
- },
211
- handle: {
212
- width: HANDLE_WIDTH,
213
- height: HANDLE_HEIGHT,
214
- borderRadius: HANDLE_RADIUS,
215
- opacity: 0.5
216
- }
217
- });
218
- export default ResponsiveSheet;
219
- //# sourceMappingURL=ResponsiveSheet.native.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useState","Pressable","StyleSheet","useWindowDimensions","View","Animated","cancelAnimation","Easing","runOnJS","useAnimatedStyle","useSharedValue","withTiming","Z_INDEX","useTheme","ANIMATION_DURATION","BACKDROP_OPACITY","DEFAULT_BREAKPOINT","DEFAULT_LABEL","DEFAULT_MAX_HEIGHT_RATIO","DEFAULT_SIDE","DEFAULT_WIDTH","HANDLE_HEIGHT","HANDLE_RADIUS","HANDLE_WIDTH","PANEL_RADIUS","SIDE_SHEET_MIN_GUTTER","jsx","_jsx","jsxs","_jsxs","RESPONSIVE_SHEET_BACKDROP_TESTID","ResponsiveSheet","open","onClose","side","breakpoint","width","maxHeightRatio","inset","showHandle","dismissOnBackdrop","panelStyle","panelClassName","containerStyle","containerClassName","label","children","theme","viewportWidth","height","viewportHeight","mounted","setMounted","progress","isBottom","insetTop","top","insetBottom","bottom","insetLeft","left","insetRight","right","anchorInset","oppositeInset","sideWidth","available","Math","max","min","bottomMaxHeight","round","travel","value","finishClose","timing","duration","easing","out","cubic","finished","handleBackdropPress","backdropAnimatedStyle","opacity","hiddenSign","panelAnimatedStyle","hidden","transform","translateY","translateX","measurePanel","e","measured","nativeEvent","layout","panelGeometry","maxHeight","borderTopLeftRadius","borderTopRightRadius","borderRadius","style","styles","root","className","pointerEvents","backdrop","testID","accessibilityRole","accessibilityLabel","onPress","disabled","absoluteFill","accessibilityViewIsModal","onLayout","panel","backgroundColor","colors","background","shadowColor","shadow","handleRow","handle","border","create","zIndex","fullscreen","position","overflow","shadowOpacity","shadowRadius","shadowOffset","elevation","alignItems","paddingTop","paddingBottom"],"sourceRoot":"../../../src","sources":["responsive-sheet/ResponsiveSheet.native.tsx"],"mappings":"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","ignoreList":[]}