@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.
Files changed (94) hide show
  1. package/lib/commonjs/components/BottomSheet.js +67 -47
  2. package/lib/commonjs/components/BottomSheet.js.map +1 -1
  3. package/lib/commonjs/components/LauncherButton.js +177 -0
  4. package/lib/commonjs/components/LauncherButton.js.map +1 -0
  5. package/lib/commonjs/components/SupportButton.js +54 -176
  6. package/lib/commonjs/components/SupportButton.js.map +1 -1
  7. package/lib/commonjs/components/icons.js +74 -23
  8. package/lib/commonjs/components/icons.js.map +1 -1
  9. package/lib/commonjs/components/primitives.js +183 -38
  10. package/lib/commonjs/components/primitives.js.map +1 -1
  11. package/lib/commonjs/components/screens/ComposeScreen.js +115 -58
  12. package/lib/commonjs/components/screens/ComposeScreen.js.map +1 -1
  13. package/lib/commonjs/components/screens/HomeScreen.js +170 -115
  14. package/lib/commonjs/components/screens/HomeScreen.js.map +1 -1
  15. package/lib/commonjs/components/screens/ThreadScreen.js +222 -108
  16. package/lib/commonjs/components/screens/ThreadScreen.js.map +1 -1
  17. package/lib/commonjs/index.js.map +1 -1
  18. package/lib/commonjs/theme.js +136 -17
  19. package/lib/commonjs/theme.js.map +1 -1
  20. package/lib/commonjs/types.js +7 -0
  21. package/lib/commonjs/types.js.map +1 -1
  22. package/lib/commonjs/unread.js +92 -0
  23. package/lib/commonjs/unread.js.map +1 -0
  24. package/lib/commonjs/useSupportThreads.js +286 -0
  25. package/lib/commonjs/useSupportThreads.js.map +1 -0
  26. package/lib/commonjs/utils.js +33 -0
  27. package/lib/commonjs/utils.js.map +1 -1
  28. package/lib/module/components/BottomSheet.js +68 -48
  29. package/lib/module/components/BottomSheet.js.map +1 -1
  30. package/lib/module/components/LauncherButton.js +172 -0
  31. package/lib/module/components/LauncherButton.js.map +1 -0
  32. package/lib/module/components/SupportButton.js +57 -179
  33. package/lib/module/components/SupportButton.js.map +1 -1
  34. package/lib/module/components/icons.js +72 -22
  35. package/lib/module/components/icons.js.map +1 -1
  36. package/lib/module/components/primitives.js +179 -39
  37. package/lib/module/components/primitives.js.map +1 -1
  38. package/lib/module/components/screens/ComposeScreen.js +118 -61
  39. package/lib/module/components/screens/ComposeScreen.js.map +1 -1
  40. package/lib/module/components/screens/HomeScreen.js +172 -117
  41. package/lib/module/components/screens/HomeScreen.js.map +1 -1
  42. package/lib/module/components/screens/ThreadScreen.js +228 -112
  43. package/lib/module/components/screens/ThreadScreen.js.map +1 -1
  44. package/lib/module/index.js.map +1 -1
  45. package/lib/module/theme.js +135 -16
  46. package/lib/module/theme.js.map +1 -1
  47. package/lib/module/types.js +7 -0
  48. package/lib/module/types.js.map +1 -1
  49. package/lib/module/unread.js +83 -0
  50. package/lib/module/unread.js.map +1 -0
  51. package/lib/module/useSupportThreads.js +281 -0
  52. package/lib/module/useSupportThreads.js.map +1 -0
  53. package/lib/module/utils.js +30 -0
  54. package/lib/module/utils.js.map +1 -1
  55. package/lib/typescript/components/BottomSheet.d.ts.map +1 -1
  56. package/lib/typescript/components/LauncherButton.d.ts +14 -0
  57. package/lib/typescript/components/LauncherButton.d.ts.map +1 -0
  58. package/lib/typescript/components/SupportButton.d.ts +3 -3
  59. package/lib/typescript/components/SupportButton.d.ts.map +1 -1
  60. package/lib/typescript/components/icons.d.ts +13 -2
  61. package/lib/typescript/components/icons.d.ts.map +1 -1
  62. package/lib/typescript/components/primitives.d.ts +35 -4
  63. package/lib/typescript/components/primitives.d.ts.map +1 -1
  64. package/lib/typescript/components/screens/ComposeScreen.d.ts.map +1 -1
  65. package/lib/typescript/components/screens/HomeScreen.d.ts +3 -2
  66. package/lib/typescript/components/screens/HomeScreen.d.ts.map +1 -1
  67. package/lib/typescript/components/screens/ThreadScreen.d.ts.map +1 -1
  68. package/lib/typescript/index.d.ts +1 -1
  69. package/lib/typescript/index.d.ts.map +1 -1
  70. package/lib/typescript/theme.d.ts +44 -3
  71. package/lib/typescript/theme.d.ts.map +1 -1
  72. package/lib/typescript/types.d.ts +22 -0
  73. package/lib/typescript/types.d.ts.map +1 -1
  74. package/lib/typescript/unread.d.ts +22 -0
  75. package/lib/typescript/unread.d.ts.map +1 -0
  76. package/lib/typescript/useSupportThreads.d.ts +28 -0
  77. package/lib/typescript/useSupportThreads.d.ts.map +1 -0
  78. package/lib/typescript/utils.d.ts +5 -0
  79. package/lib/typescript/utils.d.ts.map +1 -1
  80. package/package.json +2 -2
  81. package/src/components/BottomSheet.tsx +61 -43
  82. package/src/components/LauncherButton.tsx +217 -0
  83. package/src/components/SupportButton.tsx +52 -196
  84. package/src/components/icons.tsx +77 -19
  85. package/src/components/primitives.tsx +217 -36
  86. package/src/components/screens/ComposeScreen.tsx +131 -61
  87. package/src/components/screens/HomeScreen.tsx +168 -117
  88. package/src/components/screens/ThreadScreen.tsx +289 -119
  89. package/src/index.tsx +1 -0
  90. package/src/theme.ts +165 -18
  91. package/src/types.ts +24 -0
  92. package/src/unread.ts +91 -0
  93. package/src/useSupportThreads.ts +372 -0
  94. package/src/utils.ts +33 -0
@@ -1,12 +1,131 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useRef, useState } from 'react';
3
+ import { useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { KeyboardAvoidingView, Platform, ScrollView, Text, TextInput, View } from 'react-native';
5
5
  import { USER_MESSAGE_MAX, USER_MESSAGE_MIN } from '../../types';
6
- import { formatDate, relativeTime } from '../../utils';
7
- import { Chevron } from '../icons';
8
- import { PressableRow, PrimaryButton, StatusIndicator, textStyles, TypeChipView } from '../primitives';
6
+ import { dayLabel, formatDate, formatTime, isSameDay, relativeTime } from '../../utils';
7
+ import { ArrowUpIcon, Chevron } from '../icons';
8
+ import { IconButton, StatusIndicator, textStyles, TypeChipView } from '../primitives';
9
+
10
+ /** Consecutive messages from one sender inside this window form a group. */
9
11
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
+ const GROUP_WINDOW_MS = 5 * 60 * 1000;
13
+ /** The counter only appears once the limit is actually in play. */
14
+ const COUNTER_VISIBLE_FROM = USER_MESSAGE_MAX - 60;
15
+ function buildRows(messages, unreadCount) {
16
+ // Unread messages are always the newest admin ones, so the divider goes
17
+ // above the Nth-from-last admin message.
18
+ let remaining = unreadCount;
19
+ let firstUnreadId = null;
20
+ for (let i = messages.length - 1; i >= 0 && remaining > 0; i -= 1) {
21
+ const candidate = messages[i];
22
+ if (candidate === undefined || candidate.sender !== 'admin') continue;
23
+ remaining -= 1;
24
+ firstUnreadId = candidate.id;
25
+ }
26
+ return messages.map((message, i) => {
27
+ const previous = i > 0 ? messages[i - 1] ?? null : null;
28
+ const next = i < messages.length - 1 ? messages[i + 1] ?? null : null;
29
+ const withinGroup = (a, b) => a !== null && a.sender === b.sender && a.admin_name === b.admin_name && Math.abs(Date.parse(b.created_at) - Date.parse(a.created_at)) < GROUP_WINDOW_MS;
30
+ const day = previous === null || !isSameDay(previous.created_at, message.created_at) ? dayLabel(message.created_at) : null;
31
+ const startsUnread = message.id === firstUnreadId;
32
+ return {
33
+ message,
34
+ // A separator always breaks a group.
35
+ firstInGroup: day !== null || startsUnread || !withinGroup(previous, message),
36
+ lastInGroup: next === null || next.id === firstUnreadId || !isSameDay(next.created_at, message.created_at) || !withinGroup(next, message),
37
+ day,
38
+ startsUnread
39
+ };
40
+ });
41
+ }
42
+ function Separator({
43
+ label,
44
+ theme,
45
+ tone = 'muted'
46
+ }) {
47
+ const color = tone === 'accent' ? theme.colors.accent : theme.colors.textTertiary;
48
+ return /*#__PURE__*/_jsxs(View, {
49
+ style: {
50
+ flexDirection: 'row',
51
+ alignItems: 'center',
52
+ gap: 10,
53
+ paddingVertical: 6
54
+ },
55
+ children: [/*#__PURE__*/_jsx(View, {
56
+ style: {
57
+ flex: 1,
58
+ height: 1,
59
+ backgroundColor: tone === 'accent' ? theme.colors.accentMuted : theme.colors.border
60
+ }
61
+ }), /*#__PURE__*/_jsx(Text, {
62
+ style: {
63
+ fontSize: 11,
64
+ fontWeight: '600',
65
+ letterSpacing: 0.3,
66
+ color
67
+ },
68
+ children: label
69
+ }), /*#__PURE__*/_jsx(View, {
70
+ style: {
71
+ flex: 1,
72
+ height: 1,
73
+ backgroundColor: tone === 'accent' ? theme.colors.accentMuted : theme.colors.border
74
+ }
75
+ })]
76
+ });
77
+ }
78
+ function MessageBubble({
79
+ row,
80
+ theme
81
+ }) {
82
+ const {
83
+ message,
84
+ firstInGroup,
85
+ lastInGroup
86
+ } = row;
87
+ const own = message.sender === 'user';
88
+ const round = theme.radii.bubble;
89
+ const tight = theme.radii.bubbleTail;
90
+ return /*#__PURE__*/_jsxs(View, {
91
+ style: {
92
+ maxWidth: '86%',
93
+ alignSelf: own ? 'flex-end' : 'flex-start',
94
+ alignItems: own ? 'flex-end' : 'flex-start',
95
+ marginTop: firstInGroup ? 10 : 2,
96
+ gap: 4
97
+ },
98
+ children: [!own && firstInGroup && /*#__PURE__*/_jsx(Text, {
99
+ style: [textStyles.meta(theme), {
100
+ paddingHorizontal: 4
101
+ }],
102
+ children: message.admin_name ?? 'Support'
103
+ }), /*#__PURE__*/_jsx(View, {
104
+ style: {
105
+ paddingHorizontal: 14,
106
+ paddingVertical: 10,
107
+ backgroundColor: own ? theme.colors.accent : theme.colors.surface,
108
+ borderWidth: own ? 0 : 1,
109
+ borderColor: theme.colors.border,
110
+ borderTopLeftRadius: own || firstInGroup ? round : tight,
111
+ borderBottomLeftRadius: own || lastInGroup ? round : tight,
112
+ borderTopRightRadius: !own || firstInGroup ? round : tight,
113
+ borderBottomRightRadius: !own || lastInGroup ? round : tight
114
+ },
115
+ children: /*#__PURE__*/_jsx(Text, {
116
+ style: [textStyles.body(theme), own && {
117
+ color: theme.colors.accentForeground
118
+ }],
119
+ children: message.body
120
+ })
121
+ }), lastInGroup && /*#__PURE__*/_jsx(Text, {
122
+ style: [textStyles.meta(theme), {
123
+ paddingHorizontal: 4
124
+ }],
125
+ children: formatTime(message.created_at)
126
+ })]
127
+ });
128
+ }
10
129
  export function ThreadScreen({
11
130
  theme,
12
131
  thread,
@@ -17,9 +136,14 @@ export function ThreadScreen({
17
136
  const [sending, setSending] = useState(false);
18
137
  const [failedMessage, setFailedMessage] = useState(null);
19
138
  const scrollRef = useRef(null);
139
+ // Captured once: opening the thread marks it read within a tick, but the
140
+ // "New" divider should stay put while the user is reading.
141
+ const [unreadOnOpen] = useState(thread.unread_count);
20
142
  const resolved = thread.status === 'resolved';
21
143
  const trimmed = draft.trim();
22
144
  const valid = trimmed.length >= USER_MESSAGE_MIN && trimmed.length <= USER_MESSAGE_MAX;
145
+ const tooShort = trimmed.length > 0 && trimmed.length < USER_MESSAGE_MIN;
146
+ const rows = useMemo(() => buildRows(thread.messages, unreadOnOpen), [thread.messages, unreadOnOpen]);
23
147
  useEffect(() => {
24
148
  scrollRef.current?.scrollToEnd({
25
149
  animated: false
@@ -42,20 +166,17 @@ export function ThreadScreen({
42
166
  style: {
43
167
  flexDirection: 'row',
44
168
  alignItems: 'center',
45
- gap: 8,
169
+ gap: 10,
46
170
  paddingHorizontal: 12,
47
- paddingBottom: 10,
171
+ paddingBottom: 12,
48
172
  borderBottomWidth: 1,
49
173
  borderBottomColor: theme.colors.border
50
174
  },
51
- children: [/*#__PURE__*/_jsx(PressableRow, {
175
+ children: [/*#__PURE__*/_jsx(IconButton, {
52
176
  onPress: onBack,
53
177
  theme: theme,
54
- accessibilityLabel: "Back",
55
- style: {
56
- padding: 6,
57
- borderRadius: theme.radii.control
58
- },
178
+ accessibilityLabel: "Back to conversations",
179
+ size: 32,
59
180
  children: /*#__PURE__*/_jsx(Chevron, {
60
181
  color: theme.colors.textSecondary,
61
182
  direction: "left",
@@ -79,127 +200,122 @@ export function ThreadScreen({
79
200
  flex: 1
80
201
  },
81
202
  contentContainerStyle: {
82
- padding: 16,
83
- gap: 10
203
+ paddingHorizontal: 16,
204
+ paddingVertical: 12
84
205
  },
85
- children: [thread.messages.map(m => {
86
- const own = m.sender === 'user';
87
- return /*#__PURE__*/_jsxs(View, {
88
- style: {
89
- maxWidth: '85%',
90
- alignSelf: own ? 'flex-end' : 'flex-start',
91
- alignItems: own ? 'flex-end' : 'flex-start',
92
- gap: 3
93
- },
94
- children: [!own && /*#__PURE__*/_jsx(Text, {
95
- style: textStyles.meta(theme),
96
- children: m.admin_name ?? 'Support'
97
- }), /*#__PURE__*/_jsx(View, {
98
- style: {
99
- borderRadius: theme.radii.card,
100
- paddingHorizontal: 12,
101
- paddingVertical: 8,
102
- backgroundColor: own ? theme.colors.accentMuted : theme.colors.surface,
103
- borderWidth: own ? 0 : 1,
104
- borderColor: theme.colors.border
105
- },
106
- children: /*#__PURE__*/_jsx(Text, {
107
- style: textStyles.body(theme),
108
- children: m.body
109
- })
110
- }), /*#__PURE__*/_jsx(Text, {
111
- style: textStyles.meta(theme),
112
- children: relativeTime(m.created_at)
113
- })]
114
- }, m.id);
115
- }), resolved && thread.resolved_at && /*#__PURE__*/_jsxs(View, {
206
+ keyboardShouldPersistTaps: "handled",
207
+ onContentSizeChange: () => scrollRef.current?.scrollToEnd({
208
+ animated: false
209
+ }),
210
+ children: [rows.map(row => /*#__PURE__*/_jsxs(View, {
211
+ children: [row.day !== null && /*#__PURE__*/_jsx(Separator, {
212
+ label: row.day,
213
+ theme: theme
214
+ }), row.startsUnread && /*#__PURE__*/_jsx(Separator, {
215
+ label: "New",
216
+ theme: theme,
217
+ tone: "accent"
218
+ }), /*#__PURE__*/_jsx(MessageBubble, {
219
+ row: row,
220
+ theme: theme
221
+ })]
222
+ }, row.message.id)), resolved && thread.resolved_at !== null && /*#__PURE__*/_jsx(View, {
116
223
  style: {
117
- flexDirection: 'row',
118
- alignItems: 'center',
119
- gap: 10,
120
- marginVertical: 6
224
+ marginTop: 16
121
225
  },
122
- children: [/*#__PURE__*/_jsx(View, {
123
- style: {
124
- flex: 1,
125
- height: 1,
126
- backgroundColor: theme.colors.border
127
- }
128
- }), /*#__PURE__*/_jsxs(Text, {
129
- style: textStyles.meta(theme),
130
- children: ["Resolved by ", thread.resolved_by_name ?? 'support', " \xB7", ' ', formatDate(thread.resolved_at)]
131
- }), /*#__PURE__*/_jsx(View, {
132
- style: {
133
- flex: 1,
134
- height: 1,
135
- backgroundColor: theme.colors.border
136
- }
137
- })]
226
+ children: /*#__PURE__*/_jsx(Separator, {
227
+ label: `Resolved by ${thread.resolved_by_name ?? 'support'} · ${formatDate(thread.resolved_at)}`,
228
+ theme: theme
229
+ })
138
230
  })]
139
231
  }), /*#__PURE__*/_jsx(View, {
140
232
  style: {
141
233
  borderTopWidth: 1,
142
234
  borderTopColor: theme.colors.border,
143
235
  paddingHorizontal: 16,
144
- paddingTop: 10
236
+ paddingTop: 10,
237
+ paddingBottom: 4
145
238
  },
146
- children: resolved ? /*#__PURE__*/_jsx(Text, {
147
- style: [textStyles.meta(theme), {
148
- textAlign: 'center',
149
- paddingVertical: 8
150
- }],
151
- children: "This thread is resolved and read-only"
239
+ children: resolved ? /*#__PURE__*/_jsx(View, {
240
+ style: {
241
+ alignItems: 'center',
242
+ paddingVertical: 10,
243
+ borderRadius: theme.radii.control,
244
+ backgroundColor: theme.colors.surface
245
+ },
246
+ children: /*#__PURE__*/_jsx(Text, {
247
+ style: textStyles.secondary(theme),
248
+ children: "This conversation is resolved and read-only"
249
+ })
152
250
  }) : /*#__PURE__*/_jsxs(_Fragment, {
153
- children: [/*#__PURE__*/_jsx(TextInput, {
154
- value: draft,
155
- onChangeText: v => {
156
- setDraft(v);
157
- setFailedMessage(null);
158
- },
159
- multiline: true,
160
- placeholder: "Reply",
161
- placeholderTextColor: theme.colors.textTertiary,
251
+ children: [/*#__PURE__*/_jsxs(View, {
162
252
  style: {
163
- minHeight: 60,
164
- maxHeight: 120,
165
- borderWidth: 1,
166
- borderColor: theme.colors.border,
167
- borderRadius: theme.radii.control,
168
- backgroundColor: theme.colors.surface,
169
- color: theme.colors.textPrimary,
170
- fontSize: 14,
171
- lineHeight: 20,
172
- padding: 10,
173
- textAlignVertical: 'top'
174
- }
175
- }), /*#__PURE__*/_jsxs(View, {
253
+ flexDirection: 'row',
254
+ alignItems: 'flex-end',
255
+ gap: 10
256
+ },
257
+ children: [/*#__PURE__*/_jsx(TextInput, {
258
+ value: draft,
259
+ onChangeText: v => {
260
+ setDraft(v);
261
+ setFailedMessage(null);
262
+ },
263
+ multiline: true,
264
+ editable: !sending,
265
+ placeholder: "Write a reply\u2026",
266
+ placeholderTextColor: theme.colors.textTertiary,
267
+ style: {
268
+ flex: 1,
269
+ minHeight: 44,
270
+ maxHeight: 120,
271
+ borderWidth: 1,
272
+ borderColor: theme.colors.border,
273
+ borderRadius: theme.radii.cardLg,
274
+ backgroundColor: theme.colors.surface,
275
+ color: theme.colors.textPrimary,
276
+ fontSize: 15,
277
+ lineHeight: 20,
278
+ paddingHorizontal: 14,
279
+ paddingTop: 12,
280
+ paddingBottom: 12,
281
+ textAlignVertical: 'top'
282
+ }
283
+ }), /*#__PURE__*/_jsx(IconButton, {
284
+ onPress: handleSend,
285
+ theme: theme,
286
+ tone: "accent",
287
+ size: 44,
288
+ disabled: !valid || sending,
289
+ accessibilityLabel: sending ? 'Sending' : 'Send reply',
290
+ children: /*#__PURE__*/_jsx(ArrowUpIcon, {
291
+ color: theme.colors.accentForeground,
292
+ size: 19
293
+ })
294
+ })]
295
+ }), (tooShort || draft.length >= COUNTER_VISIBLE_FROM || failedMessage !== null) && /*#__PURE__*/_jsxs(View, {
176
296
  style: {
177
297
  flexDirection: 'row',
178
298
  alignItems: 'center',
179
- gap: 12,
180
- paddingVertical: 8
299
+ gap: 10,
300
+ paddingTop: 8,
301
+ paddingHorizontal: 4
181
302
  },
182
- children: [/*#__PURE__*/_jsxs(Text, {
183
- style: [textStyles.meta(theme), draft.length > USER_MESSAGE_MAX && {
184
- color: theme.colors.statusDanger
185
- }],
186
- children: [draft.length, "/", USER_MESSAGE_MAX]
187
- }), failedMessage !== null && /*#__PURE__*/_jsx(Text, {
303
+ children: [failedMessage !== null ? /*#__PURE__*/_jsx(Text, {
188
304
  style: {
189
- fontSize: 11,
305
+ fontSize: 12,
190
306
  color: theme.colors.statusDanger
191
307
  },
192
308
  children: failedMessage
193
- }), /*#__PURE__*/_jsx(View, {
194
- style: {
309
+ }) : tooShort ? /*#__PURE__*/_jsxs(Text, {
310
+ style: textStyles.meta(theme),
311
+ children: ["At least ", USER_MESSAGE_MIN, " characters"]
312
+ }) : null, draft.length >= COUNTER_VISIBLE_FROM && /*#__PURE__*/_jsxs(Text, {
313
+ style: [textStyles.meta(theme), {
195
314
  marginLeft: 'auto'
196
- },
197
- children: /*#__PURE__*/_jsx(PrimaryButton, {
198
- label: sending ? 'Sending…' : 'Send',
199
- onPress: handleSend,
200
- disabled: !valid || sending,
201
- theme: theme
202
- })
315
+ }, draft.length > USER_MESSAGE_MAX && {
316
+ color: theme.colors.statusDanger
317
+ }],
318
+ children: [draft.length, "/", USER_MESSAGE_MAX]
203
319
  })]
204
320
  })]
205
321
  })
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","useState","KeyboardAvoidingView","Platform","ScrollView","Text","TextInput","View","USER_MESSAGE_MAX","USER_MESSAGE_MIN","formatDate","relativeTime","Chevron","PressableRow","PrimaryButton","StatusIndicator","textStyles","TypeChipView","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ThreadScreen","theme","thread","onBack","onSend","draft","setDraft","sending","setSending","failedMessage","setFailedMessage","scrollRef","resolved","status","trimmed","trim","valid","length","current","scrollToEnd","animated","messages","handleSend","errorMessage","style","flex","behavior","OS","undefined","children","flexDirection","alignItems","gap","paddingHorizontal","paddingBottom","borderBottomWidth","borderBottomColor","colors","border","onPress","accessibilityLabel","padding","borderRadius","radii","control","color","textSecondary","direction","size","type","meta","marginLeft","created_at","ref","contentContainerStyle","map","m","own","sender","maxWidth","alignSelf","admin_name","card","paddingVertical","backgroundColor","accentMuted","surface","borderWidth","borderColor","body","id","resolved_at","marginVertical","height","resolved_by_name","borderTopWidth","borderTopColor","paddingTop","textAlign","value","onChangeText","v","multiline","placeholder","placeholderTextColor","textTertiary","minHeight","maxHeight","textPrimary","fontSize","lineHeight","textAlignVertical","statusDanger","label","disabled"],"sourceRoot":"../../../../src","sources":["components/screens/ThreadScreen.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useMemo","useRef","useState","KeyboardAvoidingView","Platform","ScrollView","Text","TextInput","View","USER_MESSAGE_MAX","USER_MESSAGE_MIN","dayLabel","formatDate","formatTime","isSameDay","relativeTime","ArrowUpIcon","Chevron","IconButton","StatusIndicator","textStyles","TypeChipView","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","GROUP_WINDOW_MS","COUNTER_VISIBLE_FROM","buildRows","messages","unreadCount","remaining","firstUnreadId","i","length","candidate","undefined","sender","id","map","message","previous","next","withinGroup","a","b","admin_name","Math","abs","Date","parse","created_at","day","startsUnread","firstInGroup","lastInGroup","Separator","label","theme","tone","color","colors","accent","textTertiary","style","flexDirection","alignItems","gap","paddingVertical","children","flex","height","backgroundColor","accentMuted","border","fontSize","fontWeight","letterSpacing","MessageBubble","row","own","round","radii","bubble","tight","bubbleTail","maxWidth","alignSelf","marginTop","meta","paddingHorizontal","surface","borderWidth","borderColor","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","body","accentForeground","ThreadScreen","thread","onBack","onSend","draft","setDraft","sending","setSending","failedMessage","setFailedMessage","scrollRef","unreadOnOpen","unread_count","resolved","status","trimmed","trim","valid","tooShort","rows","current","scrollToEnd","animated","handleSend","errorMessage","behavior","OS","paddingBottom","borderBottomWidth","borderBottomColor","onPress","accessibilityLabel","size","textSecondary","direction","type","marginLeft","ref","contentContainerStyle","keyboardShouldPersistTaps","onContentSizeChange","resolved_at","resolved_by_name","borderTopWidth","borderTopColor","paddingTop","borderRadius","control","secondary","value","onChangeText","v","multiline","editable","placeholder","placeholderTextColor","minHeight","maxHeight","cardLg","textPrimary","lineHeight","textAlignVertical","disabled","statusDanger"],"sourceRoot":"../../../../src","sources":["components/screens/ThreadScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["SupportButton","supportDarkTheme","supportLightTheme","resolveTheme","SupportApiError","isPushAvailable","QUERY_TYPE_LABEL","USER_MESSAGE_MAX","USER_MESSAGE_MIN"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,4BAA4B;AAC1D,SACEC,gBAAgB,EAChBC,iBAAiB,EACjBC,YAAY,QAEP,SAAS;AAChB,SAASC,eAAe,QAAQ,OAAO;AACvC,SAASC,eAAe,QAAQ,QAAQ;AAaxC,SACEC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,QACX,SAAS","ignoreList":[]}
1
+ {"version":3,"names":["SupportButton","supportDarkTheme","supportLightTheme","resolveTheme","SupportApiError","isPushAvailable","QUERY_TYPE_LABEL","USER_MESSAGE_MAX","USER_MESSAGE_MIN"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,4BAA4B;AAC1D,SACEC,gBAAgB,EAChBC,iBAAiB,EACjBC,YAAY,QAEP,SAAS;AAChB,SAASC,eAAe,QAAQ,OAAO;AACvC,SAASC,eAAe,QAAQ,QAAQ;AAcxC,SACEC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,QACX,SAAS","ignoreList":[]}
@@ -1,23 +1,142 @@
1
1
  "use strict";
2
2
 
3
3
  // The SDK consumes the same design tokens as the admin dashboard, so both
4
- // surfaces look like one product.
4
+ // surfaces look like one product. On top of those it adds the few values
5
+ // that only exist on mobile: sheet/bubble radii and the elevation used by
6
+ // the launcher and the sheet (the web side gets those from CSS).
5
7
  import { darkColors, lightColors, motion, radii, spacing } from '@appsupportkit/design-tokens';
6
- export const supportDarkTheme = {
7
- name: 'dark',
8
- colors: darkColors,
9
- spacing,
10
- radii,
11
- motion
8
+ /** Rounder than the dashboard: touch targets read better with more radius. */
9
+ export const supportRadii = {
10
+ ...radii,
11
+ control: 10,
12
+ card: 14,
13
+ cardLg: 18,
14
+ /** Message bubbles. */
15
+ bubble: 18,
16
+ /** The tight corner on a bubble's sender side. */
17
+ bubbleTail: 6,
18
+ sheet: 24,
19
+ pill: 999
12
20
  };
13
- export const supportLightTheme = {
14
- name: 'light',
15
- colors: lightColors,
16
- spacing,
17
- radii,
18
- motion
19
- };
20
- export function resolveTheme(name) {
21
- return name === 'light' ? supportLightTheme : supportDarkTheme;
21
+
22
+ /**
23
+ * The launcher sits on the host app's own background rather than on an SDK
24
+ * surface, so the two themes need different treatment: on near-black a
25
+ * solid fill needs a hairline to separate from the background and a black
26
+ * shadow, while on white the accent-tinted shadow does that work and a
27
+ * borderless mark has to be darkened to stay legible.
28
+ */
29
+
30
+ // Color helpers come first: the themes below are built at module load, so
31
+ // anything they reach for has to already be initialized. (A `const` used
32
+ // before its definition survives tsc but lands as `undefined` on Hermes.)
33
+ const HEX = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
34
+ function parseHex(color) {
35
+ const match = HEX.exec(color.trim());
36
+ const digits = match?.[1];
37
+ if (digits === undefined) return null;
38
+ const hex = digits.length === 3 ? digits.split('').map(c => c + c).join('') : digits;
39
+ return [parseInt(hex.slice(0, 2), 16), parseInt(hex.slice(2, 4), 16), parseInt(hex.slice(4, 6), 16)];
40
+ }
41
+ function mix([r, g, b], target, amount) {
42
+ const channel = c => Math.round(c + (target - c) * amount);
43
+ return `rgb(${channel(r)}, ${channel(g)}, ${channel(b)})`;
44
+ }
45
+ function shadowsFor(name, accent) {
46
+ const dark = name === 'dark';
47
+ return {
48
+ launcher: {
49
+ // Tinting the launcher's shadow with the accent is what makes it read
50
+ // as lifted rather than pasted on.
51
+ shadowColor: dark ? '#000000' : accent,
52
+ shadowOpacity: dark ? 0.45 : 0.3,
53
+ shadowRadius: 14,
54
+ shadowOffset: {
55
+ width: 0,
56
+ height: 6
57
+ },
58
+ elevation: 8
59
+ },
60
+ sheet: {
61
+ shadowColor: '#000000',
62
+ shadowOpacity: dark ? 0.5 : 0.16,
63
+ shadowRadius: 24,
64
+ shadowOffset: {
65
+ width: 0,
66
+ height: -6
67
+ },
68
+ elevation: 24
69
+ },
70
+ badge: {
71
+ shadowColor: '#000000',
72
+ shadowOpacity: 0.25,
73
+ shadowRadius: 3,
74
+ shadowOffset: {
75
+ width: 0,
76
+ height: 1
77
+ },
78
+ elevation: 3
79
+ }
80
+ };
81
+ }
82
+ function launcherFor(name, accent) {
83
+ const rgb = parseHex(accent);
84
+ return {
85
+ solidRing: name === 'dark' ? 'rgba(255, 255, 255, 0.14)' : 'rgba(0, 0, 0, 0.06)',
86
+ // On a dark app background the raw accent is too close to the surface
87
+ // to read as a glyph; lift it toward white.
88
+ minimalMark: name === 'dark' && rgb !== null ? mix(rgb, 255, 0.35) : accent
89
+ };
90
+ }
91
+ function buildTheme(name, colors) {
92
+ return {
93
+ name,
94
+ colors,
95
+ spacing,
96
+ radii: supportRadii,
97
+ motion,
98
+ shadows: shadowsFor(name, colors.accent),
99
+ launcher: launcherFor(name, colors.accent)
100
+ };
101
+ }
102
+ export const supportDarkTheme = buildTheme('dark', darkColors);
103
+ export const supportLightTheme = buildTheme('light', lightColors);
104
+
105
+ /**
106
+ * Derives the accent family from a single brand color: a pressed shade, the
107
+ * 12% wash used behind chips and own-message bubbles, and a foreground that
108
+ * stays legible on top (dark text on light brands, white on dark ones).
109
+ */
110
+ function withAccent(theme, accent) {
111
+ const rgb = parseHex(accent);
112
+ if (!rgb) return theme;
113
+ const [r, g, b] = rgb;
114
+ // Relative luminance, sRGB coefficients — good enough to pick a foreground.
115
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
116
+ const colors = {
117
+ ...theme.colors,
118
+ accent,
119
+ accentHover: mix(rgb, theme.name === 'dark' ? 255 : 0, 0.12),
120
+ accentMuted: `rgba(${r}, ${g}, ${b}, 0.12)`,
121
+ accentForeground: luminance > 0.62 ? '#111113' : '#FFFFFF',
122
+ statusOpen: accent,
123
+ statusOpenBg: `rgba(${r}, ${g}, ${b}, 0.10)`,
124
+ focusRing: accent
125
+ };
126
+ return {
127
+ ...theme,
128
+ colors,
129
+ shadows: shadowsFor(theme.name, accent),
130
+ launcher: launcherFor(theme.name, accent)
131
+ };
132
+ }
133
+
134
+ /**
135
+ * @param name "light" | "dark" (default dark).
136
+ * @param accentColor Optional brand color (hex) replacing the default accent.
137
+ */
138
+ export function resolveTheme(name, accentColor) {
139
+ const base = name === 'light' ? supportLightTheme : supportDarkTheme;
140
+ return accentColor ? withAccent(base, accentColor) : base;
22
141
  }
23
142
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["darkColors","lightColors","motion","radii","spacing","supportDarkTheme","name","colors","supportLightTheme","resolveTheme"],"sourceRoot":"../../src","sources":["theme.ts"],"mappings":";;AAAA;AACA;AACA,SACEA,UAAU,EACVC,WAAW,EACXC,MAAM,EACNC,KAAK,EACLC,OAAO,QAEF,8BAA8B;AAWrC,OAAO,MAAMC,gBAA8B,GAAG;EAC5CC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAEP,UAAU;EAClBI,OAAO;EACPD,KAAK;EACLD;AACF,CAAC;AAED,OAAO,MAAMM,iBAA+B,GAAG;EAC7CF,IAAI,EAAE,OAAO;EACbC,MAAM,EAAEN,WAAW;EACnBG,OAAO;EACPD,KAAK;EACLD;AACF,CAAC;AAED,OAAO,SAASO,YAAYA,CAACH,IAA2B,EAAgB;EACtE,OAAOA,IAAI,KAAK,OAAO,GAAGE,iBAAiB,GAAGH,gBAAgB;AAChE","ignoreList":[]}
1
+ {"version":3,"names":["darkColors","lightColors","motion","radii","spacing","supportRadii","control","card","cardLg","bubble","bubbleTail","sheet","pill","HEX","parseHex","color","match","exec","trim","digits","undefined","hex","length","split","map","c","join","parseInt","slice","mix","r","g","b","target","amount","channel","Math","round","shadowsFor","name","accent","dark","launcher","shadowColor","shadowOpacity","shadowRadius","shadowOffset","width","height","elevation","badge","launcherFor","rgb","solidRing","minimalMark","buildTheme","colors","shadows","supportDarkTheme","supportLightTheme","withAccent","theme","luminance","accentHover","accentMuted","accentForeground","statusOpen","statusOpenBg","focusRing","resolveTheme","accentColor","base"],"sourceRoot":"../../src","sources":["theme.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA,SACEA,UAAU,EACVC,WAAW,EACXC,MAAM,EACNC,KAAK,EACLC,OAAO,QAEF,8BAA8B;AAIrC;AACA,OAAO,MAAMC,YAAY,GAAG;EAC1B,GAAGF,KAAK;EACRG,OAAO,EAAE,EAAE;EACXC,IAAI,EAAE,EAAE;EACRC,MAAM,EAAE,EAAE;EACV;EACAC,MAAM,EAAE,EAAE;EACV;EACAC,UAAU,EAAE,CAAC;EACbC,KAAK,EAAE,EAAE;EACTC,IAAI,EAAE;AACR,CAAU;;AAWV;AACA;AACA;AACA;AACA;AACA;AACA;;AAkBA;AACA;AACA;AACA,MAAMC,GAAG,GAAG,gCAAgC;AAE5C,SAASC,QAAQA,CAACC,KAAa,EAAmC;EAChE,MAAMC,KAAK,GAAGH,GAAG,CAACI,IAAI,CAACF,KAAK,CAACG,IAAI,CAAC,CAAC,CAAC;EACpC,MAAMC,MAAM,GAAGH,KAAK,GAAG,CAAC,CAAC;EACzB,IAAIG,MAAM,KAAKC,SAAS,EAAE,OAAO,IAAI;EACrC,MAAMC,GAAG,GACPF,MAAM,CAACG,MAAM,KAAK,CAAC,GACfH,MAAM,CACHI,KAAK,CAAC,EAAE,CAAC,CACTC,GAAG,CAAEC,CAAC,IAAKA,CAAC,GAAGA,CAAC,CAAC,CACjBC,IAAI,CAAC,EAAE,CAAC,GACXP,MAAM;EACZ,OAAO,CACLQ,QAAQ,CAACN,GAAG,CAACO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAC7BD,QAAQ,CAACN,GAAG,CAACO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAC7BD,QAAQ,CAACN,GAAG,CAACO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAC9B;AACH;AAEA,SAASC,GAAGA,CAAC,CAACC,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAA2B,EAAEC,MAAc,EAAEC,MAAc,EAAE;EAChF,MAAMC,OAAO,GAAIV,CAAS,IAAKW,IAAI,CAACC,KAAK,CAACZ,CAAC,GAAG,CAACQ,MAAM,GAAGR,CAAC,IAAIS,MAAM,CAAC;EACpE,OAAO,OAAOC,OAAO,CAACL,CAAC,CAAC,KAAKK,OAAO,CAACJ,CAAC,CAAC,KAAKI,OAAO,CAACH,CAAC,CAAC,GAAG;AAC3D;AAEA,SAASM,UAAUA,CAACC,IAAe,EAAEC,MAAc,EAAkB;EACnE,MAAMC,IAAI,GAAGF,IAAI,KAAK,MAAM;EAC5B,OAAO;IACLG,QAAQ,EAAE;MACR;MACA;MACAC,WAAW,EAAEF,IAAI,GAAG,SAAS,GAAGD,MAAM;MACtCI,aAAa,EAAEH,IAAI,GAAG,IAAI,GAAG,GAAG;MAChCI,YAAY,EAAE,EAAE;MAChBC,YAAY,EAAE;QAAEC,KAAK,EAAE,CAAC;QAAEC,MAAM,EAAE;MAAE,CAAC;MACrCC,SAAS,EAAE;IACb,CAAC;IACDtC,KAAK,EAAE;MACLgC,WAAW,EAAE,SAAS;MACtBC,aAAa,EAAEH,IAAI,GAAG,GAAG,GAAG,IAAI;MAChCI,YAAY,EAAE,EAAE;MAChBC,YAAY,EAAE;QAAEC,KAAK,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;MAAE,CAAC;MACtCC,SAAS,EAAE;IACb,CAAC;IACDC,KAAK,EAAE;MACLP,WAAW,EAAE,SAAS;MACtBC,aAAa,EAAE,IAAI;MACnBC,YAAY,EAAE,CAAC;MACfC,YAAY,EAAE;QAAEC,KAAK,EAAE,CAAC;QAAEC,MAAM,EAAE;MAAE,CAAC;MACrCC,SAAS,EAAE;IACb;EACF,CAAC;AACH;AAEA,SAASE,WAAWA,CAACZ,IAAe,EAAEC,MAAc,EAAmB;EACrE,MAAMY,GAAG,GAAGtC,QAAQ,CAAC0B,MAAM,CAAC;EAC5B,OAAO;IACLa,SAAS,EACPd,IAAI,KAAK,MAAM,GAAG,2BAA2B,GAAG,qBAAqB;IACvE;IACA;IACAe,WAAW,EACTf,IAAI,KAAK,MAAM,IAAIa,GAAG,KAAK,IAAI,GAAGvB,GAAG,CAACuB,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAGZ;EAC5D,CAAC;AACH;AAEA,SAASe,UAAUA,CAAChB,IAAe,EAAEiB,MAAmB,EAAgB;EACtE,OAAO;IACLjB,IAAI;IACJiB,MAAM;IACNpD,OAAO;IACPD,KAAK,EAAEE,YAAY;IACnBH,MAAM;IACNuD,OAAO,EAAEnB,UAAU,CAACC,IAAI,EAAEiB,MAAM,CAAChB,MAAM,CAAC;IACxCE,QAAQ,EAAES,WAAW,CAACZ,IAAI,EAAEiB,MAAM,CAAChB,MAAM;EAC3C,CAAC;AACH;AAEA,OAAO,MAAMkB,gBAA8B,GAAGH,UAAU,CAAC,MAAM,EAAEvD,UAAU,CAAC;AAC5E,OAAO,MAAM2D,iBAA+B,GAAGJ,UAAU,CAAC,OAAO,EAAEtD,WAAW,CAAC;;AAE/E;AACA;AACA;AACA;AACA;AACA,SAAS2D,UAAUA,CAACC,KAAmB,EAAErB,MAAc,EAAgB;EACrE,MAAMY,GAAG,GAAGtC,QAAQ,CAAC0B,MAAM,CAAC;EAC5B,IAAI,CAACY,GAAG,EAAE,OAAOS,KAAK;EACtB,MAAM,CAAC/B,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC,GAAGoB,GAAG;EACrB;EACA,MAAMU,SAAS,GAAG,CAAC,KAAK,GAAGhC,CAAC,GAAG,KAAK,GAAGC,CAAC,GAAG,KAAK,GAAGC,CAAC,IAAI,GAAG;EAC3D,MAAMwB,MAAmB,GAAG;IAC1B,GAAGK,KAAK,CAACL,MAAM;IACfhB,MAAM;IACNuB,WAAW,EAAElC,GAAG,CAACuB,GAAG,EAAES,KAAK,CAACtB,IAAI,KAAK,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC;IAC5DyB,WAAW,EAAE,QAAQlC,CAAC,KAAKC,CAAC,KAAKC,CAAC,SAAS;IAC3CiC,gBAAgB,EAAEH,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS;IAC1DI,UAAU,EAAE1B,MAAM;IAClB2B,YAAY,EAAE,QAAQrC,CAAC,KAAKC,CAAC,KAAKC,CAAC,SAAS;IAC5CoC,SAAS,EAAE5B;EACb,CAAC;EACD,OAAO;IACL,GAAGqB,KAAK;IACRL,MAAM;IACNC,OAAO,EAAEnB,UAAU,CAACuB,KAAK,CAACtB,IAAI,EAAEC,MAAM,CAAC;IACvCE,QAAQ,EAAES,WAAW,CAACU,KAAK,CAACtB,IAAI,EAAEC,MAAM;EAC1C,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAAS6B,YAAYA,CAC1B9B,IAA2B,EAC3B+B,WAAoB,EACN;EACd,MAAMC,IAAI,GAAGhC,IAAI,KAAK,OAAO,GAAGoB,iBAAiB,GAAGD,gBAAgB;EACpE,OAAOY,WAAW,GAAGV,UAAU,CAACW,IAAI,EAAED,WAAW,CAAC,GAAGC,IAAI;AAC3D","ignoreList":[]}
@@ -1,5 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ /**
4
+ * How the launcher renders:
5
+ * solid — accent fill, elevated. The floating action button.
6
+ * soft — app surface + hairline border. Sits in a header or toolbar.
7
+ * minimal — bare mark, no fill or border. Sits in a nav bar.
8
+ */
9
+
3
10
  export const QUERY_TYPE_LABEL = {
4
11
  feedback: 'Feedback',
5
12
  feature_request: 'Feature request',
@@ -1 +1 @@
1
- {"version":3,"names":["QUERY_TYPE_LABEL","feedback","feature_request","bug_report","USER_MESSAGE_MIN","USER_MESSAGE_MAX"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAiFA,OAAO,MAAMA,gBAA2C,GAAG;EACzDC,QAAQ,EAAE,UAAU;EACpBC,eAAe,EAAE,iBAAiB;EAClCC,UAAU,EAAE;AACd,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAG,EAAE;AAClC,OAAO,MAAMC,gBAAgB,GAAG,GAAG","ignoreList":[]}
1
+ {"version":3,"names":["QUERY_TYPE_LABEL","feedback","feature_request","bug_report","USER_MESSAGE_MIN","USER_MESSAGE_MAX"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAQA;AACA;AACA;AACA;AACA;AACA;;AA4FA,OAAO,MAAMA,gBAA2C,GAAG;EACzDC,QAAQ,EAAE,UAAU;EACpBC,eAAe,EAAE,iBAAiB;EAClCC,UAAU,EAAE;AACd,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAG,EAAE;AAClC,OAAO,MAAMC,gBAAgB,GAAG,GAAG","ignoreList":[]}