@oxyhq/bloom 0.12.1 → 0.14.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 (97) hide show
  1. package/lib/commonjs/fab/Fab.js +25 -6
  2. package/lib/commonjs/fab/Fab.js.map +1 -1
  3. package/lib/commonjs/fab/Fab.web.js +26 -7
  4. package/lib/commonjs/fab/Fab.web.js.map +1 -1
  5. package/lib/commonjs/index.js +15 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/index.web.js +21 -6
  8. package/lib/commonjs/index.web.js.map +1 -1
  9. package/lib/commonjs/responsive-sheet/ResponsiveSheet.js +300 -0
  10. package/lib/commonjs/responsive-sheet/ResponsiveSheet.js.map +1 -0
  11. package/lib/commonjs/responsive-sheet/ResponsiveSheet.native.js +226 -0
  12. package/lib/commonjs/responsive-sheet/ResponsiveSheet.native.js.map +1 -0
  13. package/lib/commonjs/responsive-sheet/const.js +60 -0
  14. package/lib/commonjs/responsive-sheet/const.js.map +1 -0
  15. package/lib/commonjs/responsive-sheet/index.js +19 -0
  16. package/lib/commonjs/responsive-sheet/index.js.map +1 -0
  17. package/lib/commonjs/responsive-sheet/index.web.js +19 -0
  18. package/lib/commonjs/responsive-sheet/index.web.js.map +1 -0
  19. package/lib/commonjs/responsive-sheet/types.js +6 -0
  20. package/lib/commonjs/responsive-sheet/types.js.map +1 -0
  21. package/lib/module/fab/Fab.js +25 -6
  22. package/lib/module/fab/Fab.js.map +1 -1
  23. package/lib/module/fab/Fab.web.js +26 -7
  24. package/lib/module/fab/Fab.web.js.map +1 -1
  25. package/lib/module/index.js +2 -0
  26. package/lib/module/index.js.map +1 -1
  27. package/lib/module/index.web.js +2 -0
  28. package/lib/module/index.web.js.map +1 -1
  29. package/lib/module/responsive-sheet/ResponsiveSheet.js +293 -0
  30. package/lib/module/responsive-sheet/ResponsiveSheet.js.map +1 -0
  31. package/lib/module/responsive-sheet/ResponsiveSheet.native.js +219 -0
  32. package/lib/module/responsive-sheet/ResponsiveSheet.native.js.map +1 -0
  33. package/lib/module/responsive-sheet/const.js +56 -0
  34. package/lib/module/responsive-sheet/const.js.map +1 -0
  35. package/lib/module/responsive-sheet/index.js +4 -0
  36. package/lib/module/responsive-sheet/index.js.map +1 -0
  37. package/lib/module/responsive-sheet/index.web.js +14 -0
  38. package/lib/module/responsive-sheet/index.web.js.map +1 -0
  39. package/lib/module/responsive-sheet/types.js +4 -0
  40. package/lib/module/responsive-sheet/types.js.map +1 -0
  41. package/lib/typescript/commonjs/fab/Fab.d.ts.map +1 -1
  42. package/lib/typescript/commonjs/fab/Fab.web.d.ts.map +1 -1
  43. package/lib/typescript/commonjs/fab/types.d.ts +12 -2
  44. package/lib/typescript/commonjs/fab/types.d.ts.map +1 -1
  45. package/lib/typescript/commonjs/index.d.ts +2 -0
  46. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/index.web.d.ts +2 -0
  48. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  49. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.d.ts +26 -0
  50. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.d.ts.map +1 -0
  51. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.native.d.ts +20 -0
  52. package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.native.d.ts.map +1 -0
  53. package/lib/typescript/commonjs/responsive-sheet/const.d.ts +43 -0
  54. package/lib/typescript/commonjs/responsive-sheet/const.d.ts.map +1 -0
  55. package/lib/typescript/commonjs/responsive-sheet/index.d.ts +3 -0
  56. package/lib/typescript/commonjs/responsive-sheet/index.d.ts.map +1 -0
  57. package/lib/typescript/commonjs/responsive-sheet/index.web.d.ts +3 -0
  58. package/lib/typescript/commonjs/responsive-sheet/index.web.d.ts.map +1 -0
  59. package/lib/typescript/commonjs/responsive-sheet/types.d.ts +55 -0
  60. package/lib/typescript/commonjs/responsive-sheet/types.d.ts.map +1 -0
  61. package/lib/typescript/module/fab/Fab.d.ts.map +1 -1
  62. package/lib/typescript/module/fab/Fab.web.d.ts.map +1 -1
  63. package/lib/typescript/module/fab/types.d.ts +12 -2
  64. package/lib/typescript/module/fab/types.d.ts.map +1 -1
  65. package/lib/typescript/module/index.d.ts +2 -0
  66. package/lib/typescript/module/index.d.ts.map +1 -1
  67. package/lib/typescript/module/index.web.d.ts +2 -0
  68. package/lib/typescript/module/index.web.d.ts.map +1 -1
  69. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.d.ts +26 -0
  70. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.d.ts.map +1 -0
  71. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.native.d.ts +20 -0
  72. package/lib/typescript/module/responsive-sheet/ResponsiveSheet.native.d.ts.map +1 -0
  73. package/lib/typescript/module/responsive-sheet/const.d.ts +43 -0
  74. package/lib/typescript/module/responsive-sheet/const.d.ts.map +1 -0
  75. package/lib/typescript/module/responsive-sheet/index.d.ts +3 -0
  76. package/lib/typescript/module/responsive-sheet/index.d.ts.map +1 -0
  77. package/lib/typescript/module/responsive-sheet/index.web.d.ts +3 -0
  78. package/lib/typescript/module/responsive-sheet/index.web.d.ts.map +1 -0
  79. package/lib/typescript/module/responsive-sheet/types.d.ts +55 -0
  80. package/lib/typescript/module/responsive-sheet/types.d.ts.map +1 -0
  81. package/package.json +18 -1
  82. package/src/__tests__/Fab.test.tsx +17 -0
  83. package/src/__tests__/Fab.web.test.tsx +14 -0
  84. package/src/__tests__/ResponsiveSheet.test.tsx +104 -0
  85. package/src/fab/Fab.stories.tsx +9 -0
  86. package/src/fab/Fab.tsx +33 -7
  87. package/src/fab/Fab.web.tsx +33 -8
  88. package/src/fab/types.ts +12 -2
  89. package/src/index.ts +8 -0
  90. package/src/index.web.ts +8 -0
  91. package/src/responsive-sheet/ResponsiveSheet.native.tsx +257 -0
  92. package/src/responsive-sheet/ResponsiveSheet.stories.tsx +54 -0
  93. package/src/responsive-sheet/ResponsiveSheet.tsx +327 -0
  94. package/src/responsive-sheet/const.ts +53 -0
  95. package/src/responsive-sheet/index.ts +6 -0
  96. package/src/responsive-sheet/index.web.ts +16 -0
  97. package/src/responsive-sheet/types.ts +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/responsive-sheet/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,gDAAgD;AAChD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,4EAA4E;IAC5E,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yDAAyD;IACzD,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,8FAA8F;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Fab.d.ts","sourceRoot":"","sources":["../../../../src/fab/Fab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAa7C,OAAO,KAAK,EAAgB,QAAQ,EAAuB,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA+K3E,eAAO,MAAM,GAAG,sCAAqB,CAAC"}
