@adatechnology/conversations-ui 0.1.0-rc.26 → 0.1.0-rc.27

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 (75) hide show
  1. package/dist/chunk-DXPSPUWF.js +110 -0
  2. package/dist/{chunk-TV4OQRGH.js → chunk-UZJBYD5O.js} +123 -45
  3. package/dist/{chunk-2AYDBWNE.js → chunk-WCBDXZ3X.js} +13 -3
  4. package/dist/flows/index.d.ts +2 -0
  5. package/dist/flows/index.js +61 -18
  6. package/dist/index.d.ts +37 -10
  7. package/dist/index.js +694 -297
  8. package/dist/preview/index.js +3 -3
  9. package/dist/styles.css +119 -6
  10. package/package.json +1 -1
  11. package/src/AudioPlayer.tsx +8 -0
  12. package/src/AudioRecorderButton.test.tsx +3 -3
  13. package/src/AudioRecorderButton.tsx +3 -3
  14. package/src/AudioTranscription.tsx +4 -1
  15. package/src/Avatar.tsx +1 -1
  16. package/src/ConversationContextPanel.tsx +2 -2
  17. package/src/ConversationDocumentsPanel.tsx +11 -6
  18. package/src/ConversationHeader.test.tsx +66 -0
  19. package/src/ConversationHeader.tsx +147 -47
  20. package/src/ConversationListItem.tsx +3 -2
  21. package/src/ConversationRow.tsx +31 -7
  22. package/src/DocumentsLibrary.tsx +9 -4
  23. package/src/EmojiPicker.tsx +2 -1
  24. package/src/InteractiveMessage.tsx +3 -0
  25. package/src/Lightbox.tsx +1 -1
  26. package/src/MediaRenderer.tsx +2 -0
  27. package/src/MessageBubble.test.tsx +41 -0
  28. package/src/MessageBubble.tsx +27 -8
  29. package/src/MessageComposer.tsx +11 -8
  30. package/src/RichMessageComposer.test.tsx +42 -12
  31. package/src/RichMessageComposer.tsx +216 -45
  32. package/src/SimpleEmojiPicker.tsx +5 -3
  33. package/src/StatusTicks.tsx +1 -1
  34. package/src/Toast.tsx +4 -0
  35. package/src/Tooltip.test.ts +42 -0
  36. package/src/Tooltip.tsx +164 -0
  37. package/src/WhatsAppMessageEditor.tsx +4 -4
  38. package/src/WindowExpiredNotice.tsx +12 -4
  39. package/src/composer.constant.ts +33 -0
  40. package/src/conversationWindow.ts +7 -5
  41. package/src/documents/DocumentsWorkspace.tsx +10 -6
  42. package/src/flows/FlowGroupHeader.tsx +2 -2
  43. package/src/flows/FlowMapNode.tsx +2 -1
  44. package/src/flows/FlowNodeCard.tsx +3 -3
  45. package/src/flows/FlowNodePanel.tsx +6 -5
  46. package/src/flows/FlowPalette.tsx +7 -1
  47. package/src/flows/FlowPortalNode.tsx +1 -1
  48. package/src/flows/FlowsWorkspace.tsx +13 -4
  49. package/src/flows/labels.ts +4 -0
  50. package/src/hooks/useContainerWidth.ts +35 -0
  51. package/src/hooks/useConversationRealtime.ts +10 -8
  52. package/src/icon.constant.ts +12 -0
  53. package/src/index.ts +1 -0
  54. package/src/lib/composer-formatting.test.ts +78 -0
  55. package/src/lib/composer-formatting.ts +145 -0
  56. package/src/lib/whatsapp-formatting.test.tsx +37 -0
  57. package/src/lib/whatsapp-formatting.tsx +28 -3
  58. package/src/listing/index.tsx +5 -1
  59. package/src/pagination.constant.ts +10 -0
  60. package/src/preview/ConversationSimulatorPanel.tsx +1 -1
  61. package/src/providers/ConversationsProvider.tsx +8 -6
  62. package/src/settings/MessagesWorkspace.tsx +3 -0
  63. package/src/settings/TopicsForm.tsx +2 -0
  64. package/src/settings/TranscriptionSettingsForm.test.tsx +1 -1
  65. package/src/settings/TranscriptionSettingsForm.tsx +1 -0
  66. package/src/settings/WelcomeFarewellForm.tsx +1 -0
  67. package/src/settings/WhatsAppCreateTemplateForm.tsx +1 -0
  68. package/src/settings/WhatsAppTemplateSettingsForm.tsx +5 -2
  69. package/src/settings/WhatsAppTemplatesSettings.tsx +2 -0
  70. package/src/styles.css +100 -4
  71. package/src/workspace/BulkTemplateModal.tsx +4 -2
  72. package/src/workspace/ConversationPane.tsx +49 -19
  73. package/src/workspace/ConversationsInboxList.tsx +17 -8
  74. package/src/workspace/ConversationsWorkspace.tsx +24 -16
  75. package/src/workspace/useConversationsInbox.ts +5 -2
