@appsupportkit/support-sdk 0.1.2 → 0.2.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/components/BottomSheet.js +67 -47
- package/lib/commonjs/components/BottomSheet.js.map +1 -1
- package/lib/commonjs/components/LauncherButton.js +177 -0
- package/lib/commonjs/components/LauncherButton.js.map +1 -0
- package/lib/commonjs/components/SupportButton.js +54 -176
- package/lib/commonjs/components/SupportButton.js.map +1 -1
- package/lib/commonjs/components/icons.js +74 -23
- package/lib/commonjs/components/icons.js.map +1 -1
- package/lib/commonjs/components/primitives.js +183 -38
- package/lib/commonjs/components/primitives.js.map +1 -1
- package/lib/commonjs/components/screens/ComposeScreen.js +115 -58
- package/lib/commonjs/components/screens/ComposeScreen.js.map +1 -1
- package/lib/commonjs/components/screens/HomeScreen.js +170 -115
- package/lib/commonjs/components/screens/HomeScreen.js.map +1 -1
- package/lib/commonjs/components/screens/ThreadScreen.js +222 -108
- package/lib/commonjs/components/screens/ThreadScreen.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/theme.js +136 -17
- package/lib/commonjs/theme.js.map +1 -1
- package/lib/commonjs/types.js +7 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/unread.js +92 -0
- package/lib/commonjs/unread.js.map +1 -0
- package/lib/commonjs/useSupportThreads.js +286 -0
- package/lib/commonjs/useSupportThreads.js.map +1 -0
- package/lib/commonjs/utils.js +33 -0
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/components/BottomSheet.js +68 -48
- package/lib/module/components/BottomSheet.js.map +1 -1
- package/lib/module/components/LauncherButton.js +172 -0
- package/lib/module/components/LauncherButton.js.map +1 -0
- package/lib/module/components/SupportButton.js +57 -179
- package/lib/module/components/SupportButton.js.map +1 -1
- package/lib/module/components/icons.js +72 -22
- package/lib/module/components/icons.js.map +1 -1
- package/lib/module/components/primitives.js +179 -39
- package/lib/module/components/primitives.js.map +1 -1
- package/lib/module/components/screens/ComposeScreen.js +118 -61
- package/lib/module/components/screens/ComposeScreen.js.map +1 -1
- package/lib/module/components/screens/HomeScreen.js +172 -117
- package/lib/module/components/screens/HomeScreen.js.map +1 -1
- package/lib/module/components/screens/ThreadScreen.js +228 -112
- package/lib/module/components/screens/ThreadScreen.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/theme.js +135 -16
- package/lib/module/theme.js.map +1 -1
- package/lib/module/types.js +7 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/unread.js +83 -0
- package/lib/module/unread.js.map +1 -0
- package/lib/module/useSupportThreads.js +281 -0
- package/lib/module/useSupportThreads.js.map +1 -0
- package/lib/module/utils.js +30 -0
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/components/BottomSheet.d.ts.map +1 -1
- package/lib/typescript/components/LauncherButton.d.ts +14 -0
- package/lib/typescript/components/LauncherButton.d.ts.map +1 -0
- package/lib/typescript/components/SupportButton.d.ts +3 -3
- package/lib/typescript/components/SupportButton.d.ts.map +1 -1
- package/lib/typescript/components/icons.d.ts +13 -2
- package/lib/typescript/components/icons.d.ts.map +1 -1
- package/lib/typescript/components/primitives.d.ts +35 -4
- package/lib/typescript/components/primitives.d.ts.map +1 -1
- package/lib/typescript/components/screens/ComposeScreen.d.ts.map +1 -1
- package/lib/typescript/components/screens/HomeScreen.d.ts +3 -2
- package/lib/typescript/components/screens/HomeScreen.d.ts.map +1 -1
- package/lib/typescript/components/screens/ThreadScreen.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/theme.d.ts +44 -3
- package/lib/typescript/theme.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +22 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/unread.d.ts +22 -0
- package/lib/typescript/unread.d.ts.map +1 -0
- package/lib/typescript/useSupportThreads.d.ts +28 -0
- package/lib/typescript/useSupportThreads.d.ts.map +1 -0
- package/lib/typescript/utils.d.ts +5 -0
- package/lib/typescript/utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/components/BottomSheet.tsx +61 -43
- package/src/components/LauncherButton.tsx +217 -0
- package/src/components/SupportButton.tsx +52 -196
- package/src/components/icons.tsx +77 -19
- package/src/components/primitives.tsx +217 -36
- package/src/components/screens/ComposeScreen.tsx +131 -61
- package/src/components/screens/HomeScreen.tsx +168 -117
- package/src/components/screens/ThreadScreen.tsx +289 -119
- package/src/index.tsx +1 -0
- package/src/theme.ts +165 -18
- package/src/types.ts +24 -0
- package/src/unread.ts +91 -0
- package/src/useSupportThreads.ts +372 -0
- package/src/utils.ts +33 -0
|
@@ -11,12 +11,17 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
11
11
|
// Bottom sheet built on the built-in Modal + Animated APIs.
|
|
12
12
|
//
|
|
13
13
|
// Why no sheet library: the SDK needs exactly one detent, a drag handle, a
|
|
14
|
-
// backdrop fade, and a
|
|
14
|
+
// backdrop fade, and a short ease-out slide — all achievable with core APIs.
|
|
15
15
|
// Skipping reanimated/gesture-handler keeps the package free of native
|
|
16
16
|
// dependencies and install friction for consumers.
|
|
17
|
+
//
|
|
18
|
+
// `visible` drives a single animation path: the sheet stays mounted until
|
|
19
|
+
// its exit finishes, so closing from the header button, the backdrop, the
|
|
20
|
+
// hardware back button, or a drag all animate identically — and a reopen
|
|
21
|
+
// always starts from off-screen instead of appearing already in place.
|
|
17
22
|
|
|
18
|
-
const SLIDE_MS =
|
|
19
|
-
|
|
23
|
+
const SLIDE_MS = 260;
|
|
24
|
+
const FADE_MS = 200;
|
|
20
25
|
function BottomSheet({
|
|
21
26
|
visible,
|
|
22
27
|
onClose,
|
|
@@ -26,45 +31,57 @@ function BottomSheet({
|
|
|
26
31
|
const {
|
|
27
32
|
height: windowHeight
|
|
28
33
|
} = (0, _reactNative.useWindowDimensions)();
|
|
29
|
-
const sheetHeight = Math.min(windowHeight * 0.
|
|
34
|
+
const sheetHeight = Math.min(windowHeight * 0.88, 720);
|
|
35
|
+
const [rendered, setRendered] = (0, _react.useState)(false);
|
|
30
36
|
const translateY = (0, _react.useRef)(new _reactNative.Animated.Value(sheetHeight)).current;
|
|
31
37
|
const backdrop = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
useNativeDriver: true
|
|
38
|
-
}), _reactNative.Animated.timing(backdrop, {
|
|
39
|
-
toValue: 1,
|
|
40
|
-
duration: SLIDE_MS,
|
|
41
|
-
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
42
|
-
useNativeDriver: true
|
|
43
|
-
})]).start();
|
|
44
|
-
}, [translateY, backdrop]);
|
|
45
|
-
const animateOut = (0, _react.useCallback)(done => {
|
|
46
|
-
_reactNative.Animated.parallel([_reactNative.Animated.timing(translateY, {
|
|
47
|
-
toValue: sheetHeight,
|
|
48
|
-
duration: SLIDE_MS,
|
|
49
|
-
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
50
|
-
useNativeDriver: true
|
|
51
|
-
}), _reactNative.Animated.timing(backdrop, {
|
|
52
|
-
toValue: 0,
|
|
53
|
-
duration: SLIDE_MS,
|
|
54
|
-
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
55
|
-
useNativeDriver: true
|
|
56
|
-
})]).start(({
|
|
57
|
-
finished
|
|
58
|
-
}) => {
|
|
59
|
-
if (finished) done();
|
|
60
|
-
});
|
|
61
|
-
}, [translateY, backdrop, sheetHeight]);
|
|
38
|
+
/** Whether the entrance has already played for the current open. */
|
|
39
|
+
const shown = (0, _react.useRef)(false);
|
|
40
|
+
(0, _react.useEffect)(() => {
|
|
41
|
+
if (visible) setRendered(true);
|
|
42
|
+
}, [visible]);
|
|
62
43
|
(0, _react.useEffect)(() => {
|
|
63
|
-
if (
|
|
64
|
-
|
|
44
|
+
if (!rendered) return;
|
|
45
|
+
if (visible && !shown.current) {
|
|
46
|
+
shown.current = true;
|
|
47
|
+
translateY.setValue(sheetHeight);
|
|
48
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(translateY, {
|
|
49
|
+
toValue: 0,
|
|
50
|
+
duration: SLIDE_MS,
|
|
51
|
+
easing: _reactNative.Easing.bezier(0.16, 1, 0.3, 1),
|
|
52
|
+
useNativeDriver: true
|
|
53
|
+
}), _reactNative.Animated.timing(backdrop, {
|
|
54
|
+
toValue: 1,
|
|
55
|
+
duration: FADE_MS,
|
|
56
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
57
|
+
useNativeDriver: true
|
|
58
|
+
})]).start();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (!visible && shown.current) {
|
|
62
|
+
shown.current = false;
|
|
63
|
+
// Starts from wherever the sheet is now, so a drag that crosses the
|
|
64
|
+
// dismiss threshold continues rather than jumping.
|
|
65
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(translateY, {
|
|
66
|
+
toValue: sheetHeight,
|
|
67
|
+
duration: theme.motion.slow,
|
|
68
|
+
easing: _reactNative.Easing.in(_reactNative.Easing.cubic),
|
|
69
|
+
useNativeDriver: true
|
|
70
|
+
}), _reactNative.Animated.timing(backdrop, {
|
|
71
|
+
toValue: 0,
|
|
72
|
+
duration: theme.motion.slow,
|
|
73
|
+
easing: _reactNative.Easing.in(_reactNative.Easing.cubic),
|
|
74
|
+
useNativeDriver: true
|
|
75
|
+
})]).start(({
|
|
76
|
+
finished
|
|
77
|
+
}) => {
|
|
78
|
+
if (finished) setRendered(false);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}, [rendered, visible, sheetHeight, translateY, backdrop, theme.motion.slow]);
|
|
65
82
|
const requestClose = (0, _react.useCallback)(() => {
|
|
66
|
-
|
|
67
|
-
}, [
|
|
83
|
+
onClose();
|
|
84
|
+
}, [onClose]);
|
|
68
85
|
|
|
69
86
|
// Drag handle: follow the finger downward; past 25% (or a flick), dismiss.
|
|
70
87
|
const panResponder = (0, _react.useRef)(_reactNative.PanResponder.create({
|
|
@@ -79,14 +96,14 @@ function BottomSheet({
|
|
|
79
96
|
} else {
|
|
80
97
|
_reactNative.Animated.timing(translateY, {
|
|
81
98
|
toValue: 0,
|
|
82
|
-
duration:
|
|
99
|
+
duration: theme.motion.slow,
|
|
83
100
|
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
84
101
|
useNativeDriver: true
|
|
85
102
|
}).start();
|
|
86
103
|
}
|
|
87
104
|
}
|
|
88
105
|
})).current;
|
|
89
|
-
if (!
|
|
106
|
+
if (!rendered) return null;
|
|
90
107
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
91
108
|
visible: true,
|
|
92
109
|
transparent: true,
|
|
@@ -106,7 +123,7 @@ function BottomSheet({
|
|
|
106
123
|
right: 0,
|
|
107
124
|
bottom: 0,
|
|
108
125
|
left: 0,
|
|
109
|
-
backgroundColor: 'rgba(0,0,0,0.
|
|
126
|
+
backgroundColor: 'rgba(0,0,0,0.55)',
|
|
110
127
|
opacity: backdrop
|
|
111
128
|
},
|
|
112
129
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
@@ -119,27 +136,30 @@ function BottomSheet({
|
|
|
119
136
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
120
137
|
style: {
|
|
121
138
|
height: sheetHeight,
|
|
122
|
-
backgroundColor: theme.colors.
|
|
139
|
+
backgroundColor: theme.colors.bg,
|
|
123
140
|
borderTopLeftRadius: theme.radii.sheet,
|
|
124
141
|
borderTopRightRadius: theme.radii.sheet,
|
|
125
142
|
borderWidth: 1,
|
|
126
143
|
borderBottomWidth: 0,
|
|
127
144
|
borderColor: theme.colors.border,
|
|
145
|
+
overflow: 'hidden',
|
|
128
146
|
transform: [{
|
|
129
147
|
translateY
|
|
130
|
-
}]
|
|
148
|
+
}],
|
|
149
|
+
...theme.shadows.sheet
|
|
131
150
|
},
|
|
132
151
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
133
152
|
...panResponder.panHandlers,
|
|
134
153
|
style: {
|
|
135
154
|
alignItems: 'center',
|
|
136
|
-
|
|
155
|
+
paddingTop: 10,
|
|
156
|
+
paddingBottom: 6
|
|
137
157
|
},
|
|
138
158
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
139
159
|
style: {
|
|
140
|
-
width:
|
|
141
|
-
height:
|
|
142
|
-
borderRadius:
|
|
160
|
+
width: 40,
|
|
161
|
+
height: 5,
|
|
162
|
+
borderRadius: 3,
|
|
143
163
|
backgroundColor: theme.colors.borderStrong
|
|
144
164
|
}
|
|
145
165
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_reactNativeSafeAreaContext","_jsxRuntime","SLIDE_MS","BottomSheet","visible","onClose","theme","children","height","windowHeight","useWindowDimensions","sheetHeight","Math","min","translateY","useRef","Animated","Value","current","backdrop","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeSafeAreaContext","_jsxRuntime","SLIDE_MS","FADE_MS","BottomSheet","visible","onClose","theme","children","height","windowHeight","useWindowDimensions","sheetHeight","Math","min","rendered","setRendered","useState","translateY","useRef","Animated","Value","current","backdrop","shown","useEffect","setValue","parallel","timing","toValue","duration","easing","Easing","bezier","useNativeDriver","out","cubic","start","motion","slow","in","finished","requestClose","useCallback","panResponder","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","_e","g","abs","dy","onPanResponderMove","onPanResponderRelease","vy","jsx","Modal","transparent","animationType","onRequestClose","statusBarTranslucent","SafeAreaProvider","jsxs","View","style","flex","justifyContent","position","top","right","bottom","left","backgroundColor","opacity","Pressable","onPress","accessibilityLabel","colors","bg","borderTopLeftRadius","radii","sheet","borderTopRightRadius","borderWidth","borderBottomWidth","borderColor","border","overflow","transform","shadows","panHandlers","alignItems","paddingTop","paddingBottom","width","borderRadius","borderStrong","SafeAreaView","edges"],"sourceRoot":"../../../src","sources":["components/BottomSheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.LauncherButton = LauncherButton;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _icons = require("./icons");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
// The launcher: the one piece of the SDK that lives inside the host app's
|
|
12
|
+
// own UI, so it has to look intentional next to anything. Three variants
|
|
13
|
+
// cover the placements that actually occur — a floating action button, a
|
|
14
|
+
// bordered button in a header, and a bare icon in a toolbar.
|
|
15
|
+
|
|
16
|
+
const PRESS_SCALE = 0.93;
|
|
17
|
+
|
|
18
|
+
/** Counts stay legible: three digits in a pill is not a design. */
|
|
19
|
+
function badgeLabel(unread) {
|
|
20
|
+
return unread > 99 ? '99+' : String(unread);
|
|
21
|
+
}
|
|
22
|
+
function LauncherButton({
|
|
23
|
+
theme,
|
|
24
|
+
unread,
|
|
25
|
+
variant = 'solid',
|
|
26
|
+
size = 52,
|
|
27
|
+
label,
|
|
28
|
+
style,
|
|
29
|
+
onPress
|
|
30
|
+
}) {
|
|
31
|
+
const scale = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
|
|
32
|
+
const pulse = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
33
|
+
const previousUnread = (0, _react.useRef)(unread);
|
|
34
|
+
|
|
35
|
+
// A new reply pulses the halo twice, then stops. Enough to catch the eye
|
|
36
|
+
// on the way past; not a permanently animating element in someone's app.
|
|
37
|
+
(0, _react.useEffect)(() => {
|
|
38
|
+
if (unread > previousUnread.current) {
|
|
39
|
+
pulse.setValue(0);
|
|
40
|
+
const animation = _reactNative.Animated.loop(_reactNative.Animated.timing(pulse, {
|
|
41
|
+
toValue: 1,
|
|
42
|
+
duration: 1600,
|
|
43
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.ease),
|
|
44
|
+
useNativeDriver: true
|
|
45
|
+
}), {
|
|
46
|
+
iterations: 2
|
|
47
|
+
});
|
|
48
|
+
animation.start(() => pulse.setValue(0));
|
|
49
|
+
previousUnread.current = unread;
|
|
50
|
+
return () => animation.stop();
|
|
51
|
+
}
|
|
52
|
+
previousUnread.current = unread;
|
|
53
|
+
return undefined;
|
|
54
|
+
}, [unread, pulse]);
|
|
55
|
+
const press = to => _reactNative.Animated.timing(scale, {
|
|
56
|
+
toValue: to,
|
|
57
|
+
duration: to === 1 ? theme.motion.base : theme.motion.fast,
|
|
58
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
59
|
+
useNativeDriver: true
|
|
60
|
+
}).start();
|
|
61
|
+
const solid = variant === 'solid';
|
|
62
|
+
const soft = variant === 'soft';
|
|
63
|
+
const fill = solid ? theme.colors.accent : soft ? theme.colors.surface : 'transparent';
|
|
64
|
+
const markColor = solid ? theme.colors.accentForeground : soft ? theme.colors.accent : theme.launcher.minimalMark;
|
|
65
|
+
// Dots are punched out of the bubble in whatever sits behind the mark —
|
|
66
|
+
// the button's own fill, or the app background when there isn't one.
|
|
67
|
+
const markHoleColor = solid ? theme.colors.accent : soft ? theme.colors.surface : theme.colors.bg;
|
|
68
|
+
// Dark: a hairline separates the fill from a near-black app background.
|
|
69
|
+
// Light: the accent-tinted shadow already does that, so the ring only has
|
|
70
|
+
// to keep the edge from looking soft.
|
|
71
|
+
const border = solid ? {
|
|
72
|
+
borderWidth: 1,
|
|
73
|
+
borderColor: theme.launcher.solidRing
|
|
74
|
+
} : soft ? {
|
|
75
|
+
borderWidth: 1,
|
|
76
|
+
borderColor: theme.colors.border
|
|
77
|
+
} : {
|
|
78
|
+
borderWidth: 0,
|
|
79
|
+
borderColor: 'transparent'
|
|
80
|
+
};
|
|
81
|
+
const badgeBg = solid ? theme.colors.accentForeground : theme.colors.accent;
|
|
82
|
+
const badgeFg = solid ? theme.colors.accent : theme.colors.accentForeground;
|
|
83
|
+
const height = label ? Math.max(44, size * 0.84) : size;
|
|
84
|
+
const markSize = Math.round(size * (label ? 0.36 : 0.42));
|
|
85
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
86
|
+
style: [{
|
|
87
|
+
transform: [{
|
|
88
|
+
scale
|
|
89
|
+
}]
|
|
90
|
+
}, style]
|
|
91
|
+
// The halo and badge sit outside the button's bounds.
|
|
92
|
+
,
|
|
93
|
+
pointerEvents: "box-none",
|
|
94
|
+
children: [unread > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
95
|
+
pointerEvents: "none",
|
|
96
|
+
style: {
|
|
97
|
+
position: 'absolute',
|
|
98
|
+
top: 0,
|
|
99
|
+
left: 0,
|
|
100
|
+
width: label ? undefined : size,
|
|
101
|
+
right: label ? 0 : undefined,
|
|
102
|
+
height,
|
|
103
|
+
borderRadius: theme.radii.pill,
|
|
104
|
+
backgroundColor: theme.colors.accent,
|
|
105
|
+
opacity: pulse.interpolate({
|
|
106
|
+
inputRange: [0, 1],
|
|
107
|
+
outputRange: [0.28, 0]
|
|
108
|
+
}),
|
|
109
|
+
transform: [{
|
|
110
|
+
scale: pulse.interpolate({
|
|
111
|
+
inputRange: [0, 1],
|
|
112
|
+
outputRange: [1, 1.5]
|
|
113
|
+
})
|
|
114
|
+
}]
|
|
115
|
+
}
|
|
116
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
|
|
117
|
+
onPress: onPress,
|
|
118
|
+
onPressIn: () => press(PRESS_SCALE),
|
|
119
|
+
onPressOut: () => press(1),
|
|
120
|
+
hitSlop: 8,
|
|
121
|
+
accessibilityRole: "button",
|
|
122
|
+
accessibilityLabel: unread > 0 ? `Support, ${unread} unread ${unread === 1 ? 'reply' : 'replies'}` : 'Support',
|
|
123
|
+
style: {
|
|
124
|
+
height,
|
|
125
|
+
width: label ? undefined : size,
|
|
126
|
+
paddingHorizontal: label ? 18 : 0,
|
|
127
|
+
flexDirection: 'row',
|
|
128
|
+
alignItems: 'center',
|
|
129
|
+
justifyContent: 'center',
|
|
130
|
+
gap: 9,
|
|
131
|
+
borderRadius: theme.radii.pill,
|
|
132
|
+
backgroundColor: fill,
|
|
133
|
+
...border,
|
|
134
|
+
...(variant === 'minimal' ? null : theme.shadows.launcher)
|
|
135
|
+
},
|
|
136
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.ChatBubbleMark, {
|
|
137
|
+
color: markColor,
|
|
138
|
+
dotColor: markHoleColor,
|
|
139
|
+
size: markSize
|
|
140
|
+
}), label !== undefined && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
141
|
+
style: {
|
|
142
|
+
fontSize: 15,
|
|
143
|
+
fontWeight: '600',
|
|
144
|
+
letterSpacing: -0.1,
|
|
145
|
+
color: solid ? theme.colors.accentForeground : theme.colors.textPrimary
|
|
146
|
+
},
|
|
147
|
+
children: label
|
|
148
|
+
})]
|
|
149
|
+
}), unread > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
150
|
+
pointerEvents: "none",
|
|
151
|
+
style: {
|
|
152
|
+
position: 'absolute',
|
|
153
|
+
top: -5,
|
|
154
|
+
right: -5,
|
|
155
|
+
minWidth: 19,
|
|
156
|
+
height: 19,
|
|
157
|
+
borderRadius: theme.radii.pill,
|
|
158
|
+
paddingHorizontal: 5,
|
|
159
|
+
backgroundColor: badgeBg,
|
|
160
|
+
alignItems: 'center',
|
|
161
|
+
justifyContent: 'center',
|
|
162
|
+
...theme.shadows.badge
|
|
163
|
+
},
|
|
164
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
165
|
+
style: {
|
|
166
|
+
fontSize: 11,
|
|
167
|
+
lineHeight: 14,
|
|
168
|
+
fontWeight: '700',
|
|
169
|
+
color: badgeFg,
|
|
170
|
+
fontVariant: ['tabular-nums']
|
|
171
|
+
},
|
|
172
|
+
children: badgeLabel(unread)
|
|
173
|
+
})
|
|
174
|
+
})]
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=LauncherButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_icons","_jsxRuntime","PRESS_SCALE","badgeLabel","unread","String","LauncherButton","theme","variant","size","label","style","onPress","scale","useRef","Animated","Value","current","pulse","previousUnread","useEffect","setValue","animation","loop","timing","toValue","duration","easing","Easing","out","ease","useNativeDriver","iterations","start","stop","undefined","press","to","motion","base","fast","cubic","solid","soft","fill","colors","accent","surface","markColor","accentForeground","launcher","minimalMark","markHoleColor","bg","border","borderWidth","borderColor","solidRing","badgeBg","badgeFg","height","Math","max","markSize","round","jsxs","View","transform","pointerEvents","children","jsx","position","top","left","width","right","borderRadius","radii","pill","backgroundColor","opacity","interpolate","inputRange","outputRange","Pressable","onPressIn","onPressOut","hitSlop","accessibilityRole","accessibilityLabel","paddingHorizontal","flexDirection","alignItems","justifyContent","gap","shadows","ChatBubbleMark","color","dotColor","Text","fontSize","fontWeight","letterSpacing","textPrimary","minWidth","badge","lineHeight","fontVariant"],"sourceRoot":"../../../src","sources":["components/LauncherButton.tsx"],"mappings":"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","ignoreList":[]}
|