@bigbinary/neeto-whatsapp-frontend 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 (51) hide show
  1. package/README.md +186 -0
  2. package/app/javascript/src/translations/ar.json +5 -0
  3. package/app/javascript/src/translations/bg.json +5 -0
  4. package/app/javascript/src/translations/ca.json +5 -0
  5. package/app/javascript/src/translations/cs.json +5 -0
  6. package/app/javascript/src/translations/da.json +5 -0
  7. package/app/javascript/src/translations/de.json +5 -0
  8. package/app/javascript/src/translations/en.json +21 -0
  9. package/app/javascript/src/translations/es-MX.json +5 -0
  10. package/app/javascript/src/translations/es.json +5 -0
  11. package/app/javascript/src/translations/et.json +5 -0
  12. package/app/javascript/src/translations/fi.json +5 -0
  13. package/app/javascript/src/translations/fil.json +5 -0
  14. package/app/javascript/src/translations/fr.json +5 -0
  15. package/app/javascript/src/translations/he.json +5 -0
  16. package/app/javascript/src/translations/hi.json +5 -0
  17. package/app/javascript/src/translations/hr.json +5 -0
  18. package/app/javascript/src/translations/id.json +5 -0
  19. package/app/javascript/src/translations/index.js +3 -0
  20. package/app/javascript/src/translations/it.json +5 -0
  21. package/app/javascript/src/translations/ja.json +5 -0
  22. package/app/javascript/src/translations/ko.json +5 -0
  23. package/app/javascript/src/translations/nl.json +5 -0
  24. package/app/javascript/src/translations/pl.json +5 -0
  25. package/app/javascript/src/translations/pt-BR.json +5 -0
  26. package/app/javascript/src/translations/pt.json +5 -0
  27. package/app/javascript/src/translations/ro.json +5 -0
  28. package/app/javascript/src/translations/ru.json +5 -0
  29. package/app/javascript/src/translations/sk.json +5 -0
  30. package/app/javascript/src/translations/sl.json +5 -0
  31. package/app/javascript/src/translations/sv.json +5 -0
  32. package/app/javascript/src/translations/th.json +5 -0
  33. package/app/javascript/src/translations/tr.json +5 -0
  34. package/app/javascript/src/translations/uk.json +5 -0
  35. package/app/javascript/src/translations/vi.json +5 -0
  36. package/app/javascript/src/translations/zh-CN.json +5 -0
  37. package/app/javascript/src/translations/zh-TW.json +5 -0
  38. package/dist/WelcomeScreen.js +13 -0
  39. package/dist/WelcomeScreen.js.map +1 -0
  40. package/dist/WhatsAppMessages.js +488 -0
  41. package/dist/WhatsAppMessages.js.map +1 -0
  42. package/dist/cjs/WelcomeScreen.js +15 -0
  43. package/dist/cjs/WelcomeScreen.js.map +1 -0
  44. package/dist/cjs/WhatsAppMessages.js +490 -0
  45. package/dist/cjs/WhatsAppMessages.js.map +1 -0
  46. package/dist/cjs/index.js +31 -0
  47. package/dist/cjs/index.js.map +1 -0
  48. package/dist/index.js +24 -0
  49. package/dist/index.js.map +1 -0
  50. package/package.json +238 -0
  51. package/types.d.ts +8 -0
