@telia-ace/widget-conversation 1.0.15 → 1.0.18

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 (52) hide show
  1. package/LICENSE.txt +5 -5
  2. package/README.md +273 -256
  3. package/dist/agent.d.ts +17 -17
  4. package/dist/{ui → components}/conversation/conversation.d.ts +6 -6
  5. package/dist/{ui/conversation/conversation-component.d.ts → components/conversation/plugin.d.ts} +43 -37
  6. package/dist/components/conversation/ui/content.d.ts +2 -0
  7. package/dist/{ui/conversation/conversation-input.d.ts → components/conversation/ui/input.d.ts} +6 -6
  8. package/dist/{ui/conversation/conversation-loader.d.ts → components/conversation/ui/loader.d.ts} +8 -8
  9. package/dist/components/conversation/ui/message-list-items/button-list.d.ts +8 -0
  10. package/dist/{ui/conversation/message-types/custom-message-list-item.d.ts → components/conversation/ui/message-list-items/custom.d.ts} +9 -9
  11. package/dist/components/conversation/ui/message-list-items/html.d.ts +5 -0
  12. package/dist/components/conversation/ui/message-list-items/link-list.d.ts +8 -0
  13. package/dist/components/conversation/ui/message-list-items/separator.d.ts +2 -0
  14. package/dist/components/conversation/ui/message-list-items/text.d.ts +6 -0
  15. package/dist/{ui/conversation → components/conversation/ui}/message-types/agent.d.ts +11 -11
  16. package/dist/{ui/conversation → components/conversation/ui}/message-types/index.d.ts +4 -5
  17. package/dist/components/conversation/ui/message-types/message-list.d.ts +9 -0
  18. package/dist/{ui/conversation → components/conversation/ui}/message-types/system.d.ts +12 -12
  19. package/dist/{ui/conversation → components/conversation/ui}/message-types/timestamp.d.ts +8 -8
  20. package/dist/{ui/conversation → components/conversation/ui}/message-types/user.d.ts +8 -8
  21. package/dist/components/conversation/ui/message.d.ts +7 -0
  22. package/dist/components/conversation/ui/overlay-outlets.d.ts +13 -0
  23. package/dist/components/conversation/ui/styles.d.ts +27 -0
  24. package/dist/{ui/return-button/return-button-component.d.ts → components/return-button/plugin.d.ts} +18 -19
  25. package/dist/{ui → components}/return-button/return-button.d.ts +6 -6
  26. package/dist/conversation-controller.d.ts +88 -88
  27. package/dist/conversation-form-adapter.d.ts +7 -7
  28. package/dist/conversation-platform.d.ts +49 -50
  29. package/dist/conversation-provider.d.ts +22 -22
  30. package/dist/conversation.js +862 -118
  31. package/dist/conversation.js.map +1 -1
  32. package/dist/index.d.ts +10 -9
  33. package/dist/index.js +885 -9
  34. package/dist/index.js.map +1 -1
  35. package/dist/resolve-entity-value.d.ts +10 -10
  36. package/dist/return-button.js.map +1 -1
  37. package/dist/types.d.ts +96 -110
  38. package/dist/user.d.ts +7 -7
  39. package/dist/utils/custom-message.d.ts +3 -3
  40. package/dist/utils/index.d.ts +1 -1
  41. package/dist/utils/map-actions.d.ts +1 -0
  42. package/dist/utils/open-chat-widget.d.ts +4 -4
  43. package/package.json +8 -8
  44. package/dist/index2.js +0 -1678
  45. package/dist/index2.js.map +0 -1
  46. package/dist/ui/conversation/conversation-content.d.ts +0 -12
  47. package/dist/ui/conversation/conversation-message.d.ts +0 -7
  48. package/dist/ui/conversation/conversation-styles.d.ts +0 -11
  49. package/dist/ui/conversation/index.d.ts +0 -3
  50. package/dist/ui/conversation/message-types/custom.d.ts +0 -9
  51. package/dist/ui/index.d.ts +0 -2
  52. package/dist/ui/return-button/index.d.ts +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"file":"index2.js","sources":["../src/agent.ts","../src/conversation-provider.ts","../src/user.ts","../src/conversation-controller.ts","../src/utils/open-chat-widget.ts","../src/utils/custom-message.ts","../src/conversation-platform.ts","../src/types.ts","../src/ui/conversation/conversation-component.ts","../src/ui/conversation/conversation-styles.tsx","../src/ui/conversation/message-types/timestamp.tsx","../src/ui/conversation/message-types/agent.tsx","../src/ui/conversation/message-types/custom.tsx","../src/ui/conversation/message-types/system.tsx","../src/ui/conversation/message-types/user.tsx","../src/ui/conversation/message-types/custom-message-list-item.tsx","../src/ui/conversation/conversation-content.tsx","../src/ui/return-button/return-button-component.ts"],"sourcesContent":["import { Symbol } from '@telia-ace/widget-ui';\nimport {\n ConversationEntry,\n ConversationMessageType,\n getNormalizedMessageSettings,\n} from './conversation-controller';\nimport { ConversationProvider } from './conversation-provider';\nimport {\n ConversationMessageSender,\n ConversationMessageSettings,\n ConverstationMessageItem,\n} from './types';\n\nexport type AgentSettings = {\n name?: string;\n avatar?: string | Symbol;\n};\n\nexport class Agent {\n name?: string;\n avatar?: string | Symbol;\n\n constructor(private provider: ConversationProvider, settings: AgentSettings) {\n this.name = settings.name;\n this.avatar = settings.avatar;\n }\n\n print = (\n settings:\n | string\n | ConversationMessageSettings\n | ConverstationMessageItem<any>\n | ConverstationMessageItem<any>[]\n ): ConversationEntry | undefined => {\n const sender: ConversationMessageSender = { name: this.name, avatar: this.avatar };\n const normalized = getNormalizedMessageSettings(settings);\n\n return this.provider.createEntry(\n normalized.key,\n normalized.content,\n ConversationMessageType.Agent,\n sender,\n normalized.timestamp\n );\n };\n typing = () => {\n return this.provider.setTypingState({ name: this.name, avatar: this.avatar });\n };\n\n update(settings: AgentSettings): void {\n const { name, avatar } = settings;\n if (avatar === null) {\n this.avatar = undefined;\n } else if (avatar) {\n this.avatar = avatar;\n }\n\n if (name === null) {\n this.name = undefined;\n } else if (name) {\n this.name = name;\n }\n }\n}\n","import {\n Container,\n EventListener,\n EventObject,\n EventSubscriptionCancellation,\n} from '@webprovisions/platform';\nimport { Agent, AgentSettings } from './agent';\nimport {\n CancelLoaderDelegate,\n ConversationController,\n ConversationEntry,\n ConversationMessageType,\n} from './conversation-controller';\nimport {\n ConversationMessageContent,\n ConversationMessageSender,\n ConversationMessageSettings,\n} from './types';\n\nexport class ConversationProvider {\n private subscriptions: EventSubscriptionCancellation[] = [];\n public user: any;\n\n private constructor(\n public name: string,\n private container: Container,\n public controller: ConversationController | null\n ) {\n this.user = controller?.user;\n }\n\n static create(name: string, container: Container, controller: ConversationController) {\n return new ConversationProvider(name, container, controller);\n }\n\n createAgent(settings: AgentSettings = {}): Agent | undefined {\n if (this.controller) {\n return new Agent(this, settings);\n }\n }\n\n print(settings: string | ConversationMessageSettings): ConversationEntry | undefined {\n return this.controller?.print(settings);\n }\n\n setTypingState(sender: ConversationMessageSender, type?: ConversationMessageType) {\n return this.controller?.setTypingState(sender, type);\n }\n\n loading(): CancelLoaderDelegate {\n if (!this.controller) {\n return () => () => {};\n }\n return this.controller.loader();\n }\n\n createEntry(\n key: string,\n content: ConversationMessageContent,\n type: ConversationMessageType,\n sender?: ConversationMessageSender,\n timestamp?: number | null\n ) {\n return this.controller?.createEntry(key, content, type, sender, timestamp);\n }\n\n dispose() {\n if (process.env.NODE_ENV !== 'production') {\n console.log(`conversation-provider: dispose (${this.name})`);\n }\n this.controller?.disposeProvider(this);\n this.controller = null;\n this.subscriptions.forEach((unsub) => unsub());\n }\n\n onUnreadMessage(fn: EventListener): EventSubscriptionCancellation | void {\n if (this.controller) {\n const unsubscribe = this.controller?.onUnreadMessage(fn);\n this.subscriptions.push(unsubscribe);\n return () => {\n unsubscribe();\n };\n }\n }\n\n onMounted(fn: EventListener): EventSubscriptionCancellation | void {\n if (this.controller) {\n const unsubscribe = this.controller?.events.subscribe(\n 'conversation:component-mount-changed',\n fn\n );\n this.subscriptions.push(unsubscribe);\n fn({} as EventObject, this.controller.getComponentMountedState());\n return () => {\n unsubscribe();\n };\n }\n }\n}\n\nexport default ConversationProvider;\n","import {\n ConversationController,\n ConversationEntry,\n ConversationMessageType,\n getNormalizedMessageSettings,\n} from './conversation-controller';\nimport { ConversationMessageSettings } from './types';\n\nexport class User {\n constructor(private controller: ConversationController) {}\n\n print = (settings: string | ConversationMessageSettings): ConversationEntry => {\n const normalized = getNormalizedMessageSettings(settings);\n return this.controller.createEntry(\n normalized.key,\n normalized.content,\n ConversationMessageType.User,\n undefined,\n normalized.timestamp\n );\n };\n}\n","import { FormBuilder } from '@telia-ace/widget-forms';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container, EventListener, EventManager, Widget } from '@webprovisions/platform';\nimport { ConversationProvider } from './conversation-provider';\nimport {\n ConversationMessageContent,\n ConversationMessageSender,\n ConversationMessageSettings,\n ConversationMessageUpdateSettings,\n ConverstationMessageItem,\n NormalizedMessageSettings,\n} from './types';\nimport { User } from './user';\nexport type ValidateHandler = (formValues: { [key: string]: any }) => Promise<any>;\n\nexport type SubmitHandler = (formValues: { [key: string]: any }) => Promise<any>;\n\nexport type Print = (content: string | ConversationMessageContent) => ConversationEntry;\n\nexport type FormHandlers = { [key: string]: FormHandler };\nexport type FormHandler = { validate?: ValidateHandler; submit: SubmitHandler };\n\nexport type CancelLoaderDelegate = () => void;\n\nexport class ConversationEntry {\n constructor(private writer: EntryWriter) {}\n\n update(\n content:\n | string\n | ConversationMessageUpdateSettings\n | ConverstationMessageItem<any>\n | ConverstationMessageItem<any>[]\n ) {\n const normalized = this.getNormalizedSettings(content);\n // const normalized = typeof content === 'string' ? { body: content } : content;\n this.writer(<ConversationMessageUpdateSettings>normalized);\n }\n\n remove() {\n this.writer(null);\n }\n\n private getNormalizedSettings(\n content:\n | string\n | ConversationMessageUpdateSettings\n | ConverstationMessageItem<any>\n | ConverstationMessageItem<any>[]\n ) {\n if (typeof content === 'string') return { body: content };\n else if (content.length > -1 && typeof content === 'object') return { items: content };\n else return content;\n }\n}\n\nexport enum ConversationMessageType {\n User = 'user',\n Agent = 'agent',\n System = 'system',\n}\n\nexport type ConversationMessage = {\n key: string;\n timestamp: number | null;\n content: ConversationMessageContent | null;\n sender: ConversationMessageSender | null;\n type: ConversationMessageType;\n};\n\nexport type EntryWriter = (content: ConversationMessageUpdateSettings | null) => void;\n\nexport const getNormalizedMessageSettings = (\n settings:\n | string\n | ConversationMessageSettings\n | ConverstationMessageItem<any>\n | ConverstationMessageItem<any>[]\n): NormalizedMessageSettings => {\n let content: ConversationMessageContent;\n let key = uuid();\n let timestamp: number | null = Date.now();\n\n if (Array.isArray(settings) && settings.length > -1) {\n if (typeof settings[0] === 'string') {\n content = { items: [<ConverstationMessageItem<any>>settings] };\n } else {\n content = { items: <ConverstationMessageItem<any>[]>settings };\n }\n } else if (typeof settings === 'string') {\n content = { body: settings };\n } else {\n settings = <ConversationMessageSettings>settings || {};\n\n if (settings.type) {\n content = {\n ...(<any>settings),\n };\n } else {\n content = {\n body: settings.body,\n actions: settings.actions,\n title: settings.title,\n };\n if (settings.key) {\n key = settings.key;\n }\n if (settings.timestamp) {\n timestamp = settings.timestamp;\n }\n if (settings.form) {\n const builder = FormBuilder.create(key);\n settings.form(builder);\n const builtForm = builder.get();\n content.form = builtForm;\n }\n if (settings.timestamp === null) {\n timestamp = null;\n }\n }\n }\n return { content, key, timestamp };\n};\n\nconst removeTypingState = (\n typingActors: ConversationMessageSender[],\n sender?: ConversationMessageSender\n) => {\n if (!sender) {\n return;\n }\n const senderString = JSON.stringify(sender);\n const indexToRemove = typingActors.findIndex((item) => {\n return senderString === JSON.stringify(item);\n });\n if (indexToRemove > -1) {\n return typingActors.splice(indexToRemove, 1);\n }\n};\n\n/**\n * Manages the stream of messages inside a `ConversationComponent` and provides external read-write\n * access to it as well as exposing emitted actions.\n */\nexport class ConversationController {\n formHandlers: FormHandlers = {};\n\n /**\n * Represents the current end user.\n */\n user: User = new User(this);\n\n events: EventManager;\n\n providers: string[] = [];\n\n active: boolean = false;\n\n private registeredProviders: ConversationProvider[] = [];\n\n private loaders: number = 0;\n private componentMounted: boolean = false;\n\n messages: ConversationMessage[] = [];\n private typingActors: ConversationMessageSender[] = [];\n\n constructor(public container: Container, public id: string) {\n const widget: Widget = container.get('$widget');\n this.events = widget.events.createChild(this);\n }\n\n setProviders(providers: string[]) {\n const removed: string[] = [];\n const added: string[] = [];\n\n // remove\n this.providers\n .reduce<string[]>((acc, provider) => {\n if (providers.indexOf(provider) === -1) {\n acc.push(provider);\n }\n return acc;\n }, [])\n .forEach((providerToRemove) => {\n const indexToRemove = this.providers.indexOf(providerToRemove);\n if (indexToRemove > -1) {\n removed.push(providerToRemove);\n this.providers.splice(indexToRemove, 1);\n }\n });\n\n // add\n providers.forEach((provider) => {\n if (this.providers.indexOf(provider) === -1) {\n added.push(provider);\n this.providers.push(provider);\n }\n });\n\n if (added.length || removed.length) {\n this.events.dispatch('conversation:providers-changed', { added, removed });\n }\n }\n\n createProvider(name: string): ConversationProvider {\n const index = this.providerIndex(name);\n if (index > -1) {\n return this.registeredProviders[index];\n }\n const provider = ConversationProvider.create(name, this.container, this);\n this.registeredProviders.push(provider);\n return provider;\n }\n\n providerIndex(name: string) {\n return this.registeredProviders.findIndex((p) => p.name === name);\n }\n\n dispose() {\n this.registeredProviders.forEach((provider) => provider.dispose());\n this.messages = [];\n this.events.dispatch('conversation:controller-disposed', this);\n this.active = false;\n }\n\n onDispose(fn: EventListener) {\n return this.events.subscribe('conversation:controller-disposed', fn);\n }\n\n onStarted(fn: EventListener) {\n return this.events.subscribe('conversation:started', fn);\n }\n\n disposeProvider(target: ConversationProvider) {\n const index = this.providerIndex(target.name);\n index > -1 && this.registeredProviders.splice(index, 1);\n this.events.dispatch('conversation:providers-changed', { removed: [target.name] });\n if (!this.registeredProviders.length) {\n this.dispose();\n }\n }\n\n onProvidersChange(fn: EventListener) {\n return this.events.subscribe('conversation:providers-changed', fn);\n }\n\n setComponentMountedState(mounted: boolean) {\n if (this.componentMounted === mounted) {\n return;\n }\n this.componentMounted = mounted;\n if (mounted) {\n this.events.dispatch('conversation:unread-message', false);\n this.events.dispatch('conversation:started', true);\n this.active = true;\n }\n this.events.dispatch('conversation:component-mount-changed', mounted);\n }\n\n getComponentMountedState() {\n return this.componentMounted;\n }\n\n onUnreadMessage(fn: EventListener) {\n return this.events.subscribe('conversation:unread-message', fn);\n }\n\n createEntry(\n key: string,\n content: ConversationMessageContent,\n type: ConversationMessageType,\n sender?: ConversationMessageSender,\n timestamp?: number | null\n ): ConversationEntry {\n const message: ConversationMessage = {\n key,\n content,\n type,\n sender: sender || null,\n timestamp: timestamp || timestamp === null ? timestamp : Date.now(),\n };\n this.messages.push(message);\n message.type === ConversationMessageType.Agent &&\n removeTypingState(this.typingActors, sender);\n const entry = new ConversationEntry((updated) => {\n if (updated !== null) {\n const { timestamp: updatedTimestamp = undefined, ...content } = updated;\n message.content = content;\n if (updatedTimestamp) {\n message.timestamp = updatedTimestamp;\n }\n } else {\n const indexToRemove = this.messages.indexOf(message);\n message.content = null;\n if (indexToRemove > -1) {\n this.messages.splice(indexToRemove, 1);\n }\n }\n this.events.dispatch('conversation:message-updated', { message });\n this.update();\n });\n this.events.dispatch('conversation:message-created', { message });\n this.update();\n if (!this.componentMounted) {\n this.events.dispatch('conversation:unread-message', true);\n }\n return entry;\n }\n\n print = (settings: string | ConversationMessageSettings): ConversationEntry => {\n const normalized = getNormalizedMessageSettings(settings);\n\n return this.createEntry(\n normalized.key,\n normalized.content,\n ConversationMessageType.System,\n undefined,\n normalized.timestamp\n );\n };\n\n update() {\n this.events.dispatch('conversation:updated', {\n messages: this.messages,\n loading: this.loaders > 0,\n typingActors: this.typingActors,\n });\n }\n\n getMessageStream() {\n return {\n messages: this.messages,\n loading: this.loaders > 0,\n typingActors: this.typingActors,\n };\n }\n\n setTypingState(sender: ConversationMessageSender, type?: ConversationMessageType) {\n if (this.typingActors.indexOf(sender) === -1) {\n this.typingActors.push(sender);\n this.update();\n }\n\n return () => {\n removeTypingState(this.typingActors, sender);\n this.update();\n };\n }\n\n /**\n * Displays a loader in the conversation.\n */\n loader(): CancelLoaderDelegate {\n this.loaders = this.loaders + 1;\n let dismissed = false;\n if (this.loaders === 1) {\n this.update();\n }\n return () => {\n if (!dismissed) {\n dismissed = true;\n this.loaders = this.loaders - 1;\n if (this.loaders === 0) {\n this.update();\n }\n }\n };\n }\n\n submitForm(key: string, handler: SubmitHandler) {\n this.formHandlers[key] = { ...this.formHandlers[key], submit: handler };\n }\n\n validateForm(key: string, handler: ValidateHandler) {\n this.formHandlers[key] = { ...this.formHandlers[key], validate: handler };\n }\n}\n","import { ComponentPlatform, WidgetSettings } from '@telia-ace/widget-core';\nimport { closeAllModals } from '@telia-ace/widget-plugins';\nimport {\n createStorageWriter,\n StorageCategory,\n StorageMedium,\n StorageScope,\n} from '@telia-ace/widget-services';\nimport { Container, Implementation, Widget } from '@webprovisions/platform';\nimport { ConversationEndedBehavior, ConversationPlatform } from '../';\n\nconst getParentWidget = (widgetName: string, implementation: Implementation) => {\n const mainWidgetName = widgetName.split('_contact');\n return implementation.widgets.get(mainWidgetName[0]);\n};\n\nconst getSeparateWidget = (container: Container) => {\n const originWidget = container.get('$widget');\n const { name, implementation }: Widget = container.get('$widget');\n\n const mainWidget =\n name.indexOf('_contact') > -1 ? getParentWidget(name, implementation) : originWidget;\n const { data }: WidgetSettings = container.get('$settings');\n const { trigger }: WidgetSettings = mainWidget.container.get('$settings');\n const chatWidgetName = `${name\n .replace('_contact-method', '')\n .replace('_contact', '')}_contact-method`;\n\n const chatWidget = implementation.widgets.get(chatWidgetName);\n if (chatWidget && !trigger) {\n return { chatWidget, mainWidget, data };\n }\n return { mainWidget, data };\n};\n\nexport const shouldPreventDefault = (container: Container) => {\n const { chatWidget } = getSeparateWidget(container);\n return !!chatWidget;\n};\n\nexport const openChatWidget = (\n container: Container,\n contactMethod: any /*ContactMethodType*/,\n triggerDOMTarget?: HTMLElement\n) => {\n const { mainWidget, data, chatWidget } = getSeparateWidget(container);\n\n if (chatWidget) {\n if (chatWidget.state === 'activated') {\n return chatWidget.invoke('open').then(() => {\n chatWidget.container.getAsync('conversation').then((conversation) => {\n conversation\n .navigateToConversationIfActive(contactMethod.id)\n .then(() => closeAllModals(container));\n });\n });\n }\n return chatWidget\n .activate()\n .then(() => {\n const { trigger } = chatWidget.container.get('$settings');\n trigger.action = 'hide'; // could be default in configuration\n return chatWidget\n .invoke('setSettings', () => ({\n data,\n trigger,\n activate: true,\n }))\n .then(() => {\n return chatWidget.container\n .getAsync('components')\n .then((components: ComponentPlatform) => {\n /**\n * Could cause issues if target widget is no longer as specific for this use case\n */\n const contactMethodsQuery = components\n .components()\n .ofType('contact-method');\n components.write({\n key: 'setContactMethodId',\n attributes: {\n properties: {\n id: contactMethod.id,\n guideId: contactMethod.guideId,\n },\n },\n target: contactMethodsQuery,\n provider: 'localStorage',\n });\n const conversationsQuery = components\n .components()\n .ofType('conversation');\n components.write({\n key: 'setConversationProvider',\n attributes: {\n properties: { providers: [contactMethod.clientName] },\n },\n target: conversationsQuery,\n provider: 'localStorage',\n });\n });\n });\n })\n .then(() => {\n return chatWidget.invoke('attach', {\n key: 'contact-method',\n triggerDOMElement: triggerDOMTarget,\n withRenderState: 'open',\n });\n })\n .then(() => {\n createStorageWriter(\n chatWidget.container,\n 'activeStickyWidget',\n StorageCategory.Necessary,\n {\n medium: StorageMedium.Local,\n scope: StorageScope.Implementation,\n }\n ).then((write) => write(chatWidget.name));\n\n return chatWidget.container\n .getAsync('conversation')\n .then((platform) => {\n platform.setConversationEndedBehavior(ConversationEndedBehavior.Deactivate);\n })\n .then(() => closeAllModals(container))\n .then(() => false);\n });\n }\n mainWidget.container.getAsync('conversation').then((platform: ConversationPlatform) => {\n return platform\n .navigateToConversationIfActive(contactMethod.id)\n .then(() => platform.setConversationEndedBehavior(ConversationEndedBehavior.Navigate));\n });\n return chatWidget ? false : true;\n};\n\nexport const navigateToConversation = (\n container: Container,\n contactMethod: any /*ContactMethodType*/,\n routeName = 'conversation'\n) => {\n const { mainWidget, chatWidget } = getSeparateWidget(container);\n if (chatWidget) {\n return chatWidget.container.getAsync('router').then((router: any) => {\n router.navigate(routeName, { id: contactMethod.id });\n });\n }\n\n return mainWidget.container.getAsync('conversation').then((platform: ConversationPlatform) => {\n platform.setConversationEndedBehavior(ConversationEndedBehavior.Navigate)?.then(() => {\n mainWidget.container.getAsync('router').then((router: any) => {\n mainWidget.container\n .getAsync('components')\n .then((components: ComponentPlatform) => {\n const conversationQuery = components.components().ofType('conversation');\n components.write({\n key: 'setConversationProvider',\n attributes: { properties: { providers: [contactMethod.clientName] } },\n target: conversationQuery,\n provider: 'localStorage',\n });\n })\n .then(() => {\n router.navigate(routeName, { id: contactMethod.id });\n });\n });\n });\n });\n};\n","import { ComponentResolver, ReactComponent } from '@telia-ace/widget-core';\nimport { Container } from '@webprovisions/platform';\nimport { lazy } from 'react';\nimport { ConversationPlatform } from '..';\n\nexport const registerCustomMessageComponent = (\n container: Container,\n type: string,\n component: ReactComponent\n) => {\n return container.getAsync('componentResolver').then(async (o: ComponentResolver) => {\n const platform = await ConversationPlatform.getInstance(container);\n platform.addSubscription(\n o.registerComponent(\n type,\n lazy(() => component)\n )\n );\n });\n};\n","import {\n ComponentNodeController,\n ComponentPlatform,\n ComponentQuery,\n ReactComponent,\n} from '@telia-ace/widget-core';\nimport { RouteData, RoutingService } from '@telia-ace/widget-routing';\nimport {\n createStorageWriter,\n readStorage,\n StorageCategory,\n StorageMedium,\n StorageWriter,\n} from '@telia-ace/widget-services';\nimport { lock } from '@telia-ace/widget-utilities';\nimport {\n Container,\n EventManager,\n EventSubscriptionCancellation,\n Widget,\n} from '@webprovisions/platform';\nimport { ConversationController } from './conversation-controller';\nimport { ConversationProvider } from './conversation-provider';\nimport { navigateToConversation, openChatWidget, shouldPreventDefault } from './utils';\nimport { registerCustomMessageComponent } from './utils/custom-message';\n\nconst STORAGE_KEY = 'conversations';\n\nexport type ConversationHandler = (\n conversation: ConversationProvider,\n component: ComponentNodeController\n) => void | (() => void);\n\nexport type UnregisterControllerDelegate = () => void;\n\nexport type ConversationProviderRegistration = {\n name: string;\n handler: ConversationHandler;\n};\n\nexport enum ConversationEndedBehavior {\n Deactivate = 'deactivate',\n Navigate = 'navigate',\n None = 'none',\n}\n\nexport type SessionInfo = {\n id?: string;\n route?: RouteData;\n conversationEndedBehavior?: ConversationEndedBehavior;\n};\n\nexport class ConversationPlatform {\n events: EventManager;\n private controllers: {\n conversation: ConversationController;\n component: ComponentNodeController;\n }[] = [];\n private providers: ConversationProviderRegistration[] = [];\n private disposeProviders: { [providerKey: string]: (() => void)[] } = {};\n private subscriptions: EventSubscriptionCancellation[] = [];\n private storageWriter: StorageWriter | null = null;\n private router: RoutingService | null = null;\n private buttonQuery: ComponentQuery | null = null;\n private sessionInfo: SessionInfo | null = null;\n\n constructor(private container: Container, private components: ComponentPlatform) {\n const widget: Widget = container.get('$widget');\n this.events = widget.events.createChild(this);\n }\n\n initialize() {\n createStorageWriter(this.container, STORAGE_KEY, StorageCategory.Necessary, {\n medium: StorageMedium.Local,\n }).then((writer) => (this.storageWriter = writer));\n\n readStorage<SessionInfo>(this.container, STORAGE_KEY, StorageMedium.Local).then(\n (storedSession) => {\n this.buttonQuery = this.components\n .components()\n .ofType('conversation-return-button');\n if (storedSession) {\n this.sessionInfo = storedSession;\n if (storedSession.id && storedSession.route) {\n this.writeToComponents({ active: true, alert: { show: false } });\n }\n }\n }\n );\n this.container.getAsync('router').then((router) => (this.router = router));\n this.events.subscribe('conversation:ended', (event, data) => {\n switch (this.sessionInfo?.conversationEndedBehavior) {\n case ConversationEndedBehavior.Deactivate:\n const widget: Widget = this.container.get('$widget');\n widget.deactivate();\n break;\n case ConversationEndedBehavior.Navigate:\n const initialRoute = this.router?.getInitialRoute();\n if (initialRoute) {\n this.router?.navigate(initialRoute.name);\n }\n break;\n case ConversationEndedBehavior.None:\n default:\n break;\n }\n this.writeToComponents({ active: false });\n this.sessionInfo = null;\n this.storageWriter && this.storageWriter();\n });\n }\n\n addSubscription(sub: EventSubscriptionCancellation) {\n this.subscriptions.push(sub);\n }\n\n static getInstance(\n container: Container,\n key: string = 'conversation'\n ): Promise<ConversationPlatform> {\n return lock(container)(() => {\n return container.getAsync(key).then((value: ConversationPlatform) => {\n let conversation = value;\n if (!conversation) {\n return ComponentPlatform.getInstance(container).then((components) => {\n conversation = new ConversationPlatform(container, components);\n conversation.initialize();\n container.registerAsync(key, () => conversation);\n return conversation;\n });\n }\n return conversation;\n });\n });\n }\n\n navigateToConversationIfActive(id: string): Promise<void> {\n return readStorage<SessionInfo>(this.container, STORAGE_KEY, StorageMedium.Local).then(\n (storedSession) => {\n if (storedSession && storedSession.id === id) {\n if (storedSession.route) {\n const { name, params } = storedSession.route;\n this.router?.navigate(name, params);\n }\n }\n }\n );\n }\n\n setConversationEndedBehavior(behavior: ConversationEndedBehavior) {\n return readStorage<SessionInfo>(this.container, STORAGE_KEY, StorageMedium.Local).then(\n (stored) => {\n let storedSession = stored;\n if (storedSession) {\n storedSession.conversationEndedBehavior = behavior;\n } else {\n storedSession = { conversationEndedBehavior: behavior };\n }\n this.sessionInfo = storedSession;\n return (\n (this.storageWriter && this.storageWriter(this.sessionInfo)) ||\n Promise.resolve()\n );\n }\n );\n }\n\n createController(id: string) {\n const index = this.controllers.findIndex((c) => c.conversation.id === id);\n if (index > -1) {\n return this.controllers[index].conversation;\n }\n return new ConversationController(this.container, id);\n }\n\n registerConversationItem(name: string, component: ReactComponent) {\n return registerCustomMessageComponent(this.container, name, component);\n }\n\n registerProvider(name: string, handler: ConversationHandler): void {\n const provider = {\n name,\n handler,\n };\n this.providers.push(provider);\n // execute provider for all matching controllers\n this.controllers\n .filter((controller) => controller.conversation.providers.indexOf(name) > -1)\n .forEach((controller) => {\n this.invokeHandler(provider, controller);\n });\n }\n\n registerController(\n conversation: ConversationController,\n component: ComponentNodeController\n ): boolean {\n const index = this.controllers.findIndex((c) => c.conversation.id === conversation.id);\n let controller: any;\n if (index < 0) {\n controller = { conversation, component };\n this.controllers.push(controller);\n const invokeHandlers = (providers: string[]) => {\n if (providers) {\n this.providers\n .filter((provider) => providers.indexOf(provider.name) > -1)\n .forEach((provider) => {\n this.invokeHandler(provider, controller);\n });\n }\n };\n\n this.subscriptions.push(\n conversation.onDispose((event, data) => {\n const index = this.controllers.findIndex((c) => c.conversation === data);\n index > -1 && this.controllers.splice(index, 1);\n this.components\n .components()\n .ofType('conversation-return-button')\n .select()\n .writeProperties({ active: false });\n\n this.events.dispatch('conversation:ended', {}, { bubbles: true });\n })\n );\n this.subscriptions.push(\n conversation.onProvidersChange((event, data) => {\n const { added, removed }: { added: string[]; removed: string[] } = data;\n removed.forEach((removedProvider) => {\n this.disposeProviders[removedProvider].forEach((dispose) => {\n dispose();\n });\n });\n invokeHandlers(added);\n })\n );\n\n this.subscriptions.push(\n conversation.onStarted((event, isActive) => {\n const session: SessionInfo = {\n id: conversation.id,\n route: this.router?.getRouteData(),\n conversationEndedBehavior: this.sessionInfo?.conversationEndedBehavior,\n };\n this.sessionInfo = session;\n this.storageWriter && this.storageWriter(session);\n\n this.writeToComponents({ active: isActive });\n })\n );\n\n this.subscriptions.push(\n conversation.onUnreadMessage((event, data) => {\n this.events.dispatch('conversation:unread-message', data);\n this.writeToComponents({ alert: { show: data } });\n })\n );\n\n invokeHandlers(conversation.providers);\n return true;\n }\n controller = this.controllers[index];\n return false;\n }\n\n private writeToComponents(properties: any, key: string = 'conversationReturnButtonState') {\n if (this.buttonQuery) {\n this.components.write({\n key: 'conversationReturnButtonState',\n attributes: { properties },\n target: this.buttonQuery,\n provider: 'localStorage',\n });\n }\n }\n\n private invokeHandler(provider: ConversationProviderRegistration, controller: any) {\n const dispose = provider.handler(\n controller.conversation.createProvider(provider.name),\n controller.component\n );\n if (dispose) {\n if (!this.disposeProviders[provider.name]) {\n this.disposeProviders[provider.name] = [];\n }\n this.disposeProviders[provider.name].push(dispose);\n }\n }\n\n getComponentRoute() {\n return readStorage<SessionInfo>(this.container, STORAGE_KEY, StorageMedium.Local).then(\n (stored) => stored?.route\n );\n }\n\n dispose() {\n Object.keys(this.disposeProviders).forEach((key) => {\n this.disposeProviders[key].forEach((dispose) => {\n dispose();\n });\n });\n this.subscriptions.forEach((unsubscribe) => {\n unsubscribe();\n });\n this.controllers = [];\n this.providers = [];\n }\n\n public static async handleContactMethodClick(\n event: any,\n container: Container,\n contactMethod: any,\n callback?: Function\n ) {\n if (shouldPreventDefault(container)) {\n event.preventDefault();\n let triggerEl = document.getElementById('humany-dynamic-anchor');\n if (!triggerEl) {\n triggerEl = document.createElement('a');\n triggerEl.setAttribute('href', '#');\n triggerEl.id = 'humany-dynamic-anchor';\n document.body.appendChild(triggerEl);\n }\n openChatWidget(container, contactMethod, triggerEl);\n }\n openChatWidget(container, contactMethod);\n }\n\n public static async handleContactMethodSubmit(container: Container, contactMethod: any) {\n return navigateToConversation(container, contactMethod);\n }\n}\n","import { Form, FormBuilder } from '@telia-ace/widget-forms';\nimport { Symbol } from '@telia-ace/widget-ui';\n\nexport type ConversationMessageSettings = {\n key?: string;\n timestamp?: number;\n title?: string;\n body?: string;\n actions?: { [actionKey: string]: any };\n form?: (builder: FormBuilder) => void;\n type?: string;\n items?: ConversationMessageList[];\n [key: string]: any;\n};\n\nexport type NormalizedMessageSettings = {\n content: ConversationMessageContent;\n key: string;\n timestamp: number | null;\n};\n\nexport type ConversationMessageList = {\n header?: string;\n itemKey: string;\n type?: ConversationMessageListType;\n items: ConversationMessageListItem[];\n};\n\nexport type ConversationMessageListItem = {\n icon?: string;\n type?: ConversationMessageListItemType;\n actions?: { [actionKey: string]: any };\n form?: Form;\n body?: string;\n key: string;\n [key: string]: any;\n};\n\nexport type ConversationMessageContent = {\n title?: string;\n body?: string;\n actions?: { [actionKey: string]: any };\n items?: ConverstationMessageItem<any>[];\n form?: Form;\n [key: string]: any;\n};\n\nexport type ConverstationMessageItem<T, R = ItemPayload> = R extends [T, any] ? R : never;\n\nexport type ConversationMessageUpdateSettings = ConversationMessageContent & {\n timestamp?: number;\n};\n\nexport type ConversationMessageSender = {\n name?: string;\n avatar?: string | Symbol;\n};\n\nexport enum ConversationMessageListType {\n Ordinary = 'ordinary',\n Seperator = 'seperator',\n}\n\nexport enum ConversationMessageListItemType {\n Header = 'header',\n LinkList = 'link-list',\n Separator = 'separator',\n NoGoodAlternative = 'no-good-alternative',\n ButtonList = 'button-list',\n Text = 'text',\n HTML = 'html',\n FeedbackList = 'feedback-list',\n}\n\ntype LinkListItem = [\n ConversationMessageListItemType.LinkList,\n {\n actions: { [key: string]: string };\n }\n];\ntype HeaderItem = [ConversationMessageListItemType.Header, string];\ntype TextItem = [ConversationMessageListItemType.Text, string];\ntype SeparatorItem = [ConversationMessageListItemType.Separator, undefined];\ntype NoGoodAlternativeItem = [\n ConversationMessageListItemType.NoGoodAlternative,\n {\n body: string;\n }\n];\ntype ButtonListItem = [\n ConversationMessageListItemType.ButtonList,\n {\n actions: { [key: string]: string };\n }\n];\ntype FeedbackListItem = [\n ConversationMessageListItemType.FeedbackList,\n {\n actions: { [key: string]: string };\n }\n];\ntype HTMLItem = [\n ConversationMessageListItemType.HTML,\n {\n body: string;\n }\n];\n\ntype ItemPayload =\n | LinkListItem\n | HeaderItem\n | TextItem\n | SeparatorItem\n | NoGoodAlternativeItem\n | ButtonListItem\n | HTMLItem\n | FeedbackListItem;\n","import { RoutingService } from '@telia-ace/widget-routing';\nimport { createReactComponent } from '@telia-ace/widget-ui';\nimport { Container } from '@webprovisions/platform';\nimport { ConversationMessage, ConversationMessageType } from '../../conversation-controller';\nimport { ConversationPlatform } from '../../conversation-platform';\nimport { ConversationMessageContent, ConversationMessageSender } from '../../types';\n\nexport type BundledConversationMessage = {\n timestamp: number;\n content: [BundledMessageContent];\n sender: ConversationMessageSender;\n type: ConversationMessageType;\n};\n\ntype BundledMessageContent = {\n key: string;\n} & ConversationMessageContent;\n\nexport type ConversationContent = {\n loading: boolean;\n typingActors: ConversationMessageSender[];\n messages: ConversationMessage[];\n};\n\n/**\n * Group items by sender, type and time. Current grouping threshold is 2000 ms.\n * Put this as a property on either the component or on the provider?\n * Could possibly be implemented directly in the createEntry method\n * of the conversation controller to avoid iterating over the entire array on\n * each update.\n */\nconst groupedMessages = (\n messages: ConversationMessage[],\n timeout?: number\n): BundledConversationMessage[] => {\n return messages.reduce((acc: any[], current: any, index: number) => {\n const newItem = {\n ...current,\n content: [{ ...current.content, key: current.key }],\n };\n if (acc.length > 0 && current.type !== ConversationMessageType.System) {\n const previous = acc[acc.length - 1];\n if (\n (!timeout && timeout !== 0) ||\n Math.abs(previous.timestamp - current.timestamp) < timeout\n ) {\n if (\n previous.sender?.name === current.sender?.name &&\n previous.type === current.type\n ) {\n previous.timestamp = current.timestamp;\n previous.content.push({ ...current.content, key: current.key });\n return acc;\n }\n }\n }\n acc.push(newItem);\n return acc;\n }, []);\n};\n\nexport type ConversationComponentProperties = {\n providers: string[];\n messages: BundledConversationMessage[]; // internal\n loading: boolean;\n inputPlaceholder: string;\n inputDisabled: boolean;\n inputHidden: boolean;\n inputMultiline: boolean;\n userLabel: string;\n avatarSize: string;\n typingActors: any[]; // internal\n sendButtonLabel: string;\n secondaryAction?: { icon?: string; action: string; label: string };\n};\n\nconst ConversationComponent = (container: Container) => {\n return Promise.all([\n ConversationPlatform.getInstance(container),\n container.getAsync('router'),\n ]).then(([platform, router]: [ConversationPlatform, RoutingService]) => {\n return createReactComponent(\n container,\n 'conversation',\n import('./conversation'),\n (component) => {\n const routeData = router.getRouteData();\n const name = routeData.params.id || component.node.name || 'component';\n const conversation = platform.createController(name);\n const isNewController = platform.registerController(conversation, component);\n\n const messageGroupingTimeout = 3 * 60 * 1000;\n\n const setProperties = (properties: ConversationComponentProperties) => {\n const { providers = [] } = properties;\n if (providers) {\n const providerKeys = Array.isArray(providers) ? providers : [providers];\n conversation.setProviders(providerKeys);\n return providerKeys;\n }\n };\n setProperties(component.properties<ConversationComponentProperties>(setProperties));\n\n conversation.setComponentMountedState(true);\n\n const writeMessages = (messageStream: any) => {\n const { loading, typingActors, messages } = messageStream;\n component.writeProperties({\n loading,\n typingActors,\n messages: groupedMessages(messages, messageGroupingTimeout),\n });\n };\n\n writeMessages(conversation.getMessageStream());\n\n if (isNewController) {\n // todo: dont create actions here, there will be duplicates due to reuseController = true\n component.actions.create('user-submit', (data, options) => {\n if (options) {\n const { preventDefault, validationPromise } = options;\n if (preventDefault) {\n if (validationPromise) {\n validationPromise().then((text: string) => {\n if (text) {\n conversation.user.print(text);\n }\n });\n }\n return;\n }\n }\n conversation.user.print(data.text);\n });\n\n component.actions.create('user-typing', (data, options) => {});\n\n component.actions.create('form', (data, options) => {});\n\n component.actions.create('action', (data, options) => {});\n }\n\n const unsubscribe = conversation.events.subscribe(\n 'conversation:updated',\n (e: any, conversationData: ConversationContent) => {\n writeMessages(conversationData);\n }\n );\n\n return () => {\n conversation.setComponentMountedState(false);\n unsubscribe();\n if (!conversation.active) {\n // unregisterController();\n // todo: add possibility to dispose this through extendComponent()\n // component.dispose();\n writeMessages({ messages: [], typingActors: [], loading: false });\n }\n };\n },\n { reuseController: true }\n );\n });\n};\n\nexport default ConversationComponent;\n","import { Typography } from '@telia-ace/widget-ui';\nimport styled, { css, keyframes } from 'styled-components';\n\nexport const Avatar = styled.div<any>`\n width: ${(p) => p.avatarSize || '32px'};\n height: ${(p) => p.avatarSize || '32px'};\n border-radius: 50%;\n background-color: ${(p) => p.theme.colors?.accent};\n border: ${(p) => p.theme.border};\n grid-area: avatar;\n align-self: flex-end;\n justify-self: center;\n overflow: hidden;\n margin-right: ${(p) => p.theme.sizes?.normal};\n display: flex;\n justify-content: center;\n align-items: center;\n color: ${(p) => p.theme.colors?.text};\n\n > img {\n height: 100%;\n width: 100%;\n object-fit: cover;\n }\n\n > svg {\n width: 90%;\n height: 90%;\n padding: 10%;\n color: ${(p) => p.theme.colors?.text};\n\n line,\n path,\n circle,\n fill {\n stroke: ${(p) => p.theme.colors?.text};\n }\n }\n`;\n\nexport const LoaderAnimation = keyframes`\n 0% {\n opacity: 0;\n }\n 75% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n`;\n\nexport const Loader = styled.div`\n display: flex;\n justify-content: center;\n > div {\n height: 10px;\n width: 10px;\n border-radius: 50%;\n margin: 5px;\n background-color: ${(p) => p.theme.colors?.text};\n animation: ${LoaderAnimation} 1s infinite;\n }\n > div:nth-child(2) {\n animation-delay: 100ms;\n }\n > div:nth-child(3) {\n animation-delay: 200ms;\n }\n`;\n\nexport const ContentBundle = styled.div`\n grid-area: content;\n max-width: 100%;\n overflow: hidden;\n`;\n\nexport const MessageTitle = styled(Typography)`\n font-size: ${(p) => p.theme.fonts?.normal};\n font-weight: normal;\n margin: 0;\n`;\n\nexport const MessageContainer = styled.div`\n display: flex;\n`;\n\nexport const MessageContent = styled.div<any>`\n background-color: ${(p) => (p.user ? p.theme.colors?.primary : p.theme.colors?.accent)};\n color: ${(p) => (p.user ? p.theme.colors?.accent : p.theme.colors?.text)};\n border-radius: 5px; // TODO: prop?\n border: 1px solid rgb(231, 231, 231);\n padding-top: calc(${(p) => p.theme.sizes?.medium} - ${(p) => p.theme.sizes?.normal});\n padding-bottom: calc(${(p) => p.theme.sizes?.medium} - ${(p) => p.theme.sizes?.normal});\n margin-top: ${(p) => p.theme.sizes?.normal};\n display: inline-block;\n && > * {\n overflow-wrap: break-word;\n word-wrap: break-word;\n word-break: break-all;\n word-break: break-word;\n hyphens: auto;\n }\n max-width: 100%;\n ${(p) => p.fullWidth && 'width: 100%;'}\n\n ${(p) =>\n !p.user &&\n css`\n border: ${p.theme.border};\n `}\n ${(p) => p.user && 'margin-left: auto'};\n\n ${(p) =>\n p.stacked === 'first' &&\n p.user &&\n css<any>`\n border-bottom-right-radius: 1px; // TODO: Prop?\n `}\n ${(p) =>\n p.stacked === 'middle' &&\n p.user &&\n css<any>`\n border-bottom-right-radius: 1px;\n border-top-right-radius: 1px;\n `}\n ${(p) =>\n p.stacked === 'last' &&\n p.user &&\n css<any>`\n border-top-right-radius: 1px;\n `}\n ${(p) =>\n p.stacked === 'first' &&\n !p.user &&\n css<any>`\n border-bottom-left-radius: 1px;\n `}\n ${(p) =>\n p.stacked === 'middle' &&\n !p.user &&\n css<any>`\n border-bottom-left-radius: 1px;\n border-top-left-radius: 1px;\n `}\n ${(p) =>\n p.stacked === 'last' &&\n !p.user &&\n css<any>`\n border-top-left-radius: 1px;\n `};\n\n ${(p) =>\n !p.stacked &&\n css<any>`\n ${p.user ? 'border-bottom-right-radius: 1px;' : 'border-bottom-left-radius: 1px;'}\n `};\n\n transition: border-radius 500ms linear;\n`;\n\nexport const MessageContentPart = styled.div<{ noPadding?: boolean }>`\n padding: ${(p) => p.theme.sizes?.normal} ${(p) => p.theme.sizes?.medium};\n\n ${(p) =>\n p.noPadding &&\n css`\n padding: 0;\n `}\n\n margin-bottom: ${(p) => p.theme.sizes?.normal};\n &:last-child {\n margin-bottom: 0;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\ntype Props = {\n className?: string;\n name?: string;\n timestamp?: number | null;\n};\n\nconst StyledTimestamp = styled.p`\n && {\n font-size: ${(p) => p.theme.fonts?.small};\n font-weight: 300;\n }\n padding-top: ${(p) => p.theme.sizes?.small};\n margin: 0;\n line-height: 1.5em;\n grid-area: info;\n color: ${(p) => p.theme.colors?.text};\n`;\n\nconst getTimestamp = (raw: number) => {\n return new Date(raw).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n};\n\nconst Timestamp: React.FC<Props> = ({ className, name, timestamp }) => {\n if (!name && !timestamp) {\n return null;\n }\n\n let output = '';\n if (name) {\n if (timestamp) {\n output = `${name}: ${getTimestamp(timestamp)}`;\n } else {\n output = name;\n }\n } else if (timestamp) {\n output = getTimestamp(timestamp);\n }\n\n return <StyledTimestamp>{output}</StyledTimestamp>;\n};\n\nexport default Timestamp;\n","import { SymbolBadge, useProperties } from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport { ConversationMessageSender } from '../../../types';\nimport { ConversationComponentProperties } from '../conversation-component';\nimport { Avatar } from '../conversation-styles';\nimport Timestamp from './timestamp';\n\ntype Props = {\n className?: string;\n children: any;\n sender: ConversationMessageSender;\n timestamp: number | null;\n};\n\nconst AgentMessage: React.FC<Props> = ({ className, children, sender, timestamp }) => {\n const { avatar, name } = sender;\n const { avatarSize } = useProperties<ConversationComponentProperties>();\n\n return (\n <StyledAgentMessage\n hasAvatar={!!avatar}\n className={appendClassNames(className, 'humany-conversation-agent-message')}\n >\n {avatar && (\n <Avatar avatarSize={avatarSize}>\n {typeof avatar === 'string' ? (\n <img src={avatar} />\n ) : (\n <SymbolBadge symbol={avatar} />\n )}\n </Avatar>\n )}\n {children}\n <Timestamp name={name} timestamp={timestamp}></Timestamp>\n </StyledAgentMessage>\n );\n};\n\nexport const StyledAgentMessage = styled.div<any>`\n display: grid;\n margin-right: 10%;\n width: 90%;\n ${(p) =>\n p.hasAvatar\n ? css`\n grid-template-columns: auto 1fr;\n grid-template-rows: 1fr auto;\n grid-template-areas:\n 'avatar content'\n '. info';\n `\n : css`\n grid-template-columns: 1fr;\n grid-template-rows: 1fr auto;\n grid-template-areas:\n 'content'\n 'info';\n `};\n`;\n\nexport default AgentMessage;\n","import { useComponent } from '@telia-ace/widget-ui';\nimport React, { Suspense } from 'react';\nimport { MessageContent, MessageContentPart } from '../conversation-styles';\n\nexport type Props = {\n type: any;\n content: any;\n isUser: any;\n stacked: any;\n};\n\nconst CustomMessage: React.FC<Props> = (props) => {\n const CustomComponent = useComponent(props.type);\n\n if (!CustomComponent) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <MessageContent\n user={props.isUser}\n stacked={!!props.stacked && props.stacked}\n fullWidth={!!props.content.form || !!props.content.actions}\n >\n <MessageContentPart\n noPadding={!!props.content.noPadding && props.content.noPadding}\n >\n <CustomComponent {...props.content} />\n </MessageContentPart>\n </MessageContent>\n </Suspense>\n );\n};\n\nexport default CustomMessage;\n","import { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled from 'styled-components';\nimport Timestamp from './timestamp';\n\nexport type Props = {\n className?: string;\n timestamp: number;\n discrete?: boolean;\n fullWidth?: boolean;\n children: any;\n};\n\nconst SystemMessage: React.FC<Props> = ({\n className,\n children,\n timestamp,\n discrete,\n fullWidth,\n}) => {\n return (\n <StyledSystemMessage\n className={appendClassNames(className, 'humany-conversation-system-message')}\n fullWidth={fullWidth}\n >\n {discrete ? (\n <Discrete className=\"humany-conversation-discrete-message\">\n {children}\n <Timestamp timestamp={timestamp}></Timestamp>\n </Discrete>\n ) : (\n <>\n {children}\n <Timestamp timestamp={timestamp}></Timestamp>\n </>\n )}\n </StyledSystemMessage>\n );\n};\n\nexport const StyledSystemMessage = styled.div<any>`\n ${(p) => p.fullWidth && 'width: 100%'};\n padding: 0 ${(p) => p.theme.sizes?.large};\n overflow: auto;\n`;\n\nexport const Discrete = styled.div`\n text-align: center;\n word-wrap: break-word;\n font-size: ${(p) => p.theme.fonts?.normal};\n color: ${(p) => p.theme.colors?.text};\n > p {\n margin: 0;\n }\n`;\n\nexport default SystemMessage;\n","import { useProperties } from '@telia-ace/widget-ui';\nimport { appendClassNames } from '@telia-ace/widget-utilities';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { ConversationComponentProperties } from '../conversation-component';\nimport Timestamp from './timestamp';\n\nexport type Props = {\n className?: string;\n timestamp: number;\n children: any;\n};\n\nconst UserMessage: React.FC<Props> = ({ className, children, timestamp }) => {\n const { userLabel = '' } = useProperties<ConversationComponentProperties>();\n return (\n <StyledUserMessage\n className={appendClassNames(className, 'humany-conversation-user-message')}\n >\n {children}\n <Timestamp name={userLabel} timestamp={timestamp}></Timestamp>\n </StyledUserMessage>\n );\n};\n\nconst StyledUserMessage = styled.div`\n margin-left: 10%;\n width: 90%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;\n\nexport default UserMessage;\n","import { useComponent } from '@telia-ace/widget-ui';\nimport React from 'react';\n\ntype Props = {\n type: string;\n content?: { [key: string]: any };\n};\nconst CustomMessageListItem: React.FC<Props> = ({ type, content = {} }) => {\n const Component = useComponent(type);\n\n if (!Component || !type) {\n return null;\n }\n return <Component {...content} />;\n};\n\nexport default CustomMessageListItem;\n","import { FormComponent } from '@telia-ace/widget-forms';\nimport {\n borderTabStyle,\n buttonCss,\n Html,\n Icon,\n invertedHoverButton,\n Lightbox,\n List,\n SymbolBadge,\n useDispatch,\n} from '@telia-ace/widget-ui';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport React, { Fragment } from 'react';\nimport styled, { css } from 'styled-components';\nimport {\n ConversationMessageContent,\n ConversationMessageListItemType,\n ConverstationMessageItem,\n} from '../../types';\nimport { MessageContent, MessageContentPart as Part, MessageTitle } from './conversation-styles';\nimport { CustomMessage } from './message-types';\nimport CustomMessageListItem from './message-types/custom-message-list-item';\n\nconst imageLightboxRenderer = (\n attrs: React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLImageElement>, HTMLImageElement>\n) => <Lightbox attrs={attrs} />;\n\nconst htmlParseInstructions = {\n transform: {\n img: imageLightboxRenderer,\n },\n};\n\ntype Props = {\n className?: string;\n content: ConversationMessageContent;\n isUser: boolean;\n stacked?: string;\n CustomComponent?: any;\n};\n\nconst ConversationContent: React.FC<Props> = ({ content, isUser, stacked }) => {\n const dispatch = useDispatch();\n const { title, body, actions, form, type, items } = content;\n\n if (type)\n return <CustomMessage type={type} content={content} isUser={isUser} stacked={stacked} />;\n\n return (\n <MessageContent\n noPadding\n user={isUser}\n stacked={!!stacked && stacked}\n fullWidth={!!form || !!actions}\n >\n {title && (\n <Part>\n <MessageTitle variant=\"h2\">{title}</MessageTitle>\n </Part>\n )}\n {body && (\n <Part>\n <StyledHtml html={body} htmlParseInstruction={htmlParseInstructions} />\n </Part>\n )}\n {form && (\n <Part>\n <StyledForm\n {...form}\n onChange={(key: string, data: any) => {\n dispatch('form', {\n data,\n formKey: form.schema.id,\n actionKey: key,\n });\n }}\n />\n </Part>\n )}\n {actions && (\n <Part>\n <StyledActionList\n items={Object.keys(actions).map((i: any) => {\n return { label: actions[i], actionKey: i };\n })}\n renderItem={(item: any) => {\n return (\n <li key={item.actionKey}>\n <StyledActionButton\n onClick={() => {\n dispatch('action', item.actionKey);\n }}\n >\n {item.label}\n </StyledActionButton>\n </li>\n );\n }}\n />\n </Part>\n )}\n {items && (\n <Fragment>\n <Part key={uuid()} noPadding>\n <StyledActionList\n items={items.map(([type, content]: ConverstationMessageItem<any>) => {\n return { type, content };\n })}\n renderItem={(item: any) => {\n const itemKey = uuid();\n switch (item.type) {\n case ConversationMessageListItemType.Header: {\n return (\n <ConversationListItem key={itemKey}>\n <HeaderText>{item.content}</HeaderText>\n </ConversationListItem>\n );\n }\n case ConversationMessageListItemType.Text: {\n return (\n <ConversationListItem key={itemKey}>\n <span>{item.content}</span>\n </ConversationListItem>\n );\n }\n case ConversationMessageListItemType.HTML: {\n return (\n <ConversationListItem key={itemKey}>\n <StyledHtml\n html={item.content.body}\n htmlParseInstruction={htmlParseInstructions}\n />\n </ConversationListItem>\n );\n }\n case ConversationMessageListItemType.Separator: {\n return (\n <ConversationListItem key={itemKey} noPadding>\n <SeparatorPadding>\n <Separator />\n </SeparatorPadding>\n </ConversationListItem>\n );\n }\n case ConversationMessageListItemType.LinkList: {\n return (\n <ConversationListItem key={itemKey}>\n <StyledLinkList\n items={Object.keys(item.content.actions).map(\n (i: any) => {\n return {\n label: item.content.actions[i],\n actionKey: i,\n };\n }\n )}\n renderItem={(item: any) => {\n return (\n <li key={item.actionKey}>\n <StyledLinkButton\n help={item.actionKey === 'help'}\n onClick={() => {\n dispatch(\n 'action',\n item.actionKey\n );\n }}\n >\n {item.label}\n {item.actionKey === 'help' && (\n <SymbolBadge\n size={14}\n symbol={{\n type: 'Svg',\n content:\n 'caret-down',\n }}\n />\n )}\n </StyledLinkButton>\n </li>\n );\n }}\n />\n </ConversationListItem>\n );\n }\n case ConversationMessageListItemType.ButtonList: {\n const items = Array.isArray(item.content.actions)\n ? item.content.actions\n : Object.keys(item.content.actions).map((i) => {\n return {\n label: item.content.actions[i],\n actionKey: i,\n };\n });\n return (\n <ConversationListItem key={itemKey}>\n <StyledButtonList\n items={items}\n renderItem={(item: any) => {\n return (\n <li key={item.actionKey}>\n <StyledButtonListButton\n onClick={() => {\n dispatch(\n 'action',\n item.actionKey\n );\n }}\n >\n <SymbolBadge\n symbol={item.symbol}\n />\n\n {item.label}\n </StyledButtonListButton>\n </li>\n );\n }}\n />\n </ConversationListItem>\n );\n }\n case ConversationMessageListItemType.NoGoodAlternative: {\n return (\n <ConversationListItem key={itemKey}>\n <NoGoodAlternativeWrapper\n onClick={() => {\n dispatch('action', 'help');\n }}\n >\n <SymbolBadge\n size={14}\n symbol={{\n type: 'FontAwesome',\n content: 'meh-o',\n }}\n />\n <span>{item.content.body}</span>\n </NoGoodAlternativeWrapper>\n </ConversationListItem>\n );\n }\n case ConversationMessageListItemType.FeedbackList: {\n return (\n <ConversationListItem key={itemKey}>\n <StyledButtonList\n items={Object.keys(item.content.actions).map(\n (i: any) => {\n return {\n label: item.content.actions[i],\n actionKey: i,\n };\n }\n )}\n renderItem={(item: any) => {\n return (\n <FeedbackItem key={item.actionKey}>\n <FeedbackButton\n className=\"humany-feedback-button\"\n disabled={false}\n aria-pressed={true}\n data-selected={true}\n data-direction={'vertical'}\n onClick={() => {\n dispatch(\n 'action',\n item.actionKey\n );\n }}\n >\n <Icon\n faIcon={\n item.actionKey == 'yes'\n ? 'smile-o'\n : 'frown-o'\n }\n />\n <span>{item.label}</span>\n </FeedbackButton>\n </FeedbackItem>\n );\n }}\n />\n </ConversationListItem>\n );\n }\n default: {\n return (\n <ConversationListItem key={itemKey} noPadding>\n <CustomMessageListItem\n type={item.type}\n content={item.content}\n />\n </ConversationListItem>\n );\n }\n }\n }}\n />\n </Part>\n </Fragment>\n )}\n </MessageContent>\n );\n};\n\nconst StyledForm = styled(FormComponent)`\n & button.humany-form-component-button {\n ${(p) =>\n invertedHoverButton({\n active: false,\n primaryColor: p.theme.colors?.primary,\n secondaryColor: p.theme.colors?.accent,\n })};\n display: block;\n width: 100%;\n margin-bottom: ${(p) => p.theme.sizes?.normal};\n }\n & button.humany-form-component-submit {\n width: 100%;\n margin: 0;\n :not(:last-child) {\n margin-bottom: ${(p) => p.theme.sizes?.normal};\n }\n }\n`;\n\nconst StyledHtml = styled(Html)<any>`\n white-space: pre-wrap;\n a {\n color: ${(p) => p.theme.colors.link};\n &:focus {\n ${(p) => p.theme.accessibility?.isTabbing && borderTabStyle};\n }\n }\n`;\n\nconst StyledActionList = styled(List)`\n padding: 0;\n list-style: none;\n margin: 0 -${(p) => p.theme.sizes?.normal};\n > li {\n margin: ${(p) => p.theme.sizes?.normal};\n }\n`;\n\nexport const StyledButtonList = styled(List)`\n padding: 0;\n list-style: none;\n > li {\n margin: ${(p) => p.theme.sizes?.small} ${(p) => p.theme.sizes?.normal};\n margin-left: 0;\n display: inline-block;\n }\n`;\n\nconst StyledButtonListButton = styled.button`\n ${buttonCss};\n display: block;\n text-align: left;\n background-color: ${(p) => p.theme.colors?.primary};\n width: 100%;\n color: #fff;\n &:focus {\n ${(p) =>\n p.theme.accessibility?.isTabbing &&\n css`\n ${borderTabStyle}\n background-color: transparent;\n `}\n }\n\n i,\n svg {\n margin-right: ${(p) => p.theme.sizes?.small};\n }\n`;\n\nconst StyledLinkList = styled(List)`\n padding: 0;\n list-style: none;\n > li {\n margin-bottom: ${(p) => p.theme.sizes?.normal};\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nconst HeaderText = styled.strong`\n font-size: ${(p) => p.theme.fonts?.huge};\n`;\n\nconst StyledLinkButton = styled.button<{ help: boolean }>`\n display: block;\n background-color: transparent;\n text-align: left;\n border: none;\n padding: 0;\n font-weight: 300;\n font-family: inherit;\n cursor: pointer;\n color: ${(p) => p.theme.colors?.primary};\n\n ${(p) =>\n p.help &&\n css`\n color: ${p.theme.colors?.text};\n text-decoration: underline;\n\n i,\n svg {\n margin-left: ${p.theme.sizes?.small};\n }\n `}\n`;\n\nconst StyledActionButton = styled.button`\n ${buttonCss};\n display: block;\n background-color: ${(p) => p.theme.colors?.primary};\n width: 100%;\n color: #fff;\n font-family: Lato;\n font-size: ${(p) => p.theme.fonts?.huge};\n font-weight: 300;\n &:focus {\n ${(p) =>\n p.theme.accessibility?.isTabbing &&\n css`\n ${borderTabStyle}\n background-color: transparent;\n `}\n }\n`;\n\nconst SeparatorPadding = styled.div`\n padding-top: calc(${(p) => p.theme.sizes?.medium} - ${(p) => p.theme.sizes?.normal});\n padding-bottom: calc(${(p) => p.theme.sizes?.medium} - ${(p) => p.theme.sizes?.normal});\n`;\n\nconst Separator = styled.div`\n background-color: #efefef;\n height: 1px;\n width: 100%;\n`;\n\nconst NoGoodAlternativeWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n > i,\n svg {\n margin-right: ${(p) => p.theme.sizes?.small};\n }\n`;\n\nconst ConversationListItem = styled.li<{ noPadding?: boolean }>`\n padding-left: ${(p) => (p.noPadding ? 0 : p.theme.sizes?.medium)};\n padding-right: ${(p) => (p.noPadding ? 0 : p.theme.sizes?.medium)};\n`;\n\nconst FeedbackItem = styled.li`\n @media (min-width: 768px) {\n display: list-item !important;\n margin-right: 0 !important;\n margin-top: ${(p) => p.theme.sizes?.normal} !important;\n }\n`;\n\nconst FeedbackButton = styled.button<{\n 'data-selected': boolean;\n 'data-direction': 'horizontal' | 'vertical';\n}>`\n @media (min-width: 768px) {\n min-width: 100%;\n margin-right: 0;\n }\n display: inline-block;\n font-size: ${(p) => p.theme.fonts?.normal};\n border-color: ${(p) => p.theme.colors?.primary} !important;\n font-weight: 300;\n && {\n margin-right: ${(p) => p.theme.sizes?.small};\n }\n ${(p) =>\n p['data-direction'] === 'horizontal' &&\n css`\n width: 225px;\n max-width: calc(50% - ${p.theme.sizes?.large} - ${p.theme.sizes?.small});\n `}\n ${(p) =>\n p['data-direction'] === 'vertical' &&\n css`\n min-width: 150px;\n `}\n ${(p) =>\n invertedHoverButton({\n primaryColor: `${p.theme.colors?.primary}`,\n secondaryColor: '#FFFFFF',\n })}\n i {\n margin: 0 ${(p) => p.theme.sizes?.small} 0 0;\n }\n span {\n }\n`;\n\nexport default ConversationContent;\n","import { ComponentPlatform } from '@telia-ace/widget-core';\nimport { RoutingService } from '@telia-ace/widget-routing';\nimport { createReactComponent, Symbol } from '@telia-ace/widget-ui';\nimport { Container } from '@webprovisions/platform';\nimport { ConversationPlatform } from '../../';\n\nexport enum ButtonMode {\n flat = 'flat',\n flashing = 'flashing',\n flashingGradient = 'flashingGradient',\n}\n\nexport type ReturnButtonProps = {\n label: string;\n active: boolean;\n mode: ButtonMode;\n alert?: {\n symbol?: Symbol;\n show?: boolean;\n label?: string;\n };\n};\n\nconst ConversationReturnButtonComponent = (container: Container) => {\n return Promise.all([\n ComponentPlatform.getInstance(container),\n ConversationPlatform.getInstance(container),\n container.getAsync('router'),\n ]).then(\n ([components, platform, router]: [\n ComponentPlatform,\n ConversationPlatform,\n RoutingService\n ]) => {\n return createReactComponent(\n container,\n 'conversation-return-button',\n import('./return-button'),\n (component) => {\n component.actions.create('toggle', (options = {}) => {\n platform.getComponentRoute()?.then((route) => {\n route && router.navigate(route.name, route.params);\n });\n });\n }\n );\n }\n );\n};\n\nexport default ConversationReturnButtonComponent;\n"],"names":["Part"],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import React from 'react';
2
- import { ConversationMessageContent } from '../../types';
3
- declare type Props = {
4
- className?: string;
5
- content: ConversationMessageContent;
6
- isUser: boolean;
7
- stacked?: string;
8
- CustomComponent?: any;
9
- };
10
- declare const ConversationContent: React.FC<Props>;
11
- export declare const StyledButtonList: import("styled-components").StyledComponent<React.ForwardRefExoticComponent<Pick<import("@telia-ace/widget-ui").ListProps, "key" | "items" | keyof React.HTMLAttributes<HTMLUListElement> | "renderItem" | "renderLi"> & React.RefAttributes<HTMLUListElement>>, any, {}, never>;
12
- export default ConversationContent;
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import { BundledConversationMessage } from './conversation-component';
3
- declare type Props = {
4
- className?: string;
5
- } & BundledConversationMessage;
6
- declare const ConversationMessageComponent: React.FC<Props>;
7
- export default ConversationMessageComponent;
@@ -1,11 +0,0 @@
1
- /// <reference types="react" />
2
- export declare const Avatar: import("styled-components").StyledComponent<"div", any, any, never>;
3
- export declare const LoaderAnimation: import("styled-components").Keyframes;
4
- export declare const Loader: import("styled-components").StyledComponent<"div", any, {}, never>;
5
- export declare const ContentBundle: import("styled-components").StyledComponent<"div", any, {}, never>;
6
- export declare const MessageTitle: import("styled-components").StyledComponent<import("react").FC<import("@telia-ace/widget-ui").TypographyProps>, any, {}, never>;
7
- export declare const MessageContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
8
- export declare const MessageContent: import("styled-components").StyledComponent<"div", any, any, never>;
9
- export declare const MessageContentPart: import("styled-components").StyledComponent<"div", any, {
10
- noPadding?: boolean | undefined;
11
- }, never>;
@@ -1,3 +0,0 @@
1
- import ConversationComponent from './conversation-component';
2
- export { StyledButtonList } from './conversation-content';
3
- export default ConversationComponent;
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- export declare type Props = {
3
- type: any;
4
- content: any;
5
- isUser: any;
6
- stacked: any;
7
- };
8
- declare const CustomMessage: React.FC<Props>;
9
- export default CustomMessage;
@@ -1,2 +0,0 @@
1
- export { default as ConversationComponent, StyledButtonList } from './conversation';
2
- export { default as ConversationReturnButtonComponent } from './return-button';
@@ -1,2 +0,0 @@
1
- import ConversationReturnButtonComponent from './return-button-component';
2
- export default ConversationReturnButtonComponent;