@v-tilt/browser 1.13.0 → 1.13.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 (109) hide show
  1. package/dist/all-external-dependencies.js.map +1 -1
  2. package/dist/array.chat.js +2 -0
  3. package/dist/array.chat.js.map +1 -0
  4. package/dist/array.chat.no-external.js +2 -0
  5. package/dist/array.chat.no-external.js.map +1 -0
  6. package/dist/array.full.chat.js +2 -0
  7. package/dist/array.full.chat.js.map +1 -0
  8. package/dist/array.full.chat.no-external.js +2 -0
  9. package/dist/array.full.chat.no-external.js.map +1 -0
  10. package/dist/array.full.js +1 -1
  11. package/dist/array.full.js.map +1 -1
  12. package/dist/array.full.no-external.js +2 -0
  13. package/dist/array.full.no-external.js.map +1 -0
  14. package/dist/array.js +1 -1
  15. package/dist/array.js.map +1 -1
  16. package/dist/array.no-external.js +1 -1
  17. package/dist/array.no-external.js.map +1 -1
  18. package/dist/chat.js +1 -1
  19. package/dist/chat.js.map +1 -1
  20. package/dist/entrypoints/all-external-dependencies.d.ts +10 -3
  21. package/dist/entrypoints/array.chat.d.ts +10 -0
  22. package/dist/entrypoints/array.chat.no-external.d.ts +6 -0
  23. package/dist/entrypoints/array.full.chat.d.ts +13 -0
  24. package/dist/entrypoints/array.full.chat.no-external.d.ts +7 -0
  25. package/dist/entrypoints/array.full.d.ts +5 -9
  26. package/dist/entrypoints/array.full.no-external.d.ts +12 -0
  27. package/dist/entrypoints/module.chat.es.d.ts +7 -0
  28. package/dist/entrypoints/module.full.chat.es.d.ts +12 -0
  29. package/dist/entrypoints/module.full.es.d.ts +12 -0
  30. package/dist/entrypoints/module.no-external.es.d.ts +1 -0
  31. package/dist/extensions/chat/bubble-drag.d.ts +20 -5
  32. package/dist/extensions/chat/chat-wrapper.d.ts +8 -2
  33. package/dist/extensions/chat/chat.d.ts +21 -351
  34. package/dist/extensions/chat/controller/__tests__/fakes/ably-realtime-fake.d.ts +84 -0
  35. package/dist/extensions/chat/controller/ably-client.d.ts +160 -0
  36. package/dist/extensions/chat/controller/ably-handlers.d.ts +95 -0
  37. package/dist/extensions/chat/controller/ably-token.d.ts +67 -0
  38. package/dist/extensions/chat/controller/chat-controller.d.ts +194 -0
  39. package/dist/extensions/chat/controller/message-delivery-status.d.ts +6 -0
  40. package/dist/extensions/chat/controller/message-order.d.ts +12 -0
  41. package/dist/extensions/chat/controller/message-stream.d.ts +49 -0
  42. package/dist/extensions/chat/lib/bubble-offset.d.ts +18 -0
  43. package/dist/extensions/chat/lib/merge-chat-config.d.ts +3 -0
  44. package/dist/extensions/chat/normalize-send-content.d.ts +2 -0
  45. package/dist/extensions/chat/outbox/message-delivery.d.ts +17 -0
  46. package/dist/extensions/chat/outbox/message-outbox.d.ts +57 -0
  47. package/dist/extensions/chat/store/chat-store.d.ts +122 -0
  48. package/dist/extensions/chat/types.d.ts +1 -19
  49. package/dist/extensions/chat/ui/ChannelItem.d.ts +12 -0
  50. package/dist/extensions/chat/ui/ChannelListView.d.ts +14 -0
  51. package/dist/extensions/chat/ui/ChatBubble.d.ts +14 -0
  52. package/dist/extensions/chat/ui/ChatHeader.d.ts +13 -0
  53. package/dist/extensions/chat/ui/ChatPanel.d.ts +14 -0
  54. package/dist/extensions/chat/ui/ChatRoot.d.ts +31 -0
  55. package/dist/extensions/chat/ui/ClosedBanner.d.ts +7 -0
  56. package/dist/extensions/chat/ui/ConnectionBanner.d.ts +32 -0
  57. package/dist/extensions/chat/ui/ConversationView.d.ts +14 -0
  58. package/dist/extensions/chat/ui/MessageBubble.d.ts +25 -0
  59. package/dist/extensions/chat/ui/MessageInput.d.ts +14 -0
  60. package/dist/extensions/chat/ui/MessageList.d.ts +19 -0
  61. package/dist/extensions/chat/ui/NewMessagesPill.d.ts +13 -0
  62. package/dist/extensions/chat/ui/Skeletons.d.ts +14 -0
  63. package/dist/extensions/chat/ui/TypingBubble.d.ts +23 -0
  64. package/dist/extensions/chat/ui/TypingIndicator.d.ts +12 -0
  65. package/dist/extensions/chat/ui/WidgetSlot.d.ts +20 -0
  66. package/dist/extensions/chat/ui/hooks/use-auto-mark-read.d.ts +18 -0
  67. package/dist/extensions/chat/ui/hooks/use-scroll-preservation.d.ts +33 -0
  68. package/dist/extensions/chat/ui/icons.d.ts +18 -0
  69. package/dist/extensions/chat/ui/message-render.d.ts +18 -0
  70. package/dist/extensions/chat/ui/shadow-styles.d.ts +13 -0
  71. package/dist/extensions/chat/ui/utils/mobile-body-scroll-lock.d.ts +14 -0
  72. package/dist/extensions/chat/widget-registry.d.ts +21 -5
  73. package/dist/extensions/chat/widgets/collect-email.d.ts +4 -2
  74. package/dist/extensions/chat/widgets/escalate-to-human.d.ts +2 -1
  75. package/dist/external-scripts-loader.js +1 -1
  76. package/dist/external-scripts-loader.js.map +1 -1
  77. package/dist/feature.d.ts +1 -0
  78. package/dist/lib/merge-vtilt-config.d.ts +9 -0
  79. package/dist/main.js +1 -1
  80. package/dist/main.js.map +1 -1
  81. package/dist/module.chat.d.ts +1788 -0
  82. package/dist/module.chat.js +2 -0
  83. package/dist/module.chat.js.map +1 -0
  84. package/dist/module.d.ts +48 -3
  85. package/dist/module.full.chat.d.ts +1792 -0
  86. package/dist/module.full.chat.js +2 -0
  87. package/dist/module.full.chat.js.map +1 -0
  88. package/dist/module.full.d.ts +1793 -0
  89. package/dist/module.full.js +2 -0
  90. package/dist/module.full.js.map +1 -0
  91. package/dist/module.js +1 -1
  92. package/dist/module.js.map +1 -1
  93. package/dist/module.no-external.d.ts +48 -3
  94. package/dist/module.no-external.js +1 -1
  95. package/dist/module.no-external.js.map +1 -1
  96. package/dist/recorder.js.map +1 -1
  97. package/dist/snippet-stub-methods.d.ts +14 -0
  98. package/dist/utils/globals.d.ts +53 -27
  99. package/dist/utils/index.d.ts +8 -0
  100. package/dist/vtilt.d.ts +6 -1
  101. package/dist/web-vitals.js.map +1 -1
  102. package/package.json +74 -71
  103. package/dist/extensions/chat/chat-styles.d.ts +0 -27
  104. package/dist/extensions/chat/message-content-styles.d.ts +0 -1
  105. package/dist/extensions/chat/message-html.d.ts +0 -6
  106. package/dist/extensions/chat/message-markdown.d.ts +0 -8
  107. package/dist/extensions/ga4-proxy.d.ts +0 -59
  108. package/dist/utils/type-utils.d.ts +0 -4
  109. package/dist/web-vitals.d.ts +0 -81
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Method names registered on the inline `window.vt` stub before `array.js` loads.
3
+ *
4
+ * npm / ESM imports (`import { vt } from '@v-tilt/browser'`) do **not** use this
5
+ * list — `vt` is the real SDK instance. Only the HTML snippet's loader IIFE
6
+ * needs these names so calls queue in `window.vt._i` until the bundle loads.
7
+ *
8
+ * When adding a new public `vt.*` method that integrators may call before
9
+ * `init()` completes, append it here and update public install docs.
10
+ */
11
+ export declare const VTILT_SNIPPET_STUB_METHOD_NAMES: readonly ["init", "capture", "identify", "setUserProperties", "resetUser", "getUserIdentity", "getDeviceId", "getUserState", "alias", "getConfig", "getSessionId", "updateConfig", "setConsent", "on", "once", "off", "startAutocapture", "stopAutocapture", "startSessionRecording", "stopSessionRecording", "openChat", "closeChat", "toggleChat", "showChat", "hideChat", "sendChatMessage", "gtag", "setGoogleUserData"];
12
+ /** Space-separated stub method string for the minified install snippet. */
13
+ export declare const VTILT_SNIPPET_STUB_METHODS: string;
14
+ export type VtiltSnippetStubMethodName = (typeof VTILT_SNIPPET_STUB_METHOD_NAMES)[number];
@@ -55,7 +55,21 @@ export interface ChatMessage {
55
55
  content: string;
56
56
  content_type: "text" | "html" | "attachment";
57
57
  metadata: Record<string, unknown>;
58
+ /** Immutable creation timestamp — set once on row INSERT. */
58
59
  created_at: string;
60
+ /**
61
+ * Last modification timestamp. Equals `created_at` on a freshly
62
+ * inserted row; later bumped when the AI streaming finalize writes
63
+ * the full text onto a placeholder row, or when the (planned)
64
+ * edit-message feature mutates content. Optional for backwards
65
+ * compatibility with widget builds that pre-date the field.
66
+ */
67
+ updated_at?: string;
68
+ /**
69
+ * Local-only outbound delivery state (widget SDK). Cleared once the
70
+ * server row is acknowledged. Not returned by API/Ably payloads.
71
+ */
72
+ delivery_status?: "pending" | "sending" | "failed";
59
73
  }