@@ -0,0 +1,110 @@
1
+ // src/Tooltip.tsx
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { createPortal } from "react-dom";
4
+ import { jsx } from "react/jsx-runtime";
5
+ var TOOLTIP_ATTRIBUTE = "data-cv-tooltip";
6
+ var TOOLTIP_DELAY_MS = 120;
7
+ var TOOLTIP_GAP_PX = 8;
8
+ var TOOLTIP_EDGE_PX = 72;
9
+ function tooltipPositionOf({ targetRect, viewportWidth }) {
10
+ const placement = targetRect.top < TOOLTIP_EDGE_PX ? "bottom" : "top";
11
+ const centerX = targetRect.left + targetRect.width / 2;
12
+ return {
13
+ left: Math.min(Math.max(centerX, TOOLTIP_EDGE_PX), viewportWidth - TOOLTIP_EDGE_PX),
14
+ top: placement === "top" ? targetRect.top - TOOLTIP_GAP_PX : targetRect.bottom + TOOLTIP_GAP_PX,
15
+ placement
16
+ };
17
+ }
18
+ function tooltipStateFor(target, text) {
19
+ const position = tooltipPositionOf({
20
+ targetRect: target.getBoundingClientRect(),
21
+ viewportWidth: window.innerWidth
22
+ });
23
+ return { text, ...position };
24
+ }
25
+ var layerOwner;
26
+ function TooltipLayer() {
27
+ const identity = useRef({});
28
+ const [isOwner, setIsOwner] = useState(false);
29
+ const [tooltip, setTooltip] = useState(void 0);
30
+ useEffect(() => {
31
+ const owned = identity.current;
32
+ if (layerOwner && layerOwner !== owned) return void 0;
33
+ layerOwner = owned;
34
+ setIsOwner(true);
35
+ return () => {
36
+ if (layerOwner === owned) layerOwner = void 0;
37
+ };
38
+ }, []);
39
+ useEffect(() => {
40
+ if (!isOwner) return void 0;
41
+ let timer;
42
+ function cancelPending() {
43
+ if (timer) clearTimeout(timer);
44
+ timer = void 0;
45
+ }
46
+ function hide() {
47
+ cancelPending();
48
+ setTooltip(void 0);
49
+ }
50
+ function handleEnter(event) {
51
+ const origin = event.target;
52
+ if (!(origin instanceof Element)) return;
53
+ const target = origin.closest(`[${TOOLTIP_ATTRIBUTE}]`);
54
+ if (!(target instanceof HTMLElement)) {
55
+ hide();
56
+ return;
57
+ }
58
+ const text = target.getAttribute(TOOLTIP_ATTRIBUTE);
59
+ if (!text) {
60
+ hide();
61
+ return;
62
+ }
63
+ cancelPending();
64
+ timer = setTimeout(() => setTooltip(tooltipStateFor(target, text)), TOOLTIP_DELAY_MS);
65
+ }
66
+ function handleLeaveWindow(event) {
67
+ if (!event.relatedTarget) hide();
68
+ }
69
+ function handleKeyDown(event) {
70
+ if (event.key === "Escape") hide();
71
+ }
72
+ document.addEventListener("pointerover", handleEnter);
73
+ document.addEventListener("pointerout", handleLeaveWindow);
74
+ document.addEventListener("focusin", handleEnter);
75
+ document.addEventListener("pointerdown", hide);
76
+ document.addEventListener("focusout", hide);
77
+ document.addEventListener("keydown", handleKeyDown);
78
+ window.addEventListener("scroll", hide, true);
79
+ window.addEventListener("resize", hide);
80
+ return () => {
81
+ cancelPending();
82
+ document.removeEventListener("pointerover", handleEnter);
83
+ document.removeEventListener("pointerout", handleLeaveWindow);
84
+ document.removeEventListener("focusin", handleEnter);
85
+ document.removeEventListener("pointerdown", hide);
86
+ document.removeEventListener("focusout", hide);
87
+ document.removeEventListener("keydown", handleKeyDown);
88
+ window.removeEventListener("scroll", hide, true);
89
+ window.removeEventListener("resize", hide);
90
+ };
91
+ }, [isOwner]);
92
+ if (!tooltip) return null;
93
+ return createPortal(
94
+ /* @__PURE__ */ jsx(
95
+ "div",
96
+ {
97
+ role: "tooltip",
98
+ className: `cv-tooltip cv-tooltip--${tooltip.placement}`,
99
+ style: { left: tooltip.left, top: tooltip.top },
100
+ children: tooltip.text
101
+ }
102
+ ),
103
+ document.body
104
+ );
105
+ }
106
+
107
+ export {
108
+ TOOLTIP_ATTRIBUTE,
109
+ TooltipLayer
110
+ };