@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.
- package/lib/commonjs/fab/Fab.js +25 -6
- package/lib/commonjs/fab/Fab.js.map +1 -1
- package/lib/commonjs/fab/Fab.web.js +26 -7
- package/lib/commonjs/fab/Fab.web.js.map +1 -1
- package/lib/commonjs/index.js +15 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +21 -6
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/responsive-sheet/ResponsiveSheet.js +300 -0
- package/lib/commonjs/responsive-sheet/ResponsiveSheet.js.map +1 -0
- package/lib/commonjs/responsive-sheet/ResponsiveSheet.native.js +226 -0
- package/lib/commonjs/responsive-sheet/ResponsiveSheet.native.js.map +1 -0
- package/lib/commonjs/responsive-sheet/const.js +60 -0
- package/lib/commonjs/responsive-sheet/const.js.map +1 -0
- package/lib/commonjs/responsive-sheet/index.js +19 -0
- package/lib/commonjs/responsive-sheet/index.js.map +1 -0
- package/lib/commonjs/responsive-sheet/index.web.js +19 -0
- package/lib/commonjs/responsive-sheet/index.web.js.map +1 -0
- package/lib/commonjs/responsive-sheet/types.js +6 -0
- package/lib/commonjs/responsive-sheet/types.js.map +1 -0
- package/lib/module/fab/Fab.js +25 -6
- package/lib/module/fab/Fab.js.map +1 -1
- package/lib/module/fab/Fab.web.js +26 -7
- package/lib/module/fab/Fab.web.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +2 -0
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/responsive-sheet/ResponsiveSheet.js +293 -0
- package/lib/module/responsive-sheet/ResponsiveSheet.js.map +1 -0
- package/lib/module/responsive-sheet/ResponsiveSheet.native.js +219 -0
- package/lib/module/responsive-sheet/ResponsiveSheet.native.js.map +1 -0
- package/lib/module/responsive-sheet/const.js +56 -0
- package/lib/module/responsive-sheet/const.js.map +1 -0
- package/lib/module/responsive-sheet/index.js +4 -0
- package/lib/module/responsive-sheet/index.js.map +1 -0
- package/lib/module/responsive-sheet/index.web.js +14 -0
- package/lib/module/responsive-sheet/index.web.js.map +1 -0
- package/lib/module/responsive-sheet/types.js +4 -0
- package/lib/module/responsive-sheet/types.js.map +1 -0
- package/lib/typescript/commonjs/fab/Fab.d.ts.map +1 -1
- package/lib/typescript/commonjs/fab/Fab.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/fab/types.d.ts +12 -2
- package/lib/typescript/commonjs/fab/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +2 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +2 -0
- package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.d.ts +26 -0
- package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.d.ts.map +1 -0
- package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.native.d.ts +20 -0
- package/lib/typescript/commonjs/responsive-sheet/ResponsiveSheet.native.d.ts.map +1 -0
- package/lib/typescript/commonjs/responsive-sheet/const.d.ts +43 -0
- package/lib/typescript/commonjs/responsive-sheet/const.d.ts.map +1 -0
- package/lib/typescript/commonjs/responsive-sheet/index.d.ts +3 -0
- package/lib/typescript/commonjs/responsive-sheet/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/responsive-sheet/index.web.d.ts +3 -0
- package/lib/typescript/commonjs/responsive-sheet/index.web.d.ts.map +1 -0
- package/lib/typescript/commonjs/responsive-sheet/types.d.ts +55 -0
- package/lib/typescript/commonjs/responsive-sheet/types.d.ts.map +1 -0
- package/lib/typescript/module/fab/Fab.d.ts.map +1 -1
- package/lib/typescript/module/fab/Fab.web.d.ts.map +1 -1
- package/lib/typescript/module/fab/types.d.ts +12 -2
- package/lib/typescript/module/fab/types.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +2 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/index.web.d.ts +2 -0
- package/lib/typescript/module/index.web.d.ts.map +1 -1
- package/lib/typescript/module/responsive-sheet/ResponsiveSheet.d.ts +26 -0
- package/lib/typescript/module/responsive-sheet/ResponsiveSheet.d.ts.map +1 -0
- package/lib/typescript/module/responsive-sheet/ResponsiveSheet.native.d.ts +20 -0
- package/lib/typescript/module/responsive-sheet/ResponsiveSheet.native.d.ts.map +1 -0
- package/lib/typescript/module/responsive-sheet/const.d.ts +43 -0
- package/lib/typescript/module/responsive-sheet/const.d.ts.map +1 -0
- package/lib/typescript/module/responsive-sheet/index.d.ts +3 -0
- package/lib/typescript/module/responsive-sheet/index.d.ts.map +1 -0
- package/lib/typescript/module/responsive-sheet/index.web.d.ts +3 -0
- package/lib/typescript/module/responsive-sheet/index.web.d.ts.map +1 -0
- package/lib/typescript/module/responsive-sheet/types.d.ts +55 -0
- package/lib/typescript/module/responsive-sheet/types.d.ts.map +1 -0
- package/package.json +18 -1
- package/src/__tests__/Fab.test.tsx +17 -0
- package/src/__tests__/Fab.web.test.tsx +14 -0
- package/src/__tests__/ResponsiveSheet.test.tsx +104 -0
- package/src/fab/Fab.stories.tsx +9 -0
- package/src/fab/Fab.tsx +33 -7
- package/src/fab/Fab.web.tsx +33 -8
- package/src/fab/types.ts +12 -2
- package/src/index.ts +8 -0
- package/src/index.web.ts +8 -0
- package/src/responsive-sheet/ResponsiveSheet.native.tsx +257 -0
- package/src/responsive-sheet/ResponsiveSheet.stories.tsx +54 -0
- package/src/responsive-sheet/ResponsiveSheet.tsx +327 -0
- package/src/responsive-sheet/const.ts +53 -0
- package/src/responsive-sheet/index.ts +6 -0
- package/src/responsive-sheet/index.web.ts +16 -0
- package/src/responsive-sheet/types.ts +57 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "RESPONSIVE_SHEET_BACKDROP_TESTID", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _ResponsiveSheet.RESPONSIVE_SHEET_BACKDROP_TESTID;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "ResponsiveSheet", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _ResponsiveSheet.ResponsiveSheet;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var _ResponsiveSheet = require("./ResponsiveSheet");
|
|
19
|
+
//# sourceMappingURL=index.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_ResponsiveSheet","require"],"sourceRoot":"../../../src","sources":["responsive-sheet/index.web.ts"],"mappings":";;;;;;;;;;;;;;;;;AAUA,IAAAA,gBAAA,GAAAC,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["responsive-sheet/types.ts"],"mappings":"","ignoreList":[]}
|
package/lib/module/fab/Fab.js
CHANGED
|
@@ -6,9 +6,9 @@ import { useTheme } from "../theme/use-theme.js";
|
|
|
6
6
|
import { usePressAnimation } from "../hooks/usePressAnimation.js";
|
|
7
7
|
import { useInteractionState } from "../hooks/useInteractionState.js";
|
|
8
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
-
// Material-style FAB scale. `small` (40px
|
|
10
|
-
//
|
|
11
|
-
//
|
|
9
|
+
// Material-style FAB scale. `small` (40px) keeps a full 24px icon box so the
|
|
10
|
+
// glyph reads clearly; `medium` (56px) is the canonical FAB; `large` (64px) is
|
|
11
|
+
// the high-prominence action.
|
|
12
12
|
const SIZE_CONFIG = {
|
|
13
13
|
small: {
|
|
14
14
|
diameter: 40,
|
|
@@ -26,6 +26,25 @@ const SIZE_CONFIG = {
|
|
|
26
26
|
fontSize: 16
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
|
+
const MIN_NUMERIC_ICON_BOX = 22;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Resolve a `size` prop (preset name or raw pixel diameter) to concrete pixel
|
|
33
|
+
* geometry. A numeric size sets the diameter directly, derives the icon box as
|
|
34
|
+
* `round(size * 0.5)` (clamped to a sensible minimum) and lets the circle radius
|
|
35
|
+
* stay `size / 2` (the container uses a full pill radius, so any square stays a
|
|
36
|
+
* perfect circle).
|
|
37
|
+
*/
|
|
38
|
+
function resolveSize(size) {
|
|
39
|
+
if (typeof size === 'number') {
|
|
40
|
+
return {
|
|
41
|
+
diameter: size,
|
|
42
|
+
iconBox: Math.max(MIN_NUMERIC_ICON_BOX, Math.round(size * 0.5)),
|
|
43
|
+
fontSize: Math.max(13, Math.round(size * 0.27))
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return SIZE_CONFIG[size];
|
|
47
|
+
}
|
|
29
48
|
const PILL_RADIUS = 999;
|
|
30
49
|
const PRESS_SCALE = 0.94;
|
|
31
50
|
const DEFAULT_OFFSET = 16;
|
|
@@ -79,7 +98,7 @@ const FabComponent = ({
|
|
|
79
98
|
zIndex = DEFAULT_Z_INDEX
|
|
80
99
|
}) => {
|
|
81
100
|
const theme = useTheme();
|
|
82
|
-
const sizeConfig =
|
|
101
|
+
const sizeConfig = useMemo(() => resolveSize(size), [size]);
|
|
83
102
|
const isExtended = label != null && label.length > 0;
|
|
84
103
|
const content = icon ?? children;
|
|
85
104
|
const {
|
|
@@ -112,13 +131,13 @@ const FabComponent = ({
|
|
|
112
131
|
elevation: 6
|
|
113
132
|
};
|
|
114
133
|
if (isExtended) {
|
|
115
|
-
base.paddingHorizontal =
|
|
134
|
+
base.paddingHorizontal = sizeConfig.diameter <= 44 ? 14 : 20;
|
|
116
135
|
base.gap = 8;
|
|
117
136
|
} else {
|
|
118
137
|
base.width = sizeConfig.diameter;
|
|
119
138
|
}
|
|
120
139
|
return base;
|
|
121
|
-
}, [resolvedColors.background, sizeConfig.diameter, theme.colors.shadow, isExtended
|
|
140
|
+
}, [resolvedColors.background, sizeConfig.diameter, theme.colors.shadow, isExtended]);
|
|
122
141
|
const labelTextStyle = useMemo(() => ({
|
|
123
142
|
fontSize: sizeConfig.fontSize,
|
|
124
143
|
fontWeight: '600',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useMemo","Animated","Pressable","Text","View","useTheme","usePressAnimation","useInteractionState","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","diameter","iconBox","fontSize","medium","large","PILL_RADIUS","PRESS_SCALE","DEFAULT_OFFSET","DEFAULT_Z_INDEX","HIT_SLOP","top","bottom","left","right","placementStyle","placement","offset","style","position","FabComponent","onPress","icon","children","label","variant","
|
|
1
|
+
{"version":3,"names":["React","memo","useMemo","Animated","Pressable","Text","View","useTheme","usePressAnimation","useInteractionState","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","diameter","iconBox","fontSize","medium","large","MIN_NUMERIC_ICON_BOX","resolveSize","size","Math","max","round","PILL_RADIUS","PRESS_SCALE","DEFAULT_OFFSET","DEFAULT_Z_INDEX","HIT_SLOP","top","bottom","left","right","placementStyle","placement","offset","style","position","FabComponent","onPress","icon","children","label","variant","disabled","accessibilityLabel","accessibilityHint","labelStyle","className","testID","zIndex","theme","sizeConfig","isExtended","length","content","scaleAnim","onPressIn","onPressOut","undefined","state","pressed","onIn","onPressedIn","onOut","onPressedOut","resolvedColors","resolveVariant","colors","containerStyle","base","alignItems","justifyContent","flexDirection","backgroundColor","background","borderRadius","height","shadowColor","shadow","shadowOffset","width","shadowOpacity","shadowRadius","elevation","paddingHorizontal","gap","labelTextStyle","fontWeight","color","foreground","handlePressIn","handlePressOut","transform","scale","opacity","hitSlop","accessibilityRole","accessibilityState","numberOfLines","card","text","primary","primaryForeground","Fab","displayName"],"sourceRoot":"../../../src","sources":["fab/Fab.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AAC5C,SACEC,QAAQ,EACRC,SAAS,EACTC,IAAI,EACJC,IAAI,QAGC,cAAc;AAErB,SAASC,QAAQ,QAAQ,uBAAoB;AAC7C,SAASC,iBAAiB,QAAQ,+BAA4B;AAC9D,SAASC,mBAAmB,QAAQ,iCAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAWnE;AACA;AACA;AACA,MAAMC,WAA0C,GAAG;EACjDC,KAAK,EAAE;IAAEC,QAAQ,EAAE,EAAE;IAAEC,OAAO,EAAE,EAAE;IAAEC,QAAQ,EAAE;EAAG,CAAC;EAClDC,MAAM,EAAE;IAAEH,QAAQ,EAAE,EAAE;IAAEC,OAAO,EAAE,EAAE;IAAEC,QAAQ,EAAE;EAAG,CAAC;EACnDE,KAAK,EAAE;IAAEJ,QAAQ,EAAE,EAAE;IAAEC,OAAO,EAAE,EAAE;IAAEC,QAAQ,EAAE;EAAG;AACnD,CAAC;AAED,MAAMG,oBAAoB,GAAG,EAAE;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CAACC,IAAsB,EAAgB;EACzD,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAO;MACLP,QAAQ,EAAEO,IAAI;MACdN,OAAO,EAAEO,IAAI,CAACC,GAAG,CAACJ,oBAAoB,EAAEG,IAAI,CAACE,KAAK,CAACH,IAAI,GAAG,GAAG,CAAC,CAAC;MAC/DL,QAAQ,EAAEM,IAAI,CAACC,GAAG,CAAC,EAAE,EAAED,IAAI,CAACE,KAAK,CAACH,IAAI,GAAG,IAAI,CAAC;IAChD,CAAC;EACH;EACA,OAAOT,WAAW,CAACS,IAAI,CAAC;AAC1B;AAEA,MAAMI,WAAW,GAAG,GAAG;AACvB,MAAMC,WAAW,GAAG,IAAI;AACxB,MAAMC,cAAc,GAAG,EAAE;AACzB,MAAMC,eAAe,GAAG,EAAE;AAC1B,MAAMC,QAAQ,GAAG;EAAEC,GAAG,EAAE,CAAC;EAAEC,MAAM,EAAE,CAAC;EAAEC,IAAI,EAAE,CAAC;EAAEC,KAAK,EAAE;AAAE,CAAU;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAACC,SAAuB,EAAEC,MAAc,EAAa;EAC1E,IAAID,SAAS,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAC;EACrC,MAAME,KAAgB,GAAG;IAAEC,QAAQ,EAAE;EAAW,CAAC;EACjD,IAAIH,SAAS,KAAK,cAAc,IAAIA,SAAS,KAAK,aAAa,EAAE;IAC/DE,KAAK,CAACN,MAAM,GAAGK,MAAM;EACvB,CAAC,MAAM;IACLC,KAAK,CAACP,GAAG,GAAGM,MAAM;EACpB;EACA,IAAID,SAAS,KAAK,cAAc,IAAIA,SAAS,KAAK,WAAW,EAAE;IAC7DE,KAAK,CAACJ,KAAK,GAAGG,MAAM;EACtB,CAAC,MAAM;IACLC,KAAK,CAACL,IAAI,GAAGI,MAAM;EACrB;EACA,OAAOC,KAAK;AACd;AAEA,MAAME,YAAgC,GAAGA,CAAC;EACxCC,OAAO;EACPC,IAAI;EACJC,QAAQ;EACRC,KAAK;EACLC,OAAO,GAAG,SAAS;EACnBvB,IAAI,GAAG,QAAQ;EACfc,SAAS,GAAG,cAAc;EAC1BC,MAAM,GAAGT,cAAc;EACvBkB,QAAQ,GAAG,KAAK;EAChBC,kBAAkB;EAClBC,iBAAiB;EACjBV,KAAK;EACLW,UAAU;EACVC,SAAS;EACTC,MAAM;EACNC,MAAM,GAAGvB;AACX,CAAC,KAAK;EACJ,MAAMwB,KAAK,GAAG/C,QAAQ,CAAC,CAAC;EACxB,MAAMgD,UAAU,GAAGrD,OAAO,CAAC,MAAMoB,WAAW,CAACC,IAAI,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EAC3D,MAAMiC,UAAU,GAAGX,KAAK,IAAI,IAAI,IAAIA,KAAK,CAACY,MAAM,GAAG,CAAC;EACpD,MAAMC,OAAO,GAAGf,IAAI,IAAIC,QAAQ;EAEhC,MAAM;IAAEe,SAAS;IAAEC,SAAS;IAAEC;EAAW,CAAC,GAAGrD,iBAAiB,CAC5DuC,QAAQ,GAAGe,SAAS,GAAGlC,WACzB,CAAC;EACD,MAAM;IAAEmC,KAAK,EAAEC,OAAO;IAAEC,IAAI,EAAEC,WAAW;IAAEC,KAAK,EAAEC;EAAa,CAAC,GAC9D3D,mBAAmB,CAAC,CAAC;EAEvB,MAAM4D,cAAc,GAAGnE,OAAO,CAAC,MAAMoE,cAAc,CAACxB,OAAO,EAAEQ,KAAK,CAACiB,MAAM,CAAC,EAAE,CAACzB,OAAO,EAAEQ,KAAK,CAACiB,MAAM,CAAC,CAAC;EAEpG,MAAMC,cAAc,GAAGtE,OAAO,CAAC,MAAiB;IAC9C,MAAMuE,IAAe,GAAG;MACtBC,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE,QAAQ;MACxBC,aAAa,EAAE,KAAK;MACpBC,eAAe,EAAER,cAAc,CAACS,UAAU;MAC1CC,YAAY,EAAEpD,WAAW;MACzBqD,MAAM,EAAEzB,UAAU,CAACvC,QAAQ;MAC3B;MACAiE,WAAW,EAAE3B,KAAK,CAACiB,MAAM,CAACW,MAAM;MAChCC,YAAY,EAAE;QAAEC,KAAK,EAAE,CAAC;QAAEJ,MAAM,EAAE;MAAE,CAAC;MACrCK,aAAa,EAAE,GAAG;MAClBC,YAAY,EAAE,CAAC;MACfC,SAAS,EAAE;IACb,CAAC;IACD,IAAI/B,UAAU,EAAE;MACdiB,IAAI,CAACe,iBAAiB,GAAGjC,UAAU,CAACvC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;MAC5DyD,IAAI,CAACgB,GAAG,GAAG,CAAC;IACd,CAAC,MAAM;MACLhB,IAAI,CAACW,KAAK,GAAG7B,UAAU,CAACvC,QAAQ;IAClC;IACA,OAAOyD,IAAI;EACb,CAAC,EAAE,CAACJ,cAAc,CAACS,UAAU,EAAEvB,UAAU,CAACvC,QAAQ,EAAEsC,KAAK,CAACiB,MAAM,CAACW,MAAM,EAAE1B,UAAU,CAAC,CAAC;EAErF,MAAMkC,cAAc,GAAGxF,OAAO,CAAC,OAAkB;IAC/CgB,QAAQ,EAAEqC,UAAU,CAACrC,QAAQ;IAC7ByE,UAAU,EAAE,KAAK;IACjBC,KAAK,EAAEvB,cAAc,CAACwB;EACxB,CAAC,CAAC,EAAE,CAACtC,UAAU,CAACrC,QAAQ,EAAEmD,cAAc,CAACwB,UAAU,CAAC,CAAC;EAErD,MAAMC,aAAa,GAAG/C,QAAQ,GAC1Be,SAAS,GACT,MAAM;IACJF,SAAS,CAAC,CAAC;IACXM,WAAW,CAAC,CAAC;EACf,CAAC;EACL,MAAM6B,cAAc,GAAGhD,QAAQ,GAC3Be,SAAS,GACT,MAAM;IACJD,UAAU,CAAC,CAAC;IACZO,YAAY,CAAC,CAAC;EAChB,CAAC;EAEL,oBACEzD,IAAA,CAACR,QAAQ,CAACG,IAAI;IACZiC,KAAK,EAAE,CACLH,cAAc,CAACC,SAAS,EAAEC,MAAM,CAAC,EACjC;MAAEe,MAAM;MAAE2C,SAAS,EAAE,CAAC;QAAEC,KAAK,EAAEtC;MAAU,CAAC;IAAE,CAAC,EAC7CpB,KAAK,CACL;IAAAK,QAAA,eAEF/B,KAAA,CAACT,SAAS;MAAA,IACH+C,SAAS,GAAI;QAAEA;MAAU,CAAC,GAA8B,CAAC,CAAC;MAC/DZ,KAAK,EAAE,CACLiC,cAAc,EACdzB,QAAQ,IAAI;QAAEmD,OAAO,EAAE;MAAI,CAAC,EAC5BlC,OAAO,IAAI,CAACjB,QAAQ,IAAI;QAAEmD,OAAO,EAAE;MAAI,CAAC,CACxC;MACFxD,OAAO,EAAEK,QAAQ,GAAGe,SAAS,GAAGpB,OAAQ;MACxCkB,SAAS,EAAEkC,aAAc;MACzBjC,UAAU,EAAEkC,cAAe;MAC3BhD,QAAQ,EAAEA,QAAS;MACnBoD,OAAO,EAAEpE,QAAS;MAClBqE,iBAAiB,EAAC,QAAQ;MAC1BpD,kBAAkB,EAAEA,kBAAkB,IAAIH,KAAM;MAChDI,iBAAiB,EAAEA,iBAAkB;MACrCoD,kBAAkB,EAAE;QAAEtD;MAAS,CAAE;MACjCK,MAAM,EAAEA,MAAO;MAAAR,QAAA,GAEdc,OAAO,IAAI,IAAI,iBACd/C,IAAA,CAACL,IAAI;QACHiC,KAAK,EAAE;UACL6C,KAAK,EAAE7B,UAAU,CAACtC,OAAO;UACzB+D,MAAM,EAAEzB,UAAU,CAACtC,OAAO;UAC1ByD,UAAU,EAAE,QAAQ;UACpBC,cAAc,EAAE;QAClB,CAAE;QAAA/B,QAAA,EAEDc;MAAO,CACJ,CACP,EACAF,UAAU,iBACT7C,IAAA,CAACN,IAAI;QAACkC,KAAK,EAAE,CAACmD,cAAc,EAAExC,UAAU,CAAE;QAACoD,aAAa,EAAE,CAAE;QAAA1D,QAAA,EACzDC;MAAK,CACF,CACP;IAAA,CACQ;EAAC,CACC,CAAC;AAEpB,CAAC;AAED,SAASyB,cAAcA,CACrBxB,OAAmB,EACnByB,MAA6C,EACD;EAC5C,QAAQzB,OAAO;IACb,KAAK,WAAW;IAChB,KAAK,SAAS;MACZ,OAAO;QAAEgC,UAAU,EAAEP,MAAM,CAACgC,IAAI;QAAEV,UAAU,EAAEtB,MAAM,CAACiC;MAAK,CAAC;IAC7D,KAAK,SAAS;IACd;MACE,OAAO;QAAE1B,UAAU,EAAEP,MAAM,CAACkC,OAAO;QAAEZ,UAAU,EAAEtB,MAAM,CAACmC;MAAkB,CAAC;EAC/E;AACF;AAEA,OAAO,MAAMC,GAAG,gBAAG1G,IAAI,CAACwC,YAAY,CAAC;AACrCkE,GAAG,CAACC,WAAW,GAAG,KAAK","ignoreList":[]}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import React, { memo, useCallback, useEffect, useId, useMemo } from 'react';
|
|
4
4
|
import { useTheme } from "../theme/use-theme.js";
|
|
5
5
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
-
// Material-style FAB scale. `small` (40px
|
|
7
|
-
//
|
|
8
|
-
//
|
|
6
|
+
// Material-style FAB scale. `small` (40px) keeps a full 24px icon box so the
|
|
7
|
+
// glyph reads clearly; `medium` (56px) is the canonical FAB; `large` (64px) is
|
|
8
|
+
// the high-prominence action.
|
|
9
9
|
const SIZE_CONFIG = {
|
|
10
10
|
small: {
|
|
11
11
|
diameter: 40,
|
|
@@ -23,6 +23,24 @@ const SIZE_CONFIG = {
|
|
|
23
23
|
fontSize: 16
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
|
+
const MIN_NUMERIC_ICON_BOX = 22;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a `size` prop (preset name or raw pixel diameter) to concrete pixel
|
|
30
|
+
* geometry. Mirrors the native `resolveSize` exactly so a numeric size renders
|
|
31
|
+
* identically on both platforms. A numeric size sets the diameter directly and
|
|
32
|
+
* derives the icon box as `round(size * 0.5)` (clamped to a sensible minimum).
|
|
33
|
+
*/
|
|
34
|
+
function resolveSize(size) {
|
|
35
|
+
if (typeof size === 'number') {
|
|
36
|
+
return {
|
|
37
|
+
diameter: size,
|
|
38
|
+
iconBox: Math.max(MIN_NUMERIC_ICON_BOX, Math.round(size * 0.5)),
|
|
39
|
+
fontSize: Math.max(13, Math.round(size * 0.27))
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return SIZE_CONFIG[size];
|
|
43
|
+
}
|
|
26
44
|
const PILL_RADIUS = 999;
|
|
27
45
|
const PRESS_SCALE = 0.94;
|
|
28
46
|
const DEFAULT_OFFSET = 16;
|
|
@@ -178,7 +196,7 @@ const FabWebComponent = ({
|
|
|
178
196
|
const theme = useTheme();
|
|
179
197
|
const reactId = useId();
|
|
180
198
|
const resolvedId = id ?? `bloom-fab-${reactId}`;
|
|
181
|
-
const sizeConfig =
|
|
199
|
+
const sizeConfig = useMemo(() => resolveSize(size), [size]);
|
|
182
200
|
const isExtended = label != null && label.length > 0;
|
|
183
201
|
const content = icon ?? children;
|
|
184
202
|
const variantColors = useMemo(() => resolveVariant(variant, theme.colors), [variant, theme.colors]);
|
|
@@ -203,13 +221,14 @@ const FabWebComponent = ({
|
|
|
203
221
|
...placementStyle(placement, offset)
|
|
204
222
|
};
|
|
205
223
|
if (isExtended) {
|
|
206
|
-
|
|
207
|
-
base.
|
|
224
|
+
const pad = sizeConfig.diameter <= 44 ? 14 : 20;
|
|
225
|
+
base.paddingLeft = pad;
|
|
226
|
+
base.paddingRight = pad;
|
|
208
227
|
} else {
|
|
209
228
|
base.width = sizeConfig.diameter;
|
|
210
229
|
}
|
|
211
230
|
return base;
|
|
212
|
-
}, [variantColors, sizeConfig.diameter, sizeConfig.fontSize, zIndex, restShadow, hoverShadow, placement, offset, isExtended
|
|
231
|
+
}, [variantColors, sizeConfig.diameter, sizeConfig.fontSize, zIndex, restShadow, hoverShadow, placement, offset, isExtended]);
|
|
213
232
|
const handleClick = useCallback(event => {
|
|
214
233
|
if (disabled) {
|
|
215
234
|
event.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useCallback","useEffect","useId","useMemo","useTheme","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","diameter","iconBox","fontSize","medium","large","PILL_RADIUS","PRESS_SCALE","DEFAULT_OFFSET","DEFAULT_Z_INDEX","STYLE_ID","BLOOM_FAB_CSS","useFabCss","document","getElementById","style","createElement","id","textContent","head","appendChild","placementStyle","placement","offset","position","isBottom","bottom","marginTop","top","alignSelf","marginRight","marginLeft","resolveVariant","variant","c","background","card","foreground","text","ring","primary","primaryForeground","FabWebComponent","onPress","onClick","icon","children","label","
|
|
1
|
+
{"version":3,"names":["React","memo","useCallback","useEffect","useId","useMemo","useTheme","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","diameter","iconBox","fontSize","medium","large","MIN_NUMERIC_ICON_BOX","resolveSize","size","Math","max","round","PILL_RADIUS","PRESS_SCALE","DEFAULT_OFFSET","DEFAULT_Z_INDEX","STYLE_ID","BLOOM_FAB_CSS","useFabCss","document","getElementById","style","createElement","id","textContent","head","appendChild","placementStyle","placement","offset","position","isBottom","bottom","marginTop","top","alignSelf","marginRight","marginLeft","resolveVariant","variant","c","background","card","foreground","text","ring","primary","primaryForeground","FabWebComponent","onPress","onClick","icon","children","label","disabled","accessibilityLabel","ariaLabelProp","accessibilityHint","labelStyle","className","testID","zIndex","title","type","theme","reactId","resolvedId","sizeConfig","isExtended","length","content","variantColors","colors","restShadow","shadow","hoverShadow","containerStyle","base","backgroundColor","color","borderRadius","height","boxShadow","fontWeight","pad","paddingLeft","paddingRight","width","handleClick","event","preventDefault","ariaLabel","composedClassName","concat","join","undefined","display","alignItems","justifyContent","Fab","displayName"],"sourceRoot":"../../../src","sources":["fab/Fab.web.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -55,6 +55,8 @@ export { Slider } from "./slider/index.js";
|
|
|
55
55
|
export { Combobox } from './combobox';
|
|
56
56
|
// Bottom sheet
|
|
57
57
|
export { BottomSheet } from "./bottom-sheet/index.js";
|
|
58
|
+
// Responsive sheet — side-sheet on wide screens, bottom-sheet on narrow.
|
|
59
|
+
export { ResponsiveSheet, RESPONSIVE_SHEET_BACKDROP_TESTID } from './responsive-sheet';
|
|
58
60
|
// Data display
|
|
59
61
|
export * from "./card/index.js";
|
|
60
62
|
export * from "./badge/index.js";
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["atoms","flatten","Z_INDEX","zIndex","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","CenteredDialog","CENTERED_DIALOG_BACKDROP_TESTID","BloomDialogProvider","alert","useDialogContext","useDialogControl","Fab","ErrorBoundary","AvatarGroup","UserHoverCard","PromptInput","toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","Label","Field","InputGroup","Slider","Combobox","BottomSheet","Tabs","Accordion","Item","Kbd","Admonition","Menu","Tooltip","Select","ContextMenu","Popover","AlertDialog","AlertDialogHost","confirm","Command","Code","Fonts"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,QAAQ,mBAAU;AAE1D,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,UAAU;AACxB,SACEC,MAAM,EACNC,cAAc,EACdC,+BAA+B,EAC/BC,mBAAmB,EACnBC,KAAK,EACLC,gBAAgB,EAChBC,gBAAgB,QACX,UAAU;AAWjB,cAAc,UAAU;AACxB,SAASC,GAAG,QAAQ,OAAO;AAE3B,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAMhD,cAAc,mBAAU;AACxB,SAASC,WAAW,QAAQ,yBAAgB;AAE5C,SAASC,aAAa,QAAQ,4BAAmB;AAEjD,cAAc,WAAW;AACzB,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,SAASC,KAAK,QAAoB,SAAS;;AAE3C;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;AAC5C,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,UAAU,QAAQ,wBAAe;AAE1C,SAASC,MAAM,QAAQ,mBAAU;AAEjC,SAASC,QAAQ,QAAQ,YAAY;AAGrC;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;AAC/B,SAASC,IAAI,QAAQ,iBAAQ;AAE7B,SAASC,GAAG,QAAQ,gBAAO;AAG3B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,QAAQ;AAC9B,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,MAAM,MAAM,UAAU;AAClC,OAAO,KAAKC,WAAW,MAAM,gBAAgB;AAC7C,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,SAASC,WAAW,EAAEC,eAAe,EAAEC,OAAO,QAAQ,gBAAgB;AAMtE,SAASC,OAAO,QAAQ,WAAW;AAGnC;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,SAAS","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["atoms","flatten","Z_INDEX","zIndex","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","CenteredDialog","CENTERED_DIALOG_BACKDROP_TESTID","BloomDialogProvider","alert","useDialogContext","useDialogControl","Fab","ErrorBoundary","AvatarGroup","UserHoverCard","PromptInput","toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","Label","Field","InputGroup","Slider","Combobox","BottomSheet","ResponsiveSheet","RESPONSIVE_SHEET_BACKDROP_TESTID","Tabs","Accordion","Item","Kbd","Admonition","Menu","Tooltip","Select","ContextMenu","Popover","AlertDialog","AlertDialogHost","confirm","Command","Code","Fonts"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,QAAQ,mBAAU;AAE1D,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,UAAU;AACxB,SACEC,MAAM,EACNC,cAAc,EACdC,+BAA+B,EAC/BC,mBAAmB,EACnBC,KAAK,EACLC,gBAAgB,EAChBC,gBAAgB,QACX,UAAU;AAWjB,cAAc,UAAU;AACxB,SAASC,GAAG,QAAQ,OAAO;AAE3B,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAMhD,cAAc,mBAAU;AACxB,SAASC,WAAW,QAAQ,yBAAgB;AAE5C,SAASC,aAAa,QAAQ,4BAAmB;AAEjD,cAAc,WAAW;AACzB,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,SAASC,KAAK,QAAoB,SAAS;;AAE3C;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;AAC5C,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,UAAU,QAAQ,wBAAe;AAE1C,SAASC,MAAM,QAAQ,mBAAU;AAEjC,SAASC,QAAQ,QAAQ,YAAY;AAGrC;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,SAASC,eAAe,EAAEC,gCAAgC,QAAQ,oBAAoB;AAOtF;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;AAC/B,SAASC,IAAI,QAAQ,iBAAQ;AAE7B,SAASC,GAAG,QAAQ,gBAAO;AAG3B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,QAAQ;AAC9B,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,OAAO,KAAKC,MAAM,MAAM,UAAU;AAClC,OAAO,KAAKC,WAAW,MAAM,gBAAgB;AAC7C,OAAO,KAAKC,OAAO,MAAM,WAAW;AACpC,SAASC,WAAW,EAAEC,eAAe,EAAEC,OAAO,QAAQ,gBAAgB;AAMtE,SAASC,OAAO,QAAQ,WAAW;AAGnC;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,SAAS","ignoreList":[]}
|
package/lib/module/index.web.js
CHANGED
|
@@ -60,6 +60,8 @@ export { Slider } from "./slider/index.js";
|
|
|
60
60
|
export { Combobox } from "./combobox/index.web.js";
|
|
61
61
|
// Bottom sheet
|
|
62
62
|
export { BottomSheet } from "./bottom-sheet/index.js";
|
|
63
|
+
// Responsive sheet — side-sheet on wide screens, bottom-sheet on narrow.
|
|
64
|
+
export { ResponsiveSheet, RESPONSIVE_SHEET_BACKDROP_TESTID } from "./responsive-sheet/index.web.js";
|
|
63
65
|
// Data display
|
|
64
66
|
export * from "./card/index.js";
|
|
65
67
|
export * from "./badge/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["atoms","flatten","Z_INDEX","zIndex","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","CenteredDialog","CENTERED_DIALOG_BACKDROP_TESTID","BloomDialogProvider","alert","useDialogContext","useDialogControl","Fab","ErrorBoundary","AvatarGroup","UserHoverCard","PromptInput","toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","Label","Field","InputGroup","Slider","Combobox","BottomSheet","Tabs","Accordion","Item","Kbd","Admonition","Menu","Tooltip","Select","ContextMenu","Popover","AlertDialog","AlertDialogHost","confirm","Command","Code","Fonts"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,QAAQ,mBAAU;AAE1D,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,uBAAoB;AAClC,SACEC,MAAM,EACNC,cAAc,EACdC,+BAA+B,EAC/BC,mBAAmB,EACnBC,KAAK,EACLC,gBAAgB,EAChBC,gBAAgB,QACX,uBAAoB;AAW3B,cAAc,uBAAoB;AAClC,SAASC,GAAG,QAAQ,oBAAiB;AAErC,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAMhD,cAAc,mBAAU;AACxB,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,aAAa,QAAQ,4BAAmB;AAEjD,cAAc,wBAAqB;AACnC,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,SAASC,KAAK,QAAoB,sBAAmB;;AAErD;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;AAC5C,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,UAAU,QAAQ,wBAAe;AAE1C,SAASC,MAAM,QAAQ,mBAAU;AAEjC,SAASC,QAAQ,QAAQ,yBAAsB;AAG/C;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;AAC/B,SAASC,IAAI,QAAQ,iBAAQ;AAE7B,SAASC,GAAG,QAAQ,gBAAO;AAG3B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,qBAAkB;AACxC,OAAO,KAAKC,OAAO,MAAM,wBAAqB;AAC9C,OAAO,KAAKC,MAAM,MAAM,uBAAoB;AAC5C,OAAO,KAAKC,WAAW,MAAM,6BAA0B;AACvD,OAAO,KAAKC,OAAO,MAAM,wBAAqB;AAC9C,SAASC,WAAW,EAAEC,eAAe,EAAEC,OAAO,QAAQ,6BAA0B;AAMhF,SAASC,OAAO,QAAQ,wBAAqB;AAG7C;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,sBAAmB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["atoms","flatten","Z_INDEX","zIndex","tokens","web","native","ios","android","platform","select","useInteractionState","useDelayedLoading","useThrottledValue","Icons","sizes","iconSizes","useCommonSVGProps","Dialog","CenteredDialog","CENTERED_DIALOG_BACKDROP_TESTID","BloomDialogProvider","alert","useDialogContext","useDialogControl","Fab","ErrorBoundary","AvatarGroup","UserHoverCard","PromptInput","toast","Typography","Skeleton","Grid","Fill","IconCircle","TextField","SegmentedControl","SearchInput","Label","Field","InputGroup","Slider","Combobox","BottomSheet","ResponsiveSheet","RESPONSIVE_SHEET_BACKDROP_TESTID","Tabs","Accordion","Item","Kbd","Admonition","Menu","Tooltip","Select","ContextMenu","Popover","AlertDialog","AlertDialogHost","confirm","Command","Code","Fonts"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAS;;AAEvB;AACA,SAASA,KAAK,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,QAAQ,mBAAU;AAE1D,OAAO,KAAKC,MAAM,MAAM,oBAAiB;AACzC,SAASC,GAAG,EAAEC,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,sBAAmB;;AAE/E;AACA,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,iBAAiB,QAAQ,8BAA2B;AAC7D,SAASC,iBAAiB,QAAQ,8BAA2B;;AAE7D;AACA,OAAO,KAAKC,KAAK,MAAM,kBAAS;AAChC,SAAkCC,KAAK,IAAIC,SAAS,EAAEC,iBAAiB,QAAQ,mBAAgB;;AAE/F;AACA,cAAc,uBAAoB;AAClC,SACEC,MAAM,EACNC,cAAc,EACdC,+BAA+B,EAC/BC,mBAAmB,EACnBC,KAAK,EACLC,gBAAgB,EAChBC,gBAAgB,QACX,uBAAoB;AAW3B,cAAc,uBAAoB;AAClC,SAASC,GAAG,QAAQ,oBAAiB;AAErC,cAAc,4BAAmB;AACjC,cAAc,oBAAW;AACzB,cAAc,4BAAmB;AACjC,cAAc,wBAAe;AAC7B,SAASC,aAAa,QAAQ,2BAAkB;AAMhD,cAAc,mBAAU;AACxB,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,aAAa,QAAQ,4BAAmB;AAEjD,cAAc,wBAAqB;AACnC,OAAO,KAAKC,WAAW,MAAM,yBAAgB;AAC7C,cAAc,mBAAU;AACxB,SAASC,KAAK,QAAoB,sBAAmB;;AAErD;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;;AAE1C;AACA,OAAO,KAAKC,QAAQ,MAAM,qBAAY;AACtC,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,SAASC,IAAI,QAAQ,iBAAQ;AAC7B,SAASC,UAAU,QAAQ,wBAAe;;AAE1C;AACA,OAAO,KAAKC,SAAS,MAAM,uBAAc;AACzC,OAAO,KAAKC,gBAAgB,MAAM,8BAAqB;AACvD,SAASC,WAAW,QAAQ,yBAAgB;AAC5C,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,KAAK,QAAQ,kBAAS;AAE/B,SAASC,UAAU,QAAQ,wBAAe;AAE1C,SAASC,MAAM,QAAQ,mBAAU;AAEjC,SAASC,QAAQ,QAAQ,yBAAsB;AAG/C;AACA,SAASC,WAAW,QAAQ,yBAAgB;AAG5C;AACA,SAASC,eAAe,EAAEC,gCAAgC,QAAQ,iCAA8B;AAOhG;AACA,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,iBAAQ;AACtB,OAAO,KAAKC,IAAI,MAAM,iBAAQ;AAC9B,cAAc,qBAAY;AAC1B,OAAO,KAAKC,SAAS,MAAM,sBAAa;;AAExC;AACA,cAAc,0BAAiB;AAC/B,SAASC,IAAI,QAAQ,iBAAQ;AAE7B,SAASC,GAAG,QAAQ,gBAAO;AAG3B;AACA,OAAO,KAAKC,UAAU,MAAM,uBAAc;AAC1C,OAAO,KAAKC,IAAI,MAAM,qBAAkB;AACxC,OAAO,KAAKC,OAAO,MAAM,wBAAqB;AAC9C,OAAO,KAAKC,MAAM,MAAM,uBAAoB;AAC5C,OAAO,KAAKC,WAAW,MAAM,6BAA0B;AACvD,OAAO,KAAKC,OAAO,MAAM,wBAAqB;AAC9C,SAASC,WAAW,EAAEC,eAAe,EAAEC,OAAO,QAAQ,6BAA0B;AAMhF,SAASC,OAAO,QAAQ,wBAAqB;AAG7C;AACA,OAAO,KAAKC,IAAI,MAAM,iBAAQ;;AAE9B;AACA,OAAO,KAAKC,KAAK,MAAM,sBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,293 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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":"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","ignoreList":[]}
|