60
74
  /**
61
75
  * Chat channel structure (maps 1:1 to Ably channel)
@@ -154,6 +168,14 @@ export interface ChatConfig {
154
168
  channelId: string;
155
169
  messageId: string;
156
170
  }) => void;
171
+ /**
172
+ * Called when the user message row is persisted on the server (before
173
+ * the AI stream finishes). Use for form → chat → redirect flows.
174
+ */
175
+ onMessageDelivered?: (data: {
176
+ channelId: string;
177
+ messageId: string;
178
+ }) => void;
157
179
  /** Called when a message is received (from AI or agent) */
158
180
  onMessageReceived?: (data: {
159
181
  channelId: string;
@@ -203,6 +225,25 @@ export interface SendChatMessageOptions {
203
225
  * `markdown` and `html` use the same sanitized rendering as AI/agent messages.
204
226
  */
205
227
  format?: "text" | "markdown" | "html";
228
+ /**
229
+ * Marks the message as automatically injected by your site (form submit, CTA,
230
+ * etc.) rather than typed by the visitor in the widget. Stored on the message
231
+ * as `message_source` metadata so the AI can respond appropriately — e.g.
232
+ * `source: "landing_form"`. Slug-like: letters, numbers, `_`, `-`, max 64 chars.
233
+ */
234
+ source?: string;
235
+ }
236
+ /**
237
+ * Pixel inset of the chat bubble from the viewport edges.
238
+ * Use to clear host floating buttons, cookie banners, or mobile tab bars.
239
+ */
240
+ export interface BubbleOffset {
241
+ /** Distance from the bottom edge (default: 20) */
242
+ bottom?: number;
243
+ /** Distance from the right edge when `position` is `bottom-right` (default: 20) */
244
+ right?: number;
245
+ /** Distance from the left edge when `position` is `bottom-left` (default: 20) */
246
+ left?: number;
206
247
  }
207
248
  /**
208
249
  * Chat bubble appearance and behavior configuration
@@ -212,6 +253,12 @@ export interface BubbleConfig {
212
253
  draggable?: boolean;
213
254
  /** Show the bubble on load (default: true). Set to false to control via vt.chat.show() */
214
255
  visible?: boolean;
256
+ /**
257
+ * Viewport inset in pixels. Prefer this over custom CSS so positioning
258
+ * survives widget UI updates. Pass `null` in `vt.updateConfig({ chat: { bubble: { offset: null } } })` to reset
259
+ * to SDK defaults (20px).
260
+ */
261
+ offset?: BubbleOffset | null;
215
262
  }
216
263
  /**
217
264
  * Interface for lazy-loaded chat widget (set by chat.ts entrypoint)
@@ -237,39 +284,18 @@ export interface LazyLoadedChatInterface {
237
284
  createChannel(): Promise<void>;
238
285
  /** Go back to channel list from conversation view */
239
286
  goToChannelList(): void;
287
+ /**
288
+ * Tier A closed-badge: apply aggregate unread from `GET /api/chat/widget/unread`.
289
+ * No-op while the panel is open.
290
+ */
291
+ applyPolledUnreadCount?(count: number): void;
240
292
  sendMessage(content: SendChatMessageContent, options?: SendChatMessageOptions): Promise<void>;
241
293
  markAsRead(): void;
242
294
  onMessage(callback: (message: ChatMessage) => void): () => void;
243
295
  onTyping(callback: (isTyping: boolean, senderType: string) => void): () => void;
244
296
  onConnectionChange(callback: (connected: boolean) => void): () => void;
245
297
  updateConfig?(config: ChatConfig): void;
246
- registerWidget?(definition: {
247
- type: string;
248
- toolDescription: string;
249
- parameters: Record<string, {
250
- type: string;
251
- description: string;
252
- }>;
253
- render: (params: Record<string, unknown>, context: {
254
- channelId: string;
255
- distinctId: string;
256
- primaryColor: string;
257
- apiBase: string;
258
- token: string;
259
- messageId: string;
260
- }) => string;
261
- onAction: (action: string, data: Record<string, unknown>, context: {
262
- channelId: string;
263
- distinctId: string;
264
- primaryColor: string;
265
- apiBase: string;
266
- token: string;
267
- messageId: string;
268
- }) => Promise<{
269
- replaceHTML?: string;
270
- sendMessage?: string;
271
- }>;
272
- }): void;
298
+ registerWidget?(definition: import("../extensions/chat/widget-registry").ChatWidgetDefinition): void;
273
299
  destroy(): void;
274
300
  }
