@telia-ace/widget-conversation 1.0.34-experimental.2 → 1.0.34-experimental.21
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/components/conversation/conversation-wrapper.d.ts +8 -0
- package/dist/components/conversation/conversation.d.ts +25 -6
- package/dist/components/conversation/plugin.d.ts +2 -3
- package/dist/components/conversation/ui/conversation-content.d.ts +8 -0
- package/dist/components/conversation/ui/conversation-input.d.ts +12 -0
- package/dist/components/conversation/ui/conversation-message.d.ts +16 -0
- package/dist/components/conversation/ui/message.d.ts +13 -5
- package/dist/conversation-controller.d.ts +2 -2
- package/dist/conversation-wrapper.bfcf4c5c.js +475 -0
- package/dist/conversation-wrapper.bfcf4c5c.js.map +1 -0
- package/dist/index.js +276 -312
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +14 -10
- package/dist/conversation.bc31361a.js +0 -1189
- package/dist/conversation.bc31361a.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-wrapper.bfcf4c5c.js","sources":["../src/components/conversation/ui/conversation-content.ts","../src/components/conversation/ui/conversation-input.ts","../src/components/conversation/ui/conversation-message.ts","../src/components/conversation/ui/message.ts","../src/components/conversation/conversation.ts","../src/components/conversation/conversation-wrapper.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n// import styles from './conversation-content.scss?inline';\n\n// @customElement('conversation-content')\nexport class ConversationContent extends LitElement {\n @property({ type: Array })\n declare messages: any[];\n @property({ type: String })\n declare userLabel: string;\n\n constructor() {\n super();\n\n this.userLabel = '';\n this.messages = [];\n }\n\n // async dispatch(type: string, data: any) {\n // const container = this.requestInstance('container');\n // const descriptor = this.getDescriptor();\n\n // if (!container || !descriptor) {\n // return;\n // }\n // const platform = await ComponentPlatform.getInstance(container);\n // if (!platform) {\n // return;\n // }\n\n // const component = new ComponentQuery(platform).withId(descriptor.id);\n // const actions = platform.actions(component, descriptor.type /*|| uuid()*/);\n\n // actions.dispatch(type, data);\n // }\n\n // getDescriptor() {\n // const ev: CustomEvent<{ descriptor?: { [key: string]: any } }> = new CustomEvent(\n // 'request-descriptor',\n // {\n // detail: {},\n // bubbles: true,\n // composed: true,\n // cancelable: true,\n // }\n // );\n // this.dispatchEvent(ev);\n // return ev.detail.descriptor || null;\n // }\n\n // onUserSubmit(event: CustomEvent<{ text: string }>) {\n // this.dispatch('user-submit', event.detail);\n // }\n\n // onUserTyping(event: CustomEvent<{ length: number }>) {\n // this.dispatch('user-typing', event.detail);\n // }\n\n render() {\n return html`\n <div class=\"scrollable\">\n ${this.messages.map(\n (message) => html`<div class=\"conversation-entry\">\n <conversation-message\n .content=${message.content}\n .sender=${message.sender}\n .messageType=${message.type}\n .timestamp=${message.timestamp}\n .userLabel=${this.userLabel}\n />\n </div>`\n )}\n </div>\n `;\n }\n\n protected createRenderRoot(): Element | ShadowRoot {\n return this;\n }\n}\n// <conversation-input\n// @user-submit=${this.onUserSubmit}\n// @user-typing=${this.onUserTyping}\n// />\n","import { html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { createRef, ref, Ref } from 'lit/directives/ref.js';\n\n// @customElement('conversation-input')\nexport class ConversationInput extends LitElement {\n inputRef: Ref<HTMLInputElement> = createRef<HTMLInputElement>();\n\n @state()\n declare hasContent: boolean;\n\n @property({ type: String })\n declare placeholder: string;\n\n constructor() {\n super();\n this.hasContent = false;\n // this.inputText = '';\n }\n\n onSubmit(e: any) {\n const multiline = false; // TODO:\n if (!e.shiftKey || !multiline) {\n e.preventDefault();\n if (this.inputRef.value!.value.length > 0) {\n this.dispatchEvent(\n new CustomEvent('user-submit', {\n detail: {\n // text: this.inputEl.value,\n text: this.inputRef.value!.value,\n },\n })\n );\n this.inputRef.value!.value = '';\n // dispatch('user-submit', { text: inputText });\n // setInputText('');\n // onChange('');\n }\n } else if (this.inputRef.value!.value.length < 1) {\n e.preventDefault();\n }\n }\n\n onChange(e: any) {\n if (e.target.value.length > 0) {\n this.hasContent = true;\n } else {\n this.hasContent = false;\n }\n // calculateHeight(value);\n if (e.target.value && e.target.value.length > 0) {\n this.dispatchEvent(\n new CustomEvent('user-typing', {\n detail: {\n textLength: e.target.value.length,\n },\n })\n );\n }\n }\n\n render() {\n const multiline = false; // TODO:\n const secondaryAction = false; // TODO:\n\n return html`\n <div\n class=${classMap({\n 'conversation-input': true,\n 'has-content': this.hasContent,\n })}\n >\n ${secondaryAction ? html`Secondary` : nothing}\n ${multiline\n ? html`Multiline`\n : html`\n <input\n ${ref(this.inputRef)}\n @input=${this.onChange}\n placeholder=${this.placeholder}\n />\n `}\n\n <button @click=\"${this.onSubmit}\">\n <ui-symbol-badge\n size=\"22\"\n .symbol=${{ type: 'Svg', content: 'send' }}\n ></ui-symbol-badge>\n </button>\n </div>\n `;\n }\n\n protected createRenderRoot(): Element | ShadowRoot {\n return this;\n }\n}\n","import { css, html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ConversationMessageType } from '../../../conversation-controller';\nimport { BundledConversationMessage } from '../plugin';\n\n// @customElement('conversation-message')\nexport class ConversationMessage extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n }\n .agent-message {\n display: grid;\n margin-right: 10%;\n width: 90%;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr auto;\n grid-template-areas:\n 'content'\n 'info';\n }\n .agent-message.has-avatar {\n grid-template-columns: auto 1fr;\n grid-template-rows: 1fr auto;\n grid-template-areas:\n 'avatar content'\n '. info';\n }\n .content-bundle {\n grid-area: content;\n max-width: 100%;\n overflow: hidden;\n }\n .timestamp {\n font-size: var(--fonts-small);\n color: var(--colors-text);\n font-weight: 300;\n margin: 0;\n line-height: 1.5em;\n grid-area: info;\n }\n `,\n ];\n\n @property({ type: Object })\n declare sender: BundledConversationMessage['sender'] | null;\n\n @property({ type: Array })\n declare content: BundledConversationMessage['content'];\n\n @property({ type: Number })\n declare timestamp: number;\n\n @property({ type: String })\n declare messageType: ConversationMessageType;\n\n @property({ type: String })\n declare userLabel: string;\n\n constructor() {\n super();\n this.content = [];\n this.sender = null;\n this.messageType = ConversationMessageType.System;\n this.userLabel = '';\n }\n\n getMessageStackPosition(index: number) {\n let messageOrder: 'first' | 'last' | 'middle' = 'first';\n if (this.content.length > 1) {\n messageOrder =\n index === 0 ? 'first' : index + 1 === this.content.length ? 'last' : 'middle';\n }\n return messageOrder;\n }\n\n renderTimestamp(name: string, timestamp: number) {\n const getTimestamp = (raw: number) => {\n return new Date(raw).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n };\n if (!name && !timestamp) {\n return nothing;\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 html`<p class=\"timestamp\">${output}</p>`;\n }\n\n render() {\n const createAgentMessage = () => {\n return html`\n <div\n class=${classMap({\n 'conversation-entry': true,\n 'agent-message': true,\n 'has-avatar': !!this.sender?.avatar,\n })}\n >\n ${this.sender?.avatar ? html`` : html`` /* TODO: */}\n <div class=\"content-bundle\">\n ${this.content.map((item, index) => {\n return html`\n <div class=\"message-container message-container-left\">\n <conversation-message-item\n .content=${item}\n .isUser=${this.messageType === 'user'}\n .stacked=${this.getMessageStackPosition(index)}\n />\n </div>\n `;\n })}\n </div>\n ${this.renderTimestamp(this.sender?.name || '', this.timestamp)}\n </div>\n `;\n };\n\n const createSystemMessage = () => {\n return html`SystemMessage`;\n };\n\n const createUserMessage = () => {\n return html`\n <div\n class=${classMap({\n 'conversation-entry': true,\n 'user-message': true,\n })}\n >\n <div class=\"content-bundle\">\n ${this.content.map((item, index) => {\n return html`\n <div class=\"message-container message-container-right\">\n <conversation-message-item\n .content=${item}\n .isUser=${this.messageType === 'user'}\n .stacked=${this.getMessageStackPosition(index)}\n />\n </div>\n `;\n })}\n </div>\n ${this.renderTimestamp(this.userLabel || '', this.timestamp)}\n </div>\n `;\n };\n\n switch (this.messageType) {\n case ConversationMessageType.System:\n return createSystemMessage();\n case ConversationMessageType.Agent:\n return createAgentMessage();\n case ConversationMessageType.User:\n return createUserMessage();\n default:\n return nothing;\n }\n }\n\n protected createRenderRoot(): Element | ShadowRoot {\n return this;\n }\n}\n","import { spread } from '@open-wc/lit-helpers';\nimport { LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { html, unsafeStatic } from 'lit/static-html.js';\nimport { ConversationMessageListItemType, ItemPayload } from '../../../types';\nimport { BundledMessageContent } from '../plugin';\n\nconst mapActions = (actions: any) =>\n Array.isArray(actions)\n ? actions\n : Object.keys(actions).map((i) => {\n return {\n label: actions[i],\n actionKey: i,\n };\n });\n\n// @customElement('conversation-message-item')\nexport class Message extends LitElement {\n @property({ type: Object })\n declare content: BundledMessageContent;\n\n @property({ type: Boolean })\n declare isUser: boolean;\n\n @property({ type: String })\n declare stacked: 'first' | 'last' | 'middle';\n\n constructor() {\n super();\n this.isUser = false;\n this.stacked = 'first';\n }\n\n onActionClick(action: any) {\n this.dispatchEvent(\n new CustomEvent('action', {\n detail: action,\n composed: true,\n bubbles: true,\n cancelable: true,\n })\n );\n }\n\n renderItem(item: ItemPayload) {\n const [type, content] = item;\n\n switch (type) {\n case ConversationMessageListItemType.Text:\n return html`<span class=\"message-type-text\">${content}</span>`;\n case ConversationMessageListItemType.HTML:\n return html`<div class=\"message-type-html\">\n <ui-html .html=${content.body}></ui-html>\n </div>`;\n case ConversationMessageListItemType.Separator: {\n return html`<div class=\"message-type-separator\"></div>`;\n }\n case ConversationMessageListItemType.LinkList: {\n return html`\n <div class=\"message-type-link-list\">\n ${content.header ? html`<h1>${content.header}</h1>` : nothing}\n <ul>\n ${mapActions(content.actions).map((action) => {\n return html`<li>\n <button\n class=\"message-type-link-list-button\"\n aria-label=${action.label}\n title=${action.label}\n @click=${(e: Event) => {\n this.onActionClick(action);\n }}\n >\n ${action.label}\n ${action.actionKey === 'help'\n ? html`\n <ui-symbol-badge\n .size=${14}\n .symbol=${{\n type: 'Svg',\n content: 'caret-down',\n }}\n ></ui-symbol-badge>\n `\n : nothing}\n </button>\n </li>`;\n })}\n </ul>\n </div>\n `;\n }\n case ConversationMessageListItemType.ButtonList: {\n return html`\n <div class=\"message-type-button-list\">\n ${content.header ? html`<h1>${content.header}</h1>` : nothing}\n <ul>\n ${mapActions(content.actions).map((action) => {\n return html`<li>\n <button\n class=\"message-type-button-list-button\"\n aria-label=${action.label}\n title=${action.label}\n @click=${(e: Event) => {\n this.onActionClick(action);\n }}\n >\n <!-- <ui-symbol-badge /> -->\n ${action.label}\n </button>\n </li>`;\n })}\n </ul>\n </div>\n `;\n }\n // case ConversationMessageListItemType.VideoRequest: {\n // return <VideoRequest {...item.content} dispatch={dispatch} />;\n // }\n default: {\n let itemProps = Object.entries(content).reduce<{ [key: string]: any }>(\n (acc, [key, value]) => {\n acc[`.${key}`] = value;\n return acc;\n },\n {}\n );\n return html`<${unsafeStatic(type)} ${spread(itemProps)} />`;\n }\n }\n }\n\n render() {\n return html`\n <div\n class=${classMap({\n content: true,\n user: this.isUser,\n stacked: true,\n 'stacked-first': this.stacked === 'first',\n 'stacked-middle': this.stacked === 'middle',\n 'stacked-last': this.stacked === 'last',\n })}\n >\n <ul class=\"message-list\">\n ${(this.content.items || []).map((item) => {\n return html`<li class=\"message-list-item\">${this.renderItem(item)}</li>`;\n })}\n </ul>\n </div>\n `;\n }\n\n protected createRenderRoot(): Element | ShadowRoot {\n return this;\n }\n}\n","import { ComponentPlatform, ComponentQuery } from '@telia-ace/widget-core';\nimport { Requester } from '@telia-ace/widget-ui';\nimport { html, LitElement, unsafeCSS } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport styles from './conversation.scss?inline';\n\nimport { ConversationContent } from './ui/conversation-content';\nimport { ConversationInput } from './ui/conversation-input';\nimport { ConversationMessage } from './ui/conversation-message';\nimport { Message } from './ui/message';\n\ncustomElements.define('conversation-content', ConversationContent);\ncustomElements.define('conversation-input', ConversationInput);\ncustomElements.define('conversation-message', ConversationMessage);\ncustomElements.define('conversation-message-item', Message);\n\nexport default class Conversation extends Requester(LitElement) {\n static styles = unsafeCSS(styles);\n\n @property({ type: Array })\n declare _messages: any[];\n\n @property({ type: String })\n declare _inputPlaceholder: string;\n\n @property({ type: String })\n declare _userLabel: string;\n\n @property({ type: String })\n declare _conversationControllerId: string;\n\n constructor() {\n super();\n this._messages = [];\n this._userLabel = '';\n this._inputPlaceholder = 'Type your message';\n }\n\n onUserSubmit(event: CustomEvent<{ text: string }>) {\n this.dispatch('user-submit', event.detail);\n }\n\n onUserTyping(event: CustomEvent<{ length: number }>) {\n this.dispatch('user-typing', event.detail);\n }\n\n onActionClick(event: CustomEvent<{ action: any }>) {\n this.dispatch('action', event.detail);\n }\n\n async dispatch(type: string, data: any) {\n const container = this.requestInstance('container');\n const descriptor = this.getDescriptor();\n\n if (!container || !descriptor) {\n return;\n }\n const platform = await ComponentPlatform.getInstance(container);\n if (!platform) {\n return;\n }\n\n const component = new ComponentQuery(platform).withId(descriptor.id);\n const actions = platform.actions(component, descriptor.type /*|| uuid()*/);\n\n actions.dispatch(type, data);\n }\n\n getDescriptor() {\n const ev: CustomEvent<{ descriptor?: { [key: string]: any } }> = new CustomEvent(\n 'request-descriptor',\n {\n detail: {},\n bubbles: true,\n composed: true,\n cancelable: true,\n }\n );\n this.dispatchEvent(ev);\n return ev.detail.descriptor || null;\n }\n\n render() {\n return html`\n <div class=\"wrapper\">\n <conversation-content\n .messages=${this._messages}\n .userLabel=${this._userLabel}\n @action=${this.onActionClick}\n ></conversation-content>\n <conversation-input\n @user-submit=${this.onUserSubmit}\n @user-typing=${this.onUserTyping}\n .placeholder=${this._inputPlaceholder}\n >\n </conversation-input>\n </div>\n `;\n }\n}\n","import { NodeConnector, WidgetComponentMixin } from '@telia-ace/widget-ui';\nimport Conversation from './conversation';\n\nexport default class ConversationWrapper extends WidgetComponentMixin(Conversation) {\n connector = new NodeConnector(this);\n\n constructor() {\n super();\n }\n}\n"],"names":["ConversationContent","LitElement","html","message","__decorateClass","property","ConversationInput","createRef","classMap","nothing","ref","state","ConversationMessage","ConversationMessageType","index","messageOrder","name","timestamp","getTimestamp","raw","output","createAgentMessage","_a","_b","item","_c","createSystemMessage","createUserMessage","css","mapActions","actions","i","Message","action","type","content","ConversationMessageListItemType","e","itemProps","acc","key","value","unsafeStatic","spread","Conversation","Requester","event","data","__async","container","descriptor","platform","ComponentPlatform","component","ComponentQuery","ev","unsafeCSS","styles","ConversationWrapper","WidgetComponentMixin","NodeConnector"],"mappings":"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"}
|