1
+ {"version":3,"file":"Fab.d.ts","sourceRoot":"","sources":["../../../../src/fab/Fab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAa7C,OAAO,KAAK,EAAgB,QAAQ,EAAuB,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAyM3E,eAAO,MAAM,GAAG,sCAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Fab.web.d.ts","sourceRoot":"","sources":["../../../../src/fab/Fab.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAgB,QAAQ,EAAuB,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgQ3E,eAAO,MAAM,GAAG,sCAAwB,CAAC"}
1
+ {"version":3,"file":"Fab.web.d.ts","sourceRoot":"","sources":["../../../../src/fab/Fab.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAgB,QAAQ,EAAuB,MAAM,SAAS,CAAC;AAE3E,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAyR3E,eAAO,MAAM,GAAG,sCAAwB,CAAC"}
@@ -10,13 +10,19 @@ import type { StyleProp, ViewStyle, TextStyle } from 'react-native';
10
10
  */
11
11
  export type FabVariant = 'primary' | 'secondary' | 'surface';
12
12
  /**
13
- * FAB sizes, matching Material-ish conventions but in Bloom's scale:
13
+ * FAB size presets, matching Material-ish conventions but in Bloom's scale:
14
14
  * - `small` — 40px (compact / dense layouts)
15
15
  * - `medium` — 56px (the canonical FAB; the default)
16
16
  * - `large` — 64px (high-prominence primary action)
17
17
  *
18
18
  * In the `extended` variant the height tracks the size but the FAB grows
19
19
  * horizontally to fit its icon + label as a pill.
20
+ *
21
+ * The `size` prop ALSO accepts a raw pixel `number` for an exact diameter
22
+ * between (or outside) the presets — e.g. `size={48}` for a FAB halfway between
23
+ * `small` and `medium`. A numeric size sets the diameter directly, derives the
24
+ * icon box as `round(size * 0.5)` (min 22px) and keeps the circle radius at
25
+ * `size / 2`.
20
26
  */
21
27
  export type FabSize = 'small' | 'medium' | 'large';
22
28
  /**
@@ -61,7 +67,11 @@ export interface FabProps {
61
67
  */
62
68
  label?: string;
63
69
  variant?: FabVariant;
64
- size?: FabSize;
70
+ /**
71
+ * A preset (`'small' | 'medium' | 'large'`) or a raw pixel diameter
72
+ * (`number`). Defaults to `'medium'`. See {@link FabSize}.
73
+ */
74
+ size?: FabSize | number;
65
75
  /**
66
76
  * Corner of the containing block to anchor to. Defaults to `'bottom-right'`.
67
77
  * See {@link FabPlacement}. The DEFAULT never escapes the containing column
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/fab/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,aAAa,GACb,WAAW,GACX,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,QAAQ;IACvB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC;IAEzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAUhB,wDAAwD;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC/D,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/fab/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,aAAa,GACb,WAAW,GACX,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,QAAQ;IACvB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAExB;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC;IAEzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAUhB,wDAAwD;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC/D,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC"}
@@ -49,6 +49,8 @@ export { Combobox } from './combobox';
49
49
  export type { ComboboxProps, ComboboxOption } from './combobox';
50
50
  export { BottomSheet } from './bottom-sheet';
51
51
  export type { BottomSheetRef, BottomSheetProps } from './bottom-sheet';
52
+ export { ResponsiveSheet, RESPONSIVE_SHEET_BACKDROP_TESTID } from './responsive-sheet';
53
+ export type { ResponsiveSheetProps, ResponsiveSheetSide, ResponsiveSheetInset, } from './responsive-sheet';
52
54
  export * from './card';
53
55
  export * from './badge';
54
56
  export * from './chip';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGhG,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,MAAM,EACN,cAAc,EACd,+BAA+B,EAC/B,mBAAmB,EACnB,KAAK,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACzE,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,cAAc,WAAW,CAAC;AAC1B,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,8 @@ export { Combobox } from './combobox/index.web';
49
49
  export type { ComboboxProps, ComboboxOption } from './combobox/index.web';
50
50
  export { BottomSheet } from './bottom-sheet';
51
51
  export type { BottomSheetRef, BottomSheetProps } from './bottom-sheet';
52
+ export { ResponsiveSheet, RESPONSIVE_SHEET_BACKDROP_TESTID } from './responsive-sheet/index.web';
53
+ export type { ResponsiveSheetProps, ResponsiveSheetSide, ResponsiveSheetInset, } from './responsive-sheet/index.web';
52
54
  export * from './card';
53
55
  export * from './badge';
54
56
  export * from './chip';
@@ -1 +1 @@
1
- {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGhG,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,MAAM,EACN,cAAc,EACd,+BAA+B,EAC/B,mBAAmB,EACnB,KAAK,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnF,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,cAAc,qBAAqB,CAAC;AACpC,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AACjG,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAGtC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACjF,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ResponsiveSheetProps } from './types';
2
+ /** Stable testID for the dimmed backdrop dismiss button. */
3
+ export declare const RESPONSIVE_SHEET_BACKDROP_TESTID = "bloom-responsive-sheet-backdrop";
4
+ /**
5
+ * Default / web variant of `<ResponsiveSheet>`.
6
+ *
7
+ * This file is BOTH the package's default entry (`react-native` export
8
+ * condition resolves it for downstream `tsc`, and non-Metro web bundlers pick
9
+ * it via the `browser` condition through `index.web`) AND the canonical web
10
+ * implementation. It MUST NOT import `react-native-reanimated` — reanimated has
11
+ * no web build and its worklets Babel plugin is native-only, so a static import
12
+ * here would break every web bundler and downstream type-check. The native
13
+ * fork (`ResponsiveSheet.native.tsx`, selected only by Metro) drives the same
14
+ * motion with reanimated.
15
+ *
16
+ * Motion is pure CSS transitions: react-native-web emits `transition-*` style
17
+ * props to the DOM, and the panel/backdrop toggle their transform/opacity by a
18
+ * `shown` flag. Presence is handled with a `mounted` + `shown` pair so both the
19
+ * open AND close directions animate while the node stays mounted through the
20
+ * exit. We deliberately do NOT use reanimated `exiting` on web — concurrent
21
+ * React unmounts there throw `Failed to execute 'removeChild' on 'Node'`, the
22
+ * exact bug this component exists to avoid.
23
+ */
24
+ export declare function ResponsiveSheet({ open, onClose, side, breakpoint, width, maxHeightRatio, inset, showHandle, dismissOnBackdrop, panelStyle, panelClassName, containerStyle, containerClassName, label, children, }: ResponsiveSheetProps): import("react/jsx-runtime").JSX.Element | null;
25
+ export default ResponsiveSheet;
26
+ //# sourceMappingURL=ResponsiveSheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponsiveSheet.d.ts","sourceRoot":"","sources":["../../../../src/responsive-sheet/ResponsiveSheet.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD,4DAA4D;AAC5D,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAElF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,OAAO,EACP,IAAmB,EACnB,UAA+B,EAC/B,KAAqB,EACrB,cAAyC,EACzC,KAAK,EACL,UAAiB,EACjB,iBAAwB,EACxB,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,KAAqB,EACrB,QAAQ,GACT,EAAE,oBAAoB,kDA+KtB;AA8ED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ResponsiveSheetProps } from './types';
2
+ /** Stable testID for the dimmed backdrop dismiss button. */
3
+ export declare const RESPONSIVE_SHEET_BACKDROP_TESTID = "bloom-responsive-sheet-backdrop";
4
+ /**
5
+ * Native variant of `<ResponsiveSheet>` (selected only by Metro).
6
+ *
7
+ * Uses `react-native-reanimated` to drive the same motion as the web/CSS
8
+ * default fork: a shared `progress` value times 0 -> 1 on open and 1 -> 0 on
9
+ * close, mapped to the panel translate/opacity and the backdrop opacity.
10
+ * Native exit animations are safe here — the web-only `removeChild` crash does
11
+ * not apply — so we keep the node mounted through the close timing and unmount
12
+ * from the animation completion callback.
13
+ *
14
+ * The panel itself is measured (not percentage-translated): we offset by the
15
+ * panel's own width/height so the hidden state sits fully off its side, which
16
+ * is the reanimated-friendly equivalent of the web `translate(±100%)`.
17
+ */
18
+ export declare function ResponsiveSheet({ open, onClose, side, breakpoint, width, maxHeightRatio, inset, showHandle, dismissOnBackdrop, panelStyle, panelClassName, containerStyle, containerClassName, label, children, }: ResponsiveSheetProps): import("react/jsx-runtime").JSX.Element | null;
19
+ export default ResponsiveSheet;
20
+ //# sourceMappingURL=ResponsiveSheet.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponsiveSheet.native.d.ts","sourceRoot":"","sources":["../../../../src/responsive-sheet/ResponsiveSheet.native.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD,4DAA4D;AAC5D,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAElF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,OAAO,EACP,IAAmB,EACnB,UAA+B,EAC/B,KAAqB,EACrB,cAAyC,EACzC,KAAK,EACL,UAAiB,EACjB,iBAAwB,EACxB,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,KAAqB,EACrB,QAAQ,GACT,EAAE,oBAAoB,kDAqJtB;AAiCD,eAAe,eAAe,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Shared default constants for `ResponsiveSheet`.
3
+ *
4
+ * Platform-agnostic — imported by both the default/web CSS implementation
5
+ * (`ResponsiveSheet.tsx`) and the native reanimated implementation
6
+ * (`ResponsiveSheet.native.tsx`) so the two variants stay in lockstep.
7
+ */
8
+ /** Below this viewport width the sheet renders as a bottom-sheet. */
9
+ export declare const DEFAULT_BREAKPOINT = 768;
10
+ /** Side-sheet width (px) on wide screens. Capped to fit the viewport. */
11
+ export declare const DEFAULT_WIDTH = 460;
12
+ /** Bottom-sheet maximum height as a fraction of the viewport height. */
13
+ export declare const DEFAULT_MAX_HEIGHT_RATIO = 0.9;
14
+ /** Anchored edge of the side-sheet on wide screens. */
15
+ export declare const DEFAULT_SIDE: "left";
16
+ /**
17
+ * Open/close transition duration (ms). ~280–300ms ease-out reads as smooth
18
+ * without feeling sluggish; shared by the CSS transition and the native
19
+ * reanimated timing so both platforms match.
20
+ */
21
+ export declare const ANIMATION_DURATION = 280;
22
+ /**
23
+ * Standard CSS approximation of reanimated's `Easing.out(Easing.cubic)` so the
24
+ * web transition curve matches the native one.
25
+ */
26
+ export declare const EASE_OUT = "cubic-bezier(0.33, 1, 0.68, 1)";
27
+ /** Corner radius for the side-sheet panel and the top of the bottom-sheet. */
28
+ export declare const PANEL_RADIUS = 20;
29
+ /** Backdrop dim opacity once fully shown (matches `bg-black/40`). */
30
+ export declare const BACKDROP_OPACITY = 0.4;
31
+ /** Drag-handle pill geometry for the bottom-sheet. */
32
+ export declare const HANDLE_WIDTH = 36;
33
+ export declare const HANDLE_HEIGHT = 5;
34
+ export declare const HANDLE_RADIUS = 3;
35
+ /**
36
+ * Minimum gutter kept between a wide side-sheet and the opposite viewport edge
37
+ * when capping its width, so the panel never spans the full screen on a narrow
38
+ * desktop window that is still above the breakpoint.
39
+ */
40
+ export declare const SIDE_SHEET_MIN_GUTTER = 24;
41
+ /** A11y label fallback when the host does not provide one. */
42
+ export declare const DEFAULT_LABEL = "Sheet";
43
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../../src/responsive-sheet/const.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,yEAAyE;AACzE,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAG,MAAe,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,QAAQ,mCAAmC,CAAC;AAEzD,8EAA8E;AAC9E,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,sDAAsD;AACtD,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,8DAA8D;AAC9D,eAAO,MAAM,aAAa,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ResponsiveSheet, RESPONSIVE_SHEET_BACKDROP_TESTID } from './ResponsiveSheet';
2
+ export type { ResponsiveSheetProps, ResponsiveSheetSide, ResponsiveSheetInset, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/responsive-sheet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AACtF,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ResponsiveSheet, RESPONSIVE_SHEET_BACKDROP_TESTID } from './ResponsiveSheet';
2
+ export type { ResponsiveSheetProps, ResponsiveSheetSide, ResponsiveSheetInset, } from './types';
3
+ //# sourceMappingURL=index.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/responsive-sheet/index.web.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AACtF,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StyleProp, ViewStyle } from 'react-native';
3
+ /** Edge a wide-screen side-sheet anchors to. */
4
+ export type ResponsiveSheetSide = 'left' | 'right';
5
+ /**
6
+ * Inset (px) of the wide-screen side-sheet from its container edges. Lets a
7
+ * host place the sheet "inside its own shell" — e.g. offset from the top by a
8
+ * header, or from the left by a nav rail — with margins on every side.
9
+ */
10
+ export interface ResponsiveSheetInset {
11
+ top?: number;
12
+ bottom?: number;
13
+ left?: number;
14
+ right?: number;
15
+ }
16
+ /**
17
+ * A responsive overlay sheet: an anchored side-sheet on wide screens and a
18
+ * bottom-sheet (with drag handle) on small screens, switching by viewport
19
+ * width. It is a plain controlled component — the host drives `open`/`onClose`
20
+ * from its own state. It renders in place (no portal) so the host can scope it
21
+ * inside a themed/positioned subtree.
22
+ */
23
+ export interface ResponsiveSheetProps {
24
+ /** Whether the sheet is open. Controlled by the host. */
25
+ open: boolean;
26
+ /** Fired when the sheet requests to close (backdrop tap, Escape on web). */
27
+ onClose: () => void;
28
+ /** Anchor edge on wide screens. Defaults to `'left'`. */
29
+ side?: ResponsiveSheetSide;
30
+ /** Viewport width (px) below which the sheet renders as a bottom-sheet. Defaults to `768`. */
31
+ breakpoint?: number;
32
+ /** Side-sheet width (px) on wide screens. Capped to fit. Defaults to `460`. */
33
+ width?: number;
34
+ /** Bottom-sheet max height as a fraction of the viewport height. Defaults to `0.9`. */
35
+ maxHeightRatio?: number;
36
+ /** Side-sheet inset (px) from the container edges. Defaults to `0` on all sides. */
37
+ inset?: ResponsiveSheetInset;
38
+ /** Whether to render the drag handle in bottom-sheet mode. Defaults to `true`. */
39
+ showHandle?: boolean;
40
+ /** Whether tapping the backdrop closes the sheet. Defaults to `true`. */
41
+ dismissOnBackdrop?: boolean;
42
+ /** Style for the panel surface (e.g. brand color). Composed after defaults. */
43
+ panelStyle?: StyleProp<ViewStyle>;
44
+ /** NativeWind classes for the panel surface. */
45
+ panelClassName?: string;
46
+ /** Style for the root overlay (theme-var scope, rail offset, etc.). */
47
+ containerStyle?: StyleProp<ViewStyle>;
48
+ /** NativeWind classes for the root overlay (e.g. `"md:left-[4.75rem]"`). */
49
+ containerClassName?: string;
50
+ /** Accessibility label for the sheet panel and the backdrop dismiss button. */
51
+ label?: string;
52
+ /** Sheet content. */
53
+ children: ReactNode;
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/responsive-sheet/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,gDAAgD;AAChD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,4EAA4E;IAC5E,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yDAAyD;IACzD,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,8FAA8F;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.12.1",
3
+ "version": "0.14.0",
4
4
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -463,6 +463,22 @@
463
463
  "default": "./lib/commonjs/bottom-sheet/index.js"
464
464
  }
465
465
  },
466
+ "./responsive-sheet": {
467
+ "react-native": "./src/responsive-sheet/index.ts",
468
+ "browser": {
469
+ "types": "./lib/typescript/module/responsive-sheet/index.web.d.ts",
470
+ "import": "./lib/module/responsive-sheet/index.web.js",
471
+ "require": "./lib/commonjs/responsive-sheet/index.web.js"
472
+ },
473
+ "import": {
474
+ "types": "./lib/typescript/module/responsive-sheet/index.d.ts",
475
+ "default": "./lib/module/responsive-sheet/index.js"
476
+ },
477
+ "require": {
478
+ "types": "./lib/typescript/commonjs/responsive-sheet/index.d.ts",
479
+ "default": "./lib/commonjs/responsive-sheet/index.js"
480
+ }
481
+ },
466
482
  "./context-menu": {
467
483
  "react-native": "./src/context-menu/index.tsx",
468
484
  "browser": {
@@ -766,6 +782,7 @@
766
782
  "select",
767
783
  "context-menu",
768
784
  "bottom-sheet",
785
+ "responsive-sheet",
769
786
  "card",
770
787
  "badge",
771
788
  "chip",
@@ -73,4 +73,21 @@ describe('Fab (native)', () => {
73
73
  );
74
74
  expect(getByText('★')).toBeTruthy();
75
75
  });
76
+
77
+ it('accepts a numeric size as a raw pixel diameter', () => {
78
+ const { getByTestId } = renderWithTheme(
79
+ <Fab testID="fab" size={48} accessibilityLabel="Add" icon={<Text>+</Text>} />,
80
+ );
81
+ // The Pressable's style is a flat-able array; the container object (first
82
+ // entry) carries the resolved geometry.
83
+ const style = getByTestId('fab').props.style as Array<
84
+ { width?: number; height?: number } | false
85
+ >;
86
+ const container = style.find(
87
+ (s): s is { width?: number; height?: number } =>
88
+ typeof s === 'object' && s !== null && 'width' in s,
89
+ );
90
+ expect(container?.width).toBe(48);
91
+ expect(container?.height).toBe(48);
92
+ });
76
93
  });