@@ -0,0 +1,490 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var Spinner = require('@bigbinary/neetoui/Spinner');
5
+ var NoData = require('@bigbinary/neetoui/NoData');
6
+ var ramda = require('ramda');
7
+ var reactI18next = require('react-i18next');
8
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
9
+ var reactQuery = require('@tanstack/react-query');
10
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
11
+ var axios = require('axios');
12
+ var Clock = require('@bigbinary/neeto-icons/Clock');
13
+ var Error = require('@bigbinary/neeto-icons/Error');
14
+ var DoubleCheck = require('@bigbinary/neeto-icons/DoubleCheck');
15
+ var Check = require('@bigbinary/neeto-icons/Check');
16
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
17
+ var Button = require('@bigbinary/neetoui/Button');
18
+ var Textarea = require('@bigbinary/neetoui/Textarea');
19
+ var Tooltip = require('@bigbinary/neetoui/Tooltip');
20
+ var Toastr = require('@bigbinary/neetoui/Toastr');
21
+ var jsxRuntime = require('react/jsx-runtime');
22
+ var classnames = require('classnames');
23
+ var Typography = require('@bigbinary/neetoui/Typography');
24
+
25
+ var NEETO_WHATSAPP_ENGINE_BASE_URL = "/neeto_whatsapp/api/v1";
26
+ var MESSAGES_URL = "".concat(NEETO_WHATSAPP_ENGINE_BASE_URL, "/messages");
27
+ var QUERY_KEYS = {
28
+ WHATSAPP_MESSAGES: "neeto-whatsapp-messages"
29
+ };
30
+ var FORMATTING_MARKERS = [{
31
+ "char": "*",
32
+ Tag: "strong"
33
+ }, {
34
+ "char": "_",
35
+ Tag: "em"
36
+ }, {
37
+ "char": "~",
38
+ Tag: "del"
39
+ }];
40
+ var PUNCTUATION_REGEX = /(?:[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B4E\u1B4F\u1B5A-\u1B60\u1B7D-\u1B7F\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDD6E\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9\uDFD4\uDFD5\uDFD7\uDFD8]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09\uDFE1]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDD6D-\uDD6F\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD839\uDDFF|\uD83A[\uDD5E\uDD5F])/;
41
+ var WHATSAPP_MESSAGES_REFETCH_INTERVAL = 10000;
42
+ var STATUS_ICON_CONFIG = {
43
+ pending: {
44
+ Icon: Clock,
45
+ className: "neeto-ui-text-gray-600"
46
+ },
47
+ sent: {
48
+ Icon: Check,
49
+ className: "neeto-ui-text-gray-600"
50
+ },
51
+ delivered: {
52
+ Icon: DoubleCheck,
53
+ className: "neeto-ui-text-gray-600"
54
+ },
55
+ read: {
56
+ Icon: DoubleCheck,
57
+ className: "neeto-ui-text-info-500"
58
+ },
59
+ failed: {
60
+ Icon: Error,
61
+ className: "neeto-ui-text-danger-500"
62
+ }
63
+ };
64
+
65
+ var fetch = function fetch(_ref) {
66
+ var entityType = _ref.entityType,
67
+ entityId = _ref.entityId;
68
+ return axios.get(MESSAGES_URL, {
69
+ params: {
70
+ entityType: entityType,
71
+ entityId: entityId
72
+ }
73
+ });
74
+ };
75
+ var create = function create(_ref2) {
76
+ var body = _ref2.body,
77
+ entityType = _ref2.entityType,
78
+ entityId = _ref2.entityId;
79
+ return axios.post(MESSAGES_URL, {
80
+ body: body,
81
+ entityType: entityType,
82
+ entityId: entityId
83
+ });
84
+ };
85
+ var messagesApi = {
86
+ fetch: fetch,
87
+ create: create
88
+ };
89
+
90
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
91
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
92
+ var useFetchWhatsappMessages = function useFetchWhatsappMessages(_ref) {
93
+ var entityType = _ref.entityType,
94
+ entityId = _ref.entityId;
95
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
96
+ return reactQuery.useQuery(_objectSpread({
97
+ queryKey: [QUERY_KEYS.WHATSAPP_MESSAGES, entityType, entityId],
98
+ queryFn: function queryFn() {
99
+ return messagesApi.fetch({
100
+ entityType: entityType,
101
+ entityId: entityId
102
+ });
103
+ },
104
+ enabled: Boolean(entityType && entityId),
105
+ refetchInterval: WHATSAPP_MESSAGES_REFETCH_INTERVAL
106
+ }, options));
107
+ };
108
+ var useCreateWhatsappMessage = function useCreateWhatsappMessage(_ref2) {
109
+ var entityType = _ref2.entityType,
110
+ entityId = _ref2.entityId;
111
+ return reactUtils.useMutationWithInvalidation(messagesApi.create, {
112
+ keysToInvalidate: [[QUERY_KEYS.WHATSAPP_MESSAGES, entityType, entityId]]
113
+ });
114
+ };
115
+
116
+ var ComposeForm = function ComposeForm(_ref) {
117
+ var entityType = _ref.entityType,
118
+ entityId = _ref.entityId,
119
+ canReply = _ref.canReply;
120
+ var _useTranslation = reactI18next.useTranslation(),
121
+ t = _useTranslation.t;
122
+ var _useState = React.useState(""),
123
+ _useState2 = _slicedToArray(_useState, 2),
124
+ body = _useState2[0],
125
+ setBody = _useState2[1];
126
+ var _useState3 = React.useState(!canReply),
127
+ _useState4 = _slicedToArray(_useState3, 2),
128
+ isWindowExpired = _useState4[0],
129
+ setIsWindowExpired = _useState4[1];
130
+ React.useEffect(function () {
131
+ setIsWindowExpired(!canReply);
132
+ }, [canReply]);
133
+ var _useCreateWhatsappMes = useCreateWhatsappMessage({
134
+ entityType: entityType,
135
+ entityId: entityId
136
+ }),
137
+ createMessage = _useCreateWhatsappMes.mutate,
138
+ isPending = _useCreateWhatsappMes.isPending;
139
+ var handleSubmit = function handleSubmit() {
140
+ if (!body.trim()) return;
141
+ createMessage({
142
+ body: body.trim(),
143
+ entityType: entityType,
144
+ entityId: entityId
145
+ }, {
146
+ onSuccess: function onSuccess() {
147
+ return setBody("");
148
+ },
149
+ onError: function onError(error) {
150
+ var _error$response;
151
+ var errorMessage = ((_error$response = error.response) === null || _error$response === void 0 || (_error$response = _error$response.data) === null || _error$response === void 0 ? void 0 : _error$response.error) || t("neetoWhatsapp.messages.compose.sendError");
152
+ Toastr.error(errorMessage);
153
+ if (errorMessage.includes("24-hour conversation window has expired")) {
154
+ setIsWindowExpired(true);
155
+ }
156
+ }
157
+ });
158
+ };
159
+ var handleKeyDown = function handleKeyDown(event) {
160
+ if (!(event.key === "Enter" && !event.shiftKey)) return;
161
+ event.preventDefault();
162
+ handleSubmit();
163
+ };
164
+ var sendButton = /*#__PURE__*/jsxRuntime.jsx(Button, {
165
+ disabled: isWindowExpired || isPending || !body.trim(),
166
+ label: t("neetoWhatsapp.messages.compose.send"),
167
+ loading: isPending,
168
+ onClick: handleSubmit
169
+ });
170
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
171
+ className: "neeto-ui-border-t neeto-ui-bg-white sticky bottom-0 flex items-end gap-2 py-8",
172
+ children: [/*#__PURE__*/jsxRuntime.jsx(Textarea, {
173
+ disabled: isWindowExpired,
174
+ rows: 2,
175
+ value: body,
176
+ placeholder: isWindowExpired ? t("neetoWhatsapp.messages.compose.windowExpired") : t("neetoWhatsapp.messages.compose.placeholder"),
177
+ onChange: function onChange(e) {
178
+ return setBody(e.target.value);
179
+ },
180
+ onKeyDown: handleKeyDown
181
+ }), isWindowExpired ? /*#__PURE__*/jsxRuntime.jsx(Tooltip, {
182
+ content: t("neetoWhatsapp.messages.compose.windowExpired"),
183
+ position: "top",
184
+ children: sendButton
185
+ }) : sendButton]
186
+ });
187
+ };
188
+
189
+ var formatTimestamp = function formatTimestamp(timestamp) {
190
+ if (!timestamp) return "";
191
+ var date = new Date(timestamp);
192
+ return date.toLocaleString(undefined, {
193
+ month: "short",
194
+ day: "numeric",
195
+ hour: "numeric",
196
+ minute: "2-digit"
197
+ });
198
+ };
199
+
200
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
201
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
202
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
203
+ var keyCounter = 0;
204
+ var getKey = function getKey() {
205
+ return "wa-fmt-".concat(keyCounter++);
206
+ };
207
+ var isWhitespace = function isWhitespace(_char) {
208
+ return /\s/.test(_char);
209
+ };
210
+ var isPunctuation = function isPunctuation(_char2) {
211
+ return PUNCTUATION_REGEX.test(_char2);
212
+ };
213
+ var isValidOpeningPosition = function isValidOpeningPosition(text, index) {
214
+ var nextChar = index + 1 < text.length ? text[index + 1] : undefined;
215
+ var prevChar = index > 0 ? text[index - 1] : undefined;
216
+ if (!nextChar || isWhitespace(nextChar)) return false;
217
+ return !(prevChar && !isWhitespace(prevChar) && !isPunctuation(prevChar));
218
+ };
219
+ var findClosingMarker = function findClosingMarker(text, startIndex, markerChar) {
220
+ for (var j = startIndex; j < text.length; j++) {
221
+ if (text[j] === markerChar) {
222
+ var prevChar = j > 0 ? text[j - 1] : undefined;
223
+ var nextChar = j + 1 < text.length ? text[j + 1] : undefined;
224
+ if (!prevChar || isWhitespace(prevChar)) continue;
225
+ if (nextChar && !isWhitespace(nextChar) && !isPunctuation(nextChar)) {
226
+ continue;
227
+ }
228
+ return j;
229
+ }
230
+ }
231
+ return -1;
232
+ };
233
+ var _parseFormattingMarkers = function parseFormattingMarkers(text) {
234
+ if (!text) return [];
235
+ var result = [];
236
+ var i = 0;
237
+ var textBuffer = "";
238
+ var flushText = function flushText() {
239
+ if (!textBuffer) return;
240
+ result.push(textBuffer);
241
+ textBuffer = "";
242
+ };
243
+ while (i < text.length) {
244
+ var matched = false;
245
+ var _iterator = _createForOfIteratorHelper(FORMATTING_MARKERS),
246
+ _step;
247
+ try {
248
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
249
+ var _step$value = _step.value,
250
+ _char3 = _step$value["char"],
251
+ Tag = _step$value.Tag;
252
+ if (text[i] === _char3 && isValidOpeningPosition(text, i)) {
253
+ var closeIndex = findClosingMarker(text, i + 1, _char3);
254
+ if (closeIndex !== -1) {
255
+ flushText();
256
+ var innerText = text.slice(i + 1, closeIndex);
257
+ var innerElements = _parseFormattingMarkers(innerText);
258
+ result.push(/*#__PURE__*/jsxRuntime.jsx(Tag, {
259
+ children: innerElements
260
+ }, getKey()));
261
+ i = closeIndex + 1;
262
+ matched = true;
263
+ break;
264
+ }
265
+ }
266
+ }
267
+ } catch (err) {
268
+ _iterator.e(err);
269
+ } finally {
270
+ _iterator.f();
271
+ }
272
+ if (!matched) {
273
+ textBuffer += text[i];
274
+ i++;
275
+ }
276
+ }
277
+ flushText();
278
+ return result;
279
+ };
280
+ var processInlineFormatting = function processInlineFormatting(text) {
281
+ var parts = [];
282
+ var regex = /`([^`\n]+)`/g;
283
+ var lastIndex = 0;
284
+ var match;
285
+ while ((match = regex.exec(text)) !== null) {
286
+ if (match.index > lastIndex) {
287
+ parts.push({
288
+ type: "text",
289
+ content: text.slice(lastIndex, match.index)
290
+ });
291
+ }
292
+ parts.push({
293
+ type: "code",
294
+ content: match[1]
295
+ });
296
+ lastIndex = match.index + match[0].length;
297
+ }
298
+ if (lastIndex < text.length) {
299
+ parts.push({
300
+ type: "text",
301
+ content: text.slice(lastIndex)
302
+ });
303
+ }
304
+ return parts.map(function (part) {
305
+ if (part.type === "code") {
306
+ return /*#__PURE__*/jsxRuntime.jsx("code", {
307
+ className: "neeto-ui-bg-gray-200 neeto-ui-rounded px-1 py-0.5 font-mono text-sm",
308
+ children: part.content
309
+ }, getKey());
310
+ }
311
+ var formatted = _parseFormattingMarkers(part.content);
312
+ if (formatted.length === 1 && typeof formatted[0] === "string") {
313
+ return formatted[0];
314
+ }
315
+ return /*#__PURE__*/jsxRuntime.jsx(React.Fragment, {
316
+ children: formatted
317
+ }, getKey());
318
+ });
319
+ };
320
+ var processTextSegment = function processTextSegment(text) {
321
+ var lines = text.split("\n");
322
+ var blocks = [];
323
+ var i = 0;
324
+ while (i < lines.length) {
325
+ if (lines[i].startsWith("> ")) {
326
+ var quoteLines = [];
327
+ while (i < lines.length && lines[i].startsWith("> ")) {
328
+ quoteLines.push(lines[i].slice(2));
329
+ i++;
330
+ }
331
+ blocks.push({
332
+ type: "quote",
333
+ content: quoteLines.join("\n")
334
+ });
335
+ } else {
336
+ var normalLines = [];
337
+ while (i < lines.length && !lines[i].startsWith("> ")) {
338
+ normalLines.push(lines[i]);
339
+ i++;
340
+ }
341
+ blocks.push({
342
+ type: "text",
343
+ content: normalLines.join("\n")
344
+ });
345
+ }
346
+ }
347
+ var result = [];
348
+ blocks.forEach(function (block, index) {
349
+ if (index > 0) result.push("\n");
350
+ if (block.type === "quote") {
351
+ result.push(/*#__PURE__*/jsxRuntime.jsx("span", {
352
+ className: "block border-l-4 neeto-ui-border-gray-400 pl-2 neeto-ui-text-gray-600",
353
+ children: processInlineFormatting(block.content)
354
+ }, getKey()));
355
+ } else {
356
+ result.push(/*#__PURE__*/jsxRuntime.jsx(React.Fragment, {
357
+ children: processInlineFormatting(block.content)
358
+ }, getKey()));
359
+ }
360
+ });
361
+ return result;
362
+ };
363
+ var formatWhatsAppText = function formatWhatsAppText(text) {
364
+ if (!text || typeof text !== "string") return text;
365
+ keyCounter = 0;
366
+ var segments = [];
367
+ var codeBlockRegex = /```([\s\S]*?)```/g;
368
+ var lastIndex = 0;
369
+ var match;
370
+ while ((match = codeBlockRegex.exec(text)) !== null) {
371
+ if (match.index > lastIndex) {
372
+ segments.push({
373
+ type: "text",
374
+ content: text.slice(lastIndex, match.index)
375
+ });
376
+ }
377
+ segments.push({
378
+ type: "codeBlock",
379
+ content: match[1]
380
+ });
381
+ lastIndex = match.index + match[0].length;
382
+ }
383
+ if (lastIndex < text.length) {
384
+ segments.push({
385
+ type: "text",
386
+ content: text.slice(lastIndex)
387
+ });
388
+ }
389
+ return segments.map(function (segment) {
390
+ if (segment.type === "codeBlock") {
391
+ return /*#__PURE__*/jsxRuntime.jsx("code", {
392
+ className: "block neeto-ui-bg-gray-200 my-1 overflow-x-auto neeto-ui-rounded p-2 font-mono text-sm",
393
+ children: segment.content
394
+ }, getKey());
395
+ }
396
+ return /*#__PURE__*/jsxRuntime.jsx(React.Fragment, {
397
+ children: processTextSegment(segment.content)
398
+ }, getKey());
399
+ });
400
+ };
401
+
402
+ var MessageCard = function MessageCard(_ref) {
403
+ var message = _ref.message;
404
+ var isInbound = message.direction === "inbound";
405
+ var _ref2 = STATUS_ICON_CONFIG[message.status] || {},
406
+ Icon = _ref2.Icon,
407
+ iconClassName = _ref2.className;
408
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
409
+ id: message.id,
410
+ className: classnames("flex w-full", {
411
+ "justify-start": isInbound,
412
+ "justify-end": !isInbound
413
+ }),
414
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
415
+ className: classnames("max-w-[75%] neeto-ui-rounded-lg px-4 py-2", {
416
+ "neeto-ui-bg-gray-100 rounded-tl-none": isInbound,
417
+ "neeto-ui-bg-info-100 rounded-tr-none": !isInbound
418
+ }),
419
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
420
+ className: "whitespace-pre-wrap break-words",
421
+ style: "body2",
422
+ children: formatWhatsAppText(message.body)
423
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
424
+ className: "mt-1 flex items-center justify-end gap-1",
425
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
426
+ className: "neeto-ui-text-gray-600",
427
+ style: "nano",
428
+ children: formatTimestamp(message.sentAt)
429
+ }), !isInbound && Icon && /*#__PURE__*/jsxRuntime.jsx(Icon, {
430
+ className: iconClassName,
431
+ size: 18
432
+ })]
433
+ })]
434
+ })
435
+ });
436
+ };
437
+
438
+ var WhatsAppMessages = function WhatsAppMessages(_ref) {
439
+ var entityType = _ref.entityType,
440
+ entityId = _ref.entityId;
441
+ var _useTranslation = reactI18next.useTranslation(),
442
+ t = _useTranslation.t;
443
+ var _useFetchWhatsappMess = useFetchWhatsappMessages({
444
+ entityType: entityType,
445
+ entityId: entityId
446
+ }),
447
+ _useFetchWhatsappMess2 = _useFetchWhatsappMess.data,
448
+ _useFetchWhatsappMess3 = _useFetchWhatsappMess2 === void 0 ? {} : _useFetchWhatsappMess2,
449
+ _useFetchWhatsappMess4 = _useFetchWhatsappMess3.messages,
450
+ messages = _useFetchWhatsappMess4 === void 0 ? [] : _useFetchWhatsappMess4,
451
+ _useFetchWhatsappMess5 = _useFetchWhatsappMess3.canReply,
452
+ canReply = _useFetchWhatsappMess5 === void 0 ? false : _useFetchWhatsappMess5,
453
+ isLoading = _useFetchWhatsappMess.isLoading;
454
+ React.useEffect(function () {
455
+ var lastMessage = ramda.last(messages);
456
+ if (!lastMessage) return;
457
+ var element = document.getElementById(lastMessage.id);
458
+ element === null || element === void 0 || element.scrollIntoView();
459
+ }, [messages]);
460
+ if (isLoading) {
461
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
462
+ className: "flex h-full w-full items-center justify-center py-4",
463
+ children: /*#__PURE__*/jsxRuntime.jsx(Spinner, {})
464
+ });
465
+ }
466
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
467
+ className: "flex flex-col",
468
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
469
+ className: "flex flex-col gap-y-4 py-4",
470
+ children: ramda.isEmpty(messages) ? /*#__PURE__*/jsxRuntime.jsx("div", {
471
+ className: "flex w-full items-center justify-center py-4",
472
+ children: /*#__PURE__*/jsxRuntime.jsx(NoData, {
473
+ title: t("neetoWhatsapp.messages.emptyState")
474
+ })
475
+ }) : messages.map(function (message) {
476
+ return /*#__PURE__*/React.createElement(MessageCard, {
477
+ message: message,
478
+ key: message.id
479
+ });
480
+ })
481
+ }), /*#__PURE__*/jsxRuntime.jsx(ComposeForm, {
482
+ canReply: canReply,
483
+ entityId: entityId,
484
+ entityType: entityType
485
+ })]
486
+ });
487
+ };
488
+
489
+ module.exports = WhatsAppMessages;
490
+ //# sourceMappingURL=WhatsAppMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhatsAppMessages.js","sources":["../../app/javascript/src/constants/index.js","../../app/javascript/src/apis/messages.js","../../app/javascript/src/hooks/reactQuery/useMessagesApi.js","../../app/javascript/src/components/WhatsAppMessages/ComposeForm.jsx","../../app/javascript/src/utils/index.js","../../app/javascript/src/utils/formatWhatsAppMessage.jsx","../../app/javascript/src/components/WhatsAppMessages/MessageCard.jsx","../../app/javascript/src/components/WhatsAppMessages/index.jsx"],"sourcesContent":["import { Clock, Error, DoubleCheck, Check } from \"neetoicons\";\n\nexport const NEETO_WHATSAPP_ENGINE_BASE_URL = \"/neeto_whatsapp/api/v1\";\n\nexport const MESSAGES_URL = `${NEETO_WHATSAPP_ENGINE_BASE_URL}/messages`;\n\nexport const QUERY_KEYS = {\n WHATSAPP_MESSAGES: \"neeto-whatsapp-messages\",\n};\n\nexport const FORMATTING_MARKERS = [\n { char: \"*\", Tag: \"strong\" },\n { char: \"_\", Tag: \"em\" },\n { char: \"~\", Tag: \"del\" },\n];\n\nexport const PUNCTUATION_REGEX = /[\\p{P}]/u;\n\nexport const WHATSAPP_MESSAGES_REFETCH_INTERVAL = 10_000;\n\nexport const STATUS_ICON_CONFIG = {\n pending: { Icon: Clock, className: \"neeto-ui-text-gray-600\" },\n sent: { Icon: Check, className: \"neeto-ui-text-gray-600\" },\n delivered: { Icon: DoubleCheck, className: \"neeto-ui-text-gray-600\" },\n read: { Icon: DoubleCheck, className: \"neeto-ui-text-info-500\" },\n failed: { Icon: Error, className: \"neeto-ui-text-danger-500\" },\n};\n","import axios from \"axios\";\n\nimport { MESSAGES_URL } from \"constants\";\n\nconst fetch = ({ entityType, entityId }) =>\n axios.get(MESSAGES_URL, { params: { entityType, entityId } });\n\nconst create = ({ body, entityType, entityId }) =>\n axios.post(MESSAGES_URL, { body, entityType, entityId });\n\nconst messagesApi = { fetch, create };\n\nexport default messagesApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useMutationWithInvalidation } from \"neetocommons/react-utils\";\n\nimport messagesApi from \"apis/messages\";\nimport { QUERY_KEYS, WHATSAPP_MESSAGES_REFETCH_INTERVAL } from \"constants\";\n\nexport const useFetchWhatsappMessages = (\n { entityType, entityId },\n options = {}\n) =>\n useQuery({\n queryKey: [QUERY_KEYS.WHATSAPP_MESSAGES, entityType, entityId],\n queryFn: () => messagesApi.fetch({ entityType, entityId }),\n enabled: Boolean(entityType && entityId),\n refetchInterval: WHATSAPP_MESSAGES_REFETCH_INTERVAL,\n ...options,\n });\n\nexport const useCreateWhatsappMessage = ({ entityType, entityId }) =>\n useMutationWithInvalidation(messagesApi.create, {\n keysToInvalidate: [[QUERY_KEYS.WHATSAPP_MESSAGES, entityType, entityId]],\n });\n","import { useEffect, useState } from \"react\";\n\nimport { Button, Textarea, Tooltip, Toastr } from \"neetoui\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateWhatsappMessage } from \"hooks/reactQuery/useMessagesApi\";\n\nconst ComposeForm = ({ entityType, entityId, canReply }) => {\n const { t } = useTranslation();\n const [body, setBody] = useState(\"\");\n const [isWindowExpired, setIsWindowExpired] = useState(!canReply);\n\n useEffect(() => {\n setIsWindowExpired(!canReply);\n }, [canReply]);\n\n const { mutate: createMessage, isPending } = useCreateWhatsappMessage({\n entityType,\n entityId,\n });\n\n const handleSubmit = () => {\n if (!body.trim()) return;\n\n createMessage(\n { body: body.trim(), entityType, entityId },\n {\n onSuccess: () => setBody(\"\"),\n onError: error => {\n const errorMessage =\n error.response?.data?.error ||\n t(\"neetoWhatsapp.messages.compose.sendError\");\n\n Toastr.error(errorMessage);\n\n if (\n errorMessage.includes(\"24-hour conversation window has expired\")\n ) {\n setIsWindowExpired(true);\n }\n },\n }\n );\n };\n\n const handleKeyDown = event => {\n if (!(event.key === \"Enter\" && !event.shiftKey)) return;\n event.preventDefault();\n handleSubmit();\n };\n\n const sendButton = (\n <Button\n disabled={isWindowExpired || isPending || !body.trim()}\n label={t(\"neetoWhatsapp.messages.compose.send\")}\n loading={isPending}\n onClick={handleSubmit}\n />\n );\n\n return (\n <div className=\"neeto-ui-border-t neeto-ui-bg-white sticky bottom-0 flex items-end gap-2 py-8\">\n <Textarea\n disabled={isWindowExpired}\n rows={2}\n value={body}\n placeholder={\n isWindowExpired\n ? t(\"neetoWhatsapp.messages.compose.windowExpired\")\n : t(\"neetoWhatsapp.messages.compose.placeholder\")\n }\n onChange={e => setBody(e.target.value)}\n onKeyDown={handleKeyDown}\n />\n {isWindowExpired ? (\n <Tooltip\n content={t(\"neetoWhatsapp.messages.compose.windowExpired\")}\n position=\"top\"\n >\n {sendButton}\n </Tooltip>\n ) : (\n sendButton\n )}\n </div>\n );\n};\n\nexport default ComposeForm;\n","export const formatTimestamp = timestamp => {\n if (!timestamp) return \"\";\n\n const date = new Date(timestamp);\n\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n};\n","import React from \"react\";\n\nimport { FORMATTING_MARKERS, PUNCTUATION_REGEX } from \"constants\";\n\nlet keyCounter = 0;\nconst getKey = () => `wa-fmt-${keyCounter++}`;\n\nconst isWhitespace = char => /\\s/.test(char);\nconst isPunctuation = char => PUNCTUATION_REGEX.test(char);\n\nconst isValidOpeningPosition = (text, index) => {\n const nextChar = index + 1 < text.length ? text[index + 1] : undefined;\n const prevChar = index > 0 ? text[index - 1] : undefined;\n\n if (!nextChar || isWhitespace(nextChar)) return false;\n\n return !(prevChar && !isWhitespace(prevChar) && !isPunctuation(prevChar));\n};\n\nconst findClosingMarker = (text, startIndex, markerChar) => {\n for (let j = startIndex; j < text.length; j++) {\n if (text[j] === markerChar) {\n const prevChar = j > 0 ? text[j - 1] : undefined;\n const nextChar = j + 1 < text.length ? text[j + 1] : undefined;\n\n if (!prevChar || isWhitespace(prevChar)) continue;\n\n if (nextChar && !isWhitespace(nextChar) && !isPunctuation(nextChar)) {\n continue;\n }\n\n return j;\n }\n }\n\n return -1;\n};\n\nconst parseFormattingMarkers = text => {\n if (!text) return [];\n\n const result = [];\n let i = 0;\n let textBuffer = \"\";\n\n const flushText = () => {\n if (!textBuffer) return;\n result.push(textBuffer);\n textBuffer = \"\";\n };\n\n while (i < text.length) {\n let matched = false;\n\n for (const { char, Tag } of FORMATTING_MARKERS) {\n if (text[i] === char && isValidOpeningPosition(text, i)) {\n const closeIndex = findClosingMarker(text, i + 1, char);\n\n if (closeIndex !== -1) {\n flushText();\n const innerText = text.slice(i + 1, closeIndex);\n const innerElements = parseFormattingMarkers(innerText);\n result.push(<Tag key={getKey()}>{innerElements}</Tag>);\n i = closeIndex + 1;\n matched = true;\n break;\n }\n }\n }\n\n if (!matched) {\n textBuffer += text[i];\n i++;\n }\n }\n\n flushText();\n\n return result;\n};\n\nconst processInlineFormatting = text => {\n const parts = [];\n const regex = /`([^`\\n]+)`/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n parts.push({ type: \"text\", content: text.slice(lastIndex, match.index) });\n }\n parts.push({ type: \"code\", content: match[1] });\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < text.length) {\n parts.push({ type: \"text\", content: text.slice(lastIndex) });\n }\n\n return parts.map(part => {\n if (part.type === \"code\") {\n return (\n <code\n className=\"neeto-ui-bg-gray-200 neeto-ui-rounded px-1 py-0.5 font-mono text-sm\"\n key={getKey()}\n >\n {part.content}\n </code>\n );\n }\n\n const formatted = parseFormattingMarkers(part.content);\n if (formatted.length === 1 && typeof formatted[0] === \"string\") {\n return formatted[0];\n }\n\n return <React.Fragment key={getKey()}>{formatted}</React.Fragment>;\n });\n};\n\nconst processTextSegment = text => {\n const lines = text.split(\"\\n\");\n const blocks = [];\n let i = 0;\n\n while (i < lines.length) {\n if (lines[i].startsWith(\"> \")) {\n const quoteLines = [];\n while (i < lines.length && lines[i].startsWith(\"> \")) {\n quoteLines.push(lines[i].slice(2));\n i++;\n }\n blocks.push({ type: \"quote\", content: quoteLines.join(\"\\n\") });\n } else {\n const normalLines = [];\n while (i < lines.length && !lines[i].startsWith(\"> \")) {\n normalLines.push(lines[i]);\n i++;\n }\n blocks.push({ type: \"text\", content: normalLines.join(\"\\n\") });\n }\n }\n\n const result = [];\n blocks.forEach((block, index) => {\n if (index > 0) result.push(\"\\n\");\n\n if (block.type === \"quote\") {\n result.push(\n <span\n className=\"block border-l-4 neeto-ui-border-gray-400 pl-2 neeto-ui-text-gray-600\"\n key={getKey()}\n >\n {processInlineFormatting(block.content)}\n </span>\n );\n } else {\n result.push(\n <React.Fragment key={getKey()}>\n {processInlineFormatting(block.content)}\n </React.Fragment>\n );\n }\n });\n\n return result;\n};\n\nconst formatWhatsAppText = text => {\n if (!text || typeof text !== \"string\") return text;\n\n keyCounter = 0;\n\n const segments = [];\n const codeBlockRegex = /```([\\s\\S]*?)```/g;\n let lastIndex = 0;\n let match;\n\n while ((match = codeBlockRegex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n segments.push({\n type: \"text\",\n content: text.slice(lastIndex, match.index),\n });\n }\n segments.push({ type: \"codeBlock\", content: match[1] });\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < text.length) {\n segments.push({ type: \"text\", content: text.slice(lastIndex) });\n }\n\n return segments.map(segment => {\n if (segment.type === \"codeBlock\") {\n return (\n <code\n className=\"block neeto-ui-bg-gray-200 my-1 overflow-x-auto neeto-ui-rounded p-2 font-mono text-sm\"\n key={getKey()}\n >\n {segment.content}\n </code>\n );\n }\n\n return (\n <React.Fragment key={getKey()}>\n {processTextSegment(segment.content)}\n </React.Fragment>\n );\n });\n};\n\nexport default formatWhatsAppText;\n","import classnames from \"classnames\";\nimport { Typography } from \"neetoui\";\n\nimport { STATUS_ICON_CONFIG } from \"constants\";\nimport { formatTimestamp } from \"utils\";\nimport formatWhatsAppText from \"utils/formatWhatsAppMessage\";\n\nconst MessageCard = ({ message }) => {\n const isInbound = message.direction === \"inbound\";\n const { Icon, className: iconClassName } =\n STATUS_ICON_CONFIG[message.status] || {};\n\n return (\n <div\n id={message.id}\n className={classnames(\"flex w-full\", {\n \"justify-start\": isInbound,\n \"justify-end\": !isInbound,\n })}\n >\n <div\n className={classnames(\"max-w-[75%] neeto-ui-rounded-lg px-4 py-2\", {\n \"neeto-ui-bg-gray-100 rounded-tl-none\": isInbound,\n \"neeto-ui-bg-info-100 rounded-tr-none\": !isInbound,\n })}\n >\n <Typography className=\"whitespace-pre-wrap break-words\" style=\"body2\">\n {formatWhatsAppText(message.body)}\n </Typography>\n <div className=\"mt-1 flex items-center justify-end gap-1\">\n <Typography className=\"neeto-ui-text-gray-600\" style=\"nano\">\n {formatTimestamp(message.sentAt)}\n </Typography>\n {!isInbound && Icon && <Icon className={iconClassName} size={18} />}\n </div>\n </div>\n </div>\n );\n};\n\nexport default MessageCard;\n","import { useEffect } from \"react\";\n\nimport { Spinner, NoData } from \"neetoui\";\nimport { isEmpty, last } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useFetchWhatsappMessages } from \"hooks/reactQuery/useMessagesApi\";\n\nimport ComposeForm from \"./ComposeForm\";\nimport MessageCard from \"./MessageCard\";\n\nconst WhatsAppMessages = ({ entityType, entityId }) => {\n const { t } = useTranslation();\n\n const { data: { messages = [], canReply = false } = {}, isLoading } =\n useFetchWhatsappMessages({ entityType, entityId });\n\n useEffect(() => {\n const lastMessage = last(messages);\n\n if (!lastMessage) return;\n\n const element = document.getElementById(lastMessage.id);\n\n element?.scrollIntoView();\n }, [messages]);\n\n if (isLoading) {\n return (\n <div className=\"flex h-full w-full items-center justify-center py-4\">\n <Spinner />\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col\">\n <div className=\"flex flex-col gap-y-4 py-4\">\n {isEmpty(messages) ? (\n <div className=\"flex w-full items-center justify-center py-4\">\n <NoData title={t(\"neetoWhatsapp.messages.emptyState\")} />\n </div>\n ) : (\n messages.map(message => (\n <MessageCard {...{ message }} key={message.id} />\n ))\n )}\n </div>\n <ComposeForm {...{ canReply, entityId, entityType }} />\n </div>\n );\n};\n\nexport default WhatsAppMessages;\n"],"names":["NEETO_WHATSAPP_ENGINE_BASE_URL","MESSAGES_URL","concat","QUERY_KEYS","WHATSAPP_MESSAGES","FORMATTING_MARKERS","Tag","PUNCTUATION_REGEX","WHATSAPP_MESSAGES_REFETCH_INTERVAL","STATUS_ICON_CONFIG","pending","Icon","Clock","className","sent","Check","delivered","DoubleCheck","read","failed","Error","fetch","_ref","entityType","entityId","axios","get","params","create","_ref2","body","post","messagesApi","useFetchWhatsappMessages","options","arguments","length","undefined","useQuery","_objectSpread","queryKey","queryFn","enabled","Boolean","refetchInterval","useCreateWhatsappMessage","useMutationWithInvalidation","keysToInvalidate","ComposeForm","canReply","_useTranslation","useTranslation","t","_useState","useState","_useState2","_slicedToArray","setBody","_useState3","_useState4","isWindowExpired","setIsWindowExpired","useEffect","_useCreateWhatsappMes","createMessage","mutate","isPending","handleSubmit","trim","onSuccess","onError","error","_error$response","errorMessage","response","data","Toastr","includes","handleKeyDown","event","key","shiftKey","preventDefault","sendButton","_jsx","Button","disabled","label","loading","onClick","_jsxs","children","Textarea","rows","value","placeholder","onChange","e","target","onKeyDown","Tooltip","content","position","formatTimestamp","timestamp","date","Date","toLocaleString","month","day","hour","minute","keyCounter","getKey","isWhitespace","char","test","isPunctuation","isValidOpeningPosition","text","index","nextChar","prevChar","findClosingMarker","startIndex","markerChar","j","parseFormattingMarkers","result","i","textBuffer","flushText","push","matched","_iterator","_createForOfIteratorHelper","_step","s","n","done","_step$value","closeIndex","innerText","slice","innerElements","err","f","processInlineFormatting","parts","regex","lastIndex","match","exec","type","map","part","formatted","React","Fragment","processTextSegment","lines","split","blocks","startsWith","quoteLines","join","normalLines","forEach","block","formatWhatsAppText","segments","codeBlockRegex","segment","MessageCard","message","isInbound","direction","status","iconClassName","id","classnames","Typography","style","sentAt","size","WhatsAppMessages","_useFetchWhatsappMess","_useFetchWhatsappMess2","_useFetchWhatsappMess3","_useFetchWhatsappMess4","messages","_useFetchWhatsappMess5","isLoading","lastMessage","last","element","document","getElementById","scrollIntoView","Spinner","isEmpty","NoData","title","_createElement"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ var WelcomeScreen = require('./WelcomeScreen.js');
4
+ var WhatsAppMessages = require('./WhatsAppMessages.js');
5
+ require('react-i18next');
6
+ require('react/jsx-runtime');
7
+ require('react');
8
+ require('@bigbinary/neetoui/Spinner');
9
+ require('@bigbinary/neetoui/NoData');
10
+ require('ramda');
11
+ require('@babel/runtime/helpers/defineProperty');
12
+ require('@tanstack/react-query');
13
+ require('@bigbinary/neeto-commons-frontend/react-utils');
14
+ require('axios');
15
+ require('@bigbinary/neeto-icons/Clock');
16
+ require('@bigbinary/neeto-icons/Error');
17
+ require('@bigbinary/neeto-icons/DoubleCheck');
18
+ require('@bigbinary/neeto-icons/Check');
19
+ require('@babel/runtime/helpers/slicedToArray');
20
+ require('@bigbinary/neetoui/Button');
21
+ require('@bigbinary/neetoui/Textarea');
22
+ require('@bigbinary/neetoui/Tooltip');
23
+ require('@bigbinary/neetoui/Toastr');
24
+ require('classnames');
25
+ require('@bigbinary/neetoui/Typography');
26
+
27
+
28
+
29
+ exports.WelcomeScreen = WelcomeScreen;
30
+ exports.WhatsAppMessages = WhatsAppMessages;
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ export { default as WelcomeScreen } from './WelcomeScreen.js';
2
+ export { default as WhatsAppMessages } from './WhatsAppMessages.js';
3
+ import 'react-i18next';
4
+ import 'react/jsx-runtime';
5
+ import 'react';
6
+ import '@bigbinary/neetoui/Spinner';
7
+ import '@bigbinary/neetoui/NoData';
8
+ import 'ramda';
9
+ import '@babel/runtime/helpers/defineProperty';
10
+ import '@tanstack/react-query';
11
+ import '@bigbinary/neeto-commons-frontend/react-utils';
12
+ import 'axios';
13
+ import '@bigbinary/neeto-icons/Clock';
14
+ import '@bigbinary/neeto-icons/Error';
15
+ import '@bigbinary/neeto-icons/DoubleCheck';
16
+ import '@bigbinary/neeto-icons/Check';
17
+ import '@babel/runtime/helpers/slicedToArray';
18
+ import '@bigbinary/neetoui/Button';
19
+ import '@bigbinary/neetoui/Textarea';
20
+ import '@bigbinary/neetoui/Tooltip';
21
+ import '@bigbinary/neetoui/Toastr';
22
+ import 'classnames';
23
+ import '@bigbinary/neetoui/Typography';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}