@appsupportkit/support-sdk 0.1.1 → 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/api.js +29 -0
- package/lib/commonjs/api.js.map +1 -1
- 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 +76 -146
- 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 +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/push.js +103 -0
- package/lib/commonjs/push.js.map +1 -0
- 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/api.js +27 -0
- package/lib/module/api.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 +79 -149
- 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 +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/push.js +98 -0
- package/lib/module/push.js.map +1 -0
- 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/api.d.ts +17 -1
- package/lib/typescript/api.d.ts.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 +2 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/push.d.ts +18 -0
- package/lib/typescript/push.d.ts.map +1 -0
- package/lib/typescript/theme.d.ts +44 -3
- package/lib/typescript/theme.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +37 -4
- 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 +8 -2
- package/src/api.ts +41 -1
- package/src/components/BottomSheet.tsx +61 -43
- package/src/components/LauncherButton.tsx +217 -0
- package/src/components/SupportButton.tsx +81 -162
- 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 +3 -0
- package/src/push.ts +97 -0
- package/src/theme.ts +165 -18
- package/src/types.ts +39 -4
- package/src/unread.ts +91 -0
- package/src/useSupportThreads.ts +372 -0
- package/src/utils.ts +33 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["relativeTime","iso","then","Date","getTime","seconds","Math","max","floor","now","minutes","hours","days","weeks","months","formatDate","toLocaleDateString","undefined","year","month","day","validateProps","props","appName","length","apiKey","supabaseUrl","test","user","name","isPaid","revenuecatId","appVersion"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["relativeTime","iso","then","Date","getTime","seconds","Math","max","floor","now","minutes","hours","days","weeks","months","formatDate","toLocaleDateString","undefined","year","month","day","formatTime","toLocaleTimeString","hour","minute","isSameDay","a","b","first","second","getFullYear","getMonth","getDate","dayLabel","toISOString","yesterday","date","weekday","validateProps","props","appName","length","apiKey","supabaseUrl","test","user","name","isPaid","revenuecatId","appVersion"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/api.js
CHANGED
|
@@ -48,6 +48,33 @@ export function getThreads(config, revenuecatId) {
|
|
|
48
48
|
method: 'GET'
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Badge-only endpoint (~18 bytes) used for idle polling, instead of
|
|
54
|
+
* re-fetching every thread and message just to check for new replies.
|
|
55
|
+
*/
|
|
56
|
+
export function getUnreadCount(config, revenuecatId) {
|
|
57
|
+
const params = new URLSearchParams({
|
|
58
|
+
revenuecat_id: revenuecatId
|
|
59
|
+
});
|
|
60
|
+
return request(config, `get-unread-count?${params.toString()}`, {
|
|
61
|
+
method: 'GET'
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Reports the OS notification permission outcome (including denials). */
|
|
66
|
+
export function registerPush(config, input) {
|
|
67
|
+
return request(config, 'register-push', {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
body: JSON.stringify({
|
|
70
|
+
app_name: config.appName,
|
|
71
|
+
revenuecat_id: input.revenuecatId,
|
|
72
|
+
permission_status: input.permissionStatus,
|
|
73
|
+
expo_push_token: input.expoPushToken,
|
|
74
|
+
asked: input.asked
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
}
|
|
51
78
|
export function submitQuery(config, input) {
|
|
52
79
|
return request(config, 'submit-query', {
|
|
53
80
|
method: 'POST',
|
package/lib/module/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SupportApiError","Error","constructor","message","status","offline","name","request","config","path","init","url","supabaseUrl","replace","response","fetch","headers","apiKey","payload","json","ok","error","getThreads","revenuecatId","params","URLSearchParams","revenuecat_id","toString","method","
|
|
1
|
+
{"version":3,"names":["SupportApiError","Error","constructor","message","status","offline","name","request","config","path","init","url","supabaseUrl","replace","response","fetch","headers","apiKey","payload","json","ok","error","getThreads","revenuecatId","params","URLSearchParams","revenuecat_id","toString","method","getUnreadCount","registerPush","input","body","JSON","stringify","app_name","appName","permission_status","permissionStatus","expo_push_token","expoPushToken","asked","submitQuery","query_type","queryType","user_name","userName","is_paid","isPaid","app_version","appVersion","postMessage","query_id","queryId","markRead"],"sourceRoot":"../../src","sources":["api.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,15 +3,20 @@
|
|
|
3
3
|
// Bottom sheet built on the built-in Modal + Animated APIs.
|
|
4
4
|
//
|
|
5
5
|
// Why no sheet library: the SDK needs exactly one detent, a drag handle, a
|
|
6
|
-
// backdrop fade, and a
|
|
6
|
+
// backdrop fade, and a short ease-out slide — all achievable with core APIs.
|
|
7
7
|
// Skipping reanimated/gesture-handler keeps the package free of native
|
|
8
8
|
// dependencies and install friction for consumers.
|
|
9
|
-
|
|
9
|
+
//
|
|
10
|
+
// `visible` drives a single animation path: the sheet stays mounted until
|
|
11
|
+
// its exit finishes, so closing from the header button, the backdrop, the
|
|
12
|
+
// hardware back button, or a drag all animate identically — and a reopen
|
|
13
|
+
// always starts from off-screen instead of appearing already in place.
|
|
14
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
10
15
|
import { Animated, Easing, Modal, PanResponder, Pressable, useWindowDimensions, View } from 'react-native';
|
|
11
16
|
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
|
|
12
17
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
-
const SLIDE_MS =
|
|
14
|
-
|
|
18
|
+
const SLIDE_MS = 260;
|
|
19
|
+
const FADE_MS = 200;
|
|
15
20
|
export function BottomSheet({
|
|
16
21
|
visible,
|
|
17
22
|
onClose,
|
|
@@ -21,45 +26,57 @@ export function BottomSheet({
|
|
|
21
26
|
const {
|
|
22
27
|
height: windowHeight
|
|
23
28
|
} = useWindowDimensions();
|
|
24
|
-
const sheetHeight = Math.min(windowHeight * 0.
|
|
29
|
+
const sheetHeight = Math.min(windowHeight * 0.88, 720);
|
|
30
|
+
const [rendered, setRendered] = useState(false);
|
|
25
31
|
const translateY = useRef(new Animated.Value(sheetHeight)).current;
|
|
26
32
|
const backdrop = useRef(new Animated.Value(0)).current;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
useNativeDriver: true
|
|
33
|
-
}), Animated.timing(backdrop, {
|
|
34
|
-
toValue: 1,
|
|
35
|
-
duration: SLIDE_MS,
|
|
36
|
-
easing: Easing.out(Easing.cubic),
|
|
37
|
-
useNativeDriver: true
|
|
38
|
-
})]).start();
|
|
39
|
-
}, [translateY, backdrop]);
|
|
40
|
-
const animateOut = useCallback(done => {
|
|
41
|
-
Animated.parallel([Animated.timing(translateY, {
|
|
42
|
-
toValue: sheetHeight,
|
|
43
|
-
duration: SLIDE_MS,
|
|
44
|
-
easing: Easing.out(Easing.cubic),
|
|
45
|
-
useNativeDriver: true
|
|
46
|
-
}), Animated.timing(backdrop, {
|
|
47
|
-
toValue: 0,
|
|
48
|
-
duration: SLIDE_MS,
|
|
49
|
-
easing: Easing.out(Easing.cubic),
|
|
50
|
-
useNativeDriver: true
|
|
51
|
-
})]).start(({
|
|
52
|
-
finished
|
|
53
|
-
}) => {
|
|
54
|
-
if (finished) done();
|
|
55
|
-
});
|
|
56
|
-
}, [translateY, backdrop, sheetHeight]);
|
|
33
|
+
/** Whether the entrance has already played for the current open. */
|
|
34
|
+
const shown = useRef(false);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (visible) setRendered(true);
|
|
37
|
+
}, [visible]);
|
|
57
38
|
useEffect(() => {
|
|
58
|
-
if (
|
|
59
|
-
|
|
39
|
+
if (!rendered) return;
|
|
40
|
+
if (visible && !shown.current) {
|
|
41
|
+
shown.current = true;
|
|
42
|
+
translateY.setValue(sheetHeight);
|
|
43
|
+
Animated.parallel([Animated.timing(translateY, {
|
|
44
|
+
toValue: 0,
|
|
45
|
+
duration: SLIDE_MS,
|
|
46
|
+
easing: Easing.bezier(0.16, 1, 0.3, 1),
|
|
47
|
+
useNativeDriver: true
|
|
48
|
+
}), Animated.timing(backdrop, {
|
|
49
|
+
toValue: 1,
|
|
50
|
+
duration: FADE_MS,
|
|
51
|
+
easing: Easing.out(Easing.cubic),
|
|
52
|
+
useNativeDriver: true
|
|
53
|
+
})]).start();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (!visible && shown.current) {
|
|
57
|
+
shown.current = false;
|
|
58
|
+
// Starts from wherever the sheet is now, so a drag that crosses the
|
|
59
|
+
// dismiss threshold continues rather than jumping.
|
|
60
|
+
Animated.parallel([Animated.timing(translateY, {
|
|
61
|
+
toValue: sheetHeight,
|
|
62
|
+
duration: theme.motion.slow,
|
|
63
|
+
easing: Easing.in(Easing.cubic),
|
|
64
|
+
useNativeDriver: true
|
|
65
|
+
}), Animated.timing(backdrop, {
|
|
66
|
+
toValue: 0,
|
|
67
|
+
duration: theme.motion.slow,
|
|
68
|
+
easing: Easing.in(Easing.cubic),
|
|
69
|
+
useNativeDriver: true
|
|
70
|
+
})]).start(({
|
|
71
|
+
finished
|
|
72
|
+
}) => {
|
|
73
|
+
if (finished) setRendered(false);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}, [rendered, visible, sheetHeight, translateY, backdrop, theme.motion.slow]);
|
|
60
77
|
const requestClose = useCallback(() => {
|
|
61
|
-
|
|
62
|
-
}, [
|
|
78
|
+
onClose();
|
|
79
|
+
}, [onClose]);
|
|
63
80
|
|
|
64
81
|
// Drag handle: follow the finger downward; past 25% (or a flick), dismiss.
|
|
65
82
|
const panResponder = useRef(PanResponder.create({
|
|
@@ -74,14 +91,14 @@ export function BottomSheet({
|
|
|
74
91
|
} else {
|
|
75
92
|
Animated.timing(translateY, {
|
|
76
93
|
toValue: 0,
|
|
77
|
-
duration:
|
|
94
|
+
duration: theme.motion.slow,
|
|
78
95
|
easing: Easing.out(Easing.cubic),
|
|
79
96
|
useNativeDriver: true
|
|
80
97
|
}).start();
|
|
81
98
|
}
|
|
82
99
|
}
|
|
83
100
|
})).current;
|
|
84
|
-
if (!
|
|
101
|
+
if (!rendered) return null;
|
|
85
102
|
return /*#__PURE__*/_jsx(Modal, {
|
|
86
103
|
visible: true,
|
|
87
104
|
transparent: true,
|
|
@@ -101,7 +118,7 @@ export function BottomSheet({
|
|
|
101
118
|
right: 0,
|
|
102
119
|
bottom: 0,
|
|
103
120
|
left: 0,
|
|
104
|
-
backgroundColor: 'rgba(0,0,0,0.
|
|
121
|
+
backgroundColor: 'rgba(0,0,0,0.55)',
|
|
105
122
|
opacity: backdrop
|
|
106
123
|
},
|
|
107
124
|
children: /*#__PURE__*/_jsx(Pressable, {
|
|
@@ -114,27 +131,30 @@ export function BottomSheet({
|
|
|
114
131
|
}), /*#__PURE__*/_jsxs(Animated.View, {
|
|
115
132
|
style: {
|
|
116
133
|
height: sheetHeight,
|
|
117
|
-
backgroundColor: theme.colors.
|
|
134
|
+
backgroundColor: theme.colors.bg,
|
|
118
135
|
borderTopLeftRadius: theme.radii.sheet,
|
|
119
136
|
borderTopRightRadius: theme.radii.sheet,
|
|
120
137
|
borderWidth: 1,
|
|
121
138
|
borderBottomWidth: 0,
|
|
122
139
|
borderColor: theme.colors.border,
|
|
140
|
+
overflow: 'hidden',
|
|
123
141
|
transform: [{
|
|
124
142
|
translateY
|
|
125
|
-
}]
|
|
143
|
+
}],
|
|
144
|
+
...theme.shadows.sheet
|
|
126
145
|
},
|
|
127
146
|
children: [/*#__PURE__*/_jsx(View, {
|
|
128
147
|
...panResponder.panHandlers,
|
|
129
148
|
style: {
|
|
130
149
|
alignItems: 'center',
|
|
131
|
-
|
|
150
|
+
paddingTop: 10,
|
|
151
|
+
paddingBottom: 6
|
|
132
152
|
},
|
|
133
153
|
children: /*#__PURE__*/_jsx(View, {
|
|
134
154
|
style: {
|
|
135
|
-
width:
|
|
136
|
-
height:
|
|
137
|
-
borderRadius:
|
|
155
|
+
width: 40,
|
|
156
|
+
height: 5,
|
|
157
|
+
borderRadius: 3,
|
|
138
158
|
backgroundColor: theme.colors.borderStrong
|
|
139
159
|
}
|
|
140
160
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","Animated","Easing","Modal","PanResponder","Pressable","useWindowDimensions","View","SafeAreaProvider","SafeAreaView","jsx","_jsx","jsxs","_jsxs","SLIDE_MS","BottomSheet","visible","onClose","theme","children","height","windowHeight","sheetHeight","Math","min","translateY","Value","current","backdrop","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useState","Animated","Easing","Modal","PanResponder","Pressable","useWindowDimensions","View","SafeAreaProvider","SafeAreaView","jsx","_jsx","jsxs","_jsxs","SLIDE_MS","FADE_MS","BottomSheet","visible","onClose","theme","children","height","windowHeight","sheetHeight","Math","min","rendered","setRendered","translateY","Value","current","backdrop","shown","setValue","parallel","timing","toValue","duration","easing","bezier","useNativeDriver","out","cubic","start","motion","slow","in","finished","requestClose","panResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","_e","g","abs","dy","onPanResponderMove","onPanResponderRelease","vy","transparent","animationType","onRequestClose","statusBarTranslucent","style","flex","justifyContent","position","top","right","bottom","left","backgroundColor","opacity","onPress","accessibilityLabel","colors","bg","borderTopLeftRadius","radii","sheet","borderTopRightRadius","borderWidth","borderBottomWidth","borderColor","border","overflow","transform","shadows","panHandlers","alignItems","paddingTop","paddingBottom","width","borderRadius","borderStrong","edges"],"sourceRoot":"../../../src","sources":["components/BottomSheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// The launcher: the one piece of the SDK that lives inside the host app's
|
|
4
|
+
// own UI, so it has to look intentional next to anything. Three variants
|
|
5
|
+
// cover the placements that actually occur — a floating action button, a
|
|
6
|
+
// bordered button in a header, and a bare icon in a toolbar.
|
|
7
|
+
import { useEffect, useRef } from 'react';
|
|
8
|
+
import { Animated, Easing, Pressable, Text, View } from 'react-native';
|
|
9
|
+
import { ChatBubbleMark } from './icons';
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
const PRESS_SCALE = 0.93;
|
|
12
|
+
|
|
13
|
+
/** Counts stay legible: three digits in a pill is not a design. */
|
|
14
|
+
function badgeLabel(unread) {
|
|
15
|
+
return unread > 99 ? '99+' : String(unread);
|
|
16
|
+
}
|
|
17
|
+
export function LauncherButton({
|
|
18
|
+
theme,
|
|
19
|
+
unread,
|
|
20
|
+
variant = 'solid',
|
|
21
|
+
size = 52,
|
|
22
|
+
label,
|
|
23
|
+
style,
|
|
24
|
+
onPress
|
|
25
|
+
}) {
|
|
26
|
+
const scale = useRef(new Animated.Value(1)).current;
|
|
27
|
+
const pulse = useRef(new Animated.Value(0)).current;
|
|
28
|
+
const previousUnread = useRef(unread);
|
|
29
|
+
|
|
30
|
+
// A new reply pulses the halo twice, then stops. Enough to catch the eye
|
|
31
|
+
// on the way past; not a permanently animating element in someone's app.
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (unread > previousUnread.current) {
|
|
34
|
+
pulse.setValue(0);
|
|
35
|
+
const animation = Animated.loop(Animated.timing(pulse, {
|
|
36
|
+
toValue: 1,
|
|
37
|
+
duration: 1600,
|
|
38
|
+
easing: Easing.out(Easing.ease),
|
|
39
|
+
useNativeDriver: true
|
|
40
|
+
}), {
|
|
41
|
+
iterations: 2
|
|
42
|
+
});
|
|
43
|
+
animation.start(() => pulse.setValue(0));
|
|
44
|
+
previousUnread.current = unread;
|
|
45
|
+
return () => animation.stop();
|
|
46
|
+
}
|
|
47
|
+
previousUnread.current = unread;
|
|
48
|
+
return undefined;
|
|
49
|
+
}, [unread, pulse]);
|
|
50
|
+
const press = to => Animated.timing(scale, {
|
|
51
|
+
toValue: to,
|
|
52
|
+
duration: to === 1 ? theme.motion.base : theme.motion.fast,
|
|
53
|
+
easing: Easing.out(Easing.cubic),
|
|
54
|
+
useNativeDriver: true
|
|
55
|
+
}).start();
|
|
56
|
+
const solid = variant === 'solid';
|
|
57
|
+
const soft = variant === 'soft';
|
|
58
|
+
const fill = solid ? theme.colors.accent : soft ? theme.colors.surface : 'transparent';
|
|
59
|
+
const markColor = solid ? theme.colors.accentForeground : soft ? theme.colors.accent : theme.launcher.minimalMark;
|
|
60
|
+
// Dots are punched out of the bubble in whatever sits behind the mark —
|
|
61
|
+
// the button's own fill, or the app background when there isn't one.
|
|
62
|
+
const markHoleColor = solid ? theme.colors.accent : soft ? theme.colors.surface : theme.colors.bg;
|
|
63
|
+
// Dark: a hairline separates the fill from a near-black app background.
|
|
64
|
+
// Light: the accent-tinted shadow already does that, so the ring only has
|
|
65
|
+
// to keep the edge from looking soft.
|
|
66
|
+
const border = solid ? {
|
|
67
|
+
borderWidth: 1,
|
|
68
|
+
borderColor: theme.launcher.solidRing
|
|
69
|
+
} : soft ? {
|
|
70
|
+
borderWidth: 1,
|
|
71
|
+
borderColor: theme.colors.border
|
|
72
|
+
} : {
|
|
73
|
+
borderWidth: 0,
|
|
74
|
+
borderColor: 'transparent'
|
|
75
|
+
};
|
|
76
|
+
const badgeBg = solid ? theme.colors.accentForeground : theme.colors.accent;
|
|
77
|
+
const badgeFg = solid ? theme.colors.accent : theme.colors.accentForeground;
|
|
78
|
+
const height = label ? Math.max(44, size * 0.84) : size;
|
|
79
|
+
const markSize = Math.round(size * (label ? 0.36 : 0.42));
|
|
80
|
+
return /*#__PURE__*/_jsxs(Animated.View, {
|
|
81
|
+
style: [{
|
|
82
|
+
transform: [{
|
|
83
|
+
scale
|
|
84
|
+
}]
|
|
85
|
+
}, style]
|
|
86
|
+
// The halo and badge sit outside the button's bounds.
|
|
87
|
+
,
|
|
88
|
+
pointerEvents: "box-none",
|
|
89
|
+
children: [unread > 0 && /*#__PURE__*/_jsx(Animated.View, {
|
|
90
|
+
pointerEvents: "none",
|
|
91
|
+
style: {
|
|
92
|
+
position: 'absolute',
|
|
93
|
+
top: 0,
|
|
94
|
+
left: 0,
|
|
95
|
+
width: label ? undefined : size,
|
|
96
|
+
right: label ? 0 : undefined,
|
|
97
|
+
height,
|
|
98
|
+
borderRadius: theme.radii.pill,
|
|
99
|
+
backgroundColor: theme.colors.accent,
|
|
100
|
+
opacity: pulse.interpolate({
|
|
101
|
+
inputRange: [0, 1],
|
|
102
|
+
outputRange: [0.28, 0]
|
|
103
|
+
}),
|
|
104
|
+
transform: [{
|
|
105
|
+
scale: pulse.interpolate({
|
|
106
|
+
inputRange: [0, 1],
|
|
107
|
+
outputRange: [1, 1.5]
|
|
108
|
+
})
|
|
109
|
+
}]
|
|
110
|
+
}
|
|
111
|
+
}), /*#__PURE__*/_jsxs(Pressable, {
|
|
112
|
+
onPress: onPress,
|
|
113
|
+
onPressIn: () => press(PRESS_SCALE),
|
|
114
|
+
onPressOut: () => press(1),
|
|
115
|
+
hitSlop: 8,
|
|
116
|
+
accessibilityRole: "button",
|
|
117
|
+
accessibilityLabel: unread > 0 ? `Support, ${unread} unread ${unread === 1 ? 'reply' : 'replies'}` : 'Support',
|
|
118
|
+
style: {
|
|
119
|
+
height,
|
|
120
|
+
width: label ? undefined : size,
|
|
121
|
+
paddingHorizontal: label ? 18 : 0,
|
|
122
|
+
flexDirection: 'row',
|
|
123
|
+
alignItems: 'center',
|
|
124
|
+
justifyContent: 'center',
|
|
125
|
+
gap: 9,
|
|
126
|
+
borderRadius: theme.radii.pill,
|
|
127
|
+
backgroundColor: fill,
|
|
128
|
+
...border,
|
|
129
|
+
...(variant === 'minimal' ? null : theme.shadows.launcher)
|
|
130
|
+
},
|
|
131
|
+
children: [/*#__PURE__*/_jsx(ChatBubbleMark, {
|
|
132
|
+
color: markColor,
|
|
133
|
+
dotColor: markHoleColor,
|
|
134
|
+
size: markSize
|
|
135
|
+
}), label !== undefined && /*#__PURE__*/_jsx(Text, {
|
|
136
|
+
style: {
|
|
137
|
+
fontSize: 15,
|
|
138
|
+
fontWeight: '600',
|
|
139
|
+
letterSpacing: -0.1,
|
|
140
|
+
color: solid ? theme.colors.accentForeground : theme.colors.textPrimary
|
|
141
|
+
},
|
|
142
|
+
children: label
|
|
143
|
+
})]
|
|
144
|
+
}), unread > 0 && /*#__PURE__*/_jsx(View, {
|
|
145
|
+
pointerEvents: "none",
|
|
146
|
+
style: {
|
|
147
|
+
position: 'absolute',
|
|
148
|
+
top: -5,
|
|
149
|
+
right: -5,
|
|
150
|
+
minWidth: 19,
|
|
151
|
+
height: 19,
|
|
152
|
+
borderRadius: theme.radii.pill,
|
|
153
|
+
paddingHorizontal: 5,
|
|
154
|
+
backgroundColor: badgeBg,
|
|
155
|
+
alignItems: 'center',
|
|
156
|
+
justifyContent: 'center',
|
|
157
|
+
...theme.shadows.badge
|
|
158
|
+
},
|
|
159
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
160
|
+
style: {
|
|
161
|
+
fontSize: 11,
|
|
162
|
+
lineHeight: 14,
|
|
163
|
+
fontWeight: '700',
|
|
164
|
+
color: badgeFg,
|
|
165
|
+
fontVariant: ['tabular-nums']
|
|
166
|
+
},
|
|
167
|
+
children: badgeLabel(unread)
|
|
168
|
+
})
|
|
169
|
+
})]
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=LauncherButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","Animated","Easing","Pressable","Text","View","ChatBubbleMark","jsx","_jsx","jsxs","_jsxs","PRESS_SCALE","badgeLabel","unread","String","LauncherButton","theme","variant","size","label","style","onPress","scale","Value","current","pulse","previousUnread","setValue","animation","loop","timing","toValue","duration","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","transform","pointerEvents","children","position","top","left","width","right","borderRadius","radii","pill","backgroundColor","opacity","interpolate","inputRange","outputRange","onPressIn","onPressOut","hitSlop","accessibilityRole","accessibilityLabel","paddingHorizontal","flexDirection","alignItems","justifyContent","gap","shadows","color","dotColor","fontSize","fontWeight","letterSpacing","textPrimary","minWidth","badge","lineHeight","fontVariant"],"sourceRoot":"../../../src","sources":["components/LauncherButton.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SACEC,QAAQ,EACRC,MAAM,EACNC,SAAS,EACTC,IAAI,EACJC,IAAI,QAGC,cAAc;AAGrB,SAASC,cAAc,QAAQ,SAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEzC,MAAMC,WAAW,GAAG,IAAI;;AAExB;AACA,SAASC,UAAUA,CAACC,MAAc,EAAU;EAC1C,OAAOA,MAAM,GAAG,EAAE,GAAG,KAAK,GAAGC,MAAM,CAACD,MAAM,CAAC;AAC7C;AAEA,OAAO,SAASE,cAAcA,CAAC;EAC7BC,KAAK;EACLH,MAAM;EACNI,OAAO,GAAG,OAAO;EACjBC,IAAI,GAAG,EAAE;EACTC,KAAK;EACLC,KAAK;EACLC;AAUF,CAAC,EAAE;EACD,MAAMC,KAAK,GAAGtB,MAAM,CAAC,IAAIC,QAAQ,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO;EACnD,MAAMC,KAAK,GAAGzB,MAAM,CAAC,IAAIC,QAAQ,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO;EACnD,MAAME,cAAc,GAAG1B,MAAM,CAACa,MAAM,CAAC;;EAErC;EACA;EACAd,SAAS,CAAC,MAAM;IACd,IAAIc,MAAM,GAAGa,cAAc,CAACF,OAAO,EAAE;MACnCC,KAAK,CAACE,QAAQ,CAAC,CAAC,CAAC;MACjB,MAAMC,SAAS,GAAG3B,QAAQ,CAAC4B,IAAI,CAC7B5B,QAAQ,CAAC6B,MAAM,CAACL,KAAK,EAAE;QACrBM,OAAO,EAAE,CAAC;QACVC,QAAQ,EAAE,IAAI;QACdC,MAAM,EAAE/B,MAAM,CAACgC,GAAG,CAAChC,MAAM,CAACiC,IAAI,CAAC;QAC/BC,eAAe,EAAE;MACnB,CAAC,CAAC,EACF;QAAEC,UAAU,EAAE;MAAE,CAClB,CAAC;MACDT,SAAS,CAACU,KAAK,CAAC,MAAMb,KAAK,CAACE,QAAQ,CAAC,CAAC,CAAC,CAAC;MACxCD,cAAc,CAACF,OAAO,GAAGX,MAAM;MAC/B,OAAO,MAAMe,SAAS,CAACW,IAAI,CAAC,CAAC;IAC/B;IACAb,cAAc,CAACF,OAAO,GAAGX,MAAM;IAC/B,OAAO2B,SAAS;EAClB,CAAC,EAAE,CAAC3B,MAAM,EAAEY,KAAK,CAAC,CAAC;EAEnB,MAAMgB,KAAK,GAAIC,EAAU,IACvBzC,QAAQ,CAAC6B,MAAM,CAACR,KAAK,EAAE;IACrBS,OAAO,EAAEW,EAAE;IACXV,QAAQ,EAAEU,EAAE,KAAK,CAAC,GAAG1B,KAAK,CAAC2B,MAAM,CAACC,IAAI,GAAG5B,KAAK,CAAC2B,MAAM,CAACE,IAAI;IAC1DZ,MAAM,EAAE/B,MAAM,CAACgC,GAAG,CAAChC,MAAM,CAAC4C,KAAK,CAAC;IAChCV,eAAe,EAAE;EACnB,CAAC,CAAC,CAACE,KAAK,CAAC,CAAC;EAEZ,MAAMS,KAAK,GAAG9B,OAAO,KAAK,OAAO;EACjC,MAAM+B,IAAI,GAAG/B,OAAO,KAAK,MAAM;EAC/B,MAAMgC,IAAI,GAAGF,KAAK,GACd/B,KAAK,CAACkC,MAAM,CAACC,MAAM,GACnBH,IAAI,GACFhC,KAAK,CAACkC,MAAM,CAACE,OAAO,GACpB,aAAa;EACnB,MAAMC,SAAS,GAAGN,KAAK,GACnB/B,KAAK,CAACkC,MAAM,CAACI,gBAAgB,GAC7BN,IAAI,GACFhC,KAAK,CAACkC,MAAM,CAACC,MAAM,GACnBnC,KAAK,CAACuC,QAAQ,CAACC,WAAW;EAChC;EACA;EACA,MAAMC,aAAa,GAAGV,KAAK,GACvB/B,KAAK,CAACkC,MAAM,CAACC,MAAM,GACnBH,IAAI,GACFhC,KAAK,CAACkC,MAAM,CAACE,OAAO,GACpBpC,KAAK,CAACkC,MAAM,CAACQ,EAAE;EACrB;EACA;EACA;EACA,MAAMC,MAAM,GAAGZ,KAAK,GAChB;IAAEa,WAAW,EAAE,CAAC;IAAEC,WAAW,EAAE7C,KAAK,CAACuC,QAAQ,CAACO;EAAU,CAAC,GACzDd,IAAI,GACF;IAAEY,WAAW,EAAE,CAAC;IAAEC,WAAW,EAAE7C,KAAK,CAACkC,MAAM,CAACS;EAAO,CAAC,GACpD;IAAEC,WAAW,EAAE,CAAC;IAAEC,WAAW,EAAE;EAAc,CAAC;EACpD,MAAME,OAAO,GAAGhB,KAAK,GAAG/B,KAAK,CAACkC,MAAM,CAACI,gBAAgB,GAAGtC,KAAK,CAACkC,MAAM,CAACC,MAAM;EAC3E,MAAMa,OAAO,GAAGjB,KAAK,GAAG/B,KAAK,CAACkC,MAAM,CAACC,MAAM,GAAGnC,KAAK,CAACkC,MAAM,CAACI,gBAAgB;EAE3E,MAAMW,MAAM,GAAG9C,KAAK,GAAG+C,IAAI,CAACC,GAAG,CAAC,EAAE,EAAEjD,IAAI,GAAG,IAAI,CAAC,GAAGA,IAAI;EACvD,MAAMkD,QAAQ,GAAGF,IAAI,CAACG,KAAK,CAACnD,IAAI,IAAIC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;EAEzD,oBACET,KAAA,CAACT,QAAQ,CAACI,IAAI;IACZe,KAAK,EAAE,CAAC;MAAEkD,SAAS,EAAE,CAAC;QAAEhD;MAAM,CAAC;IAAE,CAAC,EAAEF,KAAK;IACzC;IAAA;IACAmD,aAAa,EAAC,UAAU;IAAAC,QAAA,GAEvB3D,MAAM,GAAG,CAAC,iBACTL,IAAA,CAACP,QAAQ,CAACI,IAAI;MACZkE,aAAa,EAAC,MAAM;MACpBnD,KAAK,EAAE;QACLqD,QAAQ,EAAE,UAAU;QACpBC,GAAG,EAAE,CAAC;QACNC,IAAI,EAAE,CAAC;QACPC,KAAK,EAAEzD,KAAK,GAAGqB,SAAS,GAAGtB,IAAI;QAC/B2D,KAAK,EAAE1D,KAAK,GAAG,CAAC,GAAGqB,SAAS;QAC5ByB,MAAM;QACNa,YAAY,EAAE9D,KAAK,CAAC+D,KAAK,CAACC,IAAI;QAC9BC,eAAe,EAAEjE,KAAK,CAACkC,MAAM,CAACC,MAAM;QACpC+B,OAAO,EAAEzD,KAAK,CAAC0D,WAAW,CAAC;UACzBC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAClBC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC;QACFf,SAAS,EAAE,CACT;UACEhD,KAAK,EAAEG,KAAK,CAAC0D,WAAW,CAAC;YACvBC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAClBC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG;UACtB,CAAC;QACH,CAAC;MAEL;IAAE,CACH,CACF,eAED3E,KAAA,CAACP,SAAS;MACRkB,OAAO,EAAEA,OAAQ;MACjBiE,SAAS,EAAEA,CAAA,KAAM7C,KAAK,CAAC9B,WAAW,CAAE;MACpC4E,UAAU,EAAEA,CAAA,KAAM9C,KAAK,CAAC,CAAC,CAAE;MAC3B+C,OAAO,EAAE,CAAE;MACXC,iBAAiB,EAAC,QAAQ;MAC1BC,kBAAkB,EAChB7E,MAAM,GAAG,CAAC,GACN,YAAYA,MAAM,WAAWA,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS,EAAE,GACjE,SACL;MACDO,KAAK,EAAE;QACL6C,MAAM;QACNW,KAAK,EAAEzD,KAAK,GAAGqB,SAAS,GAAGtB,IAAI;QAC/ByE,iBAAiB,EAAExE,KAAK,GAAG,EAAE,GAAG,CAAC;QACjCyE,aAAa,EAAE,KAAK;QACpBC,UAAU,EAAE,QAAQ;QACpBC,cAAc,EAAE,QAAQ;QACxBC,GAAG,EAAE,CAAC;QACNjB,YAAY,EAAE9D,KAAK,CAAC+D,KAAK,CAACC,IAAI;QAC9BC,eAAe,EAAEhC,IAAI;QACrB,GAAGU,MAAM;QACT,IAAI1C,OAAO,KAAK,SAAS,GAAG,IAAI,GAAGD,KAAK,CAACgF,OAAO,CAACzC,QAAQ;MAC3D,CAAE;MAAAiB,QAAA,gBAEFhE,IAAA,CAACF,cAAc;QAAC2F,KAAK,EAAE5C,SAAU;QAAC6C,QAAQ,EAAEzC,aAAc;QAACvC,IAAI,EAAEkD;MAAS,CAAE,CAAC,EAC5EjD,KAAK,KAAKqB,SAAS,iBAClBhC,IAAA,CAACJ,IAAI;QACHgB,KAAK,EAAE;UACL+E,QAAQ,EAAE,EAAE;UACZC,UAAU,EAAE,KAAK;UACjBC,aAAa,EAAE,CAAC,GAAG;UACnBJ,KAAK,EAAElD,KAAK,GAAG/B,KAAK,CAACkC,MAAM,CAACI,gBAAgB,GAAGtC,KAAK,CAACkC,MAAM,CAACoD;QAC9D,CAAE;QAAA9B,QAAA,EAEDrD;MAAK,CACF,CACP;IAAA,CACQ,CAAC,EAEXN,MAAM,GAAG,CAAC,iBACTL,IAAA,CAACH,IAAI;MACHkE,aAAa,EAAC,MAAM;MACpBnD,KAAK,EAAE;QACLqD,QAAQ,EAAE,UAAU;QACpBC,GAAG,EAAE,CAAC,CAAC;QACPG,KAAK,EAAE,CAAC,CAAC;QACT0B,QAAQ,EAAE,EAAE;QACZtC,MAAM,EAAE,EAAE;QACVa,YAAY,EAAE9D,KAAK,CAAC+D,KAAK,CAACC,IAAI;QAC9BW,iBAAiB,EAAE,CAAC;QACpBV,eAAe,EAAElB,OAAO;QACxB8B,UAAU,EAAE,QAAQ;QACpBC,cAAc,EAAE,QAAQ;QACxB,GAAG9E,KAAK,CAACgF,OAAO,CAACQ;MACnB,CAAE;MAAAhC,QAAA,eAEFhE,IAAA,CAACJ,IAAI;QACHgB,KAAK,EAAE;UACL+E,QAAQ,EAAE,EAAE;UACZM,UAAU,EAAE,EAAE;UACdL,UAAU,EAAE,KAAK;UACjBH,KAAK,EAAEjC,OAAO;UACd0C,WAAW,EAAE,CAAC,cAAc;QAC9B,CAAE;QAAAlC,QAAA,EAED5D,UAAU,CAACC,MAAM;MAAC,CACf;IAAC,CACH,CACP;EAAA,CACY,CAAC;AAEpB","ignoreList":[]}
|