posthog-js 1.347.2 → 1.348.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 (74) hide show
  1. package/dist/array.full.es5.js +1 -1
  2. package/dist/array.full.js +1 -1
  3. package/dist/array.full.no-external.js +1 -1
  4. package/dist/array.js +1 -1
  5. package/dist/array.no-external.js +1 -1
  6. package/dist/conversations.js +1 -1
  7. package/dist/conversations.js.map +1 -1
  8. package/dist/customizations.full.js +1 -1
  9. package/dist/lazy-recorder.js +1 -1
  10. package/dist/main.js +1 -1
  11. package/dist/main.js.map +1 -1
  12. package/dist/module.d.ts +43 -1
  13. package/dist/module.full.d.ts +43 -1
  14. package/dist/module.full.js +1 -1
  15. package/dist/module.full.js.map +1 -1
  16. package/dist/module.full.no-external.d.ts +43 -1
  17. package/dist/module.full.no-external.js +1 -1
  18. package/dist/module.full.no-external.js.map +1 -1
  19. package/dist/module.js +1 -1
  20. package/dist/module.js.map +1 -1
  21. package/dist/module.no-external.d.ts +43 -1
  22. package/dist/module.no-external.js +1 -1
  23. package/dist/module.no-external.js.map +1 -1
  24. package/dist/posthog-recorder.js +1 -1
  25. package/dist/product-tours-preview.d.ts +2 -0
  26. package/dist/product-tours-preview.js +1 -1
  27. package/dist/product-tours-preview.js.map +1 -1
  28. package/dist/product-tours.js +1 -1
  29. package/dist/product-tours.js.map +1 -1
  30. package/dist/src/extensions/conversations/external/components/ConversationsWidget.d.ts +43 -2
  31. package/dist/src/extensions/conversations/external/components/TicketListItem.d.ts +13 -0
  32. package/dist/src/extensions/conversations/external/components/TicketListView.d.ts +15 -0
  33. package/dist/src/extensions/conversations/external/components/styles.d.ts +184 -0
  34. package/dist/src/extensions/conversations/external/components/utils.d.ts +8 -0
  35. package/dist/src/extensions/conversations/external/index.d.ts +39 -1
  36. package/dist/src/extensions/product-tours/product-tours.d.ts +2 -0
  37. package/dist/src/posthog-product-tours-types.d.ts +42 -0
  38. package/dist/surveys-preview.d.ts +2 -0
  39. package/lib/package.json +1 -1
  40. package/lib/src/extensions/conversations/external/components/ConversationsWidget.d.ts +43 -2
  41. package/lib/src/extensions/conversations/external/components/ConversationsWidget.js +96 -28
  42. package/lib/src/extensions/conversations/external/components/ConversationsWidget.js.map +1 -1
  43. package/lib/src/extensions/conversations/external/components/TicketListItem.d.ts +13 -0
  44. package/lib/src/extensions/conversations/external/components/TicketListItem.js +47 -0
  45. package/lib/src/extensions/conversations/external/components/TicketListItem.js.map +1 -0
  46. package/lib/src/extensions/conversations/external/components/TicketListView.d.ts +15 -0
  47. package/lib/src/extensions/conversations/external/components/TicketListView.js +75 -0
  48. package/lib/src/extensions/conversations/external/components/TicketListView.js.map +1 -0
  49. package/lib/src/extensions/conversations/external/components/styles.d.ts +184 -0
  50. package/lib/src/extensions/conversations/external/components/styles.js +189 -0
  51. package/lib/src/extensions/conversations/external/components/styles.js.map +1 -1
  52. package/lib/src/extensions/conversations/external/components/utils.d.ts +8 -0
  53. package/lib/src/extensions/conversations/external/components/utils.js +49 -0
  54. package/lib/src/extensions/conversations/external/components/utils.js.map +1 -0
  55. package/lib/src/extensions/conversations/external/index.d.ts +39 -1
  56. package/lib/src/extensions/conversations/external/index.js +253 -31
  57. package/lib/src/extensions/conversations/external/index.js.map +1 -1
  58. package/lib/src/extensions/product-tours/components/ProductTourSurveyStepInner.js +1 -1
  59. package/lib/src/extensions/product-tours/components/ProductTourSurveyStepInner.js.map +1 -1
  60. package/lib/src/extensions/product-tours/product-tours.d.ts +2 -0
  61. package/lib/src/extensions/product-tours/product-tours.js +78 -71
  62. package/lib/src/extensions/product-tours/product-tours.js.map +1 -1
  63. package/lib/src/posthog-product-tours-types.d.ts +42 -0
  64. package/lib/src/posthog-product-tours-types.js +43 -1
  65. package/lib/src/posthog-product-tours-types.js.map +1 -1
  66. package/lib/src/utils/product-tour-event-receiver.js +2 -1
  67. package/lib/src/utils/product-tour-event-receiver.js.map +1 -1
  68. package/lib/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +3 -3
  70. package/react/dist/esm/index.js +25 -1
  71. package/react/dist/esm/index.js.map +1 -1
  72. package/react/dist/types/index.d.ts +4 -2
  73. package/react/dist/umd/index.js +25 -0
  74. package/react/dist/umd/index.js.map +1 -1
