@repzo/widget-react-native 1.0.0 → 1.0.1

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 (126) hide show
  1. package/README.md +167 -74
  2. package/lib/commonjs/api/client.js.map +1 -1
  3. package/lib/commonjs/attachments/pickers.js +493 -0
  4. package/lib/commonjs/attachments/pickers.js.map +1 -0
  5. package/lib/commonjs/i18n.js +19 -0
  6. package/lib/commonjs/i18n.js.map +1 -1
  7. package/lib/commonjs/index.js.map +1 -1
  8. package/lib/commonjs/locales.js +16 -0
  9. package/lib/commonjs/locales.js.map +1 -1
  10. package/lib/commonjs/state/widget-store.js +147 -13
  11. package/lib/commonjs/state/widget-store.js.map +1 -1
  12. package/lib/commonjs/types.js +14 -0
  13. package/lib/commonjs/types.js.map +1 -1
  14. package/lib/commonjs/ui/WidgetProvider.js +53 -8
  15. package/lib/commonjs/ui/WidgetProvider.js.map +1 -1
  16. package/lib/commonjs/ui/components/AttachmentChips.js +135 -0
  17. package/lib/commonjs/ui/components/AttachmentChips.js.map +1 -0
  18. package/lib/commonjs/ui/components/AttachmentMenu.js +125 -0
  19. package/lib/commonjs/ui/components/AttachmentMenu.js.map +1 -0
  20. package/lib/commonjs/ui/components/ImageViewer.js +181 -0
  21. package/lib/commonjs/ui/components/ImageViewer.js.map +1 -0
  22. package/lib/commonjs/ui/components/InAppNotification.js +210 -0
  23. package/lib/commonjs/ui/components/InAppNotification.js.map +1 -0
  24. package/lib/commonjs/ui/screens/chat/ChatView.js +198 -18
  25. package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -1
  26. package/lib/commonjs/ui/screens/chat/ChatView.styles.js +19 -0
  27. package/lib/commonjs/ui/screens/chat/ChatView.styles.js.map +1 -1
  28. package/lib/module/api/client.js.map +1 -1
  29. package/lib/module/attachments/pickers.js +479 -0
  30. package/lib/module/attachments/pickers.js.map +1 -0
  31. package/lib/module/i18n.js +19 -0
  32. package/lib/module/i18n.js.map +1 -1
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/module/locales.js +16 -0
  35. package/lib/module/locales.js.map +1 -1
  36. package/lib/module/state/widget-store.js +147 -13
  37. package/lib/module/state/widget-store.js.map +1 -1
  38. package/lib/module/types.js +14 -0
  39. package/lib/module/types.js.map +1 -1
  40. package/lib/module/ui/WidgetProvider.js +53 -8
  41. package/lib/module/ui/WidgetProvider.js.map +1 -1
  42. package/lib/module/ui/components/AttachmentChips.js +131 -0
  43. package/lib/module/ui/components/AttachmentChips.js.map +1 -0
  44. package/lib/module/ui/components/AttachmentMenu.js +120 -0
  45. package/lib/module/ui/components/AttachmentMenu.js.map +1 -0
  46. package/lib/module/ui/components/ImageViewer.js +177 -0
  47. package/lib/module/ui/components/ImageViewer.js.map +1 -0
  48. package/lib/module/ui/components/InAppNotification.js +208 -0
  49. package/lib/module/ui/components/InAppNotification.js.map +1 -0
  50. package/lib/module/ui/screens/chat/ChatView.js +201 -21
  51. package/lib/module/ui/screens/chat/ChatView.js.map +1 -1
  52. package/lib/module/ui/screens/chat/ChatView.styles.js +19 -0
  53. package/lib/module/ui/screens/chat/ChatView.styles.js.map +1 -1
  54. package/lib/typescript/commonjs/api/client.d.ts +8 -2
  55. package/lib/typescript/commonjs/api/client.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/attachments/pickers.d.ts +81 -0
  57. package/lib/typescript/commonjs/attachments/pickers.d.ts.map +1 -0
  58. package/lib/typescript/commonjs/i18n.d.ts +16 -0
  59. package/lib/typescript/commonjs/i18n.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/index.d.ts +1 -1
  61. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/locales.d.ts.map +1 -1
  63. package/lib/typescript/commonjs/state/widget-store.d.ts +23 -2
  64. package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -1
  65. package/lib/typescript/commonjs/types.d.ts +74 -0
  66. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  67. package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -1
  68. package/lib/typescript/commonjs/ui/components/AttachmentChips.d.ts +16 -0
  69. package/lib/typescript/commonjs/ui/components/AttachmentChips.d.ts.map +1 -0
  70. package/lib/typescript/commonjs/ui/components/AttachmentMenu.d.ts +28 -0
  71. package/lib/typescript/commonjs/ui/components/AttachmentMenu.d.ts.map +1 -0
  72. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts +23 -0
  73. package/lib/typescript/commonjs/ui/components/ImageViewer.d.ts.map +1 -0
  74. package/lib/typescript/commonjs/ui/components/InAppNotification.d.ts +28 -0
  75. package/lib/typescript/commonjs/ui/components/InAppNotification.d.ts.map +1 -0
  76. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts +3 -2
  77. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -1
  78. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts +18 -0
  79. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts +28 -2
  81. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  82. package/lib/typescript/module/api/client.d.ts +8 -2
  83. package/lib/typescript/module/api/client.d.ts.map +1 -1
  84. package/lib/typescript/module/attachments/pickers.d.ts +81 -0
  85. package/lib/typescript/module/attachments/pickers.d.ts.map +1 -0
  86. package/lib/typescript/module/i18n.d.ts +16 -0
  87. package/lib/typescript/module/i18n.d.ts.map +1 -1
  88. package/lib/typescript/module/index.d.ts +1 -1
  89. package/lib/typescript/module/index.d.ts.map +1 -1
  90. package/lib/typescript/module/locales.d.ts.map +1 -1
  91. package/lib/typescript/module/state/widget-store.d.ts +23 -2
  92. package/lib/typescript/module/state/widget-store.d.ts.map +1 -1
  93. package/lib/typescript/module/types.d.ts +74 -0
  94. package/lib/typescript/module/types.d.ts.map +1 -1
  95. package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -1
  96. package/lib/typescript/module/ui/components/AttachmentChips.d.ts +16 -0
  97. package/lib/typescript/module/ui/components/AttachmentChips.d.ts.map +1 -0
  98. package/lib/typescript/module/ui/components/AttachmentMenu.d.ts +28 -0
  99. package/lib/typescript/module/ui/components/AttachmentMenu.d.ts.map +1 -0
  100. package/lib/typescript/module/ui/components/ImageViewer.d.ts +23 -0
  101. package/lib/typescript/module/ui/components/ImageViewer.d.ts.map +1 -0
  102. package/lib/typescript/module/ui/components/InAppNotification.d.ts +28 -0
  103. package/lib/typescript/module/ui/components/InAppNotification.d.ts.map +1 -0
  104. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts +3 -2
  105. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -1
  106. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts +18 -0
  107. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts.map +1 -1
  108. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts +28 -2
  109. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts.map +1 -1
  110. package/metro.js +17 -32
  111. package/package.json +18 -1
  112. package/src/api/client.ts +2 -2
  113. package/src/attachments/pickers.ts +515 -0
  114. package/src/i18n.ts +20 -0
  115. package/src/index.tsx +4 -0
  116. package/src/locales.ts +16 -0
  117. package/src/state/widget-store.ts +152 -16
  118. package/src/types.ts +79 -0
  119. package/src/ui/WidgetProvider.tsx +65 -6
  120. package/src/ui/components/AttachmentChips.tsx +135 -0
  121. package/src/ui/components/AttachmentMenu.tsx +132 -0
  122. package/src/ui/components/ImageViewer.tsx +178 -0
  123. package/src/ui/components/InAppNotification.tsx +225 -0
  124. package/src/ui/screens/chat/ChatView.styles.ts +19 -0
  125. package/src/ui/screens/chat/ChatView.tsx +235 -16
  126. package/src/ui/screens/chat/ChatView.types.ts +38 -2
