ajaxter-chat 3.0.17 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/dist/components/BlockList/index.d.ts +1 -0
  2. package/dist/components/BlockList/index.d.ts.map +1 -0
  3. package/dist/components/BlockList/index.js +55 -28
  4. package/dist/components/BlockList/index.js.map +1 -0
  5. package/dist/components/CallScreen/index.d.ts +1 -0
  6. package/dist/components/CallScreen/index.d.ts.map +1 -0
  7. package/dist/components/CallScreen/index.js +107 -39
  8. package/dist/components/CallScreen/index.js.map +1 -0
  9. package/dist/components/ChatScreen/index.d.ts +1 -0
  10. package/dist/components/ChatScreen/index.d.ts.map +1 -0
  11. package/dist/components/ChatScreen/index.js +493 -294
  12. package/dist/components/ChatScreen/index.js.map +1 -0
  13. package/dist/components/ChatWidget.d.ts +1 -0
  14. package/dist/components/ChatWidget.d.ts.map +1 -0
  15. package/dist/components/ChatWidget.js +499 -367
  16. package/dist/components/ChatWidget.js.map +1 -0
  17. package/dist/components/EmojiPicker/index.d.ts +1 -0
  18. package/dist/components/EmojiPicker/index.d.ts.map +1 -0
  19. package/dist/components/EmojiPicker/index.js +19 -7
  20. package/dist/components/EmojiPicker/index.js.map +1 -0
  21. package/dist/components/ErrorBoundary/index.d.ts +20 -0
  22. package/dist/components/ErrorBoundary/index.d.ts.map +1 -0
  23. package/dist/components/ErrorBoundary/index.js +76 -0
  24. package/dist/components/ErrorBoundary/index.js.map +1 -0
  25. package/dist/components/HomeScreen/index.d.ts +1 -0
  26. package/dist/components/HomeScreen/index.d.ts.map +1 -0
  27. package/dist/components/HomeScreen/index.js +236 -158
  28. package/dist/components/HomeScreen/index.js.map +1 -0
  29. package/dist/components/MaintenanceView/index.d.ts +1 -0
  30. package/dist/components/MaintenanceView/index.d.ts.map +1 -0
  31. package/dist/components/MaintenanceView/index.js +28 -12
  32. package/dist/components/MaintenanceView/index.js.map +1 -0
  33. package/dist/components/MiniCallBar/index.d.ts +1 -0
  34. package/dist/components/MiniCallBar/index.d.ts.map +1 -0
  35. package/dist/components/MiniCallBar/index.js +85 -37
  36. package/dist/components/MiniCallBar/index.js.map +1 -0
  37. package/dist/components/PermissionsGateScreen/index.d.ts +1 -0
  38. package/dist/components/PermissionsGateScreen/index.d.ts.map +1 -0
  39. package/dist/components/PermissionsGateScreen/index.js +82 -28
  40. package/dist/components/PermissionsGateScreen/index.js.map +1 -0
  41. package/dist/components/RecentChatsScreen/index.d.ts +1 -0
  42. package/dist/components/RecentChatsScreen/index.d.ts.map +1 -0
  43. package/dist/components/RecentChatsScreen/index.js +79 -19
  44. package/dist/components/RecentChatsScreen/index.js.map +1 -0
  45. package/dist/components/SlideNavMenu.d.ts +1 -0
  46. package/dist/components/SlideNavMenu.d.ts.map +1 -0
  47. package/dist/components/SlideNavMenu.js +82 -63
  48. package/dist/components/SlideNavMenu.js.map +1 -0
  49. package/dist/components/Tabs/BottomTabs.d.ts +1 -0
  50. package/dist/components/Tabs/BottomTabs.d.ts.map +1 -0
  51. package/dist/components/Tabs/BottomTabs.js +34 -19
  52. package/dist/components/Tabs/BottomTabs.js.map +1 -0
  53. package/dist/components/TicketDetailScreen/index.d.ts +1 -0
  54. package/dist/components/TicketDetailScreen/index.d.ts.map +1 -0
  55. package/dist/components/TicketDetailScreen/index.js +66 -27
  56. package/dist/components/TicketDetailScreen/index.js.map +1 -0
  57. package/dist/components/TicketFormScreen/index.d.ts +1 -0
  58. package/dist/components/TicketFormScreen/index.d.ts.map +1 -0
  59. package/dist/components/TicketFormScreen/index.js +99 -49
  60. package/dist/components/TicketFormScreen/index.js.map +1 -0
  61. package/dist/components/TicketScreen/index.d.ts +1 -0
  62. package/dist/components/TicketScreen/index.d.ts.map +1 -0
  63. package/dist/components/TicketScreen/index.js +95 -26
  64. package/dist/components/TicketScreen/index.js.map +1 -0
  65. package/dist/components/UserListScreen/index.d.ts +1 -0
  66. package/dist/components/UserListScreen/index.d.ts.map +1 -0
  67. package/dist/components/UserListScreen/index.js +127 -53
  68. package/dist/components/UserListScreen/index.js.map +1 -0
  69. package/dist/components/ViewerBlockedScreen/index.d.ts +1 -0
  70. package/dist/components/ViewerBlockedScreen/index.d.ts.map +1 -0
  71. package/dist/components/ViewerBlockedScreen/index.js +113 -61
  72. package/dist/components/ViewerBlockedScreen/index.js.map +1 -0
  73. package/dist/config/index.d.ts +7 -3
  74. package/dist/config/index.d.ts.map +1 -0
  75. package/dist/config/index.js +73 -22
  76. package/dist/config/index.js.map +1 -0
  77. package/dist/hooks/useChat.d.ts +9 -1
  78. package/dist/hooks/useChat.d.ts.map +1 -0
  79. package/dist/hooks/useChat.js +60 -18
  80. package/dist/hooks/useChat.js.map +1 -0
  81. package/dist/hooks/useRemoteConfig.d.ts +1 -0
  82. package/dist/hooks/useRemoteConfig.d.ts.map +1 -0
  83. package/dist/hooks/useRemoteConfig.js +22 -15
  84. package/dist/hooks/useRemoteConfig.js.map +1 -0
  85. package/dist/hooks/useSocket.d.ts +59 -0
  86. package/dist/hooks/useSocket.d.ts.map +1 -0
  87. package/dist/hooks/useSocket.js +203 -0
  88. package/dist/hooks/useSocket.js.map +1 -0
  89. package/dist/hooks/useWebRTC.d.ts +10 -2
  90. package/dist/hooks/useWebRTC.d.ts.map +1 -0
  91. package/dist/hooks/useWebRTC.js +101 -69
  92. package/dist/hooks/useWebRTC.js.map +1 -0
  93. package/dist/index.d.ts +7 -1
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +67 -21
  96. package/dist/index.js.map +1 -0
  97. package/dist/types/index.d.ts +129 -48
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +4 -1
  100. package/dist/types/index.js.map +1 -0
  101. package/dist/utils/chat.d.ts +1 -0
  102. package/dist/utils/chat.d.ts.map +1 -0
  103. package/dist/utils/chat.js +17 -7
  104. package/dist/utils/chat.js.map +1 -0
  105. package/dist/utils/fileName.d.ts +1 -0
  106. package/dist/utils/fileName.d.ts.map +1 -0
  107. package/dist/utils/fileName.js +5 -1
  108. package/dist/utils/fileName.js.map +1 -0
  109. package/dist/utils/messageSound.d.ts +1 -0
  110. package/dist/utils/messageSound.d.ts.map +1 -0
  111. package/dist/utils/messageSound.js +9 -3
  112. package/dist/utils/messageSound.js.map +1 -0
  113. package/dist/utils/presenceStatus.d.ts +1 -0
  114. package/dist/utils/presenceStatus.d.ts.map +1 -0
  115. package/dist/utils/presenceStatus.js +11 -4
  116. package/dist/utils/presenceStatus.js.map +1 -0
  117. package/dist/utils/privacyConsent.d.ts +1 -0
  118. package/dist/utils/privacyConsent.d.ts.map +1 -0
  119. package/dist/utils/privacyConsent.js +9 -3
  120. package/dist/utils/privacyConsent.js.map +1 -0
  121. package/dist/utils/reenableRequest.d.ts +1 -0
  122. package/dist/utils/reenableRequest.d.ts.map +1 -0
  123. package/dist/utils/reenableRequest.js +5 -1
  124. package/dist/utils/reenableRequest.js.map +1 -0
  125. package/dist/utils/theme.d.ts +1 -0
  126. package/dist/utils/theme.d.ts.map +1 -0
  127. package/dist/utils/theme.js +10 -4
  128. package/dist/utils/theme.js.map +1 -0
  129. package/dist/utils/widgetPermissions.d.ts +1 -0
  130. package/dist/utils/widgetPermissions.d.ts.map +1 -0
  131. package/dist/utils/widgetPermissions.js +13 -5
  132. package/dist/utils/widgetPermissions.js.map +1 -0
  133. package/dist/utils/widgetSession.d.ts +1 -0
  134. package/dist/utils/widgetSession.d.ts.map +1 -0
  135. package/dist/utils/widgetSession.js +9 -3
  136. package/dist/utils/widgetSession.js.map +1 -0
  137. package/package.json +8 -4
  138. package/src/components/ChatWidget.tsx +643 -622
  139. package/src/components/ErrorBoundary/index.tsx +62 -0
  140. package/src/config/index.ts +87 -26
  141. package/src/hooks/useChat.ts +59 -12
  142. package/src/hooks/useRemoteConfig.ts +8 -3
  143. package/src/hooks/useSocket.ts +249 -0
  144. package/src/hooks/useWebRTC.ts +99 -64
  145. package/src/index.ts +14 -3
  146. package/src/types/index.ts +177 -143