@@ -1,17 +1,31 @@
1
1
  import { h, Component } from 'preact';
2
- import { ConversationsRemoteConfig, Message, ConversationsWidgetState, UserProvidedTraits } from '../../../../posthog-conversations-types';
2
+ import { ConversationsRemoteConfig, Message, ConversationsWidgetState, UserProvidedTraits, Ticket } from '../../../../posthog-conversations-types';
3
+ /**
4
+ * Type for the current view in the widget
5
+ */
6
+ export type WidgetView = 'tickets' | 'messages';
3
7
  interface WidgetProps {
4
8
  config: ConversationsRemoteConfig;
5
9
  initialState?: ConversationsWidgetState;
6
10
  initialUserTraits?: UserProvidedTraits | null;
7
11
  isUserIdentified?: boolean;
12
+ initialView?: WidgetView;
13
+ initialTickets?: Ticket[];
14
+ hasMultipleTickets?: boolean;
8
15
  onSendMessage: (message: string) => Promise<void>;
9
16
  onStateChange?: (state: ConversationsWidgetState) => void;
10
17
  onIdentify?: (traits: UserProvidedTraits) => void;
18
+ onSelectTicket?: (ticketId: string) => void;
19
+ onNewConversation?: () => void;
20
+ onBackToTickets?: () => void;
21
+ onViewChange?: (view: WidgetView) => void;
11
22
  }
12
23
  interface WidgetState {
13
24
  state: ConversationsWidgetState;
25
+ view: WidgetView;
14
26
  messages: Message[];
27
+ tickets: Ticket[];
28
+ ticketsLoading: boolean;
15
29
  inputValue: string;
16
30
  isLoading: boolean;
17
31
  error: string | null;
@@ -21,6 +35,7 @@ interface WidgetState {
21
35
  formEmailError: string | null;
22
36
  userTraits: UserProvidedTraits | null;
23
37
  unreadCount: number;
38
+ hasMultipleTickets: boolean;
24
39
  }
25
40
  export declare class ConversationsWidget extends Component<WidgetProps, WidgetState> {
26
41
  private _messagesEndRef;
@@ -37,6 +52,9 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
37
52
  private _focusInput;
38
53
  private _handleToggleOpen;
39
54
  private _handleClose;
55
+ private _handleSelectTicket;
56
+ private _handleNewConversation;
57
+ private _handleBackToTickets;
40
58
  private _handleInputChange;
41
59
  private _handleKeyPress;
42
60
  private _handleFormNameChange;
@@ -44,7 +62,6 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
44
62
  private _validateEmail;
45
63
  private _handleFormSubmit;
46
64
  private _handleSendMessage;
47
- private _formatTime;
48
65
  /**
49
66
  * Public method to add messages from outside
50
67
  */
@@ -74,8 +91,32 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
74
91
  * Set the unread message count (called by manager)
75
92
  */
76
93
  setUnreadCount(count: number): void;
94
+ /**
95
+ * Update the tickets list (called by manager during polling)
96
+ */
97
+ updateTickets(tickets: Ticket[]): void;
98
+ /**
99
+ * Set the current view (tickets list or messages)
100
+ */
101
+ setView(view: WidgetView): void;
102
+ /**
103
+ * Get the current view
104
+ */
105
+ getView(): WidgetView;
106
+ /**
107
+ * Set tickets loading state
108
+ */
109
+ setTicketsLoading(loading: boolean): void;
110
+ /**
111
+ * Clear messages (used when switching tickets or starting new conversation)
112
+ * @param addGreeting - If true, adds the greeting message after clearing
113
+ */
114
+ clearMessages(addGreeting?: boolean): void;
77
115
  private _renderIdentificationForm;
78
116
  private _renderMessage;
117
+ private _renderBackButton;
118
+ private _renderTicketList;
119
+ private _renderMessages;
79
120
  render(): h.JSX.Element;
80
121
  }
81
122
  export {};
@@ -0,0 +1,13 @@
1
+ import { FunctionComponent } from 'preact';
2
+ import { Ticket } from '../../../../posthog-conversations-types';
3
+ import { getStyles } from './styles';
4
+ interface TicketListItemProps {
5
+ ticket: Ticket;
6
+ styles: ReturnType<typeof getStyles>;
7
+ onClick: (ticketId: string) => void;
8
+ }
9
+ /**
10
+ * A single ticket item in the ticket list
11
+ */
12
+ export declare const TicketListItem: FunctionComponent<TicketListItemProps>;
13
+ export {};
@@ -0,0 +1,15 @@
1
+ import { FunctionComponent } from 'preact';
2
+ import { Ticket } from '../../../../posthog-conversations-types';
3
+ import { getStyles } from './styles';
4
+ interface TicketListViewProps {
5
+ tickets: Ticket[];
6
+ isLoading: boolean;
7
+ styles: ReturnType<typeof getStyles>;
8
+ onSelectTicket: (ticketId: string) => void;
9
+ onNewConversation: () => void;
10
+ }
11
+ /**
12
+ * Ticket list view showing all user's tickets
13
+ */
14
+ export declare const TicketListView: FunctionComponent<TicketListViewProps>;
15
+ export {};
@@ -166,6 +166,7 @@ export declare const getStyles: (primaryColor: string, position?: WidgetPosition
166
166
  };
167
167
  windowOpen: {
168
168
  width: string;
169
+ maxWidth: string;
169
170
  height: string;
170
171
  maxHeight: string;
171
172
  };
@@ -371,4 +372,187 @@ export declare const getStyles: (primaryColor: string, position?: WidgetPosition
371
372
  color: string;
372
373
  fontWeight: number;
373
374
  };
375
+ ticketListContainer: {
376
+ flex: number;
377
+ display: string;
378
+ flexDirection: "column";
379
+ background: string;
380
+ overflowY: "auto";
381
+ };
382
+ ticketList: {
383
+ flex: number;
384
+ overflowY: "auto";
385
+ };
386
+ ticketItem: {
387
+ padding: string;
388
+ borderBottom: string;
389
+ cursor: string;
390
+ transition: string;
391
+ background: string;
392
+ display: string;
393
+ alignItems: string;
394
+ gap: string;
395
+ };
396
+ ticketItemUnread: {
397
+ background: string;
398
+ };
399
+ ticketItemContent: {
400
+ display: string;
401
+ flexDirection: "column";
402
+ gap: string;
403
+ flex: number;
404
+ minWidth: number;
405
+ };
406
+ ticketItemArrow: {
407
+ color: string;
408
+ flexShrink: number;
409
+ display: string;
410
+ alignItems: string;
411
+ };
412
+ ticketItemHeader: {
413
+ display: string;
414
+ justifyContent: string;
415
+ alignItems: string;
416
+ gap: string;
417
+ };
418
+ ticketPreview: {
419
+ fontSize: string;
420
+ color: string;
421
+ lineHeight: number;
422
+ flex: number;
423
+ overflow: string;
424
+ textOverflow: string;
425
+ whiteSpace: "nowrap";
426
+ };
427
+ ticketPreviewUnread: {
428
+ fontSize: string;
429
+ color: string;
430
+ lineHeight: number;
431
+ flex: number;
432
+ overflow: string;
433
+ textOverflow: string;
434
+ whiteSpace: "nowrap";
435
+ fontWeight: number;
436
+ };
437
+ ticketUnreadBadge: {
438
+ minWidth: string;
439
+ height: string;
440
+ borderRadius: string;
441
+ background: string;
442
+ color: string;
443
+ fontSize: string;
444
+ fontWeight: number;
445
+ display: string;
446
+ alignItems: string;
447
+ justifyContent: string;
448
+ padding: string;
449
+ flexShrink: number;
450
+ };
451
+ ticketMeta: {
452
+ display: string;
453
+ alignItems: string;
454
+ gap: string;
455
+ };
456
+ ticketTime: {
457
+ fontSize: string;
458
+ color: string;
459
+ };
460
+ ticketStatus: {
461
+ fontSize: string;
462
+ color: string;
463
+ background: string;
464
+ padding: string;
465
+ borderRadius: string;
466
+ textTransform: "uppercase";
467
+ letterSpacing: string;
468
+ };
469
+ newConversationButton: {
470
+ display: string;
471
+ alignItems: string;
472
+ justifyContent: string;
473
+ margin: string;
474
+ padding: string;
475
+ borderRadius: string;
476
+ background: string;
477
+ color: string;
478
+ border: string;
479
+ cursor: string;
480
+ fontSize: string;
481
+ fontWeight: number;
482
+ transition: string;
483
+ };
484
+ ticketListLoading: {
485
+ flex: number;
486
+ display: string;
487
+ flexDirection: "column";
488
+ alignItems: string;
489
+ justifyContent: string;
490
+ gap: string;
491
+ color: string;
492
+ fontSize: string;
493
+ };
494
+ loadingSpinner: {
495
+ width: string;
496
+ height: string;
497
+ border: string;
498
+ borderTop: string;
499
+ borderRadius: string;
500
+ animation: string;
501
+ };
502
+ ticketListEmpty: {
503
+ flex: number;
504
+ display: string;
505
+ flexDirection: "column";
506
+ alignItems: string;
507
+ justifyContent: string;
508
+ padding: string;
509
+ textAlign: "center";
510
+ };
511
+ emptyStateIcon: {
512
+ color: string;
513
+ marginBottom: string;
514
+ };
515
+ emptyStateTitle: {
516
+ fontSize: string;
517
+ fontWeight: number;
518
+ color: string;
519
+ marginBottom: string;
520
+ };
521
+ emptyStateDescription: {
522
+ fontSize: string;
523
+ color: string;
524
+ lineHeight: number;
525
+ marginBottom: string;
526
+ };
527
+ newConversationButtonLarge: {
528
+ padding: string;
529
+ borderRadius: string;
530
+ background: string;
531
+ color: string;
532
+ border: string;
533
+ cursor: string;
534
+ fontSize: string;
535
+ fontWeight: number;
536
+ transition: string;
537
+ };
538
+ backButton: {
539
+ background: string;
540
+ border: string;
541
+ color: string;
542
+ cursor: string;
543
+ padding: string;
544
+ marginRight: string;
545
+ fontSize: string;
546
+ lineHeight: number;
547
+ borderRadius: string;
548
+ transition: string;
549
+ opacity: number;
550
+ display: string;
551
+ alignItems: string;
552
+ justifyContent: string;
553
+ };
554
+ headerWithBack: {
555
+ display: string;
556
+ alignItems: string;
557
+ };
374
558
  };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Format a timestamp to a relative time string
3
+ */
4
+ export declare function formatRelativeTime(isoString: string | undefined): string;
5
+ /**
6
+ * Truncate text to a maximum length with ellipsis
7
+ */
8
+ export declare function truncateText(text: string | undefined, maxLength: number): string;
@@ -17,6 +17,10 @@ export declare class ConversationsManager implements ConversationsManagerInterfa
17
17
  private _isWidgetEnabled;
18
18
  private _isDomainAllowed;
19
19
  private _isWidgetRendered;
20
+ private _initializeWidgetPromise;
21
+ private _currentView;
22
+ private _tickets;
23
+ private _hasMultipleTickets;
20
24
  constructor(config: ConversationsRemoteConfig, _posthog: PostHog);
21
25
  /**
22
26
  * Send a message programmatically via the API
@@ -45,8 +49,10 @@ export declare class ConversationsManager implements ConversationsManagerInterfa
45
49
  private _initialize;
46
50
  /**
47
51
  * Initialize and render the widget UI
52
+ * Uses a promise guard to prevent race conditions from concurrent calls
48
53
  */
49
54
  private _initializeWidget;
55
+ private _doInitializeWidget;
50
56
  /**
51
57
  * Get initial user traits from PostHog or localStorage
52
58
  */
@@ -80,7 +86,39 @@ export declare class ConversationsManager implements ConversationsManagerInterfa
80
86
  */
81
87
  private _pollMessages;
82
88
  /**
83
- * Start polling for new messages
89
+ * Poll for tickets list
90
+ */
91
+ private _pollTickets;
92
+ /**
93
+ * Load tickets list from API
94
+ */
95
+ private _loadTickets;
96
+ /**
97
+ * Main poll function that polls based on current view
98
+ */
99
+ private _poll;
100
+ /**
101
+ * Handle view changes from the widget
102
+ */
103
+ private _handleViewChange;
104
+ /**
105
+ * Handle ticket selection from the list
106
+ */
107
+ private _handleSelectTicket;
108
+ /**
109
+ * Handle new conversation request
110
+ */
111
+ private _handleNewConversation;
112
+ /**
113
+ * Handle back to tickets request
114
+ */
115
+ private _handleBackToTickets;
116
+ /**
117
+ * Determine initial view based on ticket count
118
+ */
119
+ private _determineInitialView;
120
+ /**
121
+ * Start polling based on current view
84
122
  */
85
123
  private _startPolling;
86
124
  /**
@@ -44,6 +44,8 @@ export declare class ProductTourManager {
44
44
  private _removeTriggerSelectorListener;
45
45
  private _removeAllTriggerListeners;
46
46
  private _captureEvent;
47
+ private _captureStepShown;
48
+ private _captureStepSelectorFailed;
47
49
  getActiveProductTours(callback: ProductTourCallback): void;
48
50
  resetTour(tourId: string): void;
49
51
  resetAllTours(): void;
@@ -48,6 +48,8 @@ export interface ProductTourSurveyQuestion {
48
48
  lowerBoundLabel?: string;
49
49
  /** Label for high end of rating scale (e.g., "Very likely") */
50
50
  upperBoundLabel?: string;
51
+ submitButtonText?: string;
52
+ backButtonText?: string;
51
53
  }
52
54
  export interface ProductTourStep {
53
55
  id: string;
@@ -137,3 +139,43 @@ export interface ShowTourOptions {
137
139
  reason?: ProductTourRenderReason;
138
140
  enableStrictValidation?: boolean;
139
141
  }
142
+ export declare enum ProductTourEventName {
143
+ SHOWN = "product tour shown",
144
+ DISMISSED = "product tour dismissed",
145
+ COMPLETED = "product tour completed",
146
+ STEP_SHOWN = "product tour step shown",
147
+ STEP_COMPLETED = "product tour step completed",
148
+ BUTTON_CLICKED = "product tour button clicked",
149
+ STEP_SELECTOR_FAILED = "product tour step selector failed",
150
+ BANNER_CONTAINER_SELECTOR_FAILED = "product tour banner container selector failed"
151
+ }
152
+ export declare enum ProductTourEventProperties {
153
+ TOUR_ID = "$product_tour_id",
154
+ TOUR_NAME = "$product_tour_name",
155
+ TOUR_ITERATION = "$product_tour_iteration",
156
+ TOUR_RENDER_REASON = "$product_tour_render_reason",
157
+ TOUR_STEP_ID = "$product_tour_step_id",
158
+ TOUR_STEP_ORDER = "$product_tour_step_order",
159
+ TOUR_STEP_TYPE = "$product_tour_step_type",
160
+ TOUR_DISMISS_REASON = "$product_tour_dismiss_reason",
161
+ TOUR_BUTTON_TEXT = "$product_tour_button_text",
162
+ TOUR_BUTTON_ACTION = "$product_tour_button_action",
163
+ TOUR_BUTTON_LINK = "$product_tour_button_link",
164
+ TOUR_BUTTON_TOUR_ID = "$product_tour_button_tour_id",
165
+ TOUR_STEPS_COUNT = "$product_tour_steps_count",
166
+ TOUR_STEP_SELECTOR = "$product_tour_step_selector",
167
+ TOUR_STEP_SELECTOR_FOUND = "$product_tour_step_selector_found",
168
+ TOUR_STEP_ELEMENT_TAG = "$product_tour_step_element_tag",
169
+ TOUR_STEP_ELEMENT_ID = "$product_tour_step_element_id",
170
+ TOUR_STEP_ELEMENT_CLASSES = "$product_tour_step_element_classes",
171
+ TOUR_STEP_ELEMENT_TEXT = "$product_tour_step_element_text",
172
+ TOUR_ERROR = "$product_tour_error",
173
+ TOUR_MATCHES_COUNT = "$product_tour_matches_count",
174
+ TOUR_FAILURE_PHASE = "$product_tour_failure_phase",
175
+ TOUR_WAITED_FOR_ELEMENT = "$product_tour_waited_for_element",
176
+ TOUR_WAIT_DURATION_MS = "$product_tour_wait_duration_ms",
177
+ TOUR_BANNER_SELECTOR = "$product_tour_banner_selector",
178
+ TOUR_LINKED_SURVEY_ID = "$product_tour_linked_survey_id",
179
+ USE_MANUAL_SELECTOR = "$use_manual_selector",
180
+ INFERENCE_DATA_PRESENT = "$inference_data_present"
181
+ }
@@ -1733,6 +1733,8 @@ interface ProductTourSurveyQuestion {
1733
1733
  lowerBoundLabel?: string;
1734
1734
  /** Label for high end of rating scale (e.g., "Very likely") */
1735
1735
  upperBoundLabel?: string;
1736
+ submitButtonText?: string;
1737
+ backButtonText?: string;
1736
1738
  }
1737
1739
  interface ProductTourStep {
1738
1740
  id: string;
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.347.2",
3
+ "version": "1.348.0",
4
4
  "description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
5
5
  "repository": "https://github.com/PostHog/posthog-js",
6
6
  "author": "hey@posthog.com",
@@ -1,17 +1,31 @@
1
1
  import { h, Component } from 'preact';
2
- import { ConversationsRemoteConfig, Message, ConversationsWidgetState, UserProvidedTraits } from '../../../../posthog-conversations-types';
2
+ import { ConversationsRemoteConfig, Message, ConversationsWidgetState, UserProvidedTraits, Ticket } from '../../../../posthog-conversations-types';
3
+ /**
4
+ * Type for the current view in the widget
5
+ */
6
+ export type WidgetView = 'tickets' | 'messages';
3
7
  interface WidgetProps {
4
8
  config: ConversationsRemoteConfig;
5
9
  initialState?: ConversationsWidgetState;
6
10
  initialUserTraits?: UserProvidedTraits | null;
7
11
  isUserIdentified?: boolean;
12
+ initialView?: WidgetView;
13
+ initialTickets?: Ticket[];
14
+ hasMultipleTickets?: boolean;
8
15
  onSendMessage: (message: string) => Promise<void>;
9
16
  onStateChange?: (state: ConversationsWidgetState) => void;
10
17
  onIdentify?: (traits: UserProvidedTraits) => void;
18
+ onSelectTicket?: (ticketId: string) => void;
19
+ onNewConversation?: () => void;
20
+ onBackToTickets?: () => void;
21
+ onViewChange?: (view: WidgetView) => void;
11
22
  }
12
23
  interface WidgetState {
13
24
  state: ConversationsWidgetState;
25
+ view: WidgetView;
14
26
  messages: Message[];
27
+ tickets: Ticket[];
28
+ ticketsLoading: boolean;
15
29
  inputValue: string;
16
30
  isLoading: boolean;
17
31
  error: string | null;
@@ -21,6 +35,7 @@ interface WidgetState {
21
35
  formEmailError: string | null;
22
36
  userTraits: UserProvidedTraits | null;
23
37
  unreadCount: number;
38
+ hasMultipleTickets: boolean;
24
39
  }
25
40
  export declare class ConversationsWidget extends Component<WidgetProps, WidgetState> {
26
41
  private _messagesEndRef;
@@ -37,6 +52,9 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
37
52
  private _focusInput;
38
53
  private _handleToggleOpen;
39
54
  private _handleClose;
55
+ private _handleSelectTicket;
56
+ private _handleNewConversation;
57
+ private _handleBackToTickets;
40
58
  private _handleInputChange;
41
59
  private _handleKeyPress;
42
60
  private _handleFormNameChange;
@@ -44,7 +62,6 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
44
62
  private _validateEmail;
45
63
  private _handleFormSubmit;
46
64
  private _handleSendMessage;
47
- private _formatTime;
48
65
  /**
49
66
  * Public method to add messages from outside
50
67
  */
@@ -74,8 +91,32 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
74
91
  * Set the unread message count (called by manager)
75
92
  */
76
93
  setUnreadCount(count: number): void;
94
+ /**
95
+ * Update the tickets list (called by manager during polling)
96
+ */
97
+ updateTickets(tickets: Ticket[]): void;
98
+ /**
99
+ * Set the current view (tickets list or messages)
100
+ */
101
+ setView(view: WidgetView): void;
102
+ /**
103
+ * Get the current view
104
+ */
105
+ getView(): WidgetView;
106
+ /**
107
+ * Set tickets loading state
108
+ */
109
+ setTicketsLoading(loading: boolean): void;
110
+ /**
111
+ * Clear messages (used when switching tickets or starting new conversation)
112
+ * @param addGreeting - If true, adds the greeting message after clearing
113
+ */
114
+ clearMessages(addGreeting?: boolean): void;
77
115
  private _renderIdentificationForm;
78
116
  private _renderMessage;
117
+ private _renderBackButton;
118
+ private _renderTicketList;
119
+ private _renderMessages;
79
120
  render(): h.JSX.Element;
80
121
  }
81
122
  export {};