275
301
  /**
@@ -10,6 +10,14 @@ export { getLogger, resolveLogLevel, setLevelFromConfig, type LogLevel, type Log
10
10
  * Default size 16 gives ~91 bits of entropy (55^16).
11
11
  */
12
12
  export declare function generateId(size?: number): string;
13
+ /**
14
+ * Generate a RFC 4122 v4 UUID. Used by the chat module to mint message ids
15
+ * client-side so the optimistic temp row and the persisted server row share
16
+ * a single identity (no key churn, no remount). Uses `crypto.randomUUID`
17
+ * where available and falls back to `crypto.getRandomValues` on older
18
+ * browsers.
19
+ */
20
+ export declare function generateUuidV4(): string;
13
21
  /**
14
22
  * Validate user agent string
15
23
  */
package/dist/vtilt.d.ts CHANGED
@@ -89,7 +89,7 @@ export declare class VTilt {
89
89
  * Send a chat message. By default uses the active conversation; pass options to
90
90
  * start a new conversation, target a channel, or open the widget panel.
91
91
  */
92
- sendChatMessage(content: SendChatMessageContent, options?: SendChatMessageOptions): void;
92
+ sendChatMessage(content: SendChatMessageContent, options?: SendChatMessageOptions): Promise<void>;
93
93
  /**
94
94
  * Raw `gtag(...)` passthrough. Queues calls made before the feature is
95
95
  * enabled or before `gtag.js` has loaded, flushed FIFO once ready. Safe
@@ -135,6 +135,11 @@ export declare class VTilt {
135
135
  getDistinctId(): string;
136
136
  getAnonymousId(): string;
137
137
  toString(): string;
138
+ /**
139
+ * Merge a partial config patch into the live SDK config and notify all features.
140
+ * Use for any post-`init()` change (autocapture, `chat`, persistence, etc.).
141
+ * Top-level keys shallow-merge; nested `chat` deep-merges.
142
+ */
138
143
  updateConfig(config: Partial<VTiltConfig>): void;
139
144
  buildUrl(): string;
140
145
  buildEndpointUrl(path: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"web-vitals.js","sources":["../../../../node_modules/.pnpm/web-vitals@3.5.2/node_modules/web-vitals/dist/web-vitals.js","../src/utils/globals.ts","../src/entrypoints/web-vitals.ts"],"sourcesContent":["var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n",null,null],"names":["r","a","o","e","addEventListener","n","persisted","timeStamp","c","window","performance","getEntriesByType","u","activationStart","f","t","i","document","prerendering","wasDiscarded","type","replace","name","value","rating","delta","entries","id","concat","Date","now","Math","floor","random","navigationType","s","PerformanceObserver","supportedEntryTypes","includes","Promise","resolve","then","getEntries","observe","Object","assign","buffered","d","l","requestAnimationFrame","p","visibilityState","v","m","h","g","T","y","removeEventListener","E","setTimeout","firstHiddenTime","C","L","w","forEach","disconnect","startTime","max","push","reportAllChanges","b","B","R","H","N","interactionId","min","O","interactionCount","q","durationThreshold","j","_","z","G","J","K","length","duration","latency","sort","splice","U","V","X","Y","readyState","win","undefined","global","globalThis","navigator","location","fetch","createElement","XMLHttpRequest","AbortController","userAgent","assignableWindow","vtiltWebVitalsCallbacks","takeRecords","hadRecentInput","onFCP","entryType","some","PerformanceEventTiming","prototype","onTTFB","responseStart","__VTiltExtensions__","webVitalsCallbacks"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"web-vitals.js","sources":["../../../../node_modules/.pnpm/web-vitals@3.5.2/node_modules/web-vitals/dist/web-vitals.js","../src/utils/globals.ts","../src/entrypoints/web-vitals.ts"],"sourcesContent":["var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n",null,null],"names":["r","a","o","e","addEventListener","n","persisted","timeStamp","c","window","performance","getEntriesByType","u","activationStart","f","t","i","document","prerendering","wasDiscarded","type","replace","name","value","rating","delta","entries","id","concat","Date","now","Math","floor","random","navigationType","s","PerformanceObserver","supportedEntryTypes","includes","Promise","resolve","then","getEntries","observe","Object","assign","buffered","d","l","requestAnimationFrame","p","visibilityState","v","m","h","g","T","y","removeEventListener","E","setTimeout","firstHiddenTime","C","L","w","forEach","disconnect","startTime","max","push","reportAllChanges","b","B","R","H","N","interactionId","min","O","interactionCount","q","durationThreshold","j","_","z","G","J","K","length","duration","latency","sort","splice","U","V","X","Y","readyState","win","undefined","global","globalThis","navigator","location","fetch","createElement","XMLHttpRequest","AbortController","userAgent","assignableWindow","vtiltWebVitalsCallbacks","takeRecords","hadRecentInput","onFCP","entryType","some","PerformanceEventTiming","prototype","onTTFB","responseStart","__VTiltExtensions__","webVitalsCallbacks"],"mappings":"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","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,71 +1,74 @@
1
- {
2
- "name": "@v-tilt/browser",
3
- "version": "1.13.0",
4
- "description": "vTilt browser tracking library",
5
- "main": "dist/main.js",
6
- "module": "dist/module.js",
7
- "types": "dist/module.d.ts",
8
- "files": [
9
- "dist/*"
10
- ],
11
- "publishConfig": {
12
- "access": "public"
13
- },
14
- "scripts": {
15
- "build": "tsc -b && rollup -c",
16
- "dev": "rollup -c -w",
17
- "type-check": "tsc --noEmit",
18
- "lint": "eslint src --ext .ts",
19
- "lint:fix": "eslint src --ext .ts --fix",
20
- "test": "jest --config jest.config.cjs",
21
- "clean": "rimraf lib dist",
22
- "prepublishOnly": "pnpm run build"
23
- },
24
- "keywords": [
25
- "analytics",
26
- "tracking",
27
- "web-vitals",
28
- "performance"
29
- ],
30
- "author": "vTilt",
31
- "license": "MIT",
32
- "devDependencies": {
33
- "@babel/preset-env": "^7.28.3",
34
- "@rollup/plugin-babel": "^6.0.4",
35
- "@rollup/plugin-commonjs": "^25.0.8",
36
- "@rollup/plugin-json": "^6.1.0",
37
- "@rollup/plugin-node-resolve": "^15.3.1",
38
- "@rollup/plugin-terser": "^0.4.4",
39
- "@rollup/plugin-typescript": "^11.1.6",
40
- "@types/jest": "29.5.14",
41
- "@types/node": "^20.10.5",
42
- "@v-tilt/eslint-config": "workspace:*",
43
- "eslint": "^9.0.0",
44
- "jest": "29.7.0",
45
- "jest-environment-jsdom": "29.7.0",
46
- "rimraf": "^5.0.5",
47
- "rollup": "^4.9.1",
48
- "rollup-plugin-dts": "^6.2.3",
49
- "rollup-plugin-terser": "^7.0.2",
50
- "rollup-plugin-visualizer": "^6.0.3",
51
- "ts-jest": "29.2.5",
52
- "typescript": "^5.3.3"
53
- },
54
- "dependencies": {
55
- "@rrweb/record": "2.0.0-alpha.20",
56
- "@rrweb/rrweb-plugin-console-record": "2.0.0-alpha.20",
57
- "@rrweb/types": "2.0.0-alpha.20",
58
- "@v-tilt/browser": "^1.10.9",
59
- "ably": "^2.4.0",
60
- "fflate": "^0.8.2",
61
- "web-vitals": "^3.5.0"
62
- },
63
- "peerDependencies": {
64
- "web-vitals": "^3.0.0"
65
- },
66
- "peerDependenciesMeta": {
67
- "web-vitals": {
68
- "optional": true
69
- }
70
- }
71
- }
1
+ {
2
+ "name": "@v-tilt/browser",
3
+ "version": "1.13.1",
4
+ "description": "vTilt browser tracking library",
5
+ "main": "dist/main.js",
6
+ "module": "dist/module.js",
7
+ "types": "dist/module.d.ts",
8
+ "files": [
9
+ "dist/*"
10
+ ],
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "scripts": {
15
+ "build": "tsc -b && rollup -c",
16
+ "dev": "rollup -c -w",
17
+ "type-check": "tsc --noEmit",
18
+ "lint": "eslint src --ext .ts",
19
+ "lint:fix": "eslint src --ext .ts --fix",
20
+ "test": "jest --config jest.config.cjs",
21
+ "clean": "rimraf lib dist",
22
+ "prepublishOnly": "pnpm run build"
23
+ },
24
+ "keywords": [
25
+ "analytics",
26
+ "tracking",
27
+ "web-vitals",
28
+ "performance"
29
+ ],
30
+ "author": "vTilt",
31
+ "license": "MIT",
32
+ "devDependencies": {
33
+ "@babel/preset-env": "^7.28.3",
34
+ "@rollup/plugin-babel": "^6.0.4",
35
+ "@rollup/plugin-commonjs": "^25.0.8",
36
+ "@rollup/plugin-json": "^6.1.0",
37
+ "@rollup/plugin-node-resolve": "^15.3.1",
38
+ "@rollup/plugin-terser": "^0.4.4",
39
+ "@rollup/plugin-typescript": "^11.1.6",
40
+ "@types/jest": "29.5.14",
41
+ "@types/node": "^20.10.5",
42
+ "@v-tilt/eslint-config": "workspace:*",
43
+ "eslint": "^9.0.0",
44
+ "jest": "29.7.0",
45
+ "jest-environment-jsdom": "29.7.0",
46
+ "rimraf": "^5.0.5",
47
+ "rollup": "^4.9.1",
48
+ "rollup-plugin-dts": "^6.2.3",
49
+ "rollup-plugin-terser": "^7.0.2",
50
+ "rollup-plugin-visualizer": "^6.0.3",
51
+ "ts-jest": "29.2.5",
52
+ "typescript": "^5.3.3"
53
+ },
54
+ "dependencies": {
55
+ "@preact/signals": "^1.3.0",
56
+ "@preact/signals-core": "^1.7.0",
57
+ "@rrweb/record": "2.0.0-alpha.20",
58
+ "@rrweb/rrweb-plugin-console-record": "2.0.0-alpha.20",
59
+ "@rrweb/types": "2.0.0-alpha.20",
60
+ "@v-tilt/browser": "^1.10.9",
61
+ "ably": "^2.4.0",
62
+ "fflate": "^0.8.2",
63
+ "preact": "^10.24.0",
64
+ "web-vitals": "^3.5.0"
65
+ },
66
+ "peerDependencies": {
67
+ "web-vitals": "^3.0.0"
68
+ },
69
+ "peerDependenciesMeta": {
70
+ "web-vitals": {
71
+ "optional": true
72
+ }
73
+ }
74
+ }
@@ -1,27 +0,0 @@
1
- /**
2
- * Chat widget style and HTML string builders.
3
- * Keeps all style/logic in TS (no separate CSS file), aligned with Intercom/PostHog.
4
- */
5
- export type ChatWidgetPosition = "bottom-right" | "bottom-left";
6
- export interface ChatTheme {
7
- primaryColor: string;
8
- fontFamily: string;
9
- borderRadius?: string;
10
- }
11
- export declare function getContainerStyles(theme: ChatTheme, position?: ChatWidgetPosition): string;
12
- export declare function getBubbleStyles(theme: ChatTheme): string;
13
- export declare function getBubbleHTML(): string;
14
- export declare function getWidgetStyles(): string;
15
- /**
16
- * Container styles when the widget is fullscreen on mobile.
17
- * The container (direct child of body) becomes the fullscreen overlay;
18
- * any drag transform is cleared so position:fixed works correctly.
19
- */
20
- export declare function getMobileContainerStyles(theme: ChatTheme): string;
21
- /**
22
- * Widget styles when fullscreen on mobile.
23
- * Widget fills the container with absolute positioning.
24
- * Display is omitted — set by _updateUI based on open state.
25
- */
26
- export declare function getMobileWidgetStyles(): string;
27
- export declare function getWidgetHTML(theme: ChatTheme): string;
@@ -1 +0,0 @@
1
- export declare const CHAT_MESSAGE_CONTENT_CSS = "\n #vtilt-chat-widget .vtilt-md {\n max-width: 100%;\n overflow-wrap: anywhere;\n word-break: break-word;\n font-size: inherit;\n line-height: 1.45;\n }\n #vtilt-chat-widget .vtilt-md * {\n box-sizing: border-box;\n }\n #vtilt-chat-widget .vtilt-md :is(p, h1, h2, h3, h4, h5, h6, ul, ol, blockquote, pre) {\n margin: 0;\n }\n #vtilt-chat-widget .vtilt-md p { margin: 0 0 0.5em 0; }\n #vtilt-chat-widget .vtilt-md p:last-child { margin-bottom: 0; }\n #vtilt-chat-widget .vtilt-md :is(b, strong) { font-weight: 600; }\n #vtilt-chat-widget .vtilt-md :is(i, em) { font-style: italic; }\n #vtilt-chat-widget .vtilt-md u { text-decoration: underline; }\n #vtilt-chat-widget .vtilt-md :is(h1, h2, h3, h4, h5, h6) {\n font-size: 1em;\n font-weight: 600;\n margin: 0.65em 0 0.35em 0;\n line-height: 1.3;\n }\n #vtilt-chat-widget .vtilt-md :is(h1, h2, h3):first-child { margin-top: 0.15em; }\n\n /* Lists \u2014 flex rows + ::before bullets (beats host list-item / ::marker resets) */\n #vtilt-chat-widget .vtilt-md :is(ul, ol) {\n list-style: none !important;\n margin: 0.5em 0 !important;\n padding: 0 0 0 0.35em !important;\n }\n #vtilt-chat-widget .vtilt-md li {\n display: flex !important;\n flex-direction: row !important;\n flex-wrap: wrap !important;\n align-items: flex-start !important;\n gap: 0.35em !important;\n margin: 0.2em 0 !important;\n padding: 0 !important;\n line-height: 1.45;\n list-style: none !important;\n list-style-type: none !important;\n }\n #vtilt-chat-widget .vtilt-md li::marker {\n content: \"\" !important;\n font-size: 0 !important;\n color: transparent !important;\n }\n #vtilt-chat-widget .vtilt-md li::-webkit-list-marker {\n display: none !important;\n }\n #vtilt-chat-widget .vtilt-md ul > li::before {\n content: \"\u2022\" !important;\n display: inline-block !important;\n position: static !important;\n flex: 0 0 auto;\n line-height: 1.45;\n }\n #vtilt-chat-widget .vtilt-md ul ul > li::before {\n content: \"\u25E6\" !important;\n }\n #vtilt-chat-widget .vtilt-md ol { counter-reset: vtilt-ol; }\n #vtilt-chat-widget .vtilt-md ol > li { counter-increment: vtilt-ol; }\n #vtilt-chat-widget .vtilt-md ol > li::before {\n content: counter(vtilt-ol) \".\" !important;\n display: inline-block !important;\n position: static !important;\n flex: 0 0 auto;\n min-width: 1.1em;\n line-height: 1.45;\n }\n #vtilt-chat-widget .vtilt-md ol ol { counter-reset: vtilt-ol; }\n #vtilt-chat-widget .vtilt-md li > :is(ul, ol) {\n flex: 1 0 100% !important;\n width: 100% !important;\n margin: 0.25em 0 0 0 !important;\n padding-left: 0.75em !important;\n }\n\n #vtilt-chat-widget .vtilt-md code {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 0.9em;\n background: rgba(0, 0, 0, 0.06);\n padding: 0.1em 0.35em;\n border-radius: 4px;\n }\n #vtilt-chat-widget .vtilt-md pre {\n margin: 0.5em 0;\n padding: 0.5em 0.65em;\n border-radius: 6px;\n background: rgba(0, 0, 0, 0.06);\n overflow-x: auto;\n white-space: pre-wrap;\n }\n #vtilt-chat-widget .vtilt-md pre code { background: none; padding: 0; }\n #vtilt-chat-widget .vtilt-md blockquote {\n margin: 0.5em 0;\n padding-left: 0.75em;\n border-left: 3px solid rgba(0, 0, 0, 0.15);\n }\n #vtilt-chat-widget .vtilt-md a { color: inherit; text-decoration: underline; }\n #vtilt-chat-widget .vtilt-md br { line-height: inherit; }\n\n /* Widget visitor bubble (brand color) */\n #vtilt-chat-widget .vtilt-user-md code { background: rgba(255, 255, 255, 0.2); }\n #vtilt-chat-widget .vtilt-user-md pre { background: rgba(255, 255, 255, 0.15); }\n #vtilt-chat-widget .vtilt-user-md pre code { background: none; }\n #vtilt-chat-widget .vtilt-user-md blockquote { border-left-color: rgba(255, 255, 255, 0.35); }\n";
@@ -1,6 +0,0 @@
1
- /**
2
- * Convert stored message content to safe HTML for bubble rendering.
3
- */
4
- export declare function formatMessageBodyHtml(text: string, contentType: "text" | "html" | "attachment", doc: Document | null): string;
5
- /** Plain-text preview for channel list (strips widgets and HTML). */
6
- export declare function plainTextMessagePreview(content: string, maxLength?: number): string;
@@ -1,8 +0,0 @@
1
- /** Detect content that already contains HTML block-level tags. */
2
- export declare const HTML_BLOCK_TAG_RE: RegExp;
3
- /**
4
- * Best-effort markdown → HTML. Returns input unchanged when it already looks like HTML.
5
- */
6
- export declare function markdownToHtml(src: string): string;
7
- /** Whether markdown conversion should run before sanitization. */
8
- export declare function shouldUseMarkdownPipeline(contentType: "text" | "html" | "attachment", cleanText: string): boolean;
@@ -1,59 +0,0 @@
1
- /**
2
- * GA4 Proxy Feature
3
- *
4
- * Automatically configures gtag.js to send through vTilt's domain.
5
- * When enabled, either reconfigures an existing gtag.js or loads a new one
6
- * with server_container_url pointing to vTilt's proxy routes.
7
- *
8
- * Config sources (init config takes priority over remote config):
9
- * vt.init({ ga4: { measurementId: 'G-XXX' } })
10
- * /api/decide → { ga4: { measurementId: 'G-XXX' } }
11
- */
12
- import type { VTiltConfig } from "../types";
13
- import type { Feature, FeatureConfig } from "../feature";
14
- export interface GA4ProxyConfig extends FeatureConfig {
15
- measurementId?: string;
16
- debugMode?: boolean;
17
- }
18
- export declare class GA4Proxy implements Feature {
19
- readonly name = "GA4Proxy";
20
- private _instance;
21
- private _config;
22
- private _isStarted;
23
- private _pendingGtagCallbacks;
24
- /** Fires once both client_id and session_id gtag callbacks complete. */
25
- onIdentityResolved?: () => void;
26
- constructor(instance: {
27
- getConfig(): VTiltConfig;
28
- }, config?: GA4ProxyConfig);
29
- static extractConfig(config: VTiltConfig): GA4ProxyConfig;
30
- get isEnabled(): boolean;
31
- get isStarted(): boolean;
32
- startIfEnabled(): void;
33
- stop(): void;
34
- /**
35
- * Sync user_id to gtag.js so both proxy and MP event streams share
36
- * the same identity after identify(). GA4 Realtime uses user_id as
37
- * the highest-priority identifier; without this, proxy events (no
38
- * user_id) and MP events (with user_id) count as separate users.
39
- */
40
- setUserId(userId: string | null): void;
41
- onConfigUpdate(config: VTiltConfig): void;
42
- private _start;
43
- private _getApiBase;
44
- private _hasGtag;
45
- private _reconfigureExistingGtag;
46
- private _loadAndConfigureGtag;
47
- /**
48
- * Use gtag('get', ...) to obtain the authoritative client_id and
49
- * session_id from gtag.js. Fires onIdentityResolved once BOTH
50
- * callbacks have completed (counter-based).
51
- */
52
- private _resolveGtagIdentity;
53
- /**
54
- * Fires after each gtag('get', ...) callback. When all pending callbacks
55
- * have settled, notifies the host (EventBuffer) so buffered MP events
56
- * can flush with stable GA4 IDs (same client_id as gtag.js).
57
- */
58
- private _onGtagCallbackSettled;
59
- }
@@ -1,4 +0,0 @@
1
- /**
2
- * Type guard to check if a value is a function
3
- */
4
- export declare function isFunction(value: any): value is (...args: any[]) => any;
@@ -1,81 +0,0 @@
1
- import { VTiltConfig, CapturePerformanceConfig, SupportedWebVitalsMetric } from "./types";
2
- import type { Feature } from "./feature";
3
- import { VTilt } from "./vtilt";
4
- /**
5
- * Web Vitals Manager
6
- *
7
- * Captures Core Web Vitals (LCP, CLS, FCP, INP, TTFB) and sends them
8
- * as batched $web_vitals events. Implements the Feature interface for
9
- * consistent lifecycle management.
10
- *
11
- * Follows PostHog's approach with:
12
- * 1. Extension pattern - checks for callbacks registered on __VTiltExtensions__
13
- * 2. Lazy loading - loads web-vitals.js on demand if not bundled
14
- * 3. Configurable metrics - choose which metrics to capture
15
- * 4. Smart buffering - collects metrics per page, flushes on navigation or timeout
16
- * 5. Session context - includes session_id and window_id for correlation
17
- *
18
- * Event structure:
19
- * - event: "$web_vitals"
20
- * - properties:
21
- * - $web_vitals_LCP_value: number
22
- * - $web_vitals_LCP_event: { name, value, delta, rating, ... }
23
- * - $pathname: string
24
- * - $current_url: string
25
- */
26
- export declare class WebVitalsManager implements Feature {
27
- readonly name = "WebVitals";
28
- private _instance;
29
- private _buffer;
30
- private _flushTimer;
31
- private _isStarted;
32
- private _config;
33
- /**
34
- * Extract web vitals config from VTiltConfig (self-contained)
35
- */
36
- static extractConfig(config: VTiltConfig): CapturePerformanceConfig;
37
- constructor(instance: VTilt);
38
- /**
39
- * Check if web vitals capture is enabled
40
- */
41
- get isEnabled(): boolean;
42
- /**
43
- * Check if capturing has started
44
- */
45
- get isStarted(): boolean;
46
- /**
47
- * Start capturing if enabled
48
- */
49
- startIfEnabled(): void;
50
- /**
51
- * Stop capturing (flushes any pending metrics)
52
- */
53
- stop(): void;
54
- /**
55
- * Handle config update
56
- */
57
- onConfigUpdate(config: VTiltConfig): void;
58
- /**
59
- * Get the list of metrics to capture
60
- */
61
- get allowedMetrics(): SupportedWebVitalsMetric[];
62
- /**
63
- * Get flush timeout in ms
64
- */
65
- get flushTimeoutMs(): number;
66
- /**
67
- * Get maximum allowed metric value
68
- */
69
- get maxAllowedValue(): number;
70
- private _createEmptyBuffer;
71
- private _getWebVitalsCallbacks;
72
- private _loadWebVitals;
73
- private _startCapturing;
74
- private _getCurrentUrl;
75
- private _getCurrentPathname;
76
- private _addToBuffer;
77
- private _cleanAttribution;
78
- private _getWindowId;
79
- private _scheduleFlush;
80
- private _flush;
81
- }