@@ -1,42 +1,148 @@
1
+ export interface AjaxterWidgetTheme {
2
+ header: {
3
+ background: string;
4
+ text: string;
5
+ };
6
+ agent: {
7
+ messageBackground: string;
8
+ messageText: string;
9
+ };
10
+ visitor: {
11
+ messageBackground: string;
12
+ messageText: string;
13
+ };
14
+ }
15
+ export interface AjaxterWidgetFeatures {
16
+ emoji: boolean;
17
+ rating: boolean;
18
+ transcript: boolean;
19
+ voice: boolean;
20
+ attachment: boolean;
21
+ webCall: boolean;
22
+ }
23
+ export interface AjaxterMinimized {
24
+ desktop: {
25
+ type: 'slide' | 'round' | 'square';
26
+ height?: number;
27
+ width?: number;
28
+ borderRadiusTop?: number;
29
+ borderRadiusBottom?: number;
30
+ };
31
+ mobile: {
32
+ type: 'round' | 'slide' | 'square';
33
+ };
34
+ }
35
+ export interface AjaxterWidgetSettings {
36
+ type: 'inline' | 'popup' | 'embed';
37
+ language: string;
38
+ minimized: AjaxterMinimized;
39
+ maximized: {
40
+ desktop: {
41
+ height: number;
42
+ width: number;
43
+ };
44
+ };
45
+ theme: AjaxterWidgetTheme;
46
+ notification?: {
47
+ all?: {
48
+ sound?: boolean;
49
+ agentTyping?: boolean;
50
+ visitorTyping?: boolean;
51
+ };
52
+ desktop?: {
53
+ preview?: boolean;
54
+ };
55
+ mobile?: {
56
+ preview?: boolean;
57
+ };
58
+ };
59
+ behavior?: {
60
+ defaultView?: string;
61
+ };
62
+ visibility?: {
63
+ all?: {
64
+ showWhenOffline?: boolean;
65
+ };
66
+ desktop?: {
67
+ position?: string;
68
+ show?: boolean;
69
+ };
70
+ mobile?: {
71
+ position?: string;
72
+ show?: boolean;
73
+ };
74
+ };
75
+ features: AjaxterWidgetFeatures;
76
+ scheduler?: {
77
+ enabled: boolean;
78
+ config?: unknown;
79
+ };
80
+ states?: Record<string, unknown>;
81
+ }
82
+ /** Internal fields that drive the npm widget behaviour */
83
+ export interface AjaxterInternalConfig {
84
+ id: string;
85
+ apiKey: string;
86
+ status: ChatStatus;
87
+ chatType: ChatType;
88
+ /** 'slider' = side drawer, 'popup' = centered modal, 'inline' = embedded in page */
89
+ displayMode: DisplayMode;
90
+ primaryColor: string;
91
+ buttonLabel: string;
92
+ brandName: string | null;
93
+ supportPhone: string | null;
94
+ privacyPolicyUrl: string | null;
95
+ showPrivacyNotice: boolean;
96
+ allowVoiceMessage: boolean;
97
+ allowAttachment: boolean;
98
+ allowEmoji: boolean;
99
+ allowWebCall: boolean;
100
+ maxEmojiCount: number;
101
+ allowTranscript: boolean;
102
+ allowReport: boolean;
103
+ allowBlock: boolean;
104
+ }
105
+ /** Full response shape from GET /api/chat-config */
106
+ export interface AjaxterConfigResponse {
107
+ ok: boolean;
108
+ data: {
109
+ settingsVersion: string;
110
+ propertyName: string;
111
+ branding: {
112
+ name: string;
113
+ };
114
+ widget: AjaxterWidgetSettings;
115
+ _internal: AjaxterInternalConfig;
116
+ developers: ChatUser[];
117
+ users: ChatUser[];
118
+ sampleChats: Record<string, ChatMessage[]>;
119
+ sampleTickets: Ticket[];
120
+ blockedUsers: string[];
121
+ };
122
+ }
123
+ /** The merged WidgetConfig shape used throughout the widget components */
1
124
  export interface WidgetConfig {
2
125
  id: string;
3
126
  apiKey: string;
4
127
  status: ChatStatus;
5
128
  chatType: ChatType;
129
+ displayMode: DisplayMode;
6
130
  primaryColor: string;
7
131
  buttonLabel: string;
8
132
  buttonPosition: 'bottom-right' | 'bottom-left';
9
133
  welcomeTitle: string;
10
134
  welcomeSubtitle: string;
11
- /** Shown in footer (e.g. branch / location name) */
12
135
  branch?: string;
13
- /** Optional label above branch (e.g. "Answers by") */
14
136
  footerPoweredBy?: string;
15
- /** Shown on home “Call Us” (tel: link) */
16
137
  supportPhone?: string;
17
- /**
18
- * Who is using the widget. `developer` = support staff: “Need Support” becomes “Provide Support”
19
- * and lists customers; “New Conversation” lists other developers (excl. viewerUid).
20
- */
21
138
  viewerType?: 'user' | 'developer';
22
- /** Current user id when viewerType is developer — excluded from developer pick lists */
23
139
  viewerUid?: string;
24
- /** Display name for transfer notes (optional) */
25
140
  viewerName?: string;
26
- /**
27
- * Host app project scope (set when embedding passes `viewer.projectId`).
28
- * Use for API calls; lists can be filtered to users in the same project.
29
- */
30
141
  viewerProjectId?: string;
31
- /** Privacy Policy URL (linked from chat consent banner) */
32
142
  privacyPolicyUrl?: string;
33
- /** Set false to hide the consent note above the composer */
34
143
  showPrivacyNotice?: boolean;
35
- /** Product brand (e.g. Ajaxter) */
36
144
  brandName?: string;
37
- /** Home promotion: “Take a Website Tour” link */
38
145
  websiteTourUrl?: string;
39
- /** Optional override for the lead line in the promotion card */
40
146
  promotionLead?: string;
41
147
  allowVoiceMessage: boolean;
42
148
  allowAttachment: boolean;
@@ -46,28 +152,13 @@ export interface WidgetConfig {
46
152
  allowTranscriptDownload: boolean;
47
153
  allowReport: boolean;
48
154
  allowBlock: boolean;
49
- /**
50
- * When `true` (set by the server if this viewer is spam-blocked or not in allowed user/ticket/chat lists),
51
- * the widget hides all normal navigation and shows only the blocked-user screen with a re-enable request form.
52
- */
53
155
  viewerBlocked?: boolean;
54
- /** Optional override for the blocked message (default is a fixed spam notice). */
55
156
  blockedViewerMessage?: string;
56
- /**
57
- * Absolute URL for `POST` JSON re-enable requests. If omitted, the submit button explains that no endpoint is configured.
58
- * @example https://api.example.com/widgets/reenable-request
59
- */
60
157
  reenableRequestUrl?: string;
61
- /**
62
- * Current presence from your API/DB (include in chatData or a session payload).
63
- * When set, it initializes the status control and overrides session-only cache.
64
- */
65
158
  presenceStatus?: PresenceStatus;
66
- /**
67
- * Production: `POST` JSON `{ widgetId, apiKey, viewerUid?, status }` to save presence in your database.
68
- * The client still mirrors to sessionStorage as a local fallback.
69
- */
70
159
  presenceUpdateUrl?: string;
160
+ /** Full Ajaxter settings from server (for display-mode, theming, etc.) */
161
+ ajaxterSettings?: AjaxterWidgetSettings;
71
162
  }
72
163
  export interface RemoteChatData {
73
164
  widget: WidgetConfig;
@@ -79,13 +170,13 @@ export interface RemoteChatData {
79
170
  }
80
171
  export type ChatStatus = 'ACTIVE' | 'DISABLE' | 'MAINTENANCE';
81
172
  export type ChatType = 'SUPPORT' | 'CHAT' | 'BOTH';
173
+ export type DisplayMode = 'slider' | 'popup' | 'inline';
82
174
  export type UserType = 'developer' | 'user';
83
175
  export type OnlineStatus = 'online' | 'away' | 'offline';
84
176
  export type BottomTab = 'home' | 'chats' | 'tickets';
85
177
  export type Screen = 'home' | 'user-list' | 'chat' | 'recent-chats' | 'tickets' | 'ticket-new' | 'ticket-detail' | 'block-list' | 'call';
86
178
  export type UserListContext = 'support' | 'conversation';
87
179
  export type MessageType = 'text' | 'voice' | 'attachment' | 'emoji';
88
- /** Home status selector; persist via `presenceUpdateUrl` in production */
89
180
  export type PresenceStatus = 'ACTIVE' | 'AWAY' | 'DND';
90
181
  export interface ChatUser {
91
182
  uid: string;
@@ -97,10 +188,6 @@ export interface ChatUser {
97
188
  avatar: string | null;
98
189
  status: OnlineStatus;
99
190
  designation: string;
100
- /**
101
- * When `true` for the row matching the current viewer (`viewerUid` / `viewer.uid`),
102
- * the widget shows the spam/blocked screen (same as `widget.viewerBlocked`).
103
- */
104
191
  viewerBlocked?: boolean;
105
192
  }
106
193
  export interface ChatMessage {
@@ -113,12 +200,9 @@ export interface ChatMessage {
113
200
  status: 'sent' | 'delivered' | 'read';
114
201
  attachmentName?: string;
115
202
  attachmentSize?: string;
116
- /** Blob URL for attachment download (local send) */
117
203
  attachmentUrl?: string;
118
- /** e.g. image/png — used for inline image preview in bubbles */
119
204
  attachmentMime?: string;
120
205
  voiceDuration?: number;
121
- /** Blob URL for in-bubble audio playback (local recording) */
122
206
  voiceUrl?: string;
123
207
  }
124
208
  export interface Ticket {
@@ -150,6 +234,7 @@ export interface CallSession {
150
234
  export interface LocalEnvConfig {
151
235
  apiKey: string;
152
236
  widgetId: string;
237
+ socketUrl: string;
153
238
  }
154
239
  export interface ChatWidgetTheme {
155
240
  primaryColor?: string;
@@ -160,18 +245,14 @@ export interface ChatWidgetTheme {
160
245
  buttonPosition?: 'bottom-right' | 'bottom-left';
161
246
  borderRadius?: string;
162
247
  }
163
- /**
164
- * Pass the logged-in user from your React app so the widget matches identity and UI (user vs developer).
165
- * Overrides `viewerUid`, `viewerName`, `viewerType` from remote `chatData.json` when provided.
166
- */
167
248
  export interface ChatWidgetViewer {
168
249
  uid: string;
169
250
  name: string;
170
251
  type: UserType;
171
- /** When set, directory lists only include users whose `ChatUser.project` equals this string (exact match). */
172
252
  projectId?: string;
173
253
  }
174
254
  export interface ChatWidgetProps {
175
255
  theme?: ChatWidgetTheme;
176
256
  viewer?: ChatWidgetViewer;
177
257
  }
258
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1,4 @@
1
- export {};
1
+ "use strict";
2
+ // ─── Ajaxter Server Config Shape ─────────────────────────────────────────────
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA,gFAAgF"}
@@ -13,3 +13,4 @@ export declare function generateTranscript(messages: ChatMessage[], peer: ChatUs
13
13
  export declare function truncateWords(text: string, maxWords: number): string;
14
14
  /** Trigger a file download in the browser */
15
15
  export declare function downloadText(content: string, filename: string): void;
16
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/utils/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEjD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,kCAAkC;AAClC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEpD;AAED,sCAAsC;AACtC,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOpD;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EAAE,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,SAAO,GACZ,MAAM,CAoBR;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAQ7D"}
@@ -1,5 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.avatarColor = avatarColor;
4
+ exports.initials = initials;
5
+ exports.formatTime = formatTime;
6
+ exports.formatDate = formatDate;
7
+ exports.generateTranscript = generateTranscript;
8
+ exports.truncateWords = truncateWords;
9
+ exports.downloadText = downloadText;
1
10
  /** Generate a consistent avatar color from a name */
2
- export function avatarColor(name) {
11
+ function avatarColor(name) {
3
12
  const palette = [
4
13
  '#2563EB', '#7C3AED', '#059669', '#D97706',
5
14
  '#DC2626', '#0891B2', '#4F46E5', '#BE185D',
@@ -10,15 +19,15 @@ export function avatarColor(name) {
10
19
  return palette[Math.abs(hash) % palette.length];
11
20
  }
12
21
  /** Get initials from full name */
13
- export function initials(name) {
22
+ function initials(name) {
14
23
  return name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2);
15
24
  }
16
25
  /** Format timestamp to readable time string */
17
- export function formatTime(ts) {
26
+ function formatTime(ts) {
18
27
  return new Date(ts).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
19
28
  }
20
29
  /** Format date for chat separators */
21
- export function formatDate(ts) {
30
+ function formatDate(ts) {
22
31
  const d = new Date(ts);
23
32
  const today = new Date();
24
33
  const yesterday = new Date(today);
@@ -30,7 +39,7 @@ export function formatDate(ts) {
30
39
  return d.toLocaleDateString([], { month: 'short', day: 'numeric', year: 'numeric' });
31
40
  }
32
41
  /** Generate a plain-text transcript from messages */
33
- export function generateTranscript(messages, peer, myName = 'Me') {
42
+ function generateTranscript(messages, peer, myName = 'Me') {
34
43
  const header = [
35
44
  '═══════════════════════════════════════',
36
45
  ' CHAT TRANSCRIPT',
@@ -51,7 +60,7 @@ export function generateTranscript(messages, peer, myName = 'Me') {
51
60
  return header + body;
52
61
  }
53
62
  /** Truncate to max words, append ellipsis (…) if shortened */
54
- export function truncateWords(text, maxWords) {
63
+ function truncateWords(text, maxWords) {
55
64
  const w = text.trim().split(/\s+/).filter(Boolean);
56
65
  if (w.length === 0)
57
66
  return '';
@@ -60,7 +69,7 @@ export function truncateWords(text, maxWords) {
60
69
  return `${w.slice(0, maxWords).join(' ')}…`;
61
70
  }
62
71
  /** Trigger a file download in the browser */
63
- export function downloadText(content, filename) {
72
+ function downloadText(content, filename) {
64
73
  const blob = new Blob([content], { type: 'text/plain' });
65
74
  const url = URL.createObjectURL(blob);
66
75
  const a = document.createElement('a');
@@ -69,3 +78,4 @@ export function downloadText(content, filename) {
69
78
  a.click();
70
79
  URL.revokeObjectURL(url);
71
80
  }
81
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/utils/chat.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  /** Display name: first 10 chars + "[...]" if longer; full name in tooltip via title */
2
2
  export declare function shortAttachmentLabel(fileName: string, maxChars?: number): string;
3
+ //# sourceMappingURL=fileName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileName.d.ts","sourceRoot":"","sources":["../../src/utils/fileName.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM,CAI5E"}
@@ -1,7 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shortAttachmentLabel = shortAttachmentLabel;
1
4
  /** Display name: first 10 chars + "[...]" if longer; full name in tooltip via title */
2
- export function shortAttachmentLabel(fileName, maxChars = 10) {
5
+ function shortAttachmentLabel(fileName, maxChars = 10) {
3
6
  const n = fileName.trim();
4
7
  if (n.length <= maxChars)
5
8
  return n;
6
9
  return `${n.slice(0, maxChars)}[...]`;
7
10
  }
11
+ //# sourceMappingURL=fileName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileName.js","sourceRoot":"","sources":["../../src/utils/fileName.ts"],"names":[],"mappings":";;AACA,oDAIC;AALD,uFAAuF;AACvF,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,QAAQ,GAAG,EAAE;IAClE,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;AACxC,CAAC"}
@@ -2,3 +2,4 @@
2
2
  export declare function playMessageSound(): void;
3
3
  export declare function getMessageSoundEnabled(widgetId: string): boolean;
4
4
  export declare function setMessageSoundEnabled(widgetId: string, enabled: boolean): void;
5
+ //# sourceMappingURL=messageSound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageSound.d.ts","sourceRoot":"","sources":["../../src/utils/messageSound.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,wBAAgB,gBAAgB,IAAI,IAAI,CAwBvC;AAID,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAShE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAM/E"}
@@ -1,5 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.playMessageSound = playMessageSound;
4
+ exports.getMessageSoundEnabled = getMessageSoundEnabled;
5
+ exports.setMessageSoundEnabled = setMessageSoundEnabled;
1
6
  /** Short notification tone for incoming chat messages */
2
- export function playMessageSound() {
7
+ function playMessageSound() {
3
8
  try {
4
9
  const AC = window.AudioContext || window.webkitAudioContext;
5
10
  if (!AC)
@@ -28,7 +33,7 @@ export function playMessageSound() {
28
33
  }
29
34
  }
30
35
  const soundPrefKey = (widgetId) => `ajaxter_sound_${widgetId}`;
31
- export function getMessageSoundEnabled(widgetId) {
36
+ function getMessageSoundEnabled(widgetId) {
32
37
  if (typeof window === 'undefined')
33
38
  return true;
34
39
  try {
@@ -41,7 +46,7 @@ export function getMessageSoundEnabled(widgetId) {
41
46
  return true;
42
47
  }
43
48
  }
44
- export function setMessageSoundEnabled(widgetId, enabled) {
49
+ function setMessageSoundEnabled(widgetId, enabled) {
45
50
  try {
46
51
  localStorage.setItem(soundPrefKey(widgetId), enabled ? '1' : '0');
47
52
  }
@@ -49,3 +54,4 @@ export function setMessageSoundEnabled(widgetId, enabled) {
49
54
  /* ignore */
50
55
  }
51
56
  }
57
+ //# sourceMappingURL=messageSound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageSound.js","sourceRoot":"","sources":["../../src/utils/messageSound.ts"],"names":[],"mappings":";;AACA,4CAwBC;AAID,wDASC;AAED,wDAMC;AA9CD,yDAAyD;AACzD,SAAgB,gBAAgB;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,IAAK,MAAkE,CAAC,kBAAkB,CAAC;QACzH,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC;QAChB,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC;gBACH,CAAC,CAAC,IAAI,EAAE,CAAC;gBACT,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;YAAC,WAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAAC,WAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,iBAAiB,QAAQ,EAAE,CAAC;AAEvE,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,CAAC,KAAK,GAAG,CAAC;IACnB,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB,CAAC,QAAgB,EAAE,OAAgB;IACvE,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IAAC,WAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC"}
@@ -11,3 +11,4 @@ export interface PresenceSyncPayload {
11
11
  }
12
12
  /** Call your backend to persist presence (production DB). */
13
13
  export declare function syncPresenceToServer(url: string, payload: PresenceSyncPayload): Promise<void>;
14
+ //# sourceMappingURL=presenceStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenceStatus.d.ts","sourceRoot":"","sources":["../../src/utils/presenceStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CASnE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAMjF;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,cAAc,GAAG,SAAS,GACvC,cAAc,CAGhB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,6DAA6D;AAC7D,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAenG"}
@@ -1,5 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadPresenceStatus = loadPresenceStatus;
4
+ exports.savePresenceStatus = savePresenceStatus;
5
+ exports.resolveInitialPresence = resolveInitialPresence;
6
+ exports.syncPresenceToServer = syncPresenceToServer;
1
7
  const key = (widgetId) => `ajaxter_presence_${widgetId}`;
2
- export function loadPresenceStatus(widgetId) {
8
+ function loadPresenceStatus(widgetId) {
3
9
  if (typeof sessionStorage === 'undefined')
4
10
  return 'ACTIVE';
5
11
  try {
@@ -12,7 +18,7 @@ export function loadPresenceStatus(widgetId) {
12
18
  }
13
19
  return 'ACTIVE';
14
20
  }
15
- export function savePresenceStatus(widgetId, status) {
21
+ function savePresenceStatus(widgetId, status) {
16
22
  try {
17
23
  sessionStorage.setItem(key(widgetId), status);
18
24
  }
@@ -21,13 +27,13 @@ export function savePresenceStatus(widgetId, status) {
21
27
  }
22
28
  }
23
29
  /** Prefer server value from DB when the host includes it in config */
24
- export function resolveInitialPresence(widgetId, serverStatus) {
30
+ function resolveInitialPresence(widgetId, serverStatus) {
25
31
  if (serverStatus === 'ACTIVE' || serverStatus === 'AWAY' || serverStatus === 'DND')
26
32
  return serverStatus;
27
33
  return loadPresenceStatus(widgetId);
28
34
  }
29
35
  /** Call your backend to persist presence (production DB). */
30
- export async function syncPresenceToServer(url, payload) {
36
+ async function syncPresenceToServer(url, payload) {
31
37
  const res = await fetch(url, {
32
38
  method: 'POST',
33
39
  headers: {
@@ -43,3 +49,4 @@ export async function syncPresenceToServer(url, payload) {
43
49
  throw new Error(t || `Presence sync failed (${res.status})`);
44
50
  }
45
51
  }
52
+ //# sourceMappingURL=presenceStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenceStatus.js","sourceRoot":"","sources":["../../src/utils/presenceStatus.ts"],"names":[],"mappings":";;AAIA,gDASC;AAED,gDAMC;AAGD,wDAMC;AAUD,oDAeC;AArDD,MAAM,GAAG,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,oBAAoB,QAAQ,EAAE,CAAC;AAEjE,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,IAAI,OAAO,cAAc,KAAK,WAAW;QAAE,OAAO,QAAQ,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAAC,WAAM,CAAC;QACP,KAAK;IACP,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,MAAsB;IACzE,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,WAAM,CAAC;QACP,WAAW;IACb,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAgB,sBAAsB,CACpC,QAAgB,EAChB,YAAwC;IAExC,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,KAAK;QAAE,OAAO,YAAY,CAAC;IACxG,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AASD,6DAA6D;AACtD,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,OAA4B;IAClF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,yBAAyB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
@@ -2,3 +2,4 @@ export declare function getPrivacyDismissedAt(widgetId: string): number | null;
2
2
  /** After dismiss, banner stays hidden until one hour has passed */
3
3
  export declare function shouldShowPrivacyNotice(widgetId: string): boolean;
4
4
  export declare function dismissPrivacyNotice(widgetId: string): void;
5
+ //# sourceMappingURL=privacyConsent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacyConsent.d.ts","sourceRoot":"","sources":["../../src/utils/privacyConsent.ts"],"names":[],"mappings":"AAMA,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUrE;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM3D"}
@@ -1,8 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPrivacyDismissedAt = getPrivacyDismissedAt;
4
+ exports.shouldShowPrivacyNotice = shouldShowPrivacyNotice;
5
+ exports.dismissPrivacyNotice = dismissPrivacyNotice;
1
6
  const HOUR_MS = 60 * 60 * 1000;
2
7
  function key(widgetId) {
3
8
  return `ajaxter_privacy_dismiss_${widgetId}`;
4
9
  }
5
- export function getPrivacyDismissedAt(widgetId) {
10
+ function getPrivacyDismissedAt(widgetId) {
6
11
  if (typeof window === 'undefined')
7
12
  return null;
8
13
  try {
@@ -17,13 +22,13 @@ export function getPrivacyDismissedAt(widgetId) {
17
22
  }
18
23
  }
19
24
  /** After dismiss, banner stays hidden until one hour has passed */
20
- export function shouldShowPrivacyNotice(widgetId) {
25
+ function shouldShowPrivacyNotice(widgetId) {
21
26
  const at = getPrivacyDismissedAt(widgetId);
22
27
  if (at == null)
23
28
  return true;
24
29
  return Date.now() - at >= HOUR_MS;
25
30
  }
26
- export function dismissPrivacyNotice(widgetId) {
31
+ function dismissPrivacyNotice(widgetId) {
27
32
  try {
28
33
  localStorage.setItem(key(widgetId), String(Date.now()));
29
34
  }
@@ -31,3 +36,4 @@ export function dismissPrivacyNotice(widgetId) {
31
36
  /* ignore quota / private mode */
32
37
  }
33
38
  }
39
+ //# sourceMappingURL=privacyConsent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacyConsent.js","sourceRoot":"","sources":["../../src/utils/privacyConsent.ts"],"names":[],"mappings":";;AAMA,sDAUC;AAGD,0DAIC;AAED,oDAMC;AA/BD,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/B,SAAS,GAAG,CAAC,QAAgB;IAC3B,OAAO,2BAA2B,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,SAAgB,uBAAuB,CAAC,QAAgB;IACtD,MAAM,EAAE,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC;AACpC,CAAC;AAED,SAAgB,oBAAoB,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,WAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC"}
@@ -9,3 +9,4 @@ export interface ReenableRequestPayload {
9
9
  message: string;
10
10
  }
11
11
  export declare function submitReenableRequest(url: string, payload: ReenableRequestPayload): Promise<void>;
12
+ //# sourceMappingURL=reenableRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reenableRequest.d.ts","sourceRoot":"","sources":["../../src/utils/reenableRequest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAevG"}
@@ -1,4 +1,7 @@
1
- export async function submitReenableRequest(url, payload) {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.submitReenableRequest = submitReenableRequest;
4
+ async function submitReenableRequest(url, payload) {
2
5
  const res = await fetch(url, {
3
6
  method: 'POST',
4
7
  headers: {
@@ -14,3 +17,4 @@ export async function submitReenableRequest(url, payload) {
14
17
  throw new Error(text || `Request failed (${res.status})`);
15
18
  }
16
19
  }
20
+ //# sourceMappingURL=reenableRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reenableRequest.js","sourceRoot":"","sources":["../../src/utils/reenableRequest.ts"],"names":[],"mappings":";;AAWA,sDAeC;AAfM,KAAK,UAAU,qBAAqB,CAAC,GAAW,EAAE,OAA+B;IACtF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,mBAAmB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
@@ -3,3 +3,4 @@ export declare const defaultTheme: Required<ChatWidgetTheme>;
3
3
  export declare function mergeTheme(remote?: Partial<ChatWidgetTheme>, local?: ChatWidgetTheme): Required<ChatWidgetTheme>;
4
4
  /** Darken a hex color by `amount` (0-255) */
5
5
  export declare function darken(hex: string, amount?: number): string;
6
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/utils/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,eAAe,CAQlD,CAAC;AAEF,wBAAgB,UAAU,CACxB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,KAAK,CAAC,EAAE,eAAe,GACtB,QAAQ,CAAC,eAAe,CAAC,CAE3B;AAED,6CAA6C;AAC7C,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAMvD"}
@@ -1,4 +1,9 @@
1
- export const defaultTheme = {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultTheme = void 0;
4
+ exports.mergeTheme = mergeTheme;
5
+ exports.darken = darken;
6
+ exports.defaultTheme = {
2
7
  primaryColor: '#2563EB',
3
8
  fontFamily: "'DM Sans', 'Segoe UI', sans-serif",
4
9
  buttonColor: '#2563EB',
@@ -7,14 +12,15 @@ export const defaultTheme = {
7
12
  buttonPosition: 'bottom-right',
8
13
  borderRadius: '0px', // drawer uses 16px only on top-left / bottom-left
9
14
  };
10
- export function mergeTheme(remote, local) {
11
- return Object.assign(Object.assign(Object.assign({}, defaultTheme), remote), local);
15
+ function mergeTheme(remote, local) {
16
+ return Object.assign(Object.assign(Object.assign({}, exports.defaultTheme), remote), local);
12
17
  }
13
18
  /** Darken a hex color by `amount` (0-255) */
14
- export function darken(hex, amount = 20) {
19
+ function darken(hex, amount = 20) {
15
20
  const n = parseInt(hex.replace('#', ''), 16);
16
21
  const r = Math.max(0, (n >> 16) - amount);
17
22
  const g = Math.max(0, ((n >> 8) & 0xff) - amount);
18
23
  const b = Math.max(0, (n & 0xff) - amount);
19
24
  return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, '0')}`;
20
25
  }
26
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/utils/theme.ts"],"names":[],"mappings":";;;AAYA,gCAKC;AAGD,wBAMC;AAxBY,QAAA,YAAY,GAA8B;IACrD,YAAY,EAAK,SAAS;IAC1B,UAAU,EAAO,mCAAmC;IACpD,WAAW,EAAM,SAAS;IAC1B,eAAe,EAAE,SAAS;IAC1B,WAAW,EAAM,SAAS;IAC1B,cAAc,EAAG,cAAc;IAC/B,YAAY,EAAK,KAAK,EAAI,kDAAkD;CAC7E,CAAC;AAEF,SAAgB,UAAU,CACxB,MAAiC,EACjC,KAAuB;IAEvB,qDAAY,oBAAY,GAAK,MAAM,GAAK,KAAK,EAAG;AAClD,CAAC;AAED,6CAA6C;AAC7C,SAAgB,MAAM,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE;IAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACxE,CAAC"}
@@ -7,3 +7,4 @@ export declare function permissionsSessionKey(widgetId: string): string;
7
7
  export declare function hasStoredPermissionsGrant(widgetId: string): boolean;
8
8
  export declare function storePermissionsGrant(widgetId: string): void;
9
9
  export declare function clearStoredPermissionsGrant(widgetId: string): void;
10
+ //# sourceMappingURL=widgetPermissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgetPermissions.d.ts","sourceRoot":"","sources":["../../src/utils/widgetPermissions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiCjE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOnE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM5D;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMlE"}