posthog-js 1.372.1 → 1.372.2
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.
- package/dist/array.full.es5.js +1 -1
- package/dist/array.full.js +1 -1
- package/dist/array.full.no-external.js +1 -1
- package/dist/array.js +1 -1
- package/dist/array.no-external.js +1 -1
- package/dist/conversations.js +1 -1
- package/dist/conversations.js.map +1 -1
- package/dist/customizations.full.js +1 -1
- package/dist/default-extensions.js +1 -1
- package/dist/extension-bundles.js +1 -1
- package/dist/lazy-recorder.js +1 -1
- package/dist/main.js +1 -1
- package/dist/module.full.js +1 -1
- package/dist/module.full.no-external.js +1 -1
- package/dist/module.js +1 -1
- package/dist/module.no-external.js +1 -1
- package/dist/module.slim.js +1 -1
- package/dist/module.slim.no-external.js +1 -1
- package/dist/posthog-recorder.js +1 -1
- package/dist/src/extensions/conversations/external/components/ConversationsWidget.d.ts +0 -2
- package/dist/src/extensions/conversations/external/components/MessagesView.d.ts +1 -2
- package/dist/src/extensions/conversations/external/components/styles.d.ts +1 -1
- package/lib/package.json +1 -1
- package/lib/src/extensions/conversations/external/components/ConversationsWidget.d.ts +0 -2
- package/lib/src/extensions/conversations/external/components/ConversationsWidget.js +3 -12
- package/lib/src/extensions/conversations/external/components/ConversationsWidget.js.map +1 -1
- package/lib/src/extensions/conversations/external/components/MessagesView.d.ts +1 -2
- package/lib/src/extensions/conversations/external/components/MessagesView.js +2 -2
- package/lib/src/extensions/conversations/external/components/MessagesView.js.map +1 -1
- package/lib/src/extensions/conversations/external/components/OpenChatButton.js +0 -2
- package/lib/src/extensions/conversations/external/components/OpenChatButton.js.map +1 -1
- package/lib/src/extensions/conversations/external/components/styles.d.ts +1 -1
- package/lib/src/extensions/conversations/external/components/styles.js +2 -2
- package/lib/src/extensions/conversations/external/components/styles.js.map +1 -1
- package/lib/src/extensions/conversations/external/index.js +3 -1
- package/lib/src/extensions/conversations/external/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -46,7 +46,6 @@ interface WidgetState {
|
|
|
46
46
|
}
|
|
47
47
|
export declare class ConversationsWidget extends Component<WidgetProps, WidgetState> {
|
|
48
48
|
private _messagesEndRef;
|
|
49
|
-
private _inputRef;
|
|
50
49
|
constructor(props: WidgetProps);
|
|
51
50
|
/**
|
|
52
51
|
* Check if we need to show the identification form
|
|
@@ -56,7 +55,6 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
|
|
|
56
55
|
componentDidUpdate(_prevProps: WidgetProps, prevState: WidgetState): void;
|
|
57
56
|
private _addGreetingMessage;
|
|
58
57
|
private _scrollToBottom;
|
|
59
|
-
private _focusInput;
|
|
60
58
|
private _handleToggleOpen;
|
|
61
59
|
private _handleClose;
|
|
62
60
|
private _handleSelectTicket;
|
|
@@ -15,7 +15,6 @@ interface MessagesViewProps {
|
|
|
15
15
|
onSendMessage: () => void;
|
|
16
16
|
onStartNewConversation: () => void;
|
|
17
17
|
messagesEndRef: (el: HTMLDivElement | null) => void;
|
|
18
|
-
inputRef: (el: HTMLTextAreaElement | null) => void;
|
|
19
18
|
}
|
|
20
|
-
export declare function MessagesView({ styles, primaryColor, placeholderText, messages, inputValue, isLoading, error, isResolved, onInputChange, onKeyDown, onSendMessage, onStartNewConversation, messagesEndRef,
|
|
19
|
+
export declare function MessagesView({ styles, primaryColor, placeholderText, messages, inputValue, isLoading, error, isResolved, onInputChange, onKeyDown, onSendMessage, onStartNewConversation, messagesEndRef, }: MessagesViewProps): h.JSX.Element;
|
|
21
20
|
export {};
|
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "posthog-js",
|
|
3
|
-
"version": "1.372.
|
|
3
|
+
"version": "1.372.2",
|
|
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": "engineering@posthog.com",
|
|
@@ -46,7 +46,6 @@ interface WidgetState {
|
|
|
46
46
|
}
|
|
47
47
|
export declare class ConversationsWidget extends Component<WidgetProps, WidgetState> {
|
|
48
48
|
private _messagesEndRef;
|
|
49
|
-
private _inputRef;
|
|
50
49
|
constructor(props: WidgetProps);
|
|
51
50
|
/**
|
|
52
51
|
* Check if we need to show the identification form
|
|
@@ -56,7 +55,6 @@ export declare class ConversationsWidget extends Component<WidgetProps, WidgetSt
|
|
|
56
55
|
componentDidUpdate(_prevProps: WidgetProps, prevState: WidgetState): void;
|
|
57
56
|
private _addGreetingMessage;
|
|
58
57
|
private _scrollToBottom;
|
|
59
|
-
private _focusInput;
|
|
60
58
|
private _handleToggleOpen;
|
|
61
59
|
private _handleClose;
|
|
62
60
|
private _handleSelectTicket;
|
|
@@ -105,7 +105,6 @@ var ConversationsWidget = /** @class */ (function (_super) {
|
|
|
105
105
|
function ConversationsWidget(props) {
|
|
106
106
|
var _this = _super.call(this, props) || this;
|
|
107
107
|
_this._messagesEndRef = null;
|
|
108
|
-
_this._inputRef = null;
|
|
109
108
|
_this._handleToggleOpen = function () {
|
|
110
109
|
_this.setState(function (prevState) { return ({
|
|
111
110
|
state: prevState.state === 'open' ? 'closed' : 'open',
|
|
@@ -373,9 +372,8 @@ var ConversationsWidget = /** @class */ (function (_super) {
|
|
|
373
372
|
if (this.state.state !== prevState.state && this.props.onStateChange) {
|
|
374
373
|
this.props.onStateChange(this.state.state);
|
|
375
374
|
}
|
|
376
|
-
//
|
|
375
|
+
// Scroll to bottom when opening
|
|
377
376
|
if (this.state.state === 'open' && prevState.state !== 'open') {
|
|
378
|
-
this._focusInput();
|
|
379
377
|
this._scrollToBottom();
|
|
380
378
|
}
|
|
381
379
|
};
|
|
@@ -395,11 +393,6 @@ var ConversationsWidget = /** @class */ (function (_super) {
|
|
|
395
393
|
this._messagesEndRef.scrollIntoView({ behavior: 'smooth' });
|
|
396
394
|
}
|
|
397
395
|
};
|
|
398
|
-
ConversationsWidget.prototype._focusInput = function () {
|
|
399
|
-
if (this._inputRef) {
|
|
400
|
-
this._inputRef.focus();
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
396
|
ConversationsWidget.prototype._validateEmail = function (email) {
|
|
404
397
|
// Basic email validation
|
|
405
398
|
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
@@ -546,8 +539,6 @@ var ConversationsWidget = /** @class */ (function (_super) {
|
|
|
546
539
|
var _this = this;
|
|
547
540
|
return ((0, jsx_runtime_1.jsx)(MessagesView_1.MessagesView, { styles: styles, primaryColor: primaryColor, placeholderText: placeholderText, messages: this.state.messages, inputValue: this.state.inputValue, isLoading: this.state.isLoading, error: this.state.error, isResolved: this.state.isCurrentTicketResolved, onInputChange: this._handleInputChange, onKeyDown: this._handleKeyPress, onSendMessage: this._handleSendMessage, onStartNewConversation: this._handleNewConversation, messagesEndRef: function (el) {
|
|
548
541
|
_this._messagesEndRef = el;
|
|
549
|
-
}, inputRef: function (el) {
|
|
550
|
-
_this._inputRef = el;
|
|
551
542
|
} }));
|
|
552
543
|
};
|
|
553
544
|
ConversationsWidget.prototype._renderRestoreRequestView = function (styles) {
|
|
@@ -563,9 +554,9 @@ var ConversationsWidget = /** @class */ (function (_super) {
|
|
|
563
554
|
case 'restore_request':
|
|
564
555
|
return 'Restore conversations';
|
|
565
556
|
case 'identification':
|
|
566
|
-
return 'Support
|
|
557
|
+
return 'Support chat';
|
|
567
558
|
case 'messages':
|
|
568
|
-
return 'Support
|
|
559
|
+
return 'Support chat';
|
|
569
560
|
}
|
|
570
561
|
};
|
|
571
562
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationsWidget.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/ConversationsWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { h, Component } from 'preact'\nimport {\n ConversationsRemoteConfig,\n Message,\n ConversationsWidgetState,\n RequestRestoreLinkResponse,\n UserProvidedTraits,\n Ticket,\n} from '../../../../posthog-conversations-types'\nimport { createLogger } from '../../../../utils/logger'\nimport { getStyles } from './styles'\nimport { OpenChatButton } from './OpenChatButton'\nimport { CloseChatButton } from './CloseChatButton'\nimport { TicketListView } from './TicketListView'\nimport { IdentificationFormView } from './IdentificationFormView'\nimport { RestoreRequestView } from './RestoreRequestView'\nimport { MessagesView } from './MessagesView'\n\nconst logger = createLogger('[ConversationsWidget]')\n\n/**\n * Type for the current view in the widget\n */\nexport type WidgetView = 'tickets' | 'messages' | 'restore_request' | 'identification'\n\ninterface WidgetProps {\n config: ConversationsRemoteConfig\n initialState?: ConversationsWidgetState\n initialUserTraits?: UserProvidedTraits | null\n isUserIdentified?: boolean\n isIdentityMode?: boolean\n initialView?: WidgetView\n initialTickets?: Ticket[]\n showTicketList?: boolean\n onSendMessage: (message: string) => Promise<void>\n onStateChange?: (state: ConversationsWidgetState) => void\n onIdentify?: (traits: UserProvidedTraits) => void\n onRequestRestoreLink?: (email: string) => Promise<RequestRestoreLinkResponse>\n onSelectTicket?: (ticketId: string) => void\n onNewConversation?: () => void\n onBackToTickets?: () => void\n onViewChange?: (view: WidgetView) => void\n}\n\ninterface WidgetState {\n state: ConversationsWidgetState\n view: WidgetView\n messages: Message[]\n tickets: Ticket[]\n ticketsLoading: boolean\n inputValue: string\n isLoading: boolean\n error: string | null\n formName: string\n formEmail: string\n formEmailError: string | null\n userTraits: UserProvidedTraits | null\n unreadCount: number\n showTicketList: boolean\n isCurrentTicketResolved: boolean\n isIdentityMode: boolean\n restoreEmail: string\n restoreEmailError: string | null\n restoreRequestLoading: boolean\n restoreRequestSuccess: boolean\n}\n\nexport class ConversationsWidget extends Component<WidgetProps, WidgetState> {\n private _messagesEndRef: HTMLDivElement | null = null\n private _inputRef: HTMLTextAreaElement | null = null\n\n constructor(props: WidgetProps) {\n super(props)\n\n const isIdentityMode = props.isIdentityMode || false\n\n // Determine if we need to show the identification form\n const userTraits = props.initialUserTraits || null\n const needsIdentification = this._needsIdentification(\n props.config,\n userTraits,\n props.isUserIdentified,\n isIdentityMode\n )\n\n // If identification is needed, start with that view; otherwise use the provided initial view\n const initialView = needsIdentification ? 'identification' : props.initialView || 'messages'\n\n this.state = {\n state: props.initialState || 'closed',\n view: initialView,\n messages: [],\n tickets: props.initialTickets || [],\n ticketsLoading: false,\n inputValue: '',\n isLoading: false,\n error: null,\n formName: userTraits?.name || '',\n formEmail: userTraits?.email || '',\n formEmailError: null,\n userTraits,\n unreadCount: 0,\n showTicketList: props.showTicketList || false,\n isCurrentTicketResolved: false,\n isIdentityMode,\n restoreEmail: userTraits?.email || '',\n restoreEmailError: null,\n restoreRequestLoading: false,\n restoreRequestSuccess: false,\n }\n }\n\n /**\n * Check if we need to show the identification form\n */\n private _needsIdentification(\n config: ConversationsRemoteConfig,\n traits: UserProvidedTraits | null,\n isUserIdentified?: boolean,\n isIdentityMode?: boolean\n ): boolean {\n // Server-verified identity mode -- identity is already established\n if (isIdentityMode) {\n return false\n }\n\n // If user is already identified via PostHog, no form needed\n // They've called posthog.identify() so we have their identity\n if (isUserIdentified) {\n return false\n }\n\n // If requireEmail is not set, no identification needed\n if (!config.requireEmail) {\n return false\n }\n\n // If we already have an email, no form needed\n if (traits?.email) {\n return false\n }\n\n return true\n }\n\n componentDidMount() {\n // Add greeting message if no messages exist and we're in message view\n if (this.state.view === 'messages' && this.state.messages.length === 0 && this.props.config.greetingText) {\n this._addGreetingMessage()\n }\n }\n\n componentDidUpdate(_prevProps: WidgetProps, prevState: WidgetState) {\n // Scroll to bottom when messages change\n if (this.state.messages.length !== prevState.messages.length) {\n this._scrollToBottom()\n }\n\n // Notify parent of state changes\n if (this.state.state !== prevState.state && this.props.onStateChange) {\n this.props.onStateChange(this.state.state)\n }\n\n // Focus input and scroll to bottom when opening\n if (this.state.state === 'open' && prevState.state !== 'open') {\n this._focusInput()\n this._scrollToBottom()\n }\n }\n\n private _addGreetingMessage() {\n const greetingMessage: Message = {\n id: 'greeting',\n content: this.props.config.greetingText || 'Hi! How can we help?',\n author_type: 'AI',\n author_name: 'Support',\n created_at: new Date().toISOString(),\n is_private: false,\n }\n this.setState({ messages: [greetingMessage] })\n }\n\n private _scrollToBottom() {\n if (this._messagesEndRef) {\n this._messagesEndRef.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n private _focusInput() {\n if (this._inputRef) {\n this._inputRef.focus()\n }\n }\n\n private _handleToggleOpen = () => {\n this.setState((prevState) => ({\n state: prevState.state === 'open' ? 'closed' : 'open',\n }))\n }\n\n private _handleClose = () => {\n this.setState({ state: 'closed' })\n }\n\n private _handleSelectTicket = (ticketId: string) => {\n if (this.props.onSelectTicket) {\n this.props.onSelectTicket(ticketId)\n }\n }\n\n private _handleNewConversation = () => {\n if (this.props.onNewConversation) {\n this.props.onNewConversation()\n }\n }\n\n private _handleBackToTickets = () => {\n if (this.props.onBackToTickets) {\n this.props.onBackToTickets()\n }\n }\n\n private _handleOpenRestoreRequest = () => {\n this.setState((prevState) => ({\n view: 'restore_request',\n restoreEmail: prevState.restoreEmail || prevState.userTraits?.email || '',\n restoreEmailError: null,\n restoreRequestSuccess: false,\n }))\n if (this.props.onViewChange) {\n this.props.onViewChange('restore_request')\n }\n }\n\n private _handleCloseRestoreRequest = () => {\n const returnView = this.state.showTicketList ? 'tickets' : 'messages'\n this.setState({ view: returnView, restoreEmailError: null, restoreRequestSuccess: false })\n if (this.props.onViewChange) {\n this.props.onViewChange(returnView)\n }\n }\n\n private _handleInputChange = (e: Event) => {\n const target = e.target as HTMLTextAreaElement\n this.setState({ inputValue: target.value })\n }\n\n private _handleKeyPress = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n this._handleSendMessage()\n }\n }\n\n // Identification form handlers\n private _handleFormNameChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n this.setState({ formName: target.value })\n }\n\n private _handleFormEmailChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n this.setState({ formEmail: target.value, formEmailError: null })\n }\n\n private _handleRestoreEmailChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n this.setState({\n restoreEmail: target.value,\n restoreEmailError: null,\n restoreRequestSuccess: false,\n })\n }\n\n private _validateEmail(email: string): boolean {\n // Basic email validation\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n }\n\n private _handleFormSubmit = (e: Event) => {\n e.preventDefault()\n\n const { formEmail, formName } = this.state\n const { config, onIdentify } = this.props\n\n // Validate email if required\n if (config.requireEmail && !formEmail.trim()) {\n this.setState({ formEmailError: 'Email is required' })\n return\n }\n\n if (formEmail.trim() && !this._validateEmail(formEmail.trim())) {\n this.setState({ formEmailError: 'Please enter a valid email address' })\n return\n }\n\n // Create traits object\n const traits: UserProvidedTraits = {}\n if (formName.trim()) {\n traits.name = formName.trim()\n }\n if (formEmail.trim()) {\n traits.email = formEmail.trim()\n }\n\n // Navigate to appropriate view after identification\n const nextView = this.state.showTicketList ? 'tickets' : 'messages'\n\n // Update state and notify parent\n this.setState({\n userTraits: traits,\n view: nextView,\n })\n\n if (onIdentify) {\n onIdentify(traits)\n }\n\n if (this.props.onViewChange) {\n this.props.onViewChange(nextView)\n }\n }\n\n private _handleRestoreRequestSubmit = async (e: Event) => {\n e.preventDefault()\n\n if (!this.props.onRequestRestoreLink) {\n return\n }\n\n const email = this.state.restoreEmail.trim()\n if (!email) {\n this.setState({ restoreEmailError: 'Email is required' })\n return\n }\n\n if (!this._validateEmail(email)) {\n this.setState({ restoreEmailError: 'Please enter a valid email address' })\n return\n }\n\n this.setState({\n restoreRequestLoading: true,\n restoreEmailError: null,\n })\n\n try {\n await this.props.onRequestRestoreLink(email)\n this.setState({\n restoreRequestLoading: false,\n restoreRequestSuccess: true,\n })\n } catch (error) {\n logger.error('Failed to request restore link', error)\n this.setState({\n restoreRequestLoading: false,\n restoreEmailError: error instanceof Error ? error.message : 'Failed to request restore link',\n })\n }\n }\n\n private _handleSendMessage = async () => {\n const { inputValue } = this.state\n const trimmedMessage = inputValue.trim()\n\n if (!trimmedMessage) {\n return\n }\n\n // Add user message to UI immediately\n const userMessage: Message = {\n id: `temp-${Date.now()}`,\n content: trimmedMessage,\n author_type: 'customer',\n author_name: 'You',\n created_at: new Date().toISOString(),\n is_private: false,\n }\n\n this.setState({\n messages: [...this.state.messages, userMessage],\n inputValue: '',\n isLoading: true,\n error: null,\n })\n\n try {\n await this.props.onSendMessage(trimmedMessage)\n // Success - message will be updated via addMessage()\n this.setState({ isLoading: false })\n } catch (error) {\n logger.error('Failed to send message', error)\n this.setState((prevState) => ({\n isLoading: false,\n error: error instanceof Error ? error.message : 'Failed to send message',\n messages: prevState.messages.filter((m) => m.id !== userMessage.id),\n }))\n }\n }\n\n /**\n * Public method to add messages from outside\n */\n addMessages(messages: Message[]) {\n this.setState((prevState) => {\n // Filter out duplicates\n const existingIds = new Set(prevState.messages.map((m) => m.id))\n const newMessages = messages.filter((m) => !existingIds.has(m.id))\n\n if (newMessages.length > 0) {\n return {\n messages: [...prevState.messages, ...newMessages],\n }\n }\n return null\n })\n }\n\n /**\n * Public method to show the widget\n */\n show() {\n this.setState({ state: 'open' })\n }\n\n /**\n * Public method to hide the widget\n */\n hide() {\n this.setState({ state: 'closed' })\n }\n\n /**\n * Get user traits (either provided via form or from props)\n */\n getUserTraits(): UserProvidedTraits | null {\n return this.state.userTraits\n }\n\n /**\n * Called when user identifies via posthog.identify()\n * Navigates away from identification form since we now know who they are\n */\n setUserIdentified(): void {\n if (this.state.view === 'identification') {\n const nextView = this.state.showTicketList ? 'tickets' : 'messages'\n this.setState({ view: nextView })\n if (this.props.onViewChange) {\n this.props.onViewChange(nextView)\n }\n }\n }\n\n /**\n * Set the unread message count (called by manager)\n */\n setUnreadCount(count: number): void {\n this.setState({ unreadCount: count })\n }\n\n /**\n * Update the tickets list (called by manager during polling)\n */\n updateTickets(tickets: Ticket[], showTicketList: boolean): void {\n this.setState({\n tickets,\n ticketsLoading: false,\n showTicketList,\n })\n }\n\n /**\n * Set whether the current ticket (if any) is in the resolved state.\n * Called by the manager whenever the current ticket or tickets list changes.\n */\n setCurrentTicketResolved(resolved: boolean): void {\n this.setState({ isCurrentTicketResolved: resolved })\n }\n\n /**\n * Set the current view (tickets list or messages)\n */\n setView(view: WidgetView): void {\n this.setState({ view })\n if (this.props.onViewChange) {\n this.props.onViewChange(view)\n }\n }\n\n /**\n * Get the current view\n */\n getView(): WidgetView {\n return this.state.view\n }\n\n /**\n * Set tickets loading state\n */\n setTicketsLoading(loading: boolean): void {\n this.setState({ ticketsLoading: loading })\n }\n\n /**\n * Update identity mode state (called by manager on setIdentity/clearIdentity)\n */\n setIdentityMode(isIdentityMode: boolean): void {\n let nextView: WidgetView | undefined\n this.setState(\n (prevState) => {\n const update: Partial<WidgetState> = { isIdentityMode }\n const viewNeedsReset =\n prevState.view === 'identification' ||\n prevState.view === 'restore_request' ||\n prevState.view === 'messages'\n if (viewNeedsReset) {\n nextView = prevState.showTicketList ? 'tickets' : 'messages'\n update.view = nextView\n }\n return update as WidgetState\n },\n () => {\n if (nextView && this.props.onViewChange) {\n this.props.onViewChange(nextView)\n }\n }\n )\n }\n\n /**\n * Clear messages (used when switching tickets or starting new conversation)\n * @param addGreeting - If true, adds the greeting message after clearing\n */\n clearMessages(addGreeting: boolean = false): void {\n this.setState({ messages: [] }, () => {\n if (addGreeting && this.props.config.greetingText) {\n this._addGreetingMessage()\n }\n })\n }\n\n private _renderIdentificationForm(styles: ReturnType<typeof getStyles>) {\n return (\n <IdentificationFormView\n config={this.props.config}\n styles={styles}\n formName={this.state.formName}\n formEmail={this.state.formEmail}\n formEmailError={this.state.formEmailError}\n onNameChange={this._handleFormNameChange}\n onEmailChange={this._handleFormEmailChange}\n onSubmit={this._handleFormSubmit}\n />\n )\n }\n\n private _renderBackButton(styles: ReturnType<typeof getStyles>) {\n const onClick =\n this.state.view === 'restore_request' ? this._handleCloseRestoreRequest : this._handleBackToTickets\n return (\n <button style={styles.backButton} onClick={onClick} aria-label=\"Back to conversations\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n )\n }\n\n private _renderTicketList(styles: ReturnType<typeof getStyles>) {\n const { tickets, ticketsLoading } = this.state\n\n return (\n <TicketListView\n tickets={tickets}\n isLoading={ticketsLoading}\n styles={styles}\n onSelectTicket={this._handleSelectTicket}\n onNewConversation={this._handleNewConversation}\n onOpenRestoreRequest={this._handleOpenRestoreRequest}\n />\n )\n }\n\n private _renderMessages(styles: ReturnType<typeof getStyles>, primaryColor: string, placeholderText: string) {\n return (\n <MessagesView\n styles={styles}\n primaryColor={primaryColor}\n placeholderText={placeholderText}\n messages={this.state.messages}\n inputValue={this.state.inputValue}\n isLoading={this.state.isLoading}\n error={this.state.error}\n isResolved={this.state.isCurrentTicketResolved}\n onInputChange={this._handleInputChange}\n onKeyDown={this._handleKeyPress}\n onSendMessage={this._handleSendMessage}\n onStartNewConversation={this._handleNewConversation}\n messagesEndRef={(el) => {\n this._messagesEndRef = el\n }}\n inputRef={(el) => {\n this._inputRef = el\n }}\n />\n )\n }\n\n private _renderRestoreRequestView(styles: ReturnType<typeof getStyles>) {\n return (\n <RestoreRequestView\n styles={styles}\n restoreEmail={this.state.restoreEmail}\n restoreEmailError={this.state.restoreEmailError}\n restoreRequestLoading={this.state.restoreRequestLoading}\n restoreRequestSuccess={this.state.restoreRequestSuccess}\n onEmailChange={this._handleRestoreEmailChange}\n onSubmit={this._handleRestoreRequestSubmit}\n />\n )\n }\n\n /**\n * Get the title for the current view\n */\n private _getTitle(view: WidgetView): string {\n switch (view) {\n case 'tickets':\n return 'Conversations'\n case 'restore_request':\n return 'Restore conversations'\n case 'identification':\n return 'Support Chat'\n case 'messages':\n return 'Support Chat'\n }\n }\n\n /**\n * Render the content for the current view\n */\n private _renderViewContent(\n styles: ReturnType<typeof getStyles>,\n primaryColor: string,\n placeholderText: string\n ): h.JSX.Element {\n switch (this.state.view) {\n case 'identification':\n return this._renderIdentificationForm(styles)\n case 'restore_request':\n return this._renderRestoreRequestView(styles)\n case 'tickets':\n return this._renderTicketList(styles)\n case 'messages':\n return this._renderMessages(styles, primaryColor, placeholderText)\n }\n }\n\n render() {\n const { config } = this.props\n const { state, view } = this.state\n const primaryColor = config.color || '#5375ff'\n const widgetPosition = config.widgetPosition || 'bottom_right'\n const placeholderText = config.placeholderText || 'Type your message...'\n const styles = getStyles(primaryColor, widgetPosition)\n\n // Button only (closed state)\n if (state === 'closed') {\n return (\n <OpenChatButton\n primaryColor={primaryColor}\n position={widgetPosition}\n handleToggleOpen={this._handleToggleOpen}\n unreadCount={this.state.unreadCount}\n />\n )\n }\n\n // Open state\n const windowStyle = {\n ...styles.window,\n ...styles.windowOpen,\n }\n\n // Show back button in message view when the ticket list is available, or in restore request view\n const showBackButton = (view === 'messages' && this.state.showTicketList) || view === 'restore_request'\n\n // Show recover footer only in tickets and messages views, and not in identity mode\n const showRecoverFooter = !this.state.isIdentityMode && (view === 'tickets' || view === 'messages')\n\n return (\n <div style={styles.widget}>\n <div style={windowStyle}>\n <div style={styles.header}>\n <div style={showBackButton ? styles.headerWithBack : styles.headerTitle}>\n {showBackButton && this._renderBackButton(styles)}\n <span style={styles.headerTitle}>{this._getTitle(view)}</span>\n </div>\n <div style={styles.headerActions}>\n <CloseChatButton primaryColor={primaryColor} handleClose={this._handleClose} />\n </div>\n </div>\n\n {this._renderViewContent(styles, primaryColor, placeholderText)}\n\n {showRecoverFooter && (\n <div style={styles.recoverFooter}>\n Don't see your previous tickets?{' '}\n <button\n type=\"button\"\n style={styles.recoverFooterLink}\n onClick={this._handleOpenRestoreRequest}\n >\n Recover them here\n </button>\n </div>\n )}\n </div>\n </div>\n )\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ConversationsWidget.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/ConversationsWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { h, Component } from 'preact'\nimport {\n ConversationsRemoteConfig,\n Message,\n ConversationsWidgetState,\n RequestRestoreLinkResponse,\n UserProvidedTraits,\n Ticket,\n} from '../../../../posthog-conversations-types'\nimport { createLogger } from '../../../../utils/logger'\nimport { getStyles } from './styles'\nimport { OpenChatButton } from './OpenChatButton'\nimport { CloseChatButton } from './CloseChatButton'\nimport { TicketListView } from './TicketListView'\nimport { IdentificationFormView } from './IdentificationFormView'\nimport { RestoreRequestView } from './RestoreRequestView'\nimport { MessagesView } from './MessagesView'\n\nconst logger = createLogger('[ConversationsWidget]')\n\n/**\n * Type for the current view in the widget\n */\nexport type WidgetView = 'tickets' | 'messages' | 'restore_request' | 'identification'\n\ninterface WidgetProps {\n config: ConversationsRemoteConfig\n initialState?: ConversationsWidgetState\n initialUserTraits?: UserProvidedTraits | null\n isUserIdentified?: boolean\n isIdentityMode?: boolean\n initialView?: WidgetView\n initialTickets?: Ticket[]\n showTicketList?: boolean\n onSendMessage: (message: string) => Promise<void>\n onStateChange?: (state: ConversationsWidgetState) => void\n onIdentify?: (traits: UserProvidedTraits) => void\n onRequestRestoreLink?: (email: string) => Promise<RequestRestoreLinkResponse>\n onSelectTicket?: (ticketId: string) => void\n onNewConversation?: () => void\n onBackToTickets?: () => void\n onViewChange?: (view: WidgetView) => void\n}\n\ninterface WidgetState {\n state: ConversationsWidgetState\n view: WidgetView\n messages: Message[]\n tickets: Ticket[]\n ticketsLoading: boolean\n inputValue: string\n isLoading: boolean\n error: string | null\n formName: string\n formEmail: string\n formEmailError: string | null\n userTraits: UserProvidedTraits | null\n unreadCount: number\n showTicketList: boolean\n isCurrentTicketResolved: boolean\n isIdentityMode: boolean\n restoreEmail: string\n restoreEmailError: string | null\n restoreRequestLoading: boolean\n restoreRequestSuccess: boolean\n}\n\nexport class ConversationsWidget extends Component<WidgetProps, WidgetState> {\n private _messagesEndRef: HTMLDivElement | null = null\n\n constructor(props: WidgetProps) {\n super(props)\n\n const isIdentityMode = props.isIdentityMode || false\n\n // Determine if we need to show the identification form\n const userTraits = props.initialUserTraits || null\n const needsIdentification = this._needsIdentification(\n props.config,\n userTraits,\n props.isUserIdentified,\n isIdentityMode\n )\n\n // If identification is needed, start with that view; otherwise use the provided initial view\n const initialView = needsIdentification ? 'identification' : props.initialView || 'messages'\n\n this.state = {\n state: props.initialState || 'closed',\n view: initialView,\n messages: [],\n tickets: props.initialTickets || [],\n ticketsLoading: false,\n inputValue: '',\n isLoading: false,\n error: null,\n formName: userTraits?.name || '',\n formEmail: userTraits?.email || '',\n formEmailError: null,\n userTraits,\n unreadCount: 0,\n showTicketList: props.showTicketList || false,\n isCurrentTicketResolved: false,\n isIdentityMode,\n restoreEmail: userTraits?.email || '',\n restoreEmailError: null,\n restoreRequestLoading: false,\n restoreRequestSuccess: false,\n }\n }\n\n /**\n * Check if we need to show the identification form\n */\n private _needsIdentification(\n config: ConversationsRemoteConfig,\n traits: UserProvidedTraits | null,\n isUserIdentified?: boolean,\n isIdentityMode?: boolean\n ): boolean {\n // Server-verified identity mode -- identity is already established\n if (isIdentityMode) {\n return false\n }\n\n // If user is already identified via PostHog, no form needed\n // They've called posthog.identify() so we have their identity\n if (isUserIdentified) {\n return false\n }\n\n // If requireEmail is not set, no identification needed\n if (!config.requireEmail) {\n return false\n }\n\n // If we already have an email, no form needed\n if (traits?.email) {\n return false\n }\n\n return true\n }\n\n componentDidMount() {\n // Add greeting message if no messages exist and we're in message view\n if (this.state.view === 'messages' && this.state.messages.length === 0 && this.props.config.greetingText) {\n this._addGreetingMessage()\n }\n }\n\n componentDidUpdate(_prevProps: WidgetProps, prevState: WidgetState) {\n // Scroll to bottom when messages change\n if (this.state.messages.length !== prevState.messages.length) {\n this._scrollToBottom()\n }\n\n // Notify parent of state changes\n if (this.state.state !== prevState.state && this.props.onStateChange) {\n this.props.onStateChange(this.state.state)\n }\n\n // Scroll to bottom when opening\n if (this.state.state === 'open' && prevState.state !== 'open') {\n this._scrollToBottom()\n }\n }\n\n private _addGreetingMessage() {\n const greetingMessage: Message = {\n id: 'greeting',\n content: this.props.config.greetingText || 'Hi! How can we help?',\n author_type: 'AI',\n author_name: 'Support',\n created_at: new Date().toISOString(),\n is_private: false,\n }\n this.setState({ messages: [greetingMessage] })\n }\n\n private _scrollToBottom() {\n if (this._messagesEndRef) {\n this._messagesEndRef.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n private _handleToggleOpen = () => {\n this.setState((prevState) => ({\n state: prevState.state === 'open' ? 'closed' : 'open',\n }))\n }\n\n private _handleClose = () => {\n this.setState({ state: 'closed' })\n }\n\n private _handleSelectTicket = (ticketId: string) => {\n if (this.props.onSelectTicket) {\n this.props.onSelectTicket(ticketId)\n }\n }\n\n private _handleNewConversation = () => {\n if (this.props.onNewConversation) {\n this.props.onNewConversation()\n }\n }\n\n private _handleBackToTickets = () => {\n if (this.props.onBackToTickets) {\n this.props.onBackToTickets()\n }\n }\n\n private _handleOpenRestoreRequest = () => {\n this.setState((prevState) => ({\n view: 'restore_request',\n restoreEmail: prevState.restoreEmail || prevState.userTraits?.email || '',\n restoreEmailError: null,\n restoreRequestSuccess: false,\n }))\n if (this.props.onViewChange) {\n this.props.onViewChange('restore_request')\n }\n }\n\n private _handleCloseRestoreRequest = () => {\n const returnView = this.state.showTicketList ? 'tickets' : 'messages'\n this.setState({ view: returnView, restoreEmailError: null, restoreRequestSuccess: false })\n if (this.props.onViewChange) {\n this.props.onViewChange(returnView)\n }\n }\n\n private _handleInputChange = (e: Event) => {\n const target = e.target as HTMLTextAreaElement\n this.setState({ inputValue: target.value })\n }\n\n private _handleKeyPress = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n this._handleSendMessage()\n }\n }\n\n // Identification form handlers\n private _handleFormNameChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n this.setState({ formName: target.value })\n }\n\n private _handleFormEmailChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n this.setState({ formEmail: target.value, formEmailError: null })\n }\n\n private _handleRestoreEmailChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n this.setState({\n restoreEmail: target.value,\n restoreEmailError: null,\n restoreRequestSuccess: false,\n })\n }\n\n private _validateEmail(email: string): boolean {\n // Basic email validation\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n }\n\n private _handleFormSubmit = (e: Event) => {\n e.preventDefault()\n\n const { formEmail, formName } = this.state\n const { config, onIdentify } = this.props\n\n // Validate email if required\n if (config.requireEmail && !formEmail.trim()) {\n this.setState({ formEmailError: 'Email is required' })\n return\n }\n\n if (formEmail.trim() && !this._validateEmail(formEmail.trim())) {\n this.setState({ formEmailError: 'Please enter a valid email address' })\n return\n }\n\n // Create traits object\n const traits: UserProvidedTraits = {}\n if (formName.trim()) {\n traits.name = formName.trim()\n }\n if (formEmail.trim()) {\n traits.email = formEmail.trim()\n }\n\n // Navigate to appropriate view after identification\n const nextView = this.state.showTicketList ? 'tickets' : 'messages'\n\n // Update state and notify parent\n this.setState({\n userTraits: traits,\n view: nextView,\n })\n\n if (onIdentify) {\n onIdentify(traits)\n }\n\n if (this.props.onViewChange) {\n this.props.onViewChange(nextView)\n }\n }\n\n private _handleRestoreRequestSubmit = async (e: Event) => {\n e.preventDefault()\n\n if (!this.props.onRequestRestoreLink) {\n return\n }\n\n const email = this.state.restoreEmail.trim()\n if (!email) {\n this.setState({ restoreEmailError: 'Email is required' })\n return\n }\n\n if (!this._validateEmail(email)) {\n this.setState({ restoreEmailError: 'Please enter a valid email address' })\n return\n }\n\n this.setState({\n restoreRequestLoading: true,\n restoreEmailError: null,\n })\n\n try {\n await this.props.onRequestRestoreLink(email)\n this.setState({\n restoreRequestLoading: false,\n restoreRequestSuccess: true,\n })\n } catch (error) {\n logger.error('Failed to request restore link', error)\n this.setState({\n restoreRequestLoading: false,\n restoreEmailError: error instanceof Error ? error.message : 'Failed to request restore link',\n })\n }\n }\n\n private _handleSendMessage = async () => {\n const { inputValue } = this.state\n const trimmedMessage = inputValue.trim()\n\n if (!trimmedMessage) {\n return\n }\n\n // Add user message to UI immediately\n const userMessage: Message = {\n id: `temp-${Date.now()}`,\n content: trimmedMessage,\n author_type: 'customer',\n author_name: 'You',\n created_at: new Date().toISOString(),\n is_private: false,\n }\n\n this.setState({\n messages: [...this.state.messages, userMessage],\n inputValue: '',\n isLoading: true,\n error: null,\n })\n\n try {\n await this.props.onSendMessage(trimmedMessage)\n // Success - message will be updated via addMessage()\n this.setState({ isLoading: false })\n } catch (error) {\n logger.error('Failed to send message', error)\n this.setState((prevState) => ({\n isLoading: false,\n error: error instanceof Error ? error.message : 'Failed to send message',\n messages: prevState.messages.filter((m) => m.id !== userMessage.id),\n }))\n }\n }\n\n /**\n * Public method to add messages from outside\n */\n addMessages(messages: Message[]) {\n this.setState((prevState) => {\n // Filter out duplicates\n const existingIds = new Set(prevState.messages.map((m) => m.id))\n const newMessages = messages.filter((m) => !existingIds.has(m.id))\n\n if (newMessages.length > 0) {\n return {\n messages: [...prevState.messages, ...newMessages],\n }\n }\n return null\n })\n }\n\n /**\n * Public method to show the widget\n */\n show() {\n this.setState({ state: 'open' })\n }\n\n /**\n * Public method to hide the widget\n */\n hide() {\n this.setState({ state: 'closed' })\n }\n\n /**\n * Get user traits (either provided via form or from props)\n */\n getUserTraits(): UserProvidedTraits | null {\n return this.state.userTraits\n }\n\n /**\n * Called when user identifies via posthog.identify()\n * Navigates away from identification form since we now know who they are\n */\n setUserIdentified(): void {\n if (this.state.view === 'identification') {\n const nextView = this.state.showTicketList ? 'tickets' : 'messages'\n this.setState({ view: nextView })\n if (this.props.onViewChange) {\n this.props.onViewChange(nextView)\n }\n }\n }\n\n /**\n * Set the unread message count (called by manager)\n */\n setUnreadCount(count: number): void {\n this.setState({ unreadCount: count })\n }\n\n /**\n * Update the tickets list (called by manager during polling)\n */\n updateTickets(tickets: Ticket[], showTicketList: boolean): void {\n this.setState({\n tickets,\n ticketsLoading: false,\n showTicketList,\n })\n }\n\n /**\n * Set whether the current ticket (if any) is in the resolved state.\n * Called by the manager whenever the current ticket or tickets list changes.\n */\n setCurrentTicketResolved(resolved: boolean): void {\n this.setState({ isCurrentTicketResolved: resolved })\n }\n\n /**\n * Set the current view (tickets list or messages)\n */\n setView(view: WidgetView): void {\n this.setState({ view })\n if (this.props.onViewChange) {\n this.props.onViewChange(view)\n }\n }\n\n /**\n * Get the current view\n */\n getView(): WidgetView {\n return this.state.view\n }\n\n /**\n * Set tickets loading state\n */\n setTicketsLoading(loading: boolean): void {\n this.setState({ ticketsLoading: loading })\n }\n\n /**\n * Update identity mode state (called by manager on setIdentity/clearIdentity)\n */\n setIdentityMode(isIdentityMode: boolean): void {\n let nextView: WidgetView | undefined\n this.setState(\n (prevState) => {\n const update: Partial<WidgetState> = { isIdentityMode }\n const viewNeedsReset =\n prevState.view === 'identification' ||\n prevState.view === 'restore_request' ||\n prevState.view === 'messages'\n if (viewNeedsReset) {\n nextView = prevState.showTicketList ? 'tickets' : 'messages'\n update.view = nextView\n }\n return update as WidgetState\n },\n () => {\n if (nextView && this.props.onViewChange) {\n this.props.onViewChange(nextView)\n }\n }\n )\n }\n\n /**\n * Clear messages (used when switching tickets or starting new conversation)\n * @param addGreeting - If true, adds the greeting message after clearing\n */\n clearMessages(addGreeting: boolean = false): void {\n this.setState({ messages: [] }, () => {\n if (addGreeting && this.props.config.greetingText) {\n this._addGreetingMessage()\n }\n })\n }\n\n private _renderIdentificationForm(styles: ReturnType<typeof getStyles>) {\n return (\n <IdentificationFormView\n config={this.props.config}\n styles={styles}\n formName={this.state.formName}\n formEmail={this.state.formEmail}\n formEmailError={this.state.formEmailError}\n onNameChange={this._handleFormNameChange}\n onEmailChange={this._handleFormEmailChange}\n onSubmit={this._handleFormSubmit}\n />\n )\n }\n\n private _renderBackButton(styles: ReturnType<typeof getStyles>) {\n const onClick =\n this.state.view === 'restore_request' ? this._handleCloseRestoreRequest : this._handleBackToTickets\n return (\n <button style={styles.backButton} onClick={onClick} aria-label=\"Back to conversations\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n )\n }\n\n private _renderTicketList(styles: ReturnType<typeof getStyles>) {\n const { tickets, ticketsLoading } = this.state\n\n return (\n <TicketListView\n tickets={tickets}\n isLoading={ticketsLoading}\n styles={styles}\n onSelectTicket={this._handleSelectTicket}\n onNewConversation={this._handleNewConversation}\n onOpenRestoreRequest={this._handleOpenRestoreRequest}\n />\n )\n }\n\n private _renderMessages(styles: ReturnType<typeof getStyles>, primaryColor: string, placeholderText: string) {\n return (\n <MessagesView\n styles={styles}\n primaryColor={primaryColor}\n placeholderText={placeholderText}\n messages={this.state.messages}\n inputValue={this.state.inputValue}\n isLoading={this.state.isLoading}\n error={this.state.error}\n isResolved={this.state.isCurrentTicketResolved}\n onInputChange={this._handleInputChange}\n onKeyDown={this._handleKeyPress}\n onSendMessage={this._handleSendMessage}\n onStartNewConversation={this._handleNewConversation}\n messagesEndRef={(el) => {\n this._messagesEndRef = el\n }}\n />\n )\n }\n\n private _renderRestoreRequestView(styles: ReturnType<typeof getStyles>) {\n return (\n <RestoreRequestView\n styles={styles}\n restoreEmail={this.state.restoreEmail}\n restoreEmailError={this.state.restoreEmailError}\n restoreRequestLoading={this.state.restoreRequestLoading}\n restoreRequestSuccess={this.state.restoreRequestSuccess}\n onEmailChange={this._handleRestoreEmailChange}\n onSubmit={this._handleRestoreRequestSubmit}\n />\n )\n }\n\n /**\n * Get the title for the current view\n */\n private _getTitle(view: WidgetView): string {\n switch (view) {\n case 'tickets':\n return 'Conversations'\n case 'restore_request':\n return 'Restore conversations'\n case 'identification':\n return 'Support chat'\n case 'messages':\n return 'Support chat'\n }\n }\n\n /**\n * Render the content for the current view\n */\n private _renderViewContent(\n styles: ReturnType<typeof getStyles>,\n primaryColor: string,\n placeholderText: string\n ): h.JSX.Element {\n switch (this.state.view) {\n case 'identification':\n return this._renderIdentificationForm(styles)\n case 'restore_request':\n return this._renderRestoreRequestView(styles)\n case 'tickets':\n return this._renderTicketList(styles)\n case 'messages':\n return this._renderMessages(styles, primaryColor, placeholderText)\n }\n }\n\n render() {\n const { config } = this.props\n const { state, view } = this.state\n const primaryColor = config.color || '#5375ff'\n const widgetPosition = config.widgetPosition || 'bottom_right'\n const placeholderText = config.placeholderText || 'Type your message...'\n const styles = getStyles(primaryColor, widgetPosition)\n\n // Button only (closed state)\n if (state === 'closed') {\n return (\n <OpenChatButton\n primaryColor={primaryColor}\n position={widgetPosition}\n handleToggleOpen={this._handleToggleOpen}\n unreadCount={this.state.unreadCount}\n />\n )\n }\n\n // Open state\n const windowStyle = {\n ...styles.window,\n ...styles.windowOpen,\n }\n\n // Show back button in message view when the ticket list is available, or in restore request view\n const showBackButton = (view === 'messages' && this.state.showTicketList) || view === 'restore_request'\n\n // Show recover footer only in tickets and messages views, and not in identity mode\n const showRecoverFooter = !this.state.isIdentityMode && (view === 'tickets' || view === 'messages')\n\n return (\n <div style={styles.widget}>\n <div style={windowStyle}>\n <div style={styles.header}>\n <div style={showBackButton ? styles.headerWithBack : styles.headerTitle}>\n {showBackButton && this._renderBackButton(styles)}\n <span style={styles.headerTitle}>{this._getTitle(view)}</span>\n </div>\n <div style={styles.headerActions}>\n <CloseChatButton primaryColor={primaryColor} handleClose={this._handleClose} />\n </div>\n </div>\n\n {this._renderViewContent(styles, primaryColor, placeholderText)}\n\n {showRecoverFooter && (\n <div style={styles.recoverFooter}>\n Don't see your previous tickets?{' '}\n <button\n type=\"button\"\n style={styles.recoverFooterLink}\n onClick={this._handleOpenRestoreRequest}\n >\n Recover them here\n </button>\n </div>\n )}\n </div>\n </div>\n )\n }\n}\n"]}
|
|
@@ -15,7 +15,6 @@ interface MessagesViewProps {
|
|
|
15
15
|
onSendMessage: () => void;
|
|
16
16
|
onStartNewConversation: () => void;
|
|
17
17
|
messagesEndRef: (el: HTMLDivElement | null) => void;
|
|
18
|
-
inputRef: (el: HTMLTextAreaElement | null) => void;
|
|
19
18
|
}
|
|
20
|
-
export declare function MessagesView({ styles, primaryColor, placeholderText, messages, inputValue, isLoading, error, isResolved, onInputChange, onKeyDown, onSendMessage, onStartNewConversation, messagesEndRef,
|
|
19
|
+
export declare function MessagesView({ styles, primaryColor, placeholderText, messages, inputValue, isLoading, error, isResolved, onInputChange, onKeyDown, onSendMessage, onStartNewConversation, messagesEndRef, }: MessagesViewProps): h.JSX.Element;
|
|
21
20
|
export {};
|
|
@@ -25,7 +25,7 @@ function MessageBubble(_a) {
|
|
|
25
25
|
return ((0, jsx_runtime_1.jsxs)("div", { style: messageStyle, children: [!isCustomer && message.author_name && (0, jsx_runtime_1.jsx)("div", { style: styles.messageAuthor, children: message.author_name }), (0, jsx_runtime_1.jsx)("div", { style: contentStyle, children: (0, jsx_runtime_1.jsx)(RichContent_1.RichContent, { richContent: message.rich_content, content: message.content, isCustomer: isCustomer, primaryColor: primaryColor }) }), (0, jsx_runtime_1.jsx)("div", { style: styles.messageTime, children: (0, utils_1.formatRelativeTime)(message.created_at) })] }, message.id));
|
|
26
26
|
}
|
|
27
27
|
function MessagesView(_a) {
|
|
28
|
-
var styles = _a.styles, primaryColor = _a.primaryColor, placeholderText = _a.placeholderText, messages = _a.messages, inputValue = _a.inputValue, isLoading = _a.isLoading, error = _a.error, isResolved = _a.isResolved, onInputChange = _a.onInputChange, onKeyDown = _a.onKeyDown, onSendMessage = _a.onSendMessage, onStartNewConversation = _a.onStartNewConversation, messagesEndRef = _a.messagesEndRef
|
|
29
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { style: styles.messages, children: [messages.map(function (message) { return ((0, jsx_runtime_1.jsx)(MessageBubble, { message: message, styles: styles, primaryColor: primaryColor }, message.id)); }), (0, jsx_runtime_1.jsx)("div", { ref: messagesEndRef })] }), error && (0, jsx_runtime_1.jsx)("div", { style: styles.error, children: error }), isResolved ? ((0, jsx_runtime_1.jsxs)("div", { style: styles.resolvedBanner, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.resolvedBannerText, children: "This conversation was resolved." }), (0, jsx_runtime_1.jsx)(NewConversationButton_1.NewConversationButton, { styles: styles, onClick: onStartNewConversation })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: styles.inputContainer, children: [(0, jsx_runtime_1.jsx)("textarea", {
|
|
28
|
+
var styles = _a.styles, primaryColor = _a.primaryColor, placeholderText = _a.placeholderText, messages = _a.messages, inputValue = _a.inputValue, isLoading = _a.isLoading, error = _a.error, isResolved = _a.isResolved, onInputChange = _a.onInputChange, onKeyDown = _a.onKeyDown, onSendMessage = _a.onSendMessage, onStartNewConversation = _a.onStartNewConversation, messagesEndRef = _a.messagesEndRef;
|
|
29
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { style: styles.messages, children: [messages.map(function (message) { return ((0, jsx_runtime_1.jsx)(MessageBubble, { message: message, styles: styles, primaryColor: primaryColor }, message.id)); }), (0, jsx_runtime_1.jsx)("div", { ref: messagesEndRef })] }), error && (0, jsx_runtime_1.jsx)("div", { style: styles.error, children: error }), isResolved ? ((0, jsx_runtime_1.jsxs)("div", { style: styles.resolvedBanner, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.resolvedBannerText, children: "This conversation was resolved." }), (0, jsx_runtime_1.jsx)(NewConversationButton_1.NewConversationButton, { styles: styles, onClick: onStartNewConversation })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: styles.inputContainer, children: [(0, jsx_runtime_1.jsx)("textarea", { style: styles.input, placeholder: placeholderText, value: inputValue, onInput: onInputChange, onKeyDown: onKeyDown, rows: 1, disabled: isLoading, autoFocus: true }), (0, jsx_runtime_1.jsx)(SendMessageButton_1.SendMessageButton, { primaryColor: primaryColor, inputValue: inputValue, isLoading: isLoading, handleSendMessage: onSendMessage })] }))] }));
|
|
30
30
|
}
|
|
31
31
|
//# sourceMappingURL=MessagesView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessagesView.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/MessagesView.tsx"],"names":[],"mappings":";;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"MessagesView.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/MessagesView.tsx"],"names":[],"mappings":";;;;;;;;;;;;;AA4DA,oCAqDC;;AA7GD,yDAAuD;AACvD,6CAA2C;AAC3C,iEAA+D;AAC/D,iCAA4C;AAkB5C,SAAS,aAAa,CAAC,EAQtB;QAPG,OAAO,aAAA,EACP,MAAM,YAAA,EACN,YAAY,kBAAA;IAMZ,IAAM,UAAU,GAAG,OAAO,CAAC,WAAW,KAAK,UAAU,CAAA;IACrD,IAAM,YAAY,yBACX,MAAM,CAAC,OAAO,GACd,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CACjE,CAAA;IACD,IAAM,YAAY,yBACX,MAAM,CAAC,cAAc,GACrB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAC/E,CAAA;IAED,OAAO,CACH,iCAAsB,KAAK,EAAE,YAAY,aACpC,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,gCAAK,KAAK,EAAE,MAAM,CAAC,aAAa,YAAG,OAAO,CAAC,WAAW,GAAO,EACpG,gCAAK,KAAK,EAAE,YAAY,YACpB,uBAAC,yBAAW,IACR,WAAW,EAAE,OAAO,CAAC,YAAY,EACjC,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,GAC5B,GACA,EACN,gCAAK,KAAK,EAAE,MAAM,CAAC,WAAW,YAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,UAAU,CAAC,GAAO,KAVxE,OAAO,CAAC,EAAE,CAWd,CACT,CAAA;AACL,CAAC;AAED,SAAgB,YAAY,CAAC,EAcT;QAbhB,MAAM,YAAA,EACN,YAAY,kBAAA,EACZ,eAAe,qBAAA,EACf,QAAQ,cAAA,EACR,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,aAAa,mBAAA,EACb,SAAS,eAAA,EACT,aAAa,mBAAA,EACb,sBAAsB,4BAAA,EACtB,cAAc,oBAAA;IAEd,OAAO,CACH,6DACI,iCAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,aACtB,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,CACvB,uBAAC,aAAa,IAAkB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,IAAxE,OAAO,CAAC,EAAE,CAAkE,CACnG,EAF0B,CAE1B,CAAC,EACF,gCAAK,GAAG,EAAE,cAAc,GAAI,IAC1B,EAEL,KAAK,IAAI,gCAAK,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,KAAK,GAAO,EAEhD,UAAU,CAAC,CAAC,CAAC,CACV,iCAAK,KAAK,EAAE,MAAM,CAAC,cAAc,aAC7B,gCAAK,KAAK,EAAE,MAAM,CAAC,kBAAkB,gDAAuC,EAC5E,uBAAC,6CAAqB,IAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAI,IACxE,CACT,CAAC,CAAC,CAAC,CACA,iCAAK,KAAK,EAAE,MAAM,CAAC,cAAc,aAC7B,qCACI,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,SAAS,EACnB,SAAS,SACX,EACF,uBAAC,qCAAiB,IACd,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,aAAa,GAClC,IACA,CACT,IACF,CACN,CAAA;AACL,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { h, Fragment } from 'preact'\nimport { Message } from '../../../../posthog-conversations-types'\nimport { getStyles } from './styles'\nimport { SendMessageButton } from './SendMessageButton'\nimport { RichContent } from './RichContent'\nimport { NewConversationButton } from './NewConversationButton'\nimport { formatRelativeTime } from './utils'\n\ninterface MessagesViewProps {\n styles: ReturnType<typeof getStyles>\n primaryColor: string\n placeholderText: string\n messages: Message[]\n inputValue: string\n isLoading: boolean\n error: string | null\n isResolved: boolean\n onInputChange: (e: Event) => void\n onKeyDown: (e: KeyboardEvent) => void\n onSendMessage: () => void\n onStartNewConversation: () => void\n messagesEndRef: (el: HTMLDivElement | null) => void\n}\n\nfunction MessageBubble({\n message,\n styles,\n primaryColor,\n}: {\n message: Message\n styles: ReturnType<typeof getStyles>\n primaryColor: string\n}) {\n const isCustomer = message.author_type === 'customer'\n const messageStyle = {\n ...styles.message,\n ...(isCustomer ? styles.messageCustomer : styles.messageAgent),\n }\n const contentStyle = {\n ...styles.messageContent,\n ...(isCustomer ? styles.messageContentCustomer : styles.messageContentAgent),\n }\n\n return (\n <div key={message.id} style={messageStyle}>\n {!isCustomer && message.author_name && <div style={styles.messageAuthor}>{message.author_name}</div>}\n <div style={contentStyle}>\n <RichContent\n richContent={message.rich_content}\n content={message.content}\n isCustomer={isCustomer}\n primaryColor={primaryColor}\n />\n </div>\n <div style={styles.messageTime}>{formatRelativeTime(message.created_at)}</div>\n </div>\n )\n}\n\nexport function MessagesView({\n styles,\n primaryColor,\n placeholderText,\n messages,\n inputValue,\n isLoading,\n error,\n isResolved,\n onInputChange,\n onKeyDown,\n onSendMessage,\n onStartNewConversation,\n messagesEndRef,\n}: MessagesViewProps) {\n return (\n <>\n <div style={styles.messages}>\n {messages.map((message) => (\n <MessageBubble key={message.id} message={message} styles={styles} primaryColor={primaryColor} />\n ))}\n <div ref={messagesEndRef} />\n </div>\n\n {error && <div style={styles.error}>{error}</div>}\n\n {isResolved ? (\n <div style={styles.resolvedBanner}>\n <div style={styles.resolvedBannerText}>This conversation was resolved.</div>\n <NewConversationButton styles={styles} onClick={onStartNewConversation} />\n </div>\n ) : (\n <div style={styles.inputContainer}>\n <textarea\n style={styles.input}\n placeholder={placeholderText}\n value={inputValue}\n onInput={onInputChange}\n onKeyDown={onKeyDown}\n rows={1}\n disabled={isLoading}\n autoFocus\n />\n <SendMessageButton\n primaryColor={primaryColor}\n inputValue={inputValue}\n isLoading={isLoading}\n handleSendMessage={onSendMessage}\n />\n </div>\n )}\n </>\n )\n}\n"]}
|
|
@@ -9,10 +9,8 @@ var OpenChatButton = function (_a) {
|
|
|
9
9
|
var displayCount = unreadCount > 99 ? '99+' : unreadCount.toString();
|
|
10
10
|
return ((0, jsx_runtime_1.jsx)("div", { style: styles.widget, children: (0, jsx_runtime_1.jsxs)("div", { style: styles.buttonContainer, children: [(0, jsx_runtime_1.jsx)("button", { style: styles.button, onClick: handleToggleOpen, "aria-label": unreadCount > 0 ? "Open chat (".concat(unreadCount, " unread)") : 'Open chat', onMouseEnter: function (e) {
|
|
11
11
|
e.currentTarget.style.transform = 'scale(1.05)';
|
|
12
|
-
e.currentTarget.style.boxShadow = '0 6px 20px rgba(0, 0, 0, 0.2)';
|
|
13
12
|
}, onMouseLeave: function (e) {
|
|
14
13
|
e.currentTarget.style.transform = 'scale(1)';
|
|
15
|
-
e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)';
|
|
16
14
|
}, children: (0, jsx_runtime_1.jsx)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, jsx_runtime_1.jsx)("path", { d: "M12 2C6.48 2 2 6.48 2 12C2 13.93 2.6 15.71 3.64 17.18L2.5 21.5L7.04 20.42C8.46 21.28 10.17 21.75 12 21.75C17.52 21.75 22 17.27 22 11.75C22 6.23 17.52 2 12 2Z", fill: "currentColor" }) }) }), unreadCount > 0 && (0, jsx_runtime_1.jsx)("div", { style: styles.unreadBadge, children: displayCount })] }) }));
|
|
17
15
|
};
|
|
18
16
|
exports.OpenChatButton = OpenChatButton;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenChatButton.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/OpenChatButton.tsx"],"names":[],"mappings":";;;;AACA,mCAAoC;AAS7B,IAAM,cAAc,GAAG,UAAC,EAKT;QAJlB,YAAY,kBAAA,EACZ,gBAAyB,EAAzB,QAAQ,mBAAG,cAAc,KAAA,EACzB,gBAAgB,sBAAA,EAChB,mBAAe,EAAf,WAAW,mBAAG,CAAC,KAAA;IAEf,IAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAChD,IAAM,YAAY,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;IAEtE,OAAO,CACH,gCAAK,KAAK,EAAE,MAAM,CAAC,MAAM,YACrB,iCAAK,KAAK,EAAE,MAAM,CAAC,eAAe,aAC9B,mCACI,KAAK,EAAE,MAAM,CAAC,MAAM,EACpB,OAAO,EAAE,gBAAgB,gBACb,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAc,WAAW,aAAU,CAAC,CAAC,CAAC,WAAW,EAC/E,YAAY,EAAE,UAAC,CAAC;wBACZ,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"OpenChatButton.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/OpenChatButton.tsx"],"names":[],"mappings":";;;;AACA,mCAAoC;AAS7B,IAAM,cAAc,GAAG,UAAC,EAKT;QAJlB,YAAY,kBAAA,EACZ,gBAAyB,EAAzB,QAAQ,mBAAG,cAAc,KAAA,EACzB,gBAAgB,sBAAA,EAChB,mBAAe,EAAf,WAAW,mBAAG,CAAC,KAAA;IAEf,IAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAChD,IAAM,YAAY,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;IAEtE,OAAO,CACH,gCAAK,KAAK,EAAE,MAAM,CAAC,MAAM,YACrB,iCAAK,KAAK,EAAE,MAAM,CAAC,eAAe,aAC9B,mCACI,KAAK,EAAE,MAAM,CAAC,MAAM,EACpB,OAAO,EAAE,gBAAgB,gBACb,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAc,WAAW,aAAU,CAAC,CAAC,CAAC,WAAW,EAC/E,YAAY,EAAE,UAAC,CAAC;wBACZ,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAA;oBACnD,CAAC,EACD,YAAY,EAAE,UAAC,CAAC;wBACZ,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAA;oBAChD,CAAC,YAED,gCAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,YAC1F,iCACI,CAAC,EAAC,+JAA+J,EACjK,IAAI,EAAC,cAAc,GACrB,GACA,GACD,EACR,WAAW,GAAG,CAAC,IAAI,gCAAK,KAAK,EAAE,MAAM,CAAC,WAAW,YAAG,YAAY,GAAO,IACtE,GACJ,CACT,CAAA;AACL,CAAC,CAAA;AAlCY,QAAA,cAAc,kBAkC1B","sourcesContent":["import type { WidgetPosition } from '../../../../posthog-conversations-types'\nimport { getStyles } from './styles'\n\ninterface OpenChatButtonProps {\n primaryColor: string\n position?: WidgetPosition\n handleToggleOpen: () => void\n unreadCount?: number\n}\n\nexport const OpenChatButton = ({\n primaryColor,\n position = 'bottom_right',\n handleToggleOpen,\n unreadCount = 0,\n}: OpenChatButtonProps) => {\n const styles = getStyles(primaryColor, position)\n const displayCount = unreadCount > 99 ? '99+' : unreadCount.toString()\n\n return (\n <div style={styles.widget}>\n <div style={styles.buttonContainer}>\n <button\n style={styles.button}\n onClick={handleToggleOpen}\n aria-label={unreadCount > 0 ? `Open chat (${unreadCount} unread)` : 'Open chat'}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = 'scale(1.05)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'scale(1)'\n }}\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12C2 13.93 2.6 15.71 3.64 17.18L2.5 21.5L7.04 20.42C8.46 21.28 10.17 21.75 12 21.75C17.52 21.75 22 17.27 22 11.75C22 6.23 17.52 2 12 2Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n {unreadCount > 0 && <div style={styles.unreadBadge}>{displayCount}</div>}\n </div>\n </div>\n )\n}\n"]}
|
|
@@ -45,11 +45,11 @@ var getStyles = function (primaryColor, position) {
|
|
|
45
45
|
color: getContrastTextColor(primaryColor),
|
|
46
46
|
border: 'none',
|
|
47
47
|
cursor: 'pointer',
|
|
48
|
-
|
|
48
|
+
filter: 'drop-shadow(rgba(9, 14, 21, 0.54) 0px 1px 6px) drop-shadow(rgba(9, 14, 21, 0.9) 0px 2px 32px)',
|
|
49
49
|
display: 'flex',
|
|
50
50
|
alignItems: 'center',
|
|
51
51
|
justifyContent: 'center',
|
|
52
|
-
transition: 'transform 0.2s ease-out
|
|
52
|
+
transition: 'transform 0.2s ease-out',
|
|
53
53
|
},
|
|
54
54
|
unreadBadge: __assign(__assign(__assign({ position: 'absolute' }, (isTop ? { bottom: '-4px' } : { top: '-4px' })), (isLeft ? { left: '-4px' } : { right: '-4px' })), { minWidth: '20px', height: '20px', borderRadius: '10px', background: '#ef4444', color: 'white', fontSize: '11px', fontWeight: 600, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '0 5px', boxShadow: '0 2px 4px rgba(0, 0, 0, 0.2)', border: '2px solid white', boxSizing: 'border-box' }),
|
|
55
55
|
window: __assign(__assign(__assign({ position: 'absolute' }, (isTop ? { top: 0 } : { bottom: 0 })), (isLeft ? { left: 0 } : { right: 0 })), { background: 'white', borderRadius: '10px', boxShadow: '0 10px 25px -3px rgba(0,0,0,0.12), 0 4px 12px -2px rgba(0,0,0,0.10)', display: 'flex', flexDirection: 'column', overflow: 'hidden', transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/styles.ts"],"names":[],"mappings":"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","sourcesContent":["// Inline styles following PostHog design system\n\nimport type { WidgetPosition } from '../../../../posthog-conversations-types'\nimport { Z_INDEX_CONVERSATIONS } from '../../../../constants'\n\n/**\n * Calculate contrasting text color (black or white) based on background brightness\n * Uses HSP (Highly Sensitive Purity) brightness formula\n */\nfunction getContrastTextColor(hexColor: string): string {\n const hex = hexColor.replace(/^#/, '')\n const fullHex = hex.length === 3 ? hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] : hex\n\n const r = parseInt(fullHex.slice(0, 2), 16)\n const g = parseInt(fullHex.slice(2, 4), 16)\n const b = parseInt(fullHex.slice(4, 6), 16)\n\n // HSP brightness formula\n const hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b))\n return hsp > 127.5 ? '#020617' : 'white'\n}\n\nexport const getStyles = (primaryColor: string, position: WidgetPosition = 'bottom_right') => {\n const isLeft = position.includes('left')\n const isTop = position.includes('top')\n\n return {\n widget: {\n position: 'fixed' as const,\n ...(isTop ? { top: '20px' } : { bottom: '20px' }),\n ...(isLeft ? { left: '20px' } : { right: '20px' }),\n zIndex: Z_INDEX_CONVERSATIONS,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif',\n },\n buttonContainer: {\n position: 'relative' as const,\n },\n button: {\n width: '50px',\n height: '50px',\n borderRadius: '50%',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s ease-out, box-shadow 0.2s ease-out',\n },\n unreadBadge: {\n position: 'absolute' as const,\n ...(isTop ? { bottom: '-4px' } : { top: '-4px' }),\n ...(isLeft ? { left: '-4px' } : { right: '-4px' }),\n minWidth: '20px',\n height: '20px',\n borderRadius: '10px',\n background: '#ef4444',\n color: 'white',\n fontSize: '11px',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 5px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.2)',\n border: '2px solid white',\n boxSizing: 'border-box' as const,\n },\n window: {\n position: 'absolute' as const,\n ...(isTop ? { top: 0 } : { bottom: 0 }),\n ...(isLeft ? { left: 0 } : { right: 0 }),\n background: 'white',\n borderRadius: '10px',\n boxShadow: '0 10px 25px -3px rgba(0,0,0,0.12), 0 4px 12px -2px rgba(0,0,0,0.10)',\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n //border: '1px solid #dcdcdc',\n border: 'none',\n },\n windowOpen: {\n width: '400px',\n maxWidth: 'calc(100vw - 40px)',\n height: '600px',\n maxHeight: 'calc(100vh - 100px)',\n },\n header: {\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n padding: '8px 12px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n flexShrink: 0,\n },\n headerTitle: {\n fontWeight: 500,\n fontSize: '14px',\n },\n headerActions: {\n display: 'flex',\n gap: '4px',\n alignItems: 'center',\n },\n headerLinkButton: {\n background: 'transparent',\n border: 'none',\n color: getContrastTextColor(primaryColor),\n cursor: 'pointer',\n padding: '6px 8px',\n fontSize: '12px',\n borderRadius: '4px',\n opacity: 0.9,\n },\n headerButton: {\n background: 'transparent',\n border: 'none',\n color: getContrastTextColor(primaryColor),\n cursor: 'pointer',\n padding: '6px 8px',\n fontSize: '16px',\n lineHeight: 1,\n borderRadius: '4px',\n transition: 'background 0.2s ease-out',\n opacity: 0.9,\n },\n messages: {\n flex: 1,\n overflowY: 'auto' as const,\n padding: '14px',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '8px',\n background: 'white',\n },\n message: {\n display: 'flex',\n flexDirection: 'column' as const,\n maxWidth: '85%',\n animation: 'fadeIn 0.2s ease-out',\n },\n messageCustomer: {\n alignSelf: 'flex-end',\n alignItems: 'flex-end',\n },\n messageAgent: {\n alignSelf: 'flex-start',\n alignItems: 'flex-start',\n },\n messageAuthor: {\n fontSize: '10px',\n color: '#939393',\n marginBottom: '4px',\n fontWeight: 500,\n },\n messageContent: {\n padding: '8px 12px',\n borderRadius: '8px',\n fontSize: '12px',\n lineHeight: 1.5,\n wordWrap: 'break-word' as const,\n whiteSpace: 'pre-wrap' as const,\n },\n messageContentCustomer: {\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n borderBottomRightRadius: '2px',\n },\n messageContentAgent: {\n background: 'white',\n color: '#020617',\n border: '1.5px solid #dcdcdc',\n borderBottomLeftRadius: '2px',\n },\n messageTime: {\n fontSize: '10px',\n color: '#939393',\n marginTop: '4px',\n opacity: 0.8,\n },\n error: {\n padding: '10px 16px',\n background: '#fee2e2',\n color: '#991b1b',\n fontSize: '13px',\n borderTop: '1px solid #fecaca',\n borderBottom: '1px solid #fecaca',\n textAlign: 'center' as const,\n fontWeight: 500,\n },\n inputContainer: {\n padding: '8px 12px',\n background: 'white',\n borderTop: '1px solid #dcdcdc',\n display: 'flex',\n gap: '8px',\n alignItems: 'center', // Changed from flex-end to center to vertically align input and sendButton\n flexShrink: 0,\n },\n resolvedBanner: {\n paddingTop: '12px',\n background: 'white',\n borderTop: '1px solid #dcdcdc',\n display: 'flex',\n flexDirection: 'column' as const,\n flexShrink: 0,\n },\n resolvedBannerText: {\n padding: '0 20px',\n fontSize: '13px',\n color: '#64748b',\n textAlign: 'center' as const,\n lineHeight: 1.5,\n },\n input: {\n flex: 1,\n maxHeight: '120px',\n fontSize: '14px',\n resize: 'vertical',\n fontFamily: 'inherit',\n lineHeight: 1.5,\n color: '#020617',\n background: 'white',\n border: 'none',\n outline: 'none',\n transition: 'border-color 0.2s ease-out, box-shadow 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n fieldSizing: 'content',\n },\n sendButton: {\n width: '33px',\n height: '33px', // Match input minHeight for vertical alignment\n borderRadius: '10px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 0.2s ease-out',\n boxShadow: '0 2px 0 rgba(0, 0, 0, 0.045)',\n fontWeight: 700,\n flexShrink: 0,\n },\n // Identification form styles\n identificationForm: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n padding: '24px',\n background: '#eeeded',\n overflowY: 'auto' as const,\n },\n formTitle: {\n fontSize: '18px',\n fontWeight: 600,\n color: '#020617',\n marginBottom: '8px',\n },\n formDescription: {\n fontSize: '14px',\n color: '#64748b',\n marginBottom: '24px',\n lineHeight: 1.5,\n },\n recoverFooter: {\n padding: '10px 14px',\n borderTop: '1px solid #e5e7eb',\n fontSize: '12px',\n color: '#64748b',\n lineHeight: 1.5,\n flexShrink: 0,\n textAlign: 'center',\n },\n recoverFooterLink: {\n background: 'none',\n border: 'none',\n padding: 0,\n color: '#64748b',\n cursor: 'pointer',\n fontSize: '12px',\n fontFamily: 'inherit',\n textDecoration: 'underline',\n },\n formField: {\n marginBottom: '16px',\n },\n formLabel: {\n display: 'block',\n fontSize: '13px',\n fontWeight: 500,\n color: '#020617',\n marginBottom: '6px',\n },\n formInput: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #dcdcdc',\n borderRadius: '6px',\n fontSize: '14px',\n fontFamily: 'inherit',\n color: '#020617',\n background: 'white',\n transition: 'border-color 0.2s ease-out, box-shadow 0.2s ease-out',\n boxSizing: 'border-box' as const,\n },\n formInputError: {\n borderColor: '#ef4444',\n },\n formError: {\n fontSize: '12px',\n color: '#ef4444',\n marginTop: '4px',\n },\n formSubmitButton: {\n width: '100%',\n padding: '12px 16px',\n borderRadius: '6px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 600,\n transition: 'all 0.2s ease-out',\n marginTop: '8px',\n },\n formOptional: {\n fontSize: '12px',\n color: '#939393',\n fontWeight: 400,\n },\n restoreRequestSuccess: {\n marginTop: '12px',\n fontSize: '12px',\n color: '#166534',\n background: '#dcfce7',\n border: '1px solid #86efac',\n borderRadius: '6px',\n padding: '10px 12px',\n lineHeight: 1.4,\n },\n // Ticket list styles\n ticketListContainer: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n background: 'white',\n overflowY: 'auto' as const,\n },\n ticketList: {\n flex: 1,\n overflowY: 'auto' as const,\n },\n ticketItem: {\n padding: '14px 16px',\n borderBottom: '1px solid #f1f1f1',\n cursor: 'pointer',\n transition: 'background 0.15s ease-out',\n background: 'white',\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n },\n ticketItemUnread: {\n background: '#fafafa',\n },\n ticketItemContent: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '6px',\n flex: 1,\n minWidth: 0, // Allow text truncation\n },\n ticketItemArrow: {\n color: '#939393',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n },\n ticketItemHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: '8px',\n },\n ticketPreview: {\n fontSize: '13px',\n color: '#020617',\n lineHeight: 1.4,\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n ticketPreviewUnread: {\n fontSize: '13px',\n color: '#020617',\n lineHeight: 1.4,\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n fontWeight: 600,\n },\n ticketUnreadBadge: {\n minWidth: '18px',\n height: '18px',\n borderRadius: '9px',\n background: '#ef4444',\n color: 'white',\n fontSize: '10px',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 5px',\n flexShrink: 0,\n },\n ticketMeta: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n ticketTime: {\n fontSize: '11px',\n color: '#939393',\n },\n ticketStatus: {\n fontSize: '10px',\n color: '#64748b',\n background: '#f1f5f9',\n padding: '2px 6px',\n borderRadius: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.3px',\n },\n newConversationButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '12px 16px',\n padding: '10px 16px',\n borderRadius: '8px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n fontSize: '13px',\n fontWeight: 500,\n transition: 'all 0.2s ease-out',\n },\n // Ticket list loading state\n ticketListLoading: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n gap: '12px',\n color: '#64748b',\n fontSize: '13px',\n },\n loadingSpinner: {\n width: '24px',\n height: '24px',\n border: '2px solid #e2e8f0',\n borderTop: `2px solid ${primaryColor}`,\n borderRadius: '50%',\n animation: 'spin 0.8s linear infinite',\n },\n // Ticket list empty state\n ticketListEmpty: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px 24px',\n textAlign: 'center' as const,\n },\n emptyStateIcon: {\n color: '#cbd5e1',\n marginBottom: '16px',\n },\n emptyStateTitle: {\n fontSize: '16px',\n fontWeight: 600,\n color: '#020617',\n marginBottom: '8px',\n },\n emptyStateDescription: {\n fontSize: '13px',\n color: '#64748b',\n lineHeight: 1.5,\n marginBottom: '20px',\n },\n newConversationButtonLarge: {\n padding: '12px 24px',\n borderRadius: '8px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 600,\n transition: 'all 0.2s ease-out',\n },\n fetchPreviousButton: {\n marginTop: '10px',\n background: 'transparent',\n border: 'none',\n color: primaryColor,\n cursor: 'pointer',\n fontSize: '13px',\n textDecoration: 'underline',\n opacity: 1,\n },\n // Back button for message view header\n backButton: {\n background: 'transparent',\n border: 'none',\n color: getContrastTextColor(primaryColor),\n cursor: 'pointer',\n padding: '6px 0px',\n marginRight: '4px',\n fontSize: '16px',\n lineHeight: 1,\n borderRadius: '4px',\n transition: 'background 0.2s ease-out',\n opacity: 0.9,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n // Header with back button layout\n headerWithBack: {\n display: 'flex',\n alignItems: 'center',\n },\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../src/extensions/conversations/external/components/styles.ts"],"names":[],"mappings":"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","sourcesContent":["// Inline styles following PostHog design system\n\nimport type { WidgetPosition } from '../../../../posthog-conversations-types'\nimport { Z_INDEX_CONVERSATIONS } from '../../../../constants'\n\n/**\n * Calculate contrasting text color (black or white) based on background brightness\n * Uses HSP (Highly Sensitive Purity) brightness formula\n */\nfunction getContrastTextColor(hexColor: string): string {\n const hex = hexColor.replace(/^#/, '')\n const fullHex = hex.length === 3 ? hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] : hex\n\n const r = parseInt(fullHex.slice(0, 2), 16)\n const g = parseInt(fullHex.slice(2, 4), 16)\n const b = parseInt(fullHex.slice(4, 6), 16)\n\n // HSP brightness formula\n const hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b))\n return hsp > 127.5 ? '#020617' : 'white'\n}\n\nexport const getStyles = (primaryColor: string, position: WidgetPosition = 'bottom_right') => {\n const isLeft = position.includes('left')\n const isTop = position.includes('top')\n\n return {\n widget: {\n position: 'fixed' as const,\n ...(isTop ? { top: '20px' } : { bottom: '20px' }),\n ...(isLeft ? { left: '20px' } : { right: '20px' }),\n zIndex: Z_INDEX_CONVERSATIONS,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Roboto\", Helvetica, Arial, sans-serif',\n },\n buttonContainer: {\n position: 'relative' as const,\n },\n button: {\n width: '50px',\n height: '50px',\n borderRadius: '50%',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n filter: 'drop-shadow(rgba(9, 14, 21, 0.54) 0px 1px 6px) drop-shadow(rgba(9, 14, 21, 0.9) 0px 2px 32px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'transform 0.2s ease-out',\n },\n unreadBadge: {\n position: 'absolute' as const,\n ...(isTop ? { bottom: '-4px' } : { top: '-4px' }),\n ...(isLeft ? { left: '-4px' } : { right: '-4px' }),\n minWidth: '20px',\n height: '20px',\n borderRadius: '10px',\n background: '#ef4444',\n color: 'white',\n fontSize: '11px',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 5px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.2)',\n border: '2px solid white',\n boxSizing: 'border-box' as const,\n },\n window: {\n position: 'absolute' as const,\n ...(isTop ? { top: 0 } : { bottom: 0 }),\n ...(isLeft ? { left: 0 } : { right: 0 }),\n background: 'white',\n borderRadius: '10px',\n boxShadow: '0 10px 25px -3px rgba(0,0,0,0.12), 0 4px 12px -2px rgba(0,0,0,0.10)',\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n //border: '1px solid #dcdcdc',\n border: 'none',\n },\n windowOpen: {\n width: '400px',\n maxWidth: 'calc(100vw - 40px)',\n height: '600px',\n maxHeight: 'calc(100vh - 100px)',\n },\n header: {\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n padding: '8px 12px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n flexShrink: 0,\n },\n headerTitle: {\n fontWeight: 500,\n fontSize: '14px',\n },\n headerActions: {\n display: 'flex',\n gap: '4px',\n alignItems: 'center',\n },\n headerLinkButton: {\n background: 'transparent',\n border: 'none',\n color: getContrastTextColor(primaryColor),\n cursor: 'pointer',\n padding: '6px 8px',\n fontSize: '12px',\n borderRadius: '4px',\n opacity: 0.9,\n },\n headerButton: {\n background: 'transparent',\n border: 'none',\n color: getContrastTextColor(primaryColor),\n cursor: 'pointer',\n padding: '6px 8px',\n fontSize: '16px',\n lineHeight: 1,\n borderRadius: '4px',\n transition: 'background 0.2s ease-out',\n opacity: 0.9,\n },\n messages: {\n flex: 1,\n overflowY: 'auto' as const,\n padding: '14px',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '8px',\n background: 'white',\n },\n message: {\n display: 'flex',\n flexDirection: 'column' as const,\n maxWidth: '85%',\n animation: 'fadeIn 0.2s ease-out',\n },\n messageCustomer: {\n alignSelf: 'flex-end',\n alignItems: 'flex-end',\n },\n messageAgent: {\n alignSelf: 'flex-start',\n alignItems: 'flex-start',\n },\n messageAuthor: {\n fontSize: '10px',\n color: '#939393',\n marginBottom: '4px',\n fontWeight: 500,\n },\n messageContent: {\n padding: '8px 12px',\n borderRadius: '8px',\n fontSize: '12px',\n lineHeight: 1.5,\n wordWrap: 'break-word' as const,\n whiteSpace: 'pre-wrap' as const,\n },\n messageContentCustomer: {\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n borderBottomRightRadius: '2px',\n },\n messageContentAgent: {\n background: 'white',\n color: '#020617',\n border: '1.5px solid #dcdcdc',\n borderBottomLeftRadius: '2px',\n },\n messageTime: {\n fontSize: '10px',\n color: '#939393',\n marginTop: '4px',\n opacity: 0.8,\n },\n error: {\n padding: '10px 16px',\n background: '#fee2e2',\n color: '#991b1b',\n fontSize: '13px',\n borderTop: '1px solid #fecaca',\n borderBottom: '1px solid #fecaca',\n textAlign: 'center' as const,\n fontWeight: 500,\n },\n inputContainer: {\n padding: '8px 12px',\n background: 'white',\n borderTop: '1px solid #dcdcdc',\n display: 'flex',\n gap: '8px',\n alignItems: 'center', // Changed from flex-end to center to vertically align input and sendButton\n flexShrink: 0,\n },\n resolvedBanner: {\n paddingTop: '12px',\n background: 'white',\n borderTop: '1px solid #dcdcdc',\n display: 'flex',\n flexDirection: 'column' as const,\n flexShrink: 0,\n },\n resolvedBannerText: {\n padding: '0 20px',\n fontSize: '13px',\n color: '#64748b',\n textAlign: 'center' as const,\n lineHeight: 1.5,\n },\n input: {\n flex: 1,\n maxHeight: '120px',\n fontSize: '14px',\n resize: 'vertical',\n fontFamily: 'inherit',\n lineHeight: 1.5,\n color: '#020617',\n background: 'white',\n border: 'none',\n outline: 'none',\n transition: 'border-color 0.2s ease-out, box-shadow 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n fieldSizing: 'content',\n },\n sendButton: {\n width: '33px',\n height: '33px', // Match input minHeight for vertical alignment\n borderRadius: '10px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 0.2s ease-out',\n boxShadow: '0 2px 0 rgba(0, 0, 0, 0.045)',\n fontWeight: 700,\n flexShrink: 0,\n },\n // Identification form styles\n identificationForm: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n padding: '24px',\n background: '#eeeded',\n overflowY: 'auto' as const,\n },\n formTitle: {\n fontSize: '18px',\n fontWeight: 600,\n color: '#020617',\n marginBottom: '8px',\n },\n formDescription: {\n fontSize: '14px',\n color: '#64748b',\n marginBottom: '24px',\n lineHeight: 1.5,\n },\n recoverFooter: {\n padding: '10px 14px',\n borderTop: '1px solid #e5e7eb',\n fontSize: '12px',\n color: '#64748b',\n lineHeight: 1.5,\n flexShrink: 0,\n textAlign: 'center',\n },\n recoverFooterLink: {\n background: 'none',\n border: 'none',\n padding: 0,\n color: '#64748b',\n cursor: 'pointer',\n fontSize: '12px',\n fontFamily: 'inherit',\n textDecoration: 'underline',\n },\n formField: {\n marginBottom: '16px',\n },\n formLabel: {\n display: 'block',\n fontSize: '13px',\n fontWeight: 500,\n color: '#020617',\n marginBottom: '6px',\n },\n formInput: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #dcdcdc',\n borderRadius: '6px',\n fontSize: '14px',\n fontFamily: 'inherit',\n color: '#020617',\n background: 'white',\n transition: 'border-color 0.2s ease-out, box-shadow 0.2s ease-out',\n boxSizing: 'border-box' as const,\n },\n formInputError: {\n borderColor: '#ef4444',\n },\n formError: {\n fontSize: '12px',\n color: '#ef4444',\n marginTop: '4px',\n },\n formSubmitButton: {\n width: '100%',\n padding: '12px 16px',\n borderRadius: '6px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 600,\n transition: 'all 0.2s ease-out',\n marginTop: '8px',\n },\n formOptional: {\n fontSize: '12px',\n color: '#939393',\n fontWeight: 400,\n },\n restoreRequestSuccess: {\n marginTop: '12px',\n fontSize: '12px',\n color: '#166534',\n background: '#dcfce7',\n border: '1px solid #86efac',\n borderRadius: '6px',\n padding: '10px 12px',\n lineHeight: 1.4,\n },\n // Ticket list styles\n ticketListContainer: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n background: 'white',\n overflowY: 'auto' as const,\n },\n ticketList: {\n flex: 1,\n overflowY: 'auto' as const,\n },\n ticketItem: {\n padding: '14px 16px',\n borderBottom: '1px solid #f1f1f1',\n cursor: 'pointer',\n transition: 'background 0.15s ease-out',\n background: 'white',\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n },\n ticketItemUnread: {\n background: '#fafafa',\n },\n ticketItemContent: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '6px',\n flex: 1,\n minWidth: 0, // Allow text truncation\n },\n ticketItemArrow: {\n color: '#939393',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n },\n ticketItemHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: '8px',\n },\n ticketPreview: {\n fontSize: '13px',\n color: '#020617',\n lineHeight: 1.4,\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n ticketPreviewUnread: {\n fontSize: '13px',\n color: '#020617',\n lineHeight: 1.4,\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n fontWeight: 600,\n },\n ticketUnreadBadge: {\n minWidth: '18px',\n height: '18px',\n borderRadius: '9px',\n background: '#ef4444',\n color: 'white',\n fontSize: '10px',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 5px',\n flexShrink: 0,\n },\n ticketMeta: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n ticketTime: {\n fontSize: '11px',\n color: '#939393',\n },\n ticketStatus: {\n fontSize: '10px',\n color: '#64748b',\n background: '#f1f5f9',\n padding: '2px 6px',\n borderRadius: '4px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.3px',\n },\n newConversationButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '12px 16px',\n padding: '10px 16px',\n borderRadius: '8px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n fontSize: '13px',\n fontWeight: 500,\n transition: 'all 0.2s ease-out',\n },\n // Ticket list loading state\n ticketListLoading: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n gap: '12px',\n color: '#64748b',\n fontSize: '13px',\n },\n loadingSpinner: {\n width: '24px',\n height: '24px',\n border: '2px solid #e2e8f0',\n borderTop: `2px solid ${primaryColor}`,\n borderRadius: '50%',\n animation: 'spin 0.8s linear infinite',\n },\n // Ticket list empty state\n ticketListEmpty: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px 24px',\n textAlign: 'center' as const,\n },\n emptyStateIcon: {\n color: '#cbd5e1',\n marginBottom: '16px',\n },\n emptyStateTitle: {\n fontSize: '16px',\n fontWeight: 600,\n color: '#020617',\n marginBottom: '8px',\n },\n emptyStateDescription: {\n fontSize: '13px',\n color: '#64748b',\n lineHeight: 1.5,\n marginBottom: '20px',\n },\n newConversationButtonLarge: {\n padding: '12px 24px',\n borderRadius: '8px',\n background: primaryColor,\n color: getContrastTextColor(primaryColor),\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 600,\n transition: 'all 0.2s ease-out',\n },\n fetchPreviousButton: {\n marginTop: '10px',\n background: 'transparent',\n border: 'none',\n color: primaryColor,\n cursor: 'pointer',\n fontSize: '13px',\n textDecoration: 'underline',\n opacity: 1,\n },\n // Back button for message view header\n backButton: {\n background: 'transparent',\n border: 'none',\n color: getContrastTextColor(primaryColor),\n cursor: 'pointer',\n padding: '6px 0px',\n marginRight: '4px',\n fontSize: '16px',\n lineHeight: 1,\n borderRadius: '4px',\n transition: 'background 0.2s ease-out',\n opacity: 0.9,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n // Header with back button layout\n headerWithBack: {\n display: 'flex',\n alignItems: 'center',\n },\n }\n}\n"]}
|