@@ -124,4 +124,18 @@ describe('Fab.web', () => {
124
124
  const c = mount(<Fab accessibilityLabel="Add" testID="my-fab" icon={<span>+</span>} />);
125
125
  expect(c.querySelector('[data-testid="my-fab"]')?.tagName).toBe('BUTTON');
126
126
  });
127
+
128
+ it('accepts a numeric size as a raw pixel diameter', () => {
129
+ const c = mount(<Fab accessibilityLabel="Add" size={48} icon={<span>+</span>} />);
130
+ const fab = getByRole(c, 'button');
131
+ expect(fab.style.width).toBe('48px');
132
+ expect(fab.style.height).toBe('48px');
133
+ });
134
+
135
+ it('keeps preset sizes working (medium = 56px diameter)', () => {
136
+ const c = mount(<Fab accessibilityLabel="Add" size="medium" icon={<span>+</span>} />);
137
+ const fab = getByRole(c, 'button');
138
+ expect(fab.style.width).toBe('56px');
139
+ expect(fab.style.height).toBe('56px');
140
+ });
127
141
  });
@@ -0,0 +1,104 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { act, fireEvent, render } from '@testing-library/react-native';
4
+
5
+ import { ResponsiveSheet, RESPONSIVE_SHEET_BACKDROP_TESTID } from '../responsive-sheet';
6
+ import { BloomThemeProvider } from '../theme/BloomThemeProvider';
7
+
8
+ function renderWithTheme(ui: React.ReactElement) {
9
+ return render(
10
+ <BloomThemeProvider mode="light" colorPreset="teal">
11
+ {ui}
12
+ </BloomThemeProvider>,
13
+ );
14
+ }
15
+
16
+ const LABEL = 'Filters sheet';
17
+
18
+ describe('ResponsiveSheet', () => {
19
+ it('renders children when open', () => {
20
+ const { getByText } = renderWithTheme(
21
+ <ResponsiveSheet open onClose={() => {}} label={LABEL}>
22
+ <Text>Sheet body</Text>
23
+ </ResponsiveSheet>,
24
+ );
25
+ expect(getByText('Sheet body')).toBeTruthy();
26
+ });
27
+
28
+ it('renders nothing when closed (never opened)', () => {
29
+ const { queryByText } = renderWithTheme(
30
+ <ResponsiveSheet open={false} onClose={() => {}} label={LABEL}>
31
+ <Text>Sheet body</Text>
32
+ </ResponsiveSheet>,
33
+ );
34
+ expect(queryByText('Sheet body')).toBeNull();
35
+ });
36
+
37
+ // The backdrop animates its opacity from 0 -> BACKDROP_OPACITY on enter, so
38
+ // RNTL treats it as accessibility-hidden during the synchronous first frame.
39
+ // `includeHiddenElements` lets us assert its (real, interactive) press
40
+ // behavior without depending on the enter transition having committed.
41
+ const HIDDEN = { includeHiddenElements: true } as const;
42
+
43
+ it('calls onClose when the backdrop is pressed (default dismissOnBackdrop)', () => {
44
+ const onClose = jest.fn();
45
+ const { getByTestId } = renderWithTheme(
46
+ <ResponsiveSheet open onClose={onClose} label={LABEL}>
47
+ <Text>Sheet body</Text>
48
+ </ResponsiveSheet>,
49
+ );
50
+ fireEvent.press(getByTestId(RESPONSIVE_SHEET_BACKDROP_TESTID, HIDDEN));
51
+ expect(onClose).toHaveBeenCalledTimes(1);
52
+ });
53
+
54
+ it('does NOT call onClose on backdrop press when dismissOnBackdrop is false', () => {
55
+ const onClose = jest.fn();
56
+ const { getByTestId } = renderWithTheme(
57
+ <ResponsiveSheet open onClose={onClose} label={LABEL} dismissOnBackdrop={false}>
58
+ <Text>Sheet body</Text>
59
+ </ResponsiveSheet>,
60
+ );
61
+ fireEvent.press(getByTestId(RESPONSIVE_SHEET_BACKDROP_TESTID, HIDDEN));
62
+ expect(onClose).not.toHaveBeenCalled();
63
+ });
64
+
65
+ it('labels the panel and the dismiss backdrop distinctly', () => {
66
+ const { getByLabelText } = renderWithTheme(
67
+ <ResponsiveSheet open onClose={() => {}} label={LABEL}>
68
+ <Text>Sheet body</Text>
69
+ </ResponsiveSheet>,
70
+ );
71
+ expect(getByLabelText(LABEL, HIDDEN)).toBeTruthy();
72
+ expect(getByLabelText(`Dismiss ${LABEL}`, HIDDEN)).toBeTruthy();
73
+ });
74
+
75
+ it('keeps the panel mounted through the exit transition after closing', () => {
76
+ jest.useFakeTimers();
77
+ try {
78
+ const { getByText, queryByText, rerender } = renderWithTheme(
79
+ <ResponsiveSheet open onClose={() => {}} label={LABEL}>
80
+ <Text>Sheet body</Text>
81
+ </ResponsiveSheet>,
82
+ );
83
+ expect(getByText('Sheet body')).toBeTruthy();
84
+
85
+ rerender(
86
+ <BloomThemeProvider mode="light" colorPreset="teal">
87
+ <ResponsiveSheet open={false} onClose={() => {}} label={LABEL}>
88
+ <Text>Sheet body</Text>
89
+ </ResponsiveSheet>
90
+ </BloomThemeProvider>,
91
+ );
92
+ // Still mounted immediately after close (exit transition in flight).
93
+ expect(getByText('Sheet body')).toBeTruthy();
94
+
95
+ // After the transition duration it unmounts.
96
+ act(() => {
97
+ jest.advanceTimersByTime(400);
98
+ });
99
+ expect(queryByText('Sheet body')).toBeNull();
100
+ } finally {
101
+ jest.useRealTimers();
102
+ }
103
+ });
104
+ });
@@ -47,6 +47,15 @@ export const Extended: Story = {
47
47
  args: { label: 'Compose' },
48
48
  };
49
49
 
50
+ /**
51
+ * A raw pixel diameter via `size={number}` — here 48px, halfway between the
52
+ * `small` (40) and `medium` (56) presets. The icon box and font scale with the
53
+ * diameter automatically.
54
+ */
55
+ export const NumericSize: Story = {
56
+ args: { size: 48 },
57
+ };
58
+
50
59
  /**
51
60
  * The FAB anchored to the bottom-right of a CONSTRAINED column. On web the FAB
52
61
  * uses `position: sticky`, so it tracks the bottom of THIS column (not the
package/src/fab/Fab.tsx CHANGED
@@ -15,15 +15,41 @@ import type { FabPlacement, FabProps, FabSize, FabVariant } from './types';
15
15
 
16
16
  export type { FabProps, FabVariant, FabSize, FabPlacement } from './types';
17
17
 
18
- // Material-style FAB scale. `small` (40px, the compact FAB Mention uses) keeps a
19
- // full 24px icon box so the glyph reads clearly; `medium` (56px) is the
20
- // canonical FAB; `large` (64px) is the high-prominence action.
21
- const SIZE_CONFIG: Record<FabSize, { diameter: number; iconBox: number; fontSize: number }> = {
18
+ interface ResolvedSize {
19
+ diameter: number;
20
+ iconBox: number;
21
+ fontSize: number;
22
+ }
23
+
24
+ // Material-style FAB scale. `small` (40px) keeps a full 24px icon box so the
25
+ // glyph reads clearly; `medium` (56px) is the canonical FAB; `large` (64px) is
26
+ // the high-prominence action.
27
+ const SIZE_CONFIG: Record<FabSize, ResolvedSize> = {
22
28
  small: { diameter: 40, iconBox: 24, fontSize: 14 },
23
29
  medium: { diameter: 56, iconBox: 24, fontSize: 15 },
24
30
  large: { diameter: 64, iconBox: 28, fontSize: 16 },
25
31
  };
26
32
 
33
+ const MIN_NUMERIC_ICON_BOX = 22;
34
+
35
+ /**
36
+ * Resolve a `size` prop (preset name or raw pixel diameter) to concrete pixel
37
+ * geometry. A numeric size sets the diameter directly, derives the icon box as
38
+ * `round(size * 0.5)` (clamped to a sensible minimum) and lets the circle radius
39
+ * stay `size / 2` (the container uses a full pill radius, so any square stays a
40
+ * perfect circle).
41
+ */
42
+ function resolveSize(size: FabSize | number): ResolvedSize {
43
+ if (typeof size === 'number') {
44
+ return {
45
+ diameter: size,
46
+ iconBox: Math.max(MIN_NUMERIC_ICON_BOX, Math.round(size * 0.5)),
47
+ fontSize: Math.max(13, Math.round(size * 0.27)),
48
+ };
49
+ }
50
+ return SIZE_CONFIG[size];
51
+ }
52
+
27
53
  const PILL_RADIUS = 999;
28
54
  const PRESS_SCALE = 0.94;
29
55
  const DEFAULT_OFFSET = 16;
@@ -71,7 +97,7 @@ const FabComponent: React.FC<FabProps> = ({
71
97
  zIndex = DEFAULT_Z_INDEX,
72
98
  }) => {
73
99
  const theme = useTheme();
74
- const sizeConfig = SIZE_CONFIG[size];
100
+ const sizeConfig = useMemo(() => resolveSize(size), [size]);
75
101
  const isExtended = label != null && label.length > 0;
76
102
  const content = icon ?? children;
77
103
 
@@ -99,13 +125,13 @@ const FabComponent: React.FC<FabProps> = ({
99
125
  elevation: 6,
100
126
  };
101
127
  if (isExtended) {
102
- base.paddingHorizontal = size === 'small' ? 14 : 20;
128
+ base.paddingHorizontal = sizeConfig.diameter <= 44 ? 14 : 20;
103
129
  base.gap = 8;
104
130
  } else {
105
131
  base.width = sizeConfig.diameter;
106
132
  }
107
133
  return base;
108
- }, [resolvedColors.background, sizeConfig.diameter, theme.colors.shadow, isExtended, size]);
134
+ }, [resolvedColors.background, sizeConfig.diameter, theme.colors.shadow, isExtended]);
109
135
 
110
136
  const labelTextStyle = useMemo((): TextStyle => ({
111
137
  fontSize: sizeConfig.fontSize,