@@ -0,0 +1,479 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Visitor attachments: picking photos/files and turning them into the base64
5
+ * data URLs `POST /api/widget/messages` accepts.
6
+ *
7
+ * The SDK ships no native code, so every picker is borrowed from the host —
8
+ * the same approach as `storage.ts` and `native-gradient.ts`:
9
+ * - `expo-image-picker` → photo library and camera
10
+ * - `expo-document-picker` → any file
11
+ * - `expo-file-system` → reads a picked file as base64 (optional; without it
12
+ * the file is read through `fetch` + `FileReader`)
13
+ * - `expo-image-manipulator` → shrinks photos to fit the 1.5 MB cap (optional;
14
+ * without it a full-resolution camera photo is usually refused as too large)
15
+ *
16
+ * A host without those (or with `react-native-image-picker` etc.) plugs its own
17
+ * picker in through `boot({ attachments: { pick } })`. With neither, the attach
18
+ * button simply isn't shown.
19
+ *
20
+ * No `react-native` import on purpose: the limit and encoding helpers stay
21
+ * testable in plain Node.
22
+ */
23
+
24
+ /** The server keeps the first five and silently drops the rest. */
25
+ export const MAX_ATTACHMENTS = 5;
26
+ /** Per file, decoded. The server silently drops anything larger. */
27
+ export const MAX_ATTACHMENT_BYTES = 1_500_000;
28
+ /**
29
+ * All files in one message, decoded. Base64 inside JSON inflates bytes by
30
+ * ~1.37x and the server caps a request body at 10 MB, so five files at the
31
+ * per-file maximum would come back as a 413.
32
+ */
33
+ export const MAX_TOTAL_ATTACHMENT_BYTES = 6_000_000;
34
+
35
+ /** Photos are re-encoded at this JPEG quality — small enough to fit the cap more often. */
36
+ const IMAGE_QUALITY = 0.7;
37
+
38
+ /** A picked file, encoded and ready to send; what the composer shows as a chip. */
39
+
40
+ /** Why some (or all) of a pick didn't make it into the composer. */
41
+
42
+ // ─── Host integrations ─────────────────────────────────────────────────────
43
+ // Resolved once at module load. Each `require` is static so Metro can see it,
44
+ // and `withRepzoWidget` (metro.js) maps an uninstalled one to an empty module.
45
+
46
+ let imagePicker = null;
47
+ try {
48
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
49
+ const mod = require('expo-image-picker');
50
+ if (typeof mod?.launchImageLibraryAsync === 'function') imagePicker = mod;
51
+ } catch {
52
+ imagePicker = null;
53
+ }
54
+ let documentPicker = null;
55
+ try {
56
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
57
+ const mod = require('expo-document-picker');
58
+ if (typeof mod?.getDocumentAsync === 'function') documentPicker = mod;
59
+ } catch {
60
+ documentPicker = null;
61
+ }
62
+ let fileSystem = null;
63
+ try {
64
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
65
+ fileSystem = require('expo-file-system') ?? null;
66
+ } catch {
67
+ fileSystem = null;
68
+ }
69
+ let imageManipulator = null;
70
+ try {
71
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
72
+ const mod = require('expo-image-manipulator');
73
+ if (typeof mod?.manipulateAsync === 'function' || typeof mod?.ImageManipulator?.manipulate === 'function') {
74
+ imageManipulator = mod;
75
+ }
76
+ } catch {
77
+ imageManipulator = null;
78
+ }
79
+
80
+ /** Longest edge of a shrunk photo — plenty for chat, typically 200–500 KB as JPEG. */
81
+ const MAX_IMAGE_EDGE = 1600;
82
+ let hostOptions = null;
83
+
84
+ /** Set from `boot({ attachments })`; `null` restores auto-detection. */
85
+ export function setAttachmentOptions(options) {
86
+ hostOptions = options;
87
+ }
88
+ const ALL_SOURCES = ['photo', 'camera', 'file'];
89
+
90
+ /**
91
+ * The options the attach menu offers, in menu order. Empty means no button:
92
+ * attachments were switched off by the host, or nothing can pick a file.
93
+ */
94
+ export function getAttachmentSources() {
95
+ if (hostOptions?.enabled === false) return [];
96
+ if (hostOptions?.pick) {
97
+ const wanted = hostOptions.sources ?? ALL_SOURCES;
98
+ return ALL_SOURCES.filter(source => wanted.includes(source));
99
+ }
100
+ const sources = [];
101
+ if (imagePicker) sources.push('photo');
102
+ if (typeof imagePicker?.launchCameraAsync === 'function') sources.push('camera');
103
+ if (documentPicker) sources.push('file');
104
+ return sources;
105
+ }
106
+
107
+ // ─── Picking ───────────────────────────────────────────────────────────────
108
+
109
+ /** Returned (not thrown) so no `instanceof` on an Error subclass is needed. */
110
+ const CAMERA_DENIED = 'cameraDenied';
111
+
112
+ /**
113
+ * Opens the picker for `source` and returns what fits alongside `current`.
114
+ * Never throws: a cancelled pick is `{ added: [], problem: null }`.
115
+ */
116
+ export async function pickAttachments(source, current) {
117
+ const slots = MAX_ATTACHMENTS - current.length;
118
+ if (slots <= 0) return {
119
+ added: [],
120
+ problem: 'tooMany'
121
+ };
122
+ let picked;
123
+ try {
124
+ picked = hostOptions?.pick ? await hostOptions.pick(source) : await launchBuiltInPicker(source, slots);
125
+ } catch (error) {
126
+ console.warn('[repzo-widget] attachment picker failed', error);
127
+ return {
128
+ added: [],
129
+ problem: 'failed'
130
+ };
131
+ }
132
+ if (picked === CAMERA_DENIED) return {
133
+ added: [],
134
+ problem: 'cameraDenied'
135
+ };
136
+ if (!Array.isArray(picked) || picked.length === 0) return {
137
+ added: [],
138
+ problem: null
139
+ };
140
+ const added = [];
141
+ let problem = null;
142
+ for (const file of picked) {
143
+ const accepted = [...current, ...added];
144
+ if (accepted.length >= MAX_ATTACHMENTS) {
145
+ problem = problem ?? 'tooMany';
146
+ break;
147
+ }
148
+ // A size the picker already knows rules a file out before it's read, so
149
+ // a 40 MB video never lands in memory as a base64 string.
150
+ const declared = file.base64 ? null : validSize(file.size);
151
+ const early = declared === null ? null : checkAttachmentFits(accepted, declared);
152
+ if (early) {
153
+ problem = problem ?? early;
154
+ continue;
155
+ }
156
+ let draft;
157
+ try {
158
+ draft = await toDraft(file);
159
+ } catch (error) {
160
+ if (error === TOO_LARGE) {
161
+ problem = problem ?? 'tooLarge';
162
+ continue;
163
+ }
164
+ console.warn('[repzo-widget] could not read attachment', error);
165
+ problem = problem ?? 'failed';
166
+ continue;
167
+ }
168
+ const fits = draft.size > 0 ? checkAttachmentFits(accepted, draft.size) : 'failed';
169
+ if (fits) {
170
+ problem = problem ?? fits;
171
+ continue;
172
+ }
173
+ added.push(draft);
174
+ }
175
+ return {
176
+ added,
177
+ problem
178
+ };
179
+ }
180
+ async function launchBuiltInPicker(source, slots) {
181
+ if (source === 'file') {
182
+ if (!documentPicker) return null;
183
+ const result = await documentPicker.getDocumentAsync({
184
+ type: '*/*',
185
+ multiple: slots > 1,
186
+ copyToCacheDirectory: true
187
+ });
188
+ // SDK 48+ returns `{ canceled, assets }`; older ones a single `{ type, uri, … }`.
189
+ if (result?.canceled || result?.type === 'cancel') return null;
190
+ const assets = Array.isArray(result?.assets) ? result.assets : result?.uri ? [result] : [];
191
+ return assets.map(asset => ({
192
+ name: asset.name || fileNameFromUri(asset.uri) || 'file',
193
+ type: asset.mimeType || '',
194
+ size: asset.size,
195
+ uri: asset.uri
196
+ }));
197
+ }
198
+ if (!imagePicker) return null;
199
+ const options = {
200
+ quality: IMAGE_QUALITY,
201
+ // With the manipulator the photo is re-encoded below, so the picker's own
202
+ // (full-resolution) base64 would only waste memory.
203
+ base64: !imageManipulator,
204
+ exif: false
205
+ };
206
+ let result;
207
+ if (source === 'camera') {
208
+ const permission = await imagePicker.requestCameraPermissionsAsync?.();
209
+ if (permission && permission.granted === false) return CAMERA_DENIED;
210
+ result = await launchImagePicker(imagePicker.launchCameraAsync, options);
211
+ } else {
212
+ result = await launchImagePicker(imagePicker.launchImageLibraryAsync, {
213
+ ...options,
214
+ allowsMultipleSelection: slots > 1,
215
+ selectionLimit: slots
216
+ });
217
+ }
218
+ if (result?.canceled || result?.cancelled) return null;
219
+ const assets = Array.isArray(result?.assets) ? result.assets : [];
220
+ const files = [];
221
+ for (const [index, asset] of assets.slice(0, slots).entries()) {
222
+ const shrunk = await shrinkPhoto(asset);
223
+ const type = shrunk ? 'image/jpeg' : asset.mimeType || guessContentType(asset.fileName || asset.uri) || 'image/jpeg';
224
+ const baseName = (asset.fileName || `photo-${Date.now()}-${index + 1}`).replace(/\.[^.]+$/, '');
225
+ files.push({
226
+ name: `${baseName}.${extensionFor(type)}`,
227
+ type,
228
+ // No `size`: `fileSize` is the original's, not the re-encoded base64's.
229
+ uri: shrunk?.uri ?? asset.uri,
230
+ base64: shrunk?.base64 ?? asset.base64 ?? undefined
231
+ });
232
+ }
233
+ return files;
234
+ }
235
+
236
+ /**
237
+ * `mediaTypes: ['images']` is the expo-image-picker 16 (SDK 52)+ form; older
238
+ * versions reject the array before any UI shows, so retry with the legacy
239
+ * `MediaTypeOptions.Images` enum they expect.
240
+ */
241
+ async function launchImagePicker(launch, options) {
242
+ try {
243
+ return await launch({
244
+ ...options,
245
+ mediaTypes: ['images']
246
+ });
247
+ } catch (error) {
248
+ const legacy = imagePicker?.MediaTypeOptions?.Images;
249
+ if (!legacy) throw error;
250
+ return launch({
251
+ ...options,
252
+ mediaTypes: legacy
253
+ });
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Re-encodes a photo as JPEG, scaled so its longest edge is at most
259
+ * MAX_IMAGE_EDGE. Null when the manipulator isn't installed or fails — the
260
+ * caller then falls back to the picker's own output (and the size check).
261
+ */
262
+ async function shrinkPhoto(asset) {
263
+ if (!imageManipulator || !asset?.uri) return null;
264
+ const width = Number(asset.width) || 0;
265
+ const height = Number(asset.height) || 0;
266
+ const longest = Math.max(width, height);
267
+ const resize = longest > MAX_IMAGE_EDGE ? width >= height ? {
268
+ width: MAX_IMAGE_EDGE
269
+ } : {
270
+ height: MAX_IMAGE_EDGE
271
+ } : null;
272
+ const saveOptions = {
273
+ compress: IMAGE_QUALITY,
274
+ format: imageManipulator.SaveFormat?.JPEG ?? 'jpeg',
275
+ base64: true
276
+ };
277
+ try {
278
+ let output;
279
+ if (typeof imageManipulator.manipulateAsync === 'function') {
280
+ output = await imageManipulator.manipulateAsync(asset.uri, resize ? [{
281
+ resize
282
+ }] : [], saveOptions);
283
+ } else {
284
+ const context = imageManipulator.ImageManipulator.manipulate(asset.uri);
285
+ if (resize) context.resize(resize);
286
+ const image = await context.renderAsync();
287
+ output = await image.saveAsync(saveOptions);
288
+ }
289
+ return typeof output?.base64 === 'string' && output.base64 ? {
290
+ uri: output.uri ?? asset.uri,
291
+ base64: output.base64
292
+ } : null;
293
+ } catch (error) {
294
+ console.warn('[repzo-widget] could not shrink photo — sending it as picked', error);
295
+ return null;
296
+ }
297
+ }
298
+ async function toDraft(file) {
299
+ let base64 = file.base64 ? stripDataUrlPrefix(file.base64) : '';
300
+ if (!base64) {
301
+ if (!file.uri) throw new Error('Picked file has neither base64 nor uri');
302
+ base64 = await readBase64(file.uri);
303
+ }
304
+ base64 = base64.replace(/\s/g, '');
305
+ const name = (file.name || fileNameFromUri(file.uri) || 'file').slice(0, 255);
306
+ const contentType = normalizeContentType(file.type) ?? guessContentType(name) ?? 'application/octet-stream';
307
+ const dataUrl = buildDataUrl(contentType, base64);
308
+ return {
309
+ id: `draft-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
310
+ name,
311
+ contentType,
312
+ size: base64ByteLength(base64),
313
+ dataUrl,
314
+ // Only the chip ever renders a data URL; the store keeps it out of messages.
315
+ previewUri: file.uri || dataUrl
316
+ };
317
+ }
318
+
319
+ /** Thrown (by identity) when a file is over the per-file cap before it's read. */
320
+ const TOO_LARGE = new Error('File exceeds the attachment cap');
321
+
322
+ /**
323
+ * `expo-file-system`'s `File` class (SDK 54+) first, then its legacy
324
+ * `readAsStringAsync` (SDK 53 and older — a throwing stub on 54), then plain
325
+ * `fetch` + `FileReader`, which RN supports for `file://` URIs.
326
+ *
327
+ * Every path checks the size before encoding: the file-system readers only
328
+ * run once the file is known to fit, so a 300 MB video never becomes a
329
+ * 400 MB base64 string. When the size can't be read, `fetch` measures the blob.
330
+ */
331
+ async function readBase64(uri) {
332
+ if (typeof fileSystem?.File === 'function') {
333
+ let file = null;
334
+ try {
335
+ file = new fileSystem.File(uri);
336
+ } catch {
337
+ file = null;
338
+ }
339
+ const size = validSize(file?.size);
340
+ if (size !== null && size > MAX_ATTACHMENT_BYTES) throw TOO_LARGE;
341
+ if (size !== null && typeof file.base64 === 'function') {
342
+ try {
343
+ const value = await file.base64();
344
+ if (typeof value === 'string' && value) return value;
345
+ } catch {
346
+ // Fall through to the next reader.
347
+ }
348
+ }
349
+ }
350
+ if (typeof fileSystem?.readAsStringAsync === 'function' && typeof fileSystem?.getInfoAsync === 'function') {
351
+ try {
352
+ const info = await fileSystem.getInfoAsync(uri, {
353
+ size: true
354
+ });
355
+ const size = validSize(info?.size);
356
+ if (size !== null && size > MAX_ATTACHMENT_BYTES) throw TOO_LARGE;
357
+ if (size !== null) {
358
+ const value = await fileSystem.readAsStringAsync(uri, {
359
+ encoding: 'base64'
360
+ });
361
+ if (typeof value === 'string' && value) return value;
362
+ }
363
+ } catch (error) {
364
+ if (error === TOO_LARGE) throw error;
365
+ // Fall through to fetch.
366
+ }
367
+ }
368
+ return readBase64WithFetch(uri);
369
+ }
370
+ async function readBase64WithFetch(uri) {
371
+ const response = await fetch(uri);
372
+ const blob = await response.blob();
373
+ // Checked before encoding: the per-file cap is the most any file may be.
374
+ if (blob.size > MAX_ATTACHMENT_BYTES) throw TOO_LARGE;
375
+ const dataUrl = await new Promise((resolve, reject) => {
376
+ const reader = new FileReader();
377
+ reader.onload = () => resolve(typeof reader.result === 'string' ? reader.result : '');
378
+ reader.onerror = () => reject(reader.error ?? new Error('FileReader failed'));
379
+ reader.readAsDataURL(blob);
380
+ });
381
+ return stripDataUrlPrefix(dataUrl);
382
+ }
383
+
384
+ // ─── Pure helpers ──────────────────────────────────────────────────────────
385
+
386
+ /** Null when a file of `size` bytes still fits beside `current`; otherwise the limit it breaks. */
387
+ export function checkAttachmentFits(current, size) {
388
+ if (current.length >= MAX_ATTACHMENTS) return 'tooMany';
389
+ if (size > MAX_ATTACHMENT_BYTES) return 'tooLarge';
390
+ const total = current.reduce((sum, item) => sum + item.size, 0);
391
+ if (total + size > MAX_TOTAL_ATTACHMENT_BYTES) return 'tooLargeTogether';
392
+ return null;
393
+ }
394
+ export function buildDataUrl(contentType, base64) {
395
+ return `data:${normalizeContentType(contentType) ?? 'application/octet-stream'};base64,${base64}`;
396
+ }
397
+
398
+ /** RFC 6838 `type/subtype` characters; no parameters, no `,` or `;`. */
399
+ const MIME_TYPE = /^[a-z0-9][a-z0-9!#$&^_.+-]{0,63}\/[a-z0-9][a-z0-9!#$&^_.+-]{0,63}$/;
400
+
401
+ /**
402
+ * A picker's MIME type as a bare lowercase `type/subtype`, or null when it
403
+ * isn't one. Parameters (`;charset=…`) are dropped: anything else could split
404
+ * the data URL at the wrong `,` and hand the server a forged content type.
405
+ */
406
+ export function normalizeContentType(value) {
407
+ if (typeof value !== 'string') return null;
408
+ const bare = value.split(';')[0].trim().toLowerCase();
409
+ return MIME_TYPE.test(bare) ? bare : null;
410
+ }
411
+
412
+ /** Accepts raw base64 or a whole data URL; returns the base64 part. */
413
+ export function stripDataUrlPrefix(value) {
414
+ const comma = value.startsWith('data:') ? value.indexOf(',') : -1;
415
+ return comma >= 0 ? value.slice(comma + 1) : value;
416
+ }
417
+
418
+ /** Decoded length of a base64 string (whitespace ignored). */
419
+ export function base64ByteLength(base64) {
420
+ const clean = base64.replace(/\s/g, '');
421
+ if (!clean) return 0;
422
+ const padding = clean.endsWith('==') ? 2 : clean.endsWith('=') ? 1 : 0;
423
+ return Math.floor(clean.length * 3 / 4) - padding;
424
+ }
425
+
426
+ /** `1.2 MB`, `340 KB` — for chips; the limits themselves use decimal units too. */
427
+ export function formatBytes(bytes) {
428
+ if (bytes >= 1_000_000) return `${(bytes / 1_000_000).toFixed(1).replace(/\.0$/, '')} MB`;
429
+ if (bytes >= 1_000) return `${Math.round(bytes / 1_000)} KB`;
430
+ return `${Math.max(0, Math.round(bytes))} B`;
431
+ }
432
+ export function isImageAttachment(contentType) {
433
+ return !!contentType && contentType.toLowerCase().startsWith('image/');
434
+ }
435
+ function validSize(size) {
436
+ return typeof size === 'number' && Number.isFinite(size) && size > 0 ? size : null;
437
+ }
438
+ function fileNameFromUri(uri) {
439
+ if (!uri) return null;
440
+ const last = uri.split(/[?#]/)[0]?.split('/').pop();
441
+ if (!last) return null;
442
+ try {
443
+ return decodeURIComponent(last);
444
+ } catch {
445
+ return last;
446
+ }
447
+ }
448
+ const CONTENT_TYPES = {
449
+ jpg: 'image/jpeg',
450
+ jpeg: 'image/jpeg',
451
+ png: 'image/png',
452
+ gif: 'image/gif',
453
+ webp: 'image/webp',
454
+ heic: 'image/heic',
455
+ heif: 'image/heif',
456
+ pdf: 'application/pdf',
457
+ txt: 'text/plain',
458
+ csv: 'text/csv',
459
+ doc: 'application/msword',
460
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
461
+ xls: 'application/vnd.ms-excel',
462
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
463
+ ppt: 'application/vnd.ms-powerpoint',
464
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
465
+ zip: 'application/zip',
466
+ mp3: 'audio/mpeg',
467
+ m4a: 'audio/mp4',
468
+ mp4: 'video/mp4',
469
+ mov: 'video/quicktime'
470
+ };
471
+ function guessContentType(nameOrUri) {
472
+ const extension = /\.([a-z0-9]+)$/i.exec(nameOrUri?.split(/[?#]/)[0] ?? '')?.[1];
473
+ return extension ? CONTENT_TYPES[extension.toLowerCase()] ?? null : null;
474
+ }
475
+ function extensionFor(contentType) {
476
+ const subtype = contentType.split('/')[1]?.toLowerCase();
477
+ return subtype === 'jpeg' || !subtype ? 'jpg' : subtype;
478
+ }
479
+ //# sourceMappingURL=pickers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MAX_ATTACHMENTS","MAX_ATTACHMENT_BYTES","MAX_TOTAL_ATTACHMENT_BYTES","IMAGE_QUALITY","imagePicker","mod","require","launchImageLibraryAsync","documentPicker","getDocumentAsync","fileSystem","imageManipulator","manipulateAsync","ImageManipulator","manipulate","MAX_IMAGE_EDGE","hostOptions","setAttachmentOptions","options","ALL_SOURCES","getAttachmentSources","enabled","pick","wanted","sources","filter","source","includes","push","launchCameraAsync","CAMERA_DENIED","pickAttachments","current","slots","length","added","problem","picked","launchBuiltInPicker","error","console","warn","Array","isArray","file","accepted","declared","base64","validSize","size","early","checkAttachmentFits","draft","toDraft","TOO_LARGE","fits","result","type","multiple","copyToCacheDirectory","canceled","assets","uri","map","asset","name","fileNameFromUri","mimeType","quality","exif","permission","requestCameraPermissionsAsync","granted","launchImagePicker","allowsMultipleSelection","selectionLimit","cancelled","files","index","slice","entries","shrunk","shrinkPhoto","guessContentType","fileName","baseName","Date","now","replace","extensionFor","undefined","launch","mediaTypes","legacy","MediaTypeOptions","Images","width","Number","height","longest","Math","max","resize","saveOptions","compress","format","SaveFormat","JPEG","output","context","image","renderAsync","saveAsync","stripDataUrlPrefix","Error","readBase64","contentType","normalizeContentType","dataUrl","buildDataUrl","id","random","toString","base64ByteLength","previewUri","File","value","readAsStringAsync","getInfoAsync","info","encoding","readBase64WithFetch","response","fetch","blob","Promise","resolve","reject","reader","FileReader","onload","onerror","readAsDataURL","total","reduce","sum","item","MIME_TYPE","bare","split","trim","toLowerCase","test","comma","startsWith","indexOf","clean","padding","endsWith","floor","formatBytes","bytes","toFixed","round","isImageAttachment","isFinite","last","pop","decodeURIComponent","CONTENT_TYPES","jpg","jpeg","png","gif","webp","heic","heif","pdf","txt","csv","doc","docx","xls","xlsx","ppt","pptx","zip","mp3","m4a","mp4","mov","nameOrUri","extension","exec","subtype"],"sourceRoot":"../../../src","sources":["attachments/pickers.ts"],"mappings":"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","ignoreList":[]}
@@ -26,6 +26,20 @@ export const DEFAULT_LABELS = {
26
26
  emptyConversation: 'Send a message to start the conversation',
27
27
  messagePlaceholder: 'Type a message...',
28
28
  attachFile: 'Attach file',
29
+ // Attach menu, composer chips and the notices under them.
30
+ attachPhotoLibrary: 'Photo library',
31
+ attachTakePhoto: 'Take photo',
32
+ attachChooseFile: 'File',
33
+ removeAttachment: 'Remove {name}',
34
+ attachmentTooLarge: 'File is too large (max {max})',
35
+ attachmentTooMany: 'You can attach up to {count} files',
36
+ attachmentsTooLargeTogether: 'Attachments are too large to send together — send some in another message',
37
+ attachmentFailed: "Couldn't attach that file",
38
+ // Full-screen image viewer.
39
+ imageLoadFailed: "Couldn't load this image",
40
+ openImageExternally: 'Open image',
41
+ cameraPermissionDenied: 'Allow camera access in Settings to take a photo',
42
+ cancel: 'Cancel',
29
43
  failedToSend: 'Failed to send',
30
44
  thinking: 'Typing',
31
45
  messages: 'Messages',
@@ -75,6 +89,11 @@ export const DEFAULT_LABELS = {
75
89
  outboundTitle: 'New update',
76
90
  outboundCta: 'Learn more',
77
91
  dismiss: 'Dismiss',
92
+ // In-app card for a new reply while the messenger is closed.
93
+ notificationReplyFrom: 'Reply from {name}',
94
+ notificationNewReply: 'New reply',
95
+ notificationAttachment: 'Sent an attachment',
96
+ notificationOpenHint: 'Opens the conversation',
78
97
  // Rich blocks an agent can send.
79
98
  blockService: 'Service',
80
99
  blockProduct: 'Product',
@@ -1 +1 @@
1
- {"version":3,"names":["BUNDLED_TRANSLATIONS","baseLanguage","createTranslator","config","locale","defaultLocale","active","fallbackLocale","key","fallback","translations","DEFAULT_LABELS","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","procedureSend","procedureSent","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","formatLabel","template","values","replace","match","String","buildLabels","translate","labels","Object","keys","forEach"],"sourceRoot":"../../src","sources":["i18n.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["BUNDLED_TRANSLATIONS","baseLanguage","createTranslator","config","locale","defaultLocale","active","fallbackLocale","key","fallback","translations","DEFAULT_LABELS","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","attachPhotoLibrary","attachTakePhoto","attachChooseFile","removeAttachment","attachmentTooLarge","attachmentTooMany","attachmentsTooLargeTogether","attachmentFailed","imageLoadFailed","openImageExternally","cameraPermissionDenied","cancel","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","procedureSend","procedureSent","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","notificationReplyFrom","notificationNewReply","notificationAttachment","notificationOpenHint","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","formatLabel","template","values","replace","match","String","buildLabels","translate","labels","Object","keys","forEach"],"sourceRoot":"../../src","sources":["i18n.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["controller","RepzoWidgetEvents","setSecureStorageAdapter","setStorageAdapter","RepzoWidgetProvider","Launcher","RepzoWidgetLauncher","RepzoWidgetError","DEFAULT_BASE_URL","useWidgetState","Space","RepzoWidget","boot","options","store","loginUnidentifiedUser","loginUserWithUserAttributes","user","updateUser","attributes","logout","present","presentSpace","space","presentConversation","conversationId","openConversation","hide","getUnreadConversationCount","Object","values","getState","unreadByConversation","filter","count","length","getUnreadMessageCount","unreadCount","logEvent","eventName","metadata","track","setLocale","locale","addEventListener","event","listener","events","addListener","adapter","setPushToken","push","setManualToken","Events"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,iBAAiB,QAAuD,aAAU;AAC3F,SAASC,uBAAuB,EAAEC,iBAAiB,QAAQ,cAAW;AAStE,SAASC,mBAAmB,QAAQ,wBAAqB;AACzD,SAASC,QAAQ,IAAIC,mBAAmB,QAAQ,6BAA0B;AAC1E,SAASL,iBAAiB,QAAQ,aAAU;AAC5C,SAASM,gBAAgB,QAAQ,iBAAc;AAC/C,SAASC,gBAAgB,QAAQ,YAAS;AAC1C,SAASC,cAAc,QAAQ,6BAA0B;AA6BzD;AACA,WAAYC,KAAK,0BAALA,KAAK;EAALA,KAAK;EAALA,KAAK;EAAA,OAALA,KAAK;AAAA;AAiGjB,MAAMC,WAA4B,GAAG;EACnCC,IAAI,EAAGC,OAAO,IAAKb,UAAU,CAACc,KAAK,CAACF,IAAI,CAACC,OAAO,CAAC;EAEjDE,qBAAqB,EAAEA,CAAA,KAAMf,UAAU,CAACc,KAAK,CAACC,qBAAqB,CAAC,CAAC;EAErEC,2BAA2B,EAAGC,IAAI,IAAKjB,UAAU,CAACc,KAAK,CAACE,2BAA2B,CAACC,IAAI,CAAC;EAEzFC,UAAU,EAAGC,UAAU,IAAKnB,UAAU,CAACc,KAAK,CAACI,UAAU,CAACC,UAAU,CAAC;EAEnEC,MAAM,EAAEA,CAAA,KAAMpB,UAAU,CAACc,KAAK,CAACM,MAAM,CAAC,CAAC;EAEvCC,OAAO,EAAE,MAAAA,CAAA,KAAY;IACnBrB,UAAU,CAACc,KAAK,CAACO,OAAO,CAAC,CAAC;EAC5B,CAAC;EAEDC,YAAY,EAAE,MAAOC,KAAK,IAAK;IAC7BvB,UAAU,CAACc,KAAK,CAACO,OAAO,CAACE,KAAwB,CAAC;EACpD,CAAC;EAEDC,mBAAmB,EAAGC,cAAc,IAAKzB,UAAU,CAACc,KAAK,CAACY,gBAAgB,CAACD,cAAc,CAAC;EAE1FE,IAAI,EAAE,MAAAA,CAAA,KAAY;IAChB3B,UAAU,CAACc,KAAK,CAACa,IAAI,CAAC,CAAC;EACzB,CAAC;EAEDC,0BAA0B,EAAE,MAAAA,CAAA,KAC1BC,MAAM,CAACC,MAAM,CAAC9B,UAAU,CAACc,KAAK,CAACiB,QAAQ,CAAC,CAAC,CAACC,oBAAoB,CAAC,CAACC,MAAM,CAAEC,KAAK,IAAKA,KAAK,GAAG,CAAC,CAAC,CACzFC,MAAM;EAEXC,qBAAqB,EAAE,MAAAA,CAAA,KAAYpC,UAAU,CAACc,KAAK,CAACiB,QAAQ,CAAC,CAAC,CAACM,WAAW;EAE1EC,QAAQ,EAAE,MAAAA,CAAOC,SAAS,EAAEC,QAAQ,KAAK;IACvCxC,UAAU,CAACc,KAAK,CAAC2B,KAAK,CAACF,SAAS,EAAEC,QAAQ,IAAI,CAAC,CAAC,CAAC;EACnD,CAAC;EAEDE,SAAS,EAAGC,MAAM,IAAK3C,UAAU,CAACc,KAAK,CAAC4B,SAAS,CAACC,MAAM,CAAC;EAEzDC,gBAAgB,EAAEA,CAACC,KAAK,EAAEC,QAAQ,KAAK9C,UAAU,CAAC+C,MAAM,CAACC,WAAW,CAACH,KAAK,EAAEC,QAAQ,CAAC;EAErF3C,iBAAiB,EAAG8C,OAAO,IAAK9C,iBAAiB,CAAC8C,OAAO,CAAC;EAE1D/C,uBAAuB,EAAG+C,OAAO,IAAK/C,uBAAuB,CAAC+C,OAAO,CAAC;EAEtEC,YAAY,EAAGrC,OAAO,IAAKb,UAAU,CAACc,KAAK,CAACqC,IAAI,CAACC,cAAc,CAACvC,OAAO;AACzE,CAAC;AAED,eAAeF,WAAW;AAC1B,SAASV,iBAAiB,IAAIoD,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["controller","RepzoWidgetEvents","setSecureStorageAdapter","setStorageAdapter","RepzoWidgetProvider","Launcher","RepzoWidgetLauncher","RepzoWidgetError","DEFAULT_BASE_URL","useWidgetState","Space","RepzoWidget","boot","options","store","loginUnidentifiedUser","loginUserWithUserAttributes","user","updateUser","attributes","logout","present","presentSpace","space","presentConversation","conversationId","openConversation","hide","getUnreadConversationCount","Object","values","getState","unreadByConversation","filter","count","length","getUnreadMessageCount","unreadCount","logEvent","eventName","metadata","track","setLocale","locale","addEventListener","event","listener","events","addListener","adapter","setPushToken","push","setManualToken","Events"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,iBAAiB,QAAuD,aAAU;AAC3F,SAASC,uBAAuB,EAAEC,iBAAiB,QAAQ,cAAW;AAStE,SAASC,mBAAmB,QAAQ,wBAAqB;AACzD,SAASC,QAAQ,IAAIC,mBAAmB,QAAQ,6BAA0B;AAC1E,SAASL,iBAAiB,QAAQ,aAAU;AAC5C,SAASM,gBAAgB,QAAQ,iBAAc;AAC/C,SAASC,gBAAgB,QAAQ,YAAS;AAC1C,SAASC,cAAc,QAAQ,6BAA0B;AAiCzD;AACA,WAAYC,KAAK,0BAALA,KAAK;EAALA,KAAK;EAALA,KAAK;EAAA,OAALA,KAAK;AAAA;AAiGjB,MAAMC,WAA4B,GAAG;EACnCC,IAAI,EAAGC,OAAO,IAAKb,UAAU,CAACc,KAAK,CAACF,IAAI,CAACC,OAAO,CAAC;EAEjDE,qBAAqB,EAAEA,CAAA,KAAMf,UAAU,CAACc,KAAK,CAACC,qBAAqB,CAAC,CAAC;EAErEC,2BAA2B,EAAGC,IAAI,IAAKjB,UAAU,CAACc,KAAK,CAACE,2BAA2B,CAACC,IAAI,CAAC;EAEzFC,UAAU,EAAGC,UAAU,IAAKnB,UAAU,CAACc,KAAK,CAACI,UAAU,CAACC,UAAU,CAAC;EAEnEC,MAAM,EAAEA,CAAA,KAAMpB,UAAU,CAACc,KAAK,CAACM,MAAM,CAAC,CAAC;EAEvCC,OAAO,EAAE,MAAAA,CAAA,KAAY;IACnBrB,UAAU,CAACc,KAAK,CAACO,OAAO,CAAC,CAAC;EAC5B,CAAC;EAEDC,YAAY,EAAE,MAAOC,KAAK,IAAK;IAC7BvB,UAAU,CAACc,KAAK,CAACO,OAAO,CAACE,KAAwB,CAAC;EACpD,CAAC;EAEDC,mBAAmB,EAAGC,cAAc,IAAKzB,UAAU,CAACc,KAAK,CAACY,gBAAgB,CAACD,cAAc,CAAC;EAE1FE,IAAI,EAAE,MAAAA,CAAA,KAAY;IAChB3B,UAAU,CAACc,KAAK,CAACa,IAAI,CAAC,CAAC;EACzB,CAAC;EAEDC,0BAA0B,EAAE,MAAAA,CAAA,KAC1BC,MAAM,CAACC,MAAM,CAAC9B,UAAU,CAACc,KAAK,CAACiB,QAAQ,CAAC,CAAC,CAACC,oBAAoB,CAAC,CAACC,MAAM,CAAEC,KAAK,IAAKA,KAAK,GAAG,CAAC,CAAC,CACzFC,MAAM;EAEXC,qBAAqB,EAAE,MAAAA,CAAA,KAAYpC,UAAU,CAACc,KAAK,CAACiB,QAAQ,CAAC,CAAC,CAACM,WAAW;EAE1EC,QAAQ,EAAE,MAAAA,CAAOC,SAAS,EAAEC,QAAQ,KAAK;IACvCxC,UAAU,CAACc,KAAK,CAAC2B,KAAK,CAACF,SAAS,EAAEC,QAAQ,IAAI,CAAC,CAAC,CAAC;EACnD,CAAC;EAEDE,SAAS,EAAGC,MAAM,IAAK3C,UAAU,CAACc,KAAK,CAAC4B,SAAS,CAACC,MAAM,CAAC;EAEzDC,gBAAgB,EAAEA,CAACC,KAAK,EAAEC,QAAQ,KAAK9C,UAAU,CAAC+C,MAAM,CAACC,WAAW,CAACH,KAAK,EAAEC,QAAQ,CAAC;EAErF3C,iBAAiB,EAAG8C,OAAO,IAAK9C,iBAAiB,CAAC8C,OAAO,CAAC;EAE1D/C,uBAAuB,EAAG+C,OAAO,IAAK/C,uBAAuB,CAAC+C,OAAO,CAAC;EAEtEC,YAAY,EAAGrC,OAAO,IAAKb,UAAU,CAACc,KAAK,CAACqC,IAAI,CAACC,cAAc,CAACvC,OAAO;AACzE,CAAC;AAED,eAAeF,WAAW;AAC1B,SAASV,iBAAiB,IAAIoD,MAAM","ignoreList":[]}
@@ -19,6 +19,18 @@ const ar = {
19
19
  emptyConversation: 'أرسل رسالة لبدء المحادثة',
20
20
  messagePlaceholder: 'اكتب رسالة...',
21
21
  attachFile: 'إرفاق ملف',
22
+ attachPhotoLibrary: 'مكتبة الصور',
23
+ attachTakePhoto: 'التقاط صورة',
24
+ attachChooseFile: 'ملف',
25
+ removeAttachment: 'إزالة {name}',
26
+ attachmentTooLarge: 'الملف كبير جدًا (الحد الأقصى {max})',
27
+ attachmentTooMany: 'يمكنك إرفاق {count} ملفات كحد أقصى',
28
+ attachmentsTooLargeTogether: 'المرفقات كبيرة جدًا لإرسالها معًا — أرسل بعضها في رسالة أخرى',
29
+ attachmentFailed: 'تعذر إرفاق هذا الملف',
30
+ imageLoadFailed: 'تعذر تحميل هذه الصورة',
31
+ openImageExternally: 'فتح الصورة',
32
+ cameraPermissionDenied: 'اسمح بالوصول إلى الكاميرا من الإعدادات لالتقاط صورة',
33
+ cancel: 'إلغاء',
22
34
  failedToSend: 'تعذر الإرسال',
23
35
  thinking: 'يكتب',
24
36
  messages: 'الرسائل',
@@ -63,6 +75,10 @@ const ar = {
63
75
  outboundTitle: 'تحديث جديد',
64
76
  outboundCta: 'اعرف المزيد',
65
77
  dismiss: 'تجاهل',
78
+ notificationReplyFrom: 'رد من {name}',
79
+ notificationNewReply: 'رد جديد',
80
+ notificationAttachment: 'أرسل مرفقًا',
81
+ notificationOpenHint: 'يفتح المحادثة',
66
82
  blockService: 'خدمة',
67
83
  blockProduct: 'منتج',
68
84
  blockChooseTime: 'اختر وقتًا',
@@ -1 +1 @@
1
- {"version":3,"names":["ar","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","procedureSend","procedureSent","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","BUNDLED_TRANSLATIONS","baseLanguage","locale","split","toLowerCase"],"sourceRoot":"../../src","sources":["locales.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,MAAMA,EAAY,GAAG;EACnBC,IAAI,EAAE,MAAM;EACZC,OAAO,EAAE,iBAAiB;EAC1BC,WAAW,EAAE,uBAAuB;EACpCC,iBAAiB,EAAE,0BAA0B;EAC7CC,kBAAkB,EAAE,eAAe;EACnCC,UAAU,EAAE,WAAW;EACvBC,YAAY,EAAE,cAAc;EAC5BC,QAAQ,EAAE,MAAM;EAChBC,QAAQ,EAAE,SAAS;EACnBC,UAAU,EAAE,mBAAmB;EAC/BC,aAAa,EAAE,oBAAoB;EACnCC,UAAU,EAAE,uBAAuB;EACnCC,YAAY,EAAE,aAAa;EAC3BC,eAAe,EAAE,mDAAmD;EACpEC,WAAW,EAAE,MAAM;EACnBC,aAAa,EAAE,eAAe;EAC9BC,yBAAyB,EAAE,uBAAuB;EAClDC,eAAe,EAAE,QAAQ;EACzBC,gBAAgB,EAAE,oBAAoB;EACtCC,mBAAmB,EAAE,oBAAoB;EACzCC,gBAAgB,EAAE,YAAY;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,WAAW,EAAE,oBAAoB;EACjCC,IAAI,EAAE,QAAQ;EACdC,IAAI,EAAE,UAAU;EAChBC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE,gBAAgB;EACvBC,eAAe,EAAE,8CAA8C;EAC/DC,UAAU,EAAE,qBAAqB;EACjCC,eAAe,EAAE,4BAA4B;EAC7CC,yBAAyB,EAAE,mDAAmD;EAC9EC,aAAa,EAAE,aAAa;EAC5B;EACAC,WAAW,EAAE,MAAM;EACnBC,WAAW,EAAE,WAAW;EACxBC,SAAS,EAAE,WAAW;EACtBC,QAAQ,EAAE,WAAW;EACrBC,UAAU,EAAE,aAAa;EACzBC,SAAS,EAAE,aAAa;EACxBC,KAAK,EAAE,OAAO;EACdC,SAAS,EAAE,KAAK;EAChBC,mBAAmB,EAAE,mBAAmB;EACxCC,aAAa,EAAE,gBAAgB;EAC/BC,aAAa,EAAE,YAAY;EAC3BC,aAAa,EAAE,eAAe;EAC9BC,YAAY,EAAE,+BAA+B;EAC7CC,OAAO,EAAE,eAAe;EACxBC,aAAa,EAAE,YAAY;EAC3BC,WAAW,EAAE,aAAa;EAC1BC,OAAO,EAAE,OAAO;EAChBC,YAAY,EAAE,MAAM;EACpBC,YAAY,EAAE,MAAM;EACpBC,eAAe,EAAE,YAAY;EAC7BC,iBAAiB,EAAE,QAAQ;EAC3BC,eAAe,EAAE;AACnB,CAAC;AAED,OAAO,MAAMC,oBAA8C,GAAG;EAAEvD;AAAG,CAAC;;AAEpE;AACA,OAAO,SAASwD,YAAYA,CAACC,MAAsB,EAAU;EAC3D,OAAO,CAACA,MAAM,IAAI,EAAE,EAAEC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAEC,WAAW,CAAC,CAAC,IAAI,EAAE;AAC7D","ignoreList":[]}
1
+ {"version":3,"names":["ar","back","loading","loadEarlier","emptyConversation","messagePlaceholder","attachFile","attachPhotoLibrary","attachTakePhoto","attachChooseFile","removeAttachment","attachmentTooLarge","attachmentTooMany","attachmentsTooLargeTogether","attachmentFailed","imageLoadFailed","openImageExternally","cameraPermissionDenied","cancel","failedToSend","thinking","messages","noMessages","historyHidden","startBelow","preChatTitle","preChatSubtitle","preChatSkip","preChatSubmit","viewPreviousConversations","homeRecentTitle","homeViewAllCount","homeNoConversations","homeStatusOnline","homeStatusAway","unreadBadge","team","home","close","retry","connectionError","connecting","chatUnavailable","identityVerificationError","widgetCrashed","timeJustNow","timeMinutes","timeHours","timeDays","timeMonths","timeYears","today","yesterday","conversationUpdated","procedureSend","procedureSent","fieldRequired","invalidEmail","working","outboundTitle","outboundCta","dismiss","notificationReplyFrom","notificationNewReply","notificationAttachment","notificationOpenHint","blockService","blockProduct","blockChooseTime","blockProfessional","blockPriceOffer","BUNDLED_TRANSLATIONS","baseLanguage","locale","split","toLowerCase"],"sourceRoot":"../../src","sources":["locales.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA,MAAMA,EAAY,GAAG;EACnBC,IAAI,EAAE,MAAM;EACZC,OAAO,EAAE,iBAAiB;EAC1BC,WAAW,EAAE,uBAAuB;EACpCC,iBAAiB,EAAE,0BAA0B;EAC7CC,kBAAkB,EAAE,eAAe;EACnCC,UAAU,EAAE,WAAW;EACvBC,kBAAkB,EAAE,aAAa;EACjCC,eAAe,EAAE,aAAa;EAC9BC,gBAAgB,EAAE,KAAK;EACvBC,gBAAgB,EAAE,cAAc;EAChCC,kBAAkB,EAAE,qCAAqC;EACzDC,iBAAiB,EAAE,oCAAoC;EACvDC,2BAA2B,EAAE,8DAA8D;EAC3FC,gBAAgB,EAAE,sBAAsB;EACxCC,eAAe,EAAE,uBAAuB;EACxCC,mBAAmB,EAAE,YAAY;EACjCC,sBAAsB,EAAE,qDAAqD;EAC7EC,MAAM,EAAE,OAAO;EACfC,YAAY,EAAE,cAAc;EAC5BC,QAAQ,EAAE,MAAM;EAChBC,QAAQ,EAAE,SAAS;EACnBC,UAAU,EAAE,mBAAmB;EAC/BC,aAAa,EAAE,oBAAoB;EACnCC,UAAU,EAAE,uBAAuB;EACnCC,YAAY,EAAE,aAAa;EAC3BC,eAAe,EAAE,mDAAmD;EACpEC,WAAW,EAAE,MAAM;EACnBC,aAAa,EAAE,eAAe;EAC9BC,yBAAyB,EAAE,uBAAuB;EAClDC,eAAe,EAAE,QAAQ;EACzBC,gBAAgB,EAAE,oBAAoB;EACtCC,mBAAmB,EAAE,oBAAoB;EACzCC,gBAAgB,EAAE,YAAY;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,WAAW,EAAE,oBAAoB;EACjCC,IAAI,EAAE,QAAQ;EACdC,IAAI,EAAE,UAAU;EAChBC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE,gBAAgB;EACvBC,eAAe,EAAE,8CAA8C;EAC/DC,UAAU,EAAE,qBAAqB;EACjCC,eAAe,EAAE,4BAA4B;EAC7CC,yBAAyB,EAAE,mDAAmD;EAC9EC,aAAa,EAAE,aAAa;EAC5B;EACAC,WAAW,EAAE,MAAM;EACnBC,WAAW,EAAE,WAAW;EACxBC,SAAS,EAAE,WAAW;EACtBC,QAAQ,EAAE,WAAW;EACrBC,UAAU,EAAE,aAAa;EACzBC,SAAS,EAAE,aAAa;EACxBC,KAAK,EAAE,OAAO;EACdC,SAAS,EAAE,KAAK;EAChBC,mBAAmB,EAAE,mBAAmB;EACxCC,aAAa,EAAE,gBAAgB;EAC/BC,aAAa,EAAE,YAAY;EAC3BC,aAAa,EAAE,eAAe;EAC9BC,YAAY,EAAE,+BAA+B;EAC7CC,OAAO,EAAE,eAAe;EACxBC,aAAa,EAAE,YAAY;EAC3BC,WAAW,EAAE,aAAa;EAC1BC,OAAO,EAAE,OAAO;EAChBC,qBAAqB,EAAE,cAAc;EACrCC,oBAAoB,EAAE,SAAS;EAC/BC,sBAAsB,EAAE,aAAa;EACrCC,oBAAoB,EAAE,eAAe;EACrCC,YAAY,EAAE,MAAM;EACpBC,YAAY,EAAE,MAAM;EACpBC,eAAe,EAAE,YAAY;EAC7BC,iBAAiB,EAAE,QAAQ;EAC3BC,eAAe,EAAE;AACnB,CAAC;AAED,OAAO,MAAMC,oBAA8C,GAAG;EAAEvE;AAAG,CAAC;;AAEpE;AACA,OAAO,SAASwE,YAAYA,CAACC,MAAsB,EAAU;EAC3D,OAAO,CAACA,MAAM,IAAI,EAAE,EAAEC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAEC,WAAW,CAAC,CAAC,IAAI,EAAE;AAC7D","ignoreList":[]}