@telia-ace/knowledge-widget-bot-provider 0.0.15-experimental.9 → 0.0.15

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 (41) hide show
  1. package/dist/contact-method-list.70f5e518.js +94 -0
  2. package/dist/contact-method-list.70f5e518.js.map +1 -0
  3. package/dist/contact-method.4b049dad.js +123 -0
  4. package/dist/contact-method.4b049dad.js.map +1 -0
  5. package/dist/feedback-list.73d8aa69.js +76 -0
  6. package/dist/feedback-list.73d8aa69.js.map +1 -0
  7. package/dist/index.a7a0d62d.js +787 -0
  8. package/dist/index.a7a0d62d.js.map +1 -0
  9. package/dist/index.js +6 -779
  10. package/dist/index.js.map +1 -1
  11. package/dist/no-good-alternative.e5e48f22.js +50 -0
  12. package/dist/no-good-alternative.e5e48f22.js.map +1 -0
  13. package/dist/notification-list.c3df3ee1.js +66 -0
  14. package/dist/notification-list.c3df3ee1.js.map +1 -0
  15. package/dist/styles.a00306c5.js +12 -0
  16. package/dist/styles.a00306c5.js.map +1 -0
  17. package/dist/ui/contact-method-list.d.ts +8 -1
  18. package/dist/ui/feedback-list.d.ts +6 -1
  19. package/dist/ui/no-good-alternative.d.ts +4 -1
  20. package/dist/ui/notification-list.d.ts +9 -1
  21. package/dist/utils.d.ts +2 -3
  22. package/package.json +10 -14
  23. package/dist/contact-method-list.2b3b6ea5.js +0 -5
  24. package/dist/contact-method-list.2b3b6ea5.js.map +0 -1
  25. package/dist/contact-method.016a8ec5.js +0 -5
  26. package/dist/contact-method.016a8ec5.js.map +0 -1
  27. package/dist/feedback-list.042775aa.js +0 -5
  28. package/dist/feedback-list.042775aa.js.map +0 -1
  29. package/dist/new-feedback-list.4dc450c7.js +0 -61
  30. package/dist/new-feedback-list.4dc450c7.js.map +0 -1
  31. package/dist/new-no-good-alternative.63439a76.js +0 -48
  32. package/dist/new-no-good-alternative.63439a76.js.map +0 -1
  33. package/dist/new-notification-list.8acdfeb4.js +0 -60
  34. package/dist/new-notification-list.8acdfeb4.js.map +0 -1
  35. package/dist/no-good-alternative.4e277f5b.js +0 -5
  36. package/dist/no-good-alternative.4e277f5b.js.map +0 -1
  37. package/dist/notification-list.399e34ff.js +0 -5
  38. package/dist/notification-list.399e34ff.js.map +0 -1
  39. package/dist/ui/new-feedback-list.d.ts +0 -13
  40. package/dist/ui/new-no-good-alternative.d.ts +0 -8
  41. package/dist/ui/new-notification-list.d.ts +0 -11
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/types.ts","../src/utils.ts","../src/entry-handler.ts","../src/http-client.ts","../src/store.ts","../src/provider.ts","../src/plugin.ts"],"sourcesContent":["import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\n\nexport enum CustomMessageTypes {\n ContactMethod = 'ace-knowledge-bot-contact-method',\n ContactList = 'ace-knowledge-bot-contact-list',\n FeedbackList = 'ace-knowledge-bot-feedback-list',\n NotificationList = 'ace-knowledge-bot-notification-list',\n NoGoodAlternative = 'ace-knowledge-bot-no-good-alternative',\n}\n\nexport type LooseObject = { [key: string]: any };\n\nexport interface ActionItem {\n label: string;\n actionKey: string;\n data?: any;\n}\n\nexport interface MessageGroup {\n id: string;\n isUser: boolean;\n items: MessageGroupItem[];\n writer?: any;\n meta: { [key: string]: any };\n}\n\nexport interface MessageGroupItem {\n id: string;\n groupId: string;\n isUser: boolean;\n message: [ConversationMessageListItemType | CustomMessageTypes, any];\n}\n\nexport interface ClientEnvelope {\n command?: LooseObject;\n action?: {\n key: string;\n content: any;\n };\n globalState?: LooseObject;\n localState?: LooseObject;\n clientId?: string;\n funnel?: string;\n}\n\nexport interface ServerEnvelope {\n clientId?: string | undefined;\n entries: ServerEntry[];\n globalState?: GlobalState;\n resolveCommand?: string;\n clientEnvelope?: ClientEnvelope;\n}\n\nexport interface GlobalState {\n completedInteractionsCount: number;\n lastQuestion?: string;\n lastBotGuide: number;\n lastGuideTitle?: string;\n site: string;\n invincibleParameters: object;\n}\n\nexport interface ServerEntry {\n id: string;\n type: string;\n content: any;\n actions: { [key: string]: any };\n tags: string[];\n relation?: string;\n timestamp: string;\n localState?: { [key: string]: any };\n}\n\nexport interface ListContent {\n header?: string;\n actions: ActionItem[];\n contactMethodIds?: string[];\n entryId: string;\n groupId: string;\n}\n","// import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\n// import { Symbol } from '@telia-ace/knowledge-widget-ui';\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { FormBuilder, submitButton } from '@telia-ace/widget-forms';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container } from '@webprovisions/platform';\nimport { CustomMessageTypes, MessageGroup, MessageGroupItem } from './types';\n\ntype ContactMethodType = any;\ntype Symbol = any;\n\nconst convertLegacySymbol = (symbol?: { type: string; content: string }): Symbol | undefined => {\n if (symbol) {\n const { type, content } = symbol;\n if (type && content) {\n return { type, content };\n }\n }\n};\n\nexport const createGroup = ({\n isUser,\n items = [],\n meta = {},\n}: {\n isUser: boolean;\n items?: Partial<MessageGroupItem>[];\n meta?: MessageGroup['meta'];\n}) => {\n const groupId = uuid();\n\n const group = {\n id: groupId,\n isUser,\n items: items.map((i) => {\n return {\n id: i.id || uuid(),\n isUser: isUser,\n groupId: groupId,\n message: i.message || [],\n };\n }),\n meta,\n } as MessageGroup;\n\n return group;\n};\n\nexport const contactMethodFromLegacy = (\n {\n id,\n title,\n defaultIcon,\n exits: [exit],\n exitType,\n confirmationText,\n expandFormAutomatically,\n form,\n description,\n }: any,\n options: {\n validation?: any;\n guideId?: string;\n } = {}\n): any => {\n const { adapter } = exit || { Adapter: {} };\n const { clientName = '', settings: adapterSettings = {}, customClientName = '' } = adapter;\n const { validation } = options;\n\n const settings: any = {\n id: id.toString(),\n title: title,\n description: description,\n symbol: convertLegacySymbol(defaultIcon),\n clientName: clientName === 'custom.adapter' ? customClientName : clientName,\n expanded: true,\n inline: true,\n body: {},\n };\n\n if (clientName.indexOf('phone') > -1 || clientName.indexOf('freetext') > -1) {\n const { displayTextBeforeClick, textBeforeClick } = adapterSettings;\n if (displayTextBeforeClick === 'true') {\n settings.expanded = false;\n settings.title = textBeforeClick;\n }\n\n if (clientName.indexOf('phone.text') > -1) {\n settings.body.phoneNumber = adapterSettings.phoneNumber;\n } else {\n settings.body.freetext = adapterSettings.freetext;\n }\n }\n\n if (\n clientName.indexOf('chat.popup') > -1 ||\n clientName.indexOf('link') > -1 ||\n (clientName === 'custom.adapter' && exitType === 'custom')\n ) {\n settings.body = adapterSettings;\n settings.body.confirmationFallback = confirmationText;\n }\n\n if (clientName.indexOf('ace') > -1) {\n settings.body = adapterSettings;\n }\n\n if (form && form.hasValueComponents) {\n if (validation) {\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form, validation).get();\n } else {\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form).get();\n }\n if (!expandFormAutomatically) {\n settings.expanded = settings.inline = false;\n }\n\n settings.body = updateForm(settings, { submit: 'Submit' });\n }\n\n if (options.guideId) {\n settings.body.guideId = options.guideId;\n }\n\n return settings;\n};\n\nexport const getListType = (state: any) => {\n if (state?.$type === 'Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching') {\n return ConversationMessageListItemType.LinkList;\n } else if (\n state?.$type ===\n 'Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching'\n ) {\n return CustomMessageTypes.FeedbackList;\n } else if (\n state?.$type === 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\n ) {\n return CustomMessageTypes.ContactList;\n } else return ConversationMessageListItemType.ButtonList;\n};\n\nexport const getKnowledgeBotEndpoint = (\n container: Container,\n component: any /*: ComponentNodeController */\n) => {\n const { knowledgeBotEndpoint } = component.properties();\n\n if (knowledgeBotEndpoint) {\n return `${knowledgeBotEndpoint}/conversations`;\n }\n\n const { data } = container.get('$settings');\n\n if (!data || !data.projection) throw new Error('Missing Knowledge Bot endpoint');\n\n return `${data.projection}/conversations`;\n};\n\nexport const updateForm = (\n contactMethod: ContactMethodType,\n {\n submit,\n errors,\n meta,\n }: { submit: string; errors?: { [key: string]: string }; meta?: { [key: string]: string } }\n): any => {\n if (contactMethod?.body?.form) {\n const { body } = contactMethod;\n const builder = new FormBuilder(body.form);\n\n if (!body.form.layout.submit) {\n builder.createComponent(submitButton(submit, 'submit'));\n }\n\n if (errors) {\n builder.setValidationErrors(errors);\n }\n\n if (meta) {\n (builder as any).setMeta(meta);\n }\n\n return {\n ...body,\n form: builder.get(),\n };\n }\n return contactMethod?.body || {};\n};\n","import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport {\n ActionItem,\n CustomMessageTypes,\n ListContent,\n MessageGroup,\n MessageGroupItem,\n ServerEntry,\n} from './types';\nimport { contactMethodFromLegacy, createGroup, getListType } from './utils';\n\nconst createGroupItem = ({\n messageId,\n message,\n group,\n}: {\n messageId: string;\n message: MessageGroupItem['message'];\n group: MessageGroup;\n}) => {\n return {\n id: messageId,\n message,\n groupId: group.id,\n isUser: group.isUser,\n };\n};\n\nexport const processEntries = async (entries: ServerEntry[], prevGroup?: MessageGroup) => {\n const createListContent = (\n listType: string,\n entry: ServerEntry,\n groupId: string,\n listContent: ListContent = {\n actions: [],\n entryId: entry.id,\n groupId,\n }\n ) => {\n const contactMethodIds: string[] = [];\n\n listContent.actions = entry.content.items.map((i: any) => {\n const action = {\n label: i.title,\n actionKey: i.actionKey,\n symbol: !!i.symbol ? i.symbol : undefined,\n } as ActionItem;\n\n if (i.data) {\n const entryAction = entry.actions[i.actionKey];\n if (listType === CustomMessageTypes.ContactList) {\n contactMethodIds.push(i.data.id);\n action.data = contactMethodFromLegacy(i.data, {\n guideId: entryAction?.guideId?.toString(),\n });\n } else {\n action.data = i.data;\n }\n }\n return action;\n });\n\n if (listType === CustomMessageTypes.ContactList) {\n listContent.contactMethodIds = contactMethodIds;\n }\n\n return listContent;\n };\n\n const transform = async (\n entry: ServerEntry,\n group: MessageGroup,\n related: ServerEntry[] = [],\n prevGroup?: MessageGroup\n ) => {\n const messageId = uuid();\n\n switch (entry.type) {\n case 'List':\n {\n const { header, items, html } = entry.content;\n\n const result = [];\n\n let listContent = {\n actions: [],\n entryId: entry.id,\n groupId: group.id,\n } as ListContent;\n\n if (header) {\n listContent.header = header;\n }\n\n if (items?.length > 0) {\n const listType = getListType(entry.localState);\n listContent = createListContent(listType, entry, group.id, listContent);\n\n // entry has related entries\n if (!!related.length) {\n const pagingEntry = related.find((e) => e.tags.includes('paging'));\n const fallbackEntry = related.find((e) => e.tags.includes('fallback'));\n\n if (pagingEntry?.content) {\n group.meta.paging = {\n actions: pagingEntry.actions,\n items: pagingEntry.content.items,\n localState: pagingEntry.localState,\n };\n pagingEntry.content.items.forEach((i: any) => {\n listContent.actions.push({\n label: i.title,\n actionKey: i.actionKey,\n data: {\n groupId: !!prevGroup ? prevGroup.id : group.id,\n },\n });\n });\n }\n\n if (fallbackEntry) {\n const fallbackAction = fallbackEntry.content.items.find(\n (i: any) => i.actionKey === 'help'\n );\n if (fallbackAction) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.Separator,\n undefined,\n ],\n group,\n })\n );\n result.push(\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.NoGoodAlternative,\n { body: fallbackAction.title },\n ],\n group,\n })\n );\n }\n }\n }\n\n result.unshift(\n createGroupItem({\n messageId,\n message: [listType, listContent],\n group,\n })\n );\n }\n\n if (html) {\n result.unshift(\n createGroupItem({\n messageId,\n message: [ConversationMessageListItemType.HTML, { body: html }],\n group,\n })\n );\n }\n\n return result;\n }\n break;\n case 'Text':\n {\n const result = [];\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n { body: entry.content.html },\n ],\n group,\n })\n );\n\n // embedded contact methods\n if (!!related.length) {\n const contactMethodListEntry = related.find(\n (e) =>\n e.type === 'List' &&\n e.localState?.$type ===\n 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\n );\n\n const dialogListEntry = related.find((e) => e.tags.includes('dialog'));\n const feedbackEntry = related.find((e) => e.tags.includes('feedback'));\n const contactMethodEntry = related.find(\n (e) => e.tags.includes('contact') && e.type === 'Contact'\n );\n\n if (contactMethodEntry) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.ContactMethod,\n {\n contactMethodId: contactMethodEntry.content.id,\n groupId: group.id,\n guideId: contactMethodEntry.content.guideId,\n },\n ],\n group,\n })\n );\n }\n\n if (dialogListEntry) {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.ButtonList,\n {\n actions: dialogListEntry.content.items.map((i: any) => {\n return {\n label: i.title,\n actionKey: i.actionKey,\n };\n }),\n },\n ],\n group,\n })\n );\n }\n\n if (contactMethodListEntry) {\n const listContent = createListContent(\n CustomMessageTypes.ContactList,\n contactMethodListEntry,\n group.id\n );\n\n result.push(\n createGroupItem({\n messageId,\n message: [ConversationMessageListItemType.Separator, undefined],\n group,\n })\n );\n\n result.push(\n createGroupItem({\n messageId,\n message: [CustomMessageTypes.ContactList, listContent],\n group,\n })\n );\n }\n\n if (feedbackEntry) {\n if (feedbackEntry.content.html) {\n result.push(\n createGroupItem({\n messageId,\n group,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: feedbackEntry.content.html,\n },\n ],\n })\n );\n }\n result.push(\n createGroupItem({\n messageId,\n group,\n message: [\n CustomMessageTypes.FeedbackList,\n {\n actions: feedbackEntry.content.items.map((i: any) => {\n return {\n actionKey: i.actionKey,\n label: i.title,\n };\n }),\n },\n ],\n })\n );\n }\n }\n return result;\n }\n break;\n case 'Contact': {\n return [\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.ContactMethod,\n {\n contactMethodId: entry.content.id,\n groupId: group.id,\n guideId: entry.content.guideId,\n },\n ],\n group,\n }),\n ];\n }\n case 'CategorizedNoticeList': {\n const result = [\n createGroupItem({\n messageId,\n message: [\n CustomMessageTypes.NotificationList,\n {\n id: entry.content.item.id.toString(),\n header: entry.content.item.title,\n items: entry.content.item.listNotices,\n symbol: entry.content.item.defaultIcon,\n },\n ],\n group,\n }),\n ];\n\n (entry.content.notices || []).forEach((notice: any) => {\n result.push(\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: notice.body,\n },\n ],\n group,\n })\n );\n });\n\n return result;\n }\n case 'footerNotice': {\n return [\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: entry.content.item.body,\n },\n ],\n group,\n }),\n ];\n }\n case 'Error': {\n return [\n createGroupItem({\n messageId,\n message: [\n ConversationMessageListItemType.HTML,\n {\n body: entry.content.message || 'Something went wrong.',\n },\n ],\n group,\n }),\n ];\n }\n\n default:\n return [];\n }\n };\n\n const splitEntry = (entry: ServerEntry): ServerEntry | ServerEntry[] => {\n if (['CategorizedNoticeList', 'NoticeList'].includes(entry.type)) {\n return (entry.content.items || []).reduce((acc: any, item: any) => {\n if (!entry.content.isInitialNotices) {\n return acc;\n }\n acc.push({\n ...entry,\n id: uuid(),\n type: item.type || entry.type,\n content: {\n $type: entry.content.$type,\n isInitialNotices: entry.content.isInitialNotices,\n notices: item.notices,\n item,\n },\n });\n return acc;\n }, []);\n }\n return entry;\n };\n\n // map of in which order the messages should be displayed\n // lower numbers will be displayed above higher\n const sortMap = new Map<string, number>([\n ['Text', 1],\n ['List', 2],\n ['Contact', 3],\n ['CategorizedNoticeList', 10],\n ]);\n\n const result: MessageGroup[] = [];\n const filteredEntries = entries\n .sort((item, other) => {\n // sort the entries based on it's types sort value\n const defaultSortValue = 20;\n\n var sortValue = sortMap.get(item.type) || defaultSortValue;\n var sortValueOther = sortMap.get(other.type) || defaultSortValue;\n return sortValue - sortValueOther;\n })\n .filter((entry) => !entry.relation) // remove any \"relation entries\"\n .reduce<ServerEntry[]>((acc, entry) => {\n // some entries needs to be splitted into seperate groups\n return acc.concat(splitEntry(entry));\n }, []);\n\n // we dont want to display this type of entry\n // as we dont support it, and it was not supported in v4 either\n const isNonVisibleRelatedEntry = (e: ServerEntry) => {\n return typeof e.actions['selector'] !== 'undefined';\n };\n\n for (const entry of filteredEntries) {\n const relatedEntries = entries.filter(\n (other) => other.relation === entry.id && !isNonVisibleRelatedEntry(other)\n );\n const group = createGroup({ isUser: false });\n\n const items = await transform(entry, group, relatedEntries, prevGroup);\n items.forEach((item) => {\n group.items.push(item);\n });\n\n if (group.items.length) {\n result.push(group);\n }\n }\n return result;\n};\n","import { uuid } from '@telia-ace/widget-utilities';\nimport { Container, EventManager } from '@webprovisions/platform';\nimport { processEntries } from './entry-handler';\nimport Store from './store';\nimport { ClientEnvelope, MessageGroup, ServerEntry, ServerEnvelope } from './types';\n\nclass HttpClient {\n private globalState: any;\n private localState: ServerEntry['localState'];\n private clientId: string;\n private entries: ServerEntry[];\n\n constructor(\n private endpoint: string,\n private events: EventManager,\n private store: Store,\n private container: Container\n ) {\n this.clientId = uuid();\n this.entries = [];\n }\n\n async start({ silent }: { silent: boolean }) {\n const storedGlobalState = await this.store.read('globalState');\n const storedLocalState = await this.store.read('localState');\n const storedEntries = await this.store.read('entries');\n\n // if there is state stored we need to set it\n this.globalState = storedGlobalState || this.globalState;\n this.localState = storedLocalState || this.localState;\n this.entries = storedEntries || this.entries;\n\n // dont create initial envelope if the client should just\n // set local and global state and then start silently\n if (silent) {\n return;\n }\n\n const envelope = this.createInitialEnvelope();\n const initialResponse = await this.postEnvelope(envelope);\n return initialResponse;\n }\n\n async sendMessage(message: string) {\n const envelope = {\n command: { phrase: message },\n globalState: this.globalState,\n clientId: this.clientId,\n };\n\n const result = await this.postEnvelope(envelope);\n return result;\n }\n\n async helpAction() {\n return this.postEnvelope({\n action: {\n key: 'help',\n content: {\n $type: 'Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching',\n },\n },\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n async nextAction(group: MessageGroup) {\n const { paging } = group.meta;\n if (!paging.actions?.next) {\n return;\n }\n return this.postEnvelope(\n {\n action: {\n key: 'next',\n content: paging.actions.next,\n },\n localState: paging.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n },\n group\n ).then((response) => {\n const listItemIndex = group.items.findIndex((item) => item.message[0] === 'link-list');\n if (listItemIndex === -1 || !response) {\n return group;\n }\n\n return {\n ...group,\n meta: {\n ...group.meta,\n ...response[0].meta,\n },\n items: [\n ...group.items.slice(0, listItemIndex),\n {\n ...group.items[listItemIndex],\n message: [\n response[0].items[0].message[0],\n {\n ...group.items[listItemIndex].message[1],\n ...response[0].items[0].message[1],\n },\n ],\n },\n ...group.items.slice(listItemIndex + 1),\n ],\n };\n });\n }\n\n async showContactMethodAction(data: {\n contactMethod: any;\n actionKey: string;\n entryId: string;\n }) {\n const entry = this.entries.find((e) => e.id === data.entryId);\n const actionItem = entry?.actions[data.actionKey];\n\n if (!actionItem) {\n return;\n }\n\n return this.postEnvelope({\n action: {\n key: data.actionKey,\n content: actionItem,\n },\n localState: entry.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n async defaultAction(action: string) {\n const entry = this.getEntryOfAction(action);\n\n if (!entry) {\n return;\n }\n\n return this.postEnvelope({\n action: {\n key: action,\n content: entry.actions[action],\n },\n localState: entry.localState,\n globalState: this.globalState,\n clientId: this.clientId,\n });\n }\n\n private createInitialEnvelope(): ClientEnvelope {\n return {\n command: { site: this.endpoint },\n clientId: this.clientId,\n globalState: {},\n funnel: this.container.get('$widget').name,\n };\n }\n\n private async postEnvelope(envelope: ClientEnvelope, prevGroup?: MessageGroup) {\n try {\n const response = await fetch(this.endpoint, this.getHttpOptions(envelope));\n\n if (!response.ok) {\n throw response;\n }\n\n const data = await response.json();\n\n return this.handleResponse(data, prevGroup);\n } catch (error: any) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Something went wrong when posting the envelope.');\n }\n let message = 'Something went wrong';\n if (\n error.message === 'Failed to fetch' ||\n error.message === 'NetworkError when attempting to fetch resource.'\n ) {\n message = 'Lost connection... Please try again.';\n }\n return this.handleResponse({\n entries: [\n {\n id: uuid(),\n type: 'Error',\n timestamp: new Date().toISOString(),\n content: {\n message,\n },\n actions: {},\n tags: [],\n },\n ],\n });\n }\n }\n\n private async handleResponse(data: ServerEnvelope, prevGroup?: MessageGroup) {\n this.entries = this.entries.concat(data.entries);\n this.store.write(this.entries, 'entries');\n\n const widgetEntry = data.entries.find((e) => e.type === 'Widget');\n\n if (widgetEntry) {\n this.events.dispatch('provider:widget-entry', widgetEntry.content);\n }\n\n if (data.globalState) {\n this.globalState = data.globalState;\n this.store.write(data.globalState, 'globalState');\n }\n\n this.localState = data.entries.reduce<ServerEntry['localState']>((acc, entry) => {\n if (entry.localState) {\n return entry.localState;\n }\n return acc;\n }, undefined);\n this.store.write(this.localState, 'localState');\n\n const groups = await processEntries(data.entries, prevGroup);\n return groups;\n }\n\n private getHttpOptions(envelope: ClientEnvelope) {\n const fetchOptions = {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n };\n envelope.funnel = this.container.get('$widget').name;\n envelope.localState = envelope.localState || this.localState;\n return Object.assign({}, fetchOptions, {\n body: JSON.stringify(envelope),\n credentials: 'same-origin' as RequestCredentials,\n });\n }\n\n private getEntryOfAction(action: string) {\n return this.entries.find((entry) => !!entry.actions[action]);\n }\n}\n\nexport default HttpClient;\n","import { createStorageWriter, readStorage, StorageCategory } from '@telia-ace/widget-services';\nimport { Container } from '@webprovisions/platform';\nimport { GlobalState, LooseObject, ServerEntry } from './types';\n\ntype MetaData = {\n agent: {\n name: string;\n avatar?: string;\n };\n};\n\ntype StorageTypes = 'localState' | 'globalState' | 'entries' | 'meta';\n\nclass Store {\n private enabled = true; // set whether or not to store data\n private botProviderGlobalStateKey = 'bot-provider-global-state';\n private botProviderLocalStateKey = 'bot-provider-local-state';\n private botProviderEntriesKey = 'bot-provider-entries';\n private botProviderMetaStateKey = 'bot-provider-conversation-meta';\n\n constructor(private container: Container) {}\n\n private getKey(type: StorageTypes) {\n let key;\n switch (type) {\n case 'localState':\n key = this.botProviderLocalStateKey;\n break;\n case 'globalState':\n key = this.botProviderGlobalStateKey;\n break;\n case 'entries':\n key = this.botProviderEntriesKey;\n break;\n case 'meta':\n key = this.botProviderMetaStateKey;\n break;\n\n default:\n break;\n }\n return key;\n }\n\n async read(type: 'localState'): Promise<LooseObject | undefined>;\n async read(type: 'meta'): Promise<MetaData | undefined>;\n async read(type: 'entries'): Promise<ServerEntry[] | undefined>;\n async read(type: 'globalState'): Promise<GlobalState | undefined>;\n async read(type: StorageTypes): Promise<any | undefined> {\n const key = this.getKey(type);\n if (!this.enabled || !key) {\n return;\n }\n\n return readStorage(this.container, key);\n }\n\n async write(data: any, type: StorageTypes) {\n const key = this.getKey(type);\n if (!this.enabled || !key) {\n return;\n }\n\n const write = await createStorageWriter(this.container, key, StorageCategory.Necessary);\n write(data);\n }\n}\n\nexport default Store;\n","import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\nimport { createStorageWriter, StorageCategory } from '@telia-ace/widget-services';\nimport { uuid } from '@telia-ace/widget-utilities';\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\nimport HttpClient from './http-client';\nimport Store from './store';\nimport { MessageGroup, ServerEntry } from './types';\nimport { createGroup, getKnowledgeBotEndpoint } from './utils';\n\nclass KnowledgeBotProvider {\n private agent: any;\n private user: any;\n private httpClient: HttpClient;\n private events: EventManager;\n private groups: MessageGroup[] = [];\n private store: Store;\n\n constructor(\n private container: Container,\n private conversation: any,\n component: ComponentNodeController\n ) {\n const { events } = this.container.get('$widget') as Widget;\n this.events = events;\n this.store = new Store(container);\n this.agent = conversation.createAgent({\n id: 'knowledge-bot-agent', // we need to specify an ID here to allow rehydration to work\n name: '',\n avatar: undefined,\n });\n this.user = conversation.user;\n const endpoint = getKnowledgeBotEndpoint(container, component);\n this.httpClient = new HttpClient(endpoint, events, this.store, this.container);\n\n this.events.subscribe('provider:widget-entry', (_event, data: ServerEntry['content']) => {\n this.onWidgetEntryReceived(data);\n });\n\n this.events.subscribe(\n 'provider:open-contact-method',\n async (_event, data: { contactMethod: any; entryId: string; actionKey: string }) => {\n const response = await this.httpClient.showContactMethodAction(data);\n\n if (response) {\n if (!!data.contactMethod.title) this.printUserMessage(data.contactMethod.title);\n this.onMessagesReceived(response);\n }\n }\n );\n }\n\n async initialize() {\n const loader = this.conversation.loading();\n\n const storedMeta = await this.store.read('meta');\n if (storedMeta?.agent) {\n this.agent.update({\n name: storedMeta.agent.name,\n avatar: storedMeta.agent.avatar,\n });\n }\n\n const rehydrated = await this.conversation.isRehydrated();\n\n const response = await this.httpClient.start({\n silent: this.conversation.options?.silent || rehydrated,\n });\n if (response) {\n this.onMessagesReceived(response);\n }\n\n loader();\n }\n\n async onMessagesReceived(groups: MessageGroup[]) {\n this.groups = this.groups.concat(groups);\n groups.forEach((group) => {\n const items = group.items.map((item) => item.message);\n if (group.isUser) {\n group.writer = this.user.print(items);\n } else {\n group.writer = this.agent.print(items);\n }\n });\n }\n\n async onInput(action: string | { [key: string]: any; actionKey: string; label?: string }) {\n const actionKey = typeof action === 'string' ? action : action.actionKey;\n\n switch (actionKey) {\n case 'next':\n {\n if (typeof action === 'string') {\n return;\n }\n const group = this.groups.find((other) => other.id === action.data?.groupId);\n\n if (group) {\n const response = await this.httpClient.nextAction(group);\n if (response) {\n const combined = response.items.map((item) => item.message);\n group.meta.paging = response?.meta.paging;\n group.writer.update(combined);\n }\n }\n }\n break;\n case 'help':\n {\n const loader = this.conversation.loading();\n\n const response = await this.httpClient.helpAction();\n loader();\n if (response) {\n this.onMessagesReceived(response);\n }\n }\n break;\n default:\n {\n if (typeof action !== 'string' && action.label) {\n this.printUserMessage(action.label);\n }\n const loader = this.conversation.loading();\n const response = await this.httpClient.defaultAction(actionKey);\n if (response) {\n this.onMessagesReceived(response);\n }\n loader();\n }\n break;\n }\n }\n\n private printUserMessage(message: string) {\n const group = createGroup({\n isUser: true,\n items: [\n {\n id: uuid(),\n isUser: true,\n message: [ConversationMessageListItemType.HTML, { body: message }],\n },\n ],\n });\n this.onMessagesReceived([group]);\n return group;\n }\n\n async onMessageSend(message: string) {\n const loader = this.conversation.loading();\n const response = await this.httpClient.sendMessage(message);\n\n this.printUserMessage(message);\n\n if (response) {\n this.onMessagesReceived(response);\n }\n loader();\n }\n\n private async onWidgetEntryReceived(data: ServerEntry['content']) {\n if (data.agent) {\n const agentSettings = {\n name: data.agent.name,\n avatar: data.agent.avatar,\n };\n this.agent.update(agentSettings);\n const write = await createStorageWriter(\n this.container,\n 'bot-provider-conversation-meta',\n StorageCategory.Necessary\n );\n write({\n agent: agentSettings,\n });\n }\n }\n}\n\nexport default KnowledgeBotProvider;\n","import {\n ConversationPlatform,\n registerCustomMessageComponent,\n} from '@telia-ace/widget-conversation';\nimport { Container, Widget } from '@webprovisions/platform';\nimport KnowledgeBotProvider from './provider';\nimport { CustomMessageTypes } from './types';\n\nconst KnowledgeBotProviderPlugin = async (container: Container) => {\n const platform = await ConversationPlatform.getInstance(container);\n\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.ContactList,\n import('./ui/contact-method-list')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.ContactMethod,\n import('./ui/contact-method')\n );\n registerCustomMessageComponent(\n container,\n 'ace-knowledge-bot-new-no-good-alternative', // TODO: remove new from name..\n import('./ui/new-no-good-alternative')\n );\n registerCustomMessageComponent(\n container,\n 'ace-knowledge-bot-new-feedback-list', // TODO: remove new from name..\n import('./ui/new-feedback-list')\n );\n registerCustomMessageComponent(\n container,\n 'ace-knowledge-bot-new-notification-list', // TODO: remove new from name..\n import('./ui/new-notification-list')\n );\n\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.NotificationList,\n import('./ui/notification-list')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.NoGoodAlternative,\n import('./ui/no-good-alternative')\n );\n registerCustomMessageComponent(\n container,\n CustomMessageTypes.FeedbackList,\n import('./ui/feedback-list')\n );\n\n platform.registerProvider('ace-knowledge-bot', (conversation, component) => {\n const provider = new KnowledgeBotProvider(container, conversation, component);\n provider.initialize();\n\n const subscriptions: any[] = [];\n subscriptions.push(\n component.actions.watch('conversation.user-submit', (input, next) => {\n provider.onMessageSend(input.text);\n })\n );\n\n subscriptions.push(\n component.actions.watch('conversation.action', (input, next) => {\n provider.onInput(input);\n\n return next(input);\n })\n );\n\n subscriptions.push(\n component.actions.create('evaluate', (input) => {\n const { events } = container.get('$widget') as Widget;\n events.dispatch('bot-provider:evaluate', input);\n })\n );\n\n subscriptions.push(\n component.actions.create('submit', (input) => {\n const { events } = container.get('$widget') as Widget;\n events.dispatch('bot-provider:form-submitted', input);\n })\n );\n\n return () => {\n // cleaning up when provider is disposed\n subscriptions.forEach((unsubscribe) => {\n unsubscribe();\n });\n };\n });\n};\n\nexport default KnowledgeBotProviderPlugin;\n"],"names":["CustomMessageTypes","convertLegacySymbol","symbol","type","content","createGroup","isUser","items","meta","groupId","uuid","i","contactMethodFromLegacy","id","title","defaultIcon","exit","exitType","confirmationText","expandFormAutomatically","form","description","options","adapter","clientName","adapterSettings","customClientName","validation","settings","displayTextBeforeClick","textBeforeClick","FormBuilder","updateForm","getListType","state","ConversationMessageListItemType","getKnowledgeBotEndpoint","container","component","knowledgeBotEndpoint","data","contactMethod","submit","errors","_a","body","builder","submitButton","__spreadProps","__spreadValues","createGroupItem","messageId","message","group","processEntries","entries","prevGroup","__async","createListContent","listType","entry","listContent","contactMethodIds","action","entryAction","transform","_0","_1","_2","related","header","html","result","pagingEntry","e","fallbackEntry","fallbackAction","contactMethodListEntry","dialogListEntry","feedbackEntry","contactMethodEntry","notice","splitEntry","acc","item","sortMap","filteredEntries","other","sortValue","sortValueOther","isNonVisibleRelatedEntry","relatedEntries","HttpClient","endpoint","events","store","silent","storedGlobalState","storedLocalState","storedEntries","envelope","paging","response","listItemIndex","actionItem","error","widgetEntry","fetchOptions","HttpClient$1","Store","key","readStorage","createStorageWriter","StorageCategory","Store$1","KnowledgeBotProvider","conversation","_event","loader","storedMeta","rehydrated","groups","actionKey","combined","agentSettings","KnowledgeBotProvider$1","KnowledgeBotProviderPlugin","platform","ConversationPlatform","registerCustomMessageComponent","provider","subscriptions","input","next","unsubscribe","KnowledgeBotProviderPlugin$1"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -0,0 +1,50 @@
1
+ import o from "@emotion/styled";
2
+ import { useDispatch as l, SymbolBadge as r, Button as a, borderTabStyle as i } from "@telia-ace/knowledge-widget-ui";
3
+ import n from "react";
4
+ import { m as s } from "./styles.a00306c5.js";
5
+ import "@emotion/react";
6
+ const h = ({ body: e }) => {
7
+ const t = l();
8
+ return /* @__PURE__ */ n.createElement(m, null, /* @__PURE__ */ n.createElement(
9
+ c,
10
+ {
11
+ onClick: () => {
12
+ t("action", "help");
13
+ },
14
+ "aria-label": e,
15
+ title: e
16
+ },
17
+ /* @__PURE__ */ n.createElement(
18
+ r,
19
+ {
20
+ size: 14,
21
+ symbol: {
22
+ type: "FontAwesome",
23
+ content: "meh-o"
24
+ }
25
+ }
26
+ ),
27
+ /* @__PURE__ */ n.createElement("span", null, e)
28
+ ));
29
+ }, m = o.div`
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ ${s}
34
+ `, c = o(a)`
35
+ > i,
36
+ svg {
37
+ margin-right: ${(e) => {
38
+ var t;
39
+ return (t = e.theme.sizes) == null ? void 0 : t.small;
40
+ }};
41
+ }
42
+
43
+ &:focus-visible {
44
+ ${i}
45
+ }
46
+ `;
47
+ export {
48
+ h as default
49
+ };
50
+ //# sourceMappingURL=no-good-alternative.e5e48f22.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-good-alternative.e5e48f22.js","sources":["../src/ui/no-good-alternative.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { borderTabStyle, Button, SymbolBadge, useDispatch } from '@telia-ace/knowledge-widget-ui';\nimport React from 'react';\nimport { messageContentPadding } from './styles';\n\ntype Props = {\n body: string;\n};\nconst NoGoodAlternative: React.FC<Props> = ({ body }) => {\n const dispatch = useDispatch();\n return (\n <Wrapper>\n <StyledButton\n onClick={() => {\n dispatch('action', 'help');\n }}\n aria-label={body}\n title={body}\n >\n <SymbolBadge\n size={14}\n symbol={{\n type: 'FontAwesome',\n content: 'meh-o',\n }}\n />\n <span>{body}</span>\n </StyledButton>\n </Wrapper>\n );\n};\n\nexport default NoGoodAlternative;\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n ${messageContentPadding}\n`;\n\nconst StyledButton = styled(Button)`\n > i,\n svg {\n margin-right: ${(p) => p.theme.sizes?.small};\n }\n\n &:focus-visible {\n ${borderTabStyle}\n }\n`;\n"],"names":["NoGoodAlternative","body","dispatch","useDispatch","Wrapper","React","StyledButton","SymbolBadge","styled","messageContentPadding","Button","p","_a","borderTabStyle"],"mappings":";;;;;AAQA,MAAMA,IAAqC,CAAC,EAAE,MAAAC,QAAW;AACrD,QAAMC,IAAWC;AACjB,yCACKC,GACG,MAAA,gBAAAC,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,SAAS,MAAM;AACX,QAAAJ,EAAS,UAAU,MAAM;AAAA,MAC7B;AAAA,MACA,cAAYD;AAAA,MACZ,OAAOA;AAAA,IAAA;AAAA,IAEP,gBAAAI,EAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACG,MAAM;AAAA,QACN,QAAQ;AAAA,UACJ,MAAM;AAAA,UACN,SAAS;AAAA,QACb;AAAA,MAAA;AAAA,IACJ;AAAA,IACA,gBAAAF,EAAA,cAAC,cAAMJ,CAAK;AAAA,EAAA,CAEpB;AAER,GAIMG,IAAUI,EAAO;AAAA;AAAA;AAAA;AAAA,MAIjBC;AAAA,GAGAH,IAAeE,EAAOE,CAAM;AAAA;AAAA;AAAA,wBAGV,CAACC,MAAM;;AAAA,UAAAC,IAAAD,EAAE,MAAM,UAAR,gBAAAC,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA,UAIpCC;AAAA;AAAA;"}
@@ -0,0 +1,66 @@
1
+ var L = Object.defineProperty;
2
+ var r = Object.getOwnPropertySymbols;
3
+ var l = Object.prototype.hasOwnProperty, f = Object.prototype.propertyIsEnumerable;
4
+ var d = (t, i, o) => i in t ? L(t, i, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[i] = o, m = (t, i) => {
5
+ for (var o in i || (i = {}))
6
+ l.call(i, o) && d(t, o, i[o]);
7
+ if (r)
8
+ for (var o of r(i))
9
+ f.call(i, o) && d(t, o, i[o]);
10
+ return t;
11
+ };
12
+ var c = (t, i) => {
13
+ var o = {};
14
+ for (var e in t)
15
+ l.call(t, e) && i.indexOf(e) < 0 && (o[e] = t[e]);
16
+ if (t != null && r)
17
+ for (var e of r(t))
18
+ i.indexOf(e) < 0 && f.call(t, e) && (o[e] = t[e]);
19
+ return o;
20
+ };
21
+ import b from "@emotion/styled";
22
+ import { NotificationList as g } from "@telia-ace/knowledge-widget-ui";
23
+ import y, { useMemo as N } from "react";
24
+ import { m as x } from "./styles.a00306c5.js";
25
+ import "@emotion/react";
26
+ const M = (h) => {
27
+ var a = h, { id: t, header: i, items: o, symbol: e, className: p } = a, u = c(a, ["id", "header", "items", "symbol", "className"]);
28
+ const s = N(() => ({
29
+ id: t,
30
+ title: i,
31
+ symbol: e,
32
+ defaultHeaderOptions: {
33
+ visible: !0
34
+ },
35
+ notifications: o.map((n) => ({
36
+ id: n.id.toString(),
37
+ title: n.title,
38
+ body: n.body,
39
+ modified: n.modified,
40
+ expandable: !0
41
+ }))
42
+ }), [i, o]);
43
+ return s ? /* @__PURE__ */ y.createElement(
44
+ $,
45
+ m({
46
+ className: p,
47
+ showHeader: !0,
48
+ notificationList: s,
49
+ loading: !1
50
+ }, u)
51
+ ) : null;
52
+ }, $ = b(g)`
53
+ ${x}
54
+ min-width: 10em;
55
+
56
+ span {
57
+ color: ${(t) => {
58
+ var i;
59
+ return (i = t.theme.colors) == null ? void 0 : i.text;
60
+ }};
61
+ }
62
+ `;
63
+ export {
64
+ M as default
65
+ };
66
+ //# sourceMappingURL=notification-list.c3df3ee1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-list.c3df3ee1.js","sources":["../src/ui/notification-list.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { NotificationList as NotificationListUi, Symbol } from '@telia-ace/knowledge-widget-ui';\nimport React, { useMemo } from 'react';\nimport { messageContentPadding } from './styles';\n\ntype Props = {\n id: string;\n header: string;\n items: any[];\n symbol?: Symbol;\n className?: string;\n};\nconst NotificationList: React.FC<Props> = ({ id, header, items, symbol, className, ...other }) => {\n const list = useMemo(() => {\n return {\n id: id,\n title: header,\n symbol,\n defaultHeaderOptions: {\n visible: true,\n },\n notifications: items.map((item) => ({\n id: item.id.toString(),\n title: item.title,\n body: item.body,\n modified: item.modified,\n expandable: true,\n })),\n };\n }, [header, items]);\n\n if (!list) {\n return null;\n }\n\n return (\n <StyledNotificationListUi\n className={className}\n showHeader={true}\n notificationList={list}\n loading={false}\n {...other}\n />\n );\n};\n\nexport default NotificationList;\n\nconst StyledNotificationListUi = styled(NotificationListUi)`\n ${messageContentPadding}\n min-width: 10em;\n\n span {\n color: ${(p) => p.theme.colors?.text};\n }\n`;\n"],"names":["NotificationList","_a","_b","id","header","items","symbol","className","other","__objRest","list","useMemo","item","React","StyledNotificationListUi","__spreadValues","styled","NotificationListUi","messageContentPadding","p"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAYM,MAAAA,IAAoC,CAACC,MAAuD;AAAvD,MAAAC,IAAAD,GAAE,MAAAE,GAAI,QAAAC,GAAQ,OAAAC,GAAO,QAAAC,GAAQ,WAAAC,MAA7BL,GAA2CM,IAAAC,EAA3CP,GAA2C,CAAzC,MAAI,UAAQ,SAAO,UAAQ;AAC9D,QAAAQ,IAAOC,EAAQ,OACV;AAAA,IACH,IAAAR;AAAA,IACA,OAAOC;AAAA,IACP,QAAAE;AAAA,IACA,sBAAsB;AAAA,MAClB,SAAS;AAAA,IACb;AAAA,IACA,eAAeD,EAAM,IAAI,CAACO,OAAU;AAAA,MAChC,IAAIA,EAAK,GAAG,SAAS;AAAA,MACrB,OAAOA,EAAK;AAAA,MACZ,MAAMA,EAAK;AAAA,MACX,UAAUA,EAAK;AAAA,MACf,YAAY;AAAA,IAAA,EACd;AAAA,EAAA,IAEP,CAACR,GAAQC,CAAK,CAAC;AAElB,SAAKK,IAKD,gBAAAG,EAAA;AAAA,IAACC;AAAA,IAAAC,EAAA;AAAA,MACG,WAAAR;AAAA,MACA,YAAY;AAAA,MACZ,kBAAkBG;AAAA,MAClB,SAAS;AAAA,OACLF;AAAA,EAAA,IATD;AAYf,GAIMM,IAA2BE,EAAOC,CAAkB;AAAA,MACpDC;AAAA;AAAA;AAAA;AAAA,iBAIW,CAACC,MAAM;;AAAA,UAAAlB,IAAAkB,EAAE,MAAM,WAAR,gBAAAlB,EAAgB;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,12 @@
1
+ import { css as i } from "@emotion/react";
2
+ const d = (e) => {
3
+ var m, s;
4
+ return i`
5
+ margin: ${(m = e.theme.sizes) == null ? void 0 : m.medium} 0;
6
+ padding: 0 ${(s = e.theme.sizes) == null ? void 0 : s.medium};
7
+ `;
8
+ };
9
+ export {
10
+ d as m
11
+ };
12
+ //# sourceMappingURL=styles.a00306c5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.a00306c5.js","sources":["../src/ui/styles.tsx"],"sourcesContent":["import { css, Theme } from '@emotion/react';\n\nexport const messageContentPadding = (p: { theme: Theme }) => css`\n margin: ${p.theme.sizes?.medium} 0;\n padding: 0 ${p.theme.sizes?.medium};\n`;\n"],"names":["messageContentPadding","p","css","_a","_b"],"mappings":";AAEa,MAAAA,IAAwB,CAACC,MAAwB;;AAAA,SAAAC;AAAA,eAChDC,IAAAF,EAAE,MAAM,UAAR,gBAAAE,EAAe;AAAA,kBACZC,IAAAH,EAAE,MAAM,UAAR,gBAAAG,EAAe;AAAA;AAAA;"}
@@ -1,3 +1,10 @@
1
1
  import React from 'react';
2
- declare const ContactMethodList: React.FC<any>;
2
+ import { ActionItem } from '../types';
3
+ type Props = {
4
+ actions: ActionItem[];
5
+ contactMethodIds?: string[];
6
+ entryId: string;
7
+ groupId: string;
8
+ };
9
+ declare const ContactMethodList: React.FC<Props>;
3
10
  export default ContactMethodList;
@@ -1,3 +1,8 @@
1
1
  import React from 'react';
2
- declare const FeedbackList: React.FC<any>;
2
+ type Props = {
3
+ actions: {
4
+ [key: string]: string;
5
+ }[];
6
+ };
7
+ declare const FeedbackList: React.FC<Props>;
3
8
  export default FeedbackList;
@@ -1,3 +1,6 @@
1
1
  import React from 'react';
2
- declare const NoGoodAlternative: React.FC<any>;
2
+ type Props = {
3
+ body: string;
4
+ };
5
+ declare const NoGoodAlternative: React.FC<Props>;
3
6
  export default NoGoodAlternative;
@@ -1,3 +1,11 @@
1
+ import { Symbol } from '@telia-ace/knowledge-widget-ui';
1
2
  import React from 'react';
2
- declare const NotificationList: React.FC<any>;
3
+ type Props = {
4
+ id: string;
5
+ header: string;
6
+ items: any[];
7
+ symbol?: Symbol;
8
+ className?: string;
9
+ };
10
+ declare const NotificationList: React.FC<Props>;
3
11
  export default NotificationList;
package/dist/utils.d.ts CHANGED
@@ -1,7 +1,7 @@
1
+ import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';
1
2
  import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';
2
3
  import { Container } from '@webprovisions/platform';
3
4
  import { CustomMessageTypes, MessageGroup, MessageGroupItem } from './types';
4
- type ContactMethodType = any;
5
5
  export declare const createGroup: ({ isUser, items, meta, }: {
6
6
  isUser: boolean;
7
7
  items?: Partial<MessageGroupItem>[] | undefined;
@@ -11,7 +11,7 @@ export declare const createGroup: ({ isUser, items, meta, }: {
11
11
  }) => MessageGroup;
12
12
  export declare const contactMethodFromLegacy: ({ id, title, defaultIcon, exits: [exit], exitType, confirmationText, expandFormAutomatically, form, description, }: any, options?: {
13
13
  validation?: any;
14
- guideId?: string;
14
+ guideId?: string | undefined;
15
15
  }) => any;
16
16
  export declare const getListType: (state: any) => ConversationMessageListItemType.LinkList | ConversationMessageListItemType.ButtonList | CustomMessageTypes.ContactList | CustomMessageTypes.FeedbackList;
17
17
  export declare const getKnowledgeBotEndpoint: (container: Container, component: any) => string;
@@ -24,4 +24,3 @@ export declare const updateForm: (contactMethod: ContactMethodType, { submit, er
24
24
  [key: string]: string;
25
25
  } | undefined;
26
26
  }) => any;
27
- export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telia-ace/knowledge-widget-bot-provider",
3
- "version": "0.0.15-experimental.9",
3
+ "version": "0.0.15",
4
4
  "description": "Bot Provider Plugin ACE Knowledge Widgets.",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "Telia Company AB",
@@ -21,31 +21,27 @@
21
21
  },
22
22
  "sideEffects": false,
23
23
  "dependencies": {
24
- "@telia-ace/knowledge-widget-adapters": "1.0.44-experimental.9",
25
- "@telia-ace/knowledge-widget-types-grid": "1.0.45-experimental.9",
26
- "@telia-ace/knowledge-widget-ui": "1.0.40-experimental.9",
27
- "@telia-ace/widget-conversation": "^1.0.34-experimental.19",
28
- "@telia-ace/widget-forms": "^1.0.28-experimental.19",
29
- "@telia-ace/widget-services": "^1.0.21-experimental.19",
30
- "@telia-ace/widget-ui": "^1.0.28-experimental.19",
31
- "@telia-ace/widget-utilities": "^1.0.10-experimental.19",
24
+ "@telia-ace/knowledge-widget-adapters": "^1.0.44",
25
+ "@telia-ace/knowledge-widget-types-grid": "^1.0.45",
26
+ "@telia-ace/knowledge-widget-ui": "^1.0.40",
27
+ "@telia-ace/widget-conversation": "^1.0.33",
28
+ "@telia-ace/widget-forms": "^1.0.27",
29
+ "@telia-ace/widget-services": "^1.0.20",
30
+ "@telia-ace/widget-utilities": "^1.0.9",
32
31
  "@webprovisions/bootstrapping": "^1.0.12"
33
32
  },
34
33
  "peerDependencies": {
35
34
  "@emotion/react": "^11.10.5",
36
35
  "@emotion/styled": "^11.10.5",
37
- "lit": "^2.6.0",
38
36
  "react": "^18.2.0"
39
37
  },
40
38
  "devDependencies": {
41
39
  "@emotion/react": "^11.10.5",
42
40
  "@emotion/styled": "^11.10.5",
43
- "@telia-ace/knowledge-widget-core": "1.0.34-experimental.9",
41
+ "@telia-ace/knowledge-widget-core": "^1.0.34",
44
42
  "@types/react": "^18.0.26",
45
43
  "@webprovisions/platform": "^1.1.2",
46
- "lit": "^2.6.1",
47
- "react": "^18.2.0",
48
- "sass": "^1.57.1"
44
+ "react": "^18.2.0"
49
45
  },
50
46
  "scripts": {
51
47
  "clean": "rimraf ./dist",
@@ -1,5 +0,0 @@
1
- const e = ({ actions: t, entryId: n, groupId: o }) => null;
2
- export {
3
- e as default
4
- };
5
- //# sourceMappingURL=contact-method-list.2b3b6ea5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contact-method-list.2b3b6ea5.js","sources":["../src/ui/contact-method-list.tsx"],"sourcesContent":["// import styled from '@emotion/styled';\n// import {\n// ContactList,\n// ContactMethod as GenericContactMethod,\n// } from '@telia-ace/knowledge-widget-adapters';\n// import { useContainer, useDispatch } from '@telia-ace/knowledge-widget-ui';\nimport React from 'react';\n// import { ActionItem } from '../types';\n// import ContactMethod from './contact-method';\nconst ContactMethodList: React.FC<any> = ({ actions, entryId, groupId }) => {\n return null;\n};\nexport default ContactMethodList;\n\n// type Props = {\n// actions: ActionItem[];\n// contactMethodIds?: string[];\n// entryId: string;\n// groupId: string;\n// };\n// const ContactMethodList: React.FC<Props> = ({ actions, entryId, groupId }) => {\n// const dispatch = useDispatch();\n// const container = useContainer();\n// const [expanded, setExpanded] = useState<string[]>([]);\n\n// const items = useMemo<any[]>(() => {\n// return actions.map((action) => {\n// return {\n// ...action.data,\n// onClick: (_event: any, data: any) => {\n// if (data.inline && !data.expanded) {\n// setExpanded([...expanded, data.id]);\n// } else {\n// const { events } = container.get('$widget');\n// events.dispatch('provider:open-contact-method', {\n// entryId,\n// contactMethod: data,\n// actionKey: action.actionKey,\n// });\n// }\n// },\n// };\n// });\n// }, [actions, container, entryId, expanded]);\n\n// if (!items.length) {\n// return null;\n// }\n\n// return (\n// <StyledContactList\n// contactMethods={items}\n// dispatch={dispatch}\n// itemRenderer={(cm: any, props: any) => {\n// const isExpanded = expanded.includes(cm.id) || cm.expanded;\n// if (isExpanded && cm.inline) {\n// return (\n// <StyledContactMethod\n// contactMethodId={cm.id}\n// groupId={groupId}\n// guideId={cm.body.guideId}\n// />\n// );\n// }\n// return <StyledGenericContactMethod {...cm} {...props} />;\n// }}\n// />\n// );\n// };\n\n// export default ContactMethodList;\n\n// const StyledContactList = styled(ContactList)`\n// > ul > li {\n// a {\n// display: flex;\n// align-items: center;\n// outline-offset: -2px;\n// }\n\n// &:not(:last-child) {\n// ${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}\n// }\n// }\n// `;\n\n// const StyledContactMethod = styled(ContactMethod)`\n// i {\n// margin: 0 ${(p) => p.theme.sizes?.medium} 0 0;\n// display: flex;\n// justify-content: center;\n// align-items: center;\n// }\n// `;\n// const StyledGenericContactMethod = styled(GenericContactMethod)`\n// padding: ${(p) => p.theme.sizes?.medium};\n// i {\n// margin: 0 ${(p) => p.theme.sizes?.medium} 0 0;\n// display: flex;\n// justify-content: center;\n// align-items: center;\n// }\n// `;\n"],"names":["ContactMethodList","actions","entryId","groupId"],"mappings":"AASA,MAAMA,IAAmC,CAAC,EAAE,SAAAC,GAAS,SAAAC,GAAS,SAAAC,QACnD;"}
@@ -1,5 +0,0 @@
1
- const t = () => null;
2
- export {
3
- t as default
4
- };
5
- //# sourceMappingURL=contact-method.016a8ec5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contact-method.016a8ec5.js","sources":["../src/ui/contact-method.tsx"],"sourcesContent":["// import styled from '@emotion/styled';\n// import {\n// // ContactMethod as GenericContactMethod,\n// ContactMethodPlatform,\n// } from '@telia-ace/knowledge-widget-adapters';\n// import { DataType } from '@telia-ace/knowledge-widget-types-grid';\n// import { useContainer, useConversation, useDispatch } from '@telia-ace/knowledge-widget-ui';\n// import { FormBuilder } from '@telia-ace/widget-forms';\n// import { Widget } from '@webprovisions/platform';\nimport React from 'react';\n// import { updateForm } from '../utils';\n\ntype Props = {\n contactMethodId: string;\n groupId: string;\n guideId?: string;\n className?: string;\n};\nconst ContactMethod: React.FC<Props> = () => {\n return null; // TODO:\n};\nexport default ContactMethod;\n// const ContactMethod: React.FC<Props> = ({ contactMethodId, guideId, groupId, className }) => {\n// const [contactMethod, setContactMethod] = useState<any>();\n// const container = useContainer();\n// const dispatch = useDispatch();\n// const mountedRef = useRef<boolean>(true);\n// const currentConversation = useConversation();\n\n// useEffect(() => {\n// const { events } = container.get('$widget') as Widget;\n\n// const unsubscribe = events.subscribe('bot-provider:form-submitted', async (_, data) => {\n// // making sure that this is the form that is submitted\n// if (data.form.meta?.groupId !== groupId || data.id !== contactMethod.id) {\n// return;\n// }\n\n// if (currentConversation) {\n// if (!data.form.meta) {\n// data.form.meta = {};\n// }\n\n// data.form.meta.conversation = currentConversation;\n// }\n\n// const platform = (await container.getAsync('contactMethods')) as ContactMethodPlatform;\n\n// const updatedMethod = {\n// ...contactMethod,\n// body: {\n// ...contactMethod.body,\n// form: data.form,\n// },\n// };\n\n// const { errors, valid, errorTypes } = await platform.validate(updatedMethod);\n\n// if (!valid) {\n// const builder = new FormBuilder(contactMethod.body.form);\n// setContactMethod(undefined);\n\n// builder.setValidationErrors(errors);\n\n// updatedMethod.body = {\n// ...updatedMethod.body,\n// form: builder.get(),\n// };\n\n// setContactMethod({ ...updatedMethod });\n// return;\n// }\n\n// const result = await platform.submit(updatedMethod);\n\n// updatedMethod.confirmation = result;\n// setContactMethod(updatedMethod);\n// });\n\n// const unsubscribeEvaluate = events.subscribe('bot-provider:evaluate', async (_, data) => {\n// if (data.id != contactMethodId) {\n// return;\n// }\n\n// const platform = (await container.getAsync('contactMethods')) as ContactMethodPlatform;\n\n// const updatedForm = await platform.evaluate(contactMethod);\n\n// let updatedMethod = {\n// ...contactMethod,\n// body: {\n// ...contactMethod.body,\n// form: updatedForm,\n// },\n// };\n\n// const updatedBody = updateForm(updatedMethod, {\n// submit: 'Submit',\n// errors: {},\n// meta: { groupId },\n// });\n\n// updatedMethod = {\n// ...updatedMethod,\n// body: updatedBody,\n// };\n\n// setContactMethod(updatedMethod);\n// });\n\n// return () => {\n// unsubscribe();\n// unsubscribeEvaluate();\n// };\n// }, [container, contactMethod, setContactMethod, currentConversation]);\n\n// const fetchContactMethod = useCallback(\n// async (id: string) => {\n// const dataClient = await container.getAsync('dataClient');\n\n// const cm = await dataClient.fetch(DataType.ContactMethod, {\n// contactMethodId: id,\n// guideId,\n// });\n\n// const body = updateForm(cm, {\n// submit: 'Submit',\n// errors: {},\n// meta: { groupId },\n// });\n// cm.body = body;\n// cm.body.guideId = guideId;\n\n// if (!mountedRef.current) {\n// return null;\n// }\n// setContactMethod(cm);\n// },\n// [mountedRef]\n// );\n\n// useEffect(() => {\n// fetchContactMethod(contactMethodId);\n// return () => {\n// mountedRef.current = false; // clean up\n// };\n// }, [contactMethodId, fetchContactMethod]);\n\n// if (!contactMethod) {\n// return null;\n// }\n// return (\n// <StyledGenericContactMethod\n// {...contactMethod}\n// body={contactMethod.body}\n// inline={true}\n// expanded={true}\n// dispatch={dispatch}\n// className={className}\n// />\n// );\n// };\n\n// export default ContactMethod;\n\n// const StyledGenericContactMethod = styled(GenericContactMethod)`\n// padding: ${(p) => p.theme.sizes?.normal} ${(p) => p.theme.sizes?.medium};\n// `;\n"],"names":["ContactMethod"],"mappings":"AAkBA,MAAMA,IAAiC,MAC5B;"}
@@ -1,5 +0,0 @@
1
- const e = () => null;
2
- export {
3
- e as default
4
- };
5
- //# sourceMappingURL=feedback-list.042775aa.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feedback-list.042775aa.js","sources":["../src/ui/feedback-list.tsx"],"sourcesContent":["// import styled from '@emotion/styled';\n// import {\n// Button,\n// buttonCss,\n// Icon,\n// invertedHoverButton,\n// list,\n// List,\n// useDispatch,\n// } from '@telia-ace/knowledge-widget-ui';\n// import React from 'react';\n// import { messageContentPadding } from './styles';\nimport React from 'react';\n\nconst FeedbackList: React.FC<any> = () => {\n return null;\n};\nexport default FeedbackList;\n// type Props = {\n// actions: { [key: string]: string }[];\n// };\n// const FeedbackList: React.FC<Props> = ({ actions }) => {\n// const dispatch = useDispatch();\n// return (\n// <StyledButtonList\n// items={actions}\n// data-direction={'vertical'}\n// renderItem={(item: any) => {\n// return (\n// <li key={item.actionKey}>\n// <FeedbackButton\n// className=\"humany-feedback-button\"\n// disabled={false}\n// aria-pressed={true}\n// data-selected={true}\n// onClick={() => {\n// dispatch('action', item.actionKey);\n// }}\n// >\n// <Icon faIcon={item.actionKey == 'yes' ? 'smile-o' : 'frown-o'} />\n// <span>{item.label}</span>\n// </FeedbackButton>\n// </li>\n// );\n// }}\n// />\n// );\n// };\n\n// export default FeedbackList;\n\n// const StyledButtonList = styled(List)<{ 'data-direction': 'horizontal' | 'vertical' } & any>`\n// ${(p) => list(p)}\n// ${messageContentPadding}\n// display: flex;\n// gap: ${(p) => p.theme.sizes?.normal};\n// flex-direction: ${(p) => (p['data-direction'] === 'horizontal' ? 'row' : 'column')};\n// > li {\n// flex: 1;\n// margin: 0;\n// }\n// `;\n\n// const FeedbackButton = styled(Button)<{\n// 'data-selected': boolean;\n// }>`\n// ${buttonCss}\n// font-size: ${(p) => p.theme.fonts?.normal};\n// border-color: ${(p) => p.theme.colors?.primary};\n// font-weight: 300;\n// display: block;\n// width: 100%;\n\n// ${(p) =>\n// invertedHoverButton({\n// primaryColor: `${p.theme.colors?.primary}`,\n// secondaryColor: '#FFFFFF',\n// theme: p.theme,\n// })}\n// i {\n// margin: 0 ${(p) => p.theme.sizes?.small} 0 0;\n// }\n// span {\n// }\n// `;\n"],"names":["FeedbackList"],"mappings":"AAcA,MAAMA,IAA8B,MACzB;"}
@@ -1,61 +0,0 @@
1
- import { LitElement as u, html as l, unsafeCSS as b } from "lit";
2
- import { property as d, customElement as p } from "lit/decorators.js";
3
- const m = `ul{margin:var(--size-medium) 0;padding:0 var(--size-medium);list-style:none;display:flex;gap:var(--size-normal);flex-direction:column}ul>li{flex:1;margin:0}button{--button-primary: var(--colors-primary);--button-secondary: white;-webkit-appearance:button;text-transform:none;overflow:visible;outline:none;background-color:transparent;font-size:inherit;line-height:normal;margin:0;padding:0;cursor:pointer;text-align:center;border:none;padding:var(--size-normal);border-radius:var(--borderRadius);font-family:inherit;border:1px solid var(--button-primary, var(--colors-primary));background-color:var(--button-secondary, var(--colors-secondary));color:var(--button-primary, var(--colors-primary));transition:background-color .2s ease-out,color .2s ease-out;font-size:var(--fonts-normal);border-color:var(--colors-primary);font-weight:300;display:block;width:100%;display:flex;justify-content:center;align-items:center;gap:5px;padding:var(--size-medium)}button.active{border-color:var(--button-secondary, var(--colors-secondary));background-color:var(--button-primary, var(--colors-primary));color:var(--button-secondary, var(--colors-secondary))}button span,button i,button p,button a{transition:color .2s ease-out;color:inherit;font-size:var(--fonts-normal)}button:not([disabled]):hover{background-color:var(--button-primary, var(--colors-primary));color:var(--button-secondary, var(--colors-secondary))}button:not([disabled]):focus-visible{outline:var(--accessibility-border);color:var(--accessibility-colors-inactiveText);border-color:transparent}
4
- `;
5
- var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, c = (o, r, e, n) => {
6
- for (var t = n > 1 ? void 0 : n ? y(r, e) : r, i = o.length - 1, s; i >= 0; i--)
7
- (s = o[i]) && (t = (n ? s(r, e, t) : s(t)) || t);
8
- return n && t && v(r, e, t), t;
9
- };
10
- let a = class extends u {
11
- constructor() {
12
- super(), this.actions = [];
13
- }
14
- onClick(o, r) {
15
- o.stopPropagation(), o.preventDefault();
16
- const e = new CustomEvent("action", {
17
- bubbles: !0,
18
- cancelable: !0,
19
- composed: !0,
20
- detail: {
21
- actionKey: r
22
- }
23
- });
24
- this.dispatchEvent(e);
25
- }
26
- render() {
27
- return l`
28
- <ul>
29
- ${this.actions.map((o) => l`
30
- <li>
31
- <button
32
- aria-pressed=${!0}
33
- data-selected=${!0}
34
- @click=${(r) => this.onClick(r, o.actionKey)}
35
- >
36
- <ui-symbol-badge
37
- .size=${14}
38
- .symbol=${{
39
- type: "FontAwesome",
40
- content: o.actionKey === "yes" ? "smile-o" : "frown-o"
41
- }}
42
- ></ui-symbol-badge>
43
- <span>${o.label}</span>
44
- </button>
45
- </li>
46
- `)}
47
- </ul>
48
- `;
49
- }
50
- };
51
- a.styles = b(m);
52
- c([
53
- d({ type: String })
54
- ], a.prototype, "actions", 2);
55
- a = c([
56
- p("ace-knowledge-bot-feedback-list")
57
- ], a);
58
- export {
59
- a as FeedbackList
60
- };
61
- //# sourceMappingURL=new-feedback-list.4dc450c7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"new-feedback-list.4dc450c7.js","sources":["../src/ui/new-feedback-list.ts"],"sourcesContent":["import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport styles from './feedback-list.scss?inline';\n\ntype FeedbackAction = {\n actionKey: string;\n label: string;\n};\n\n@customElement('ace-knowledge-bot-feedback-list')\nexport class FeedbackList extends LitElement {\n static styles = unsafeCSS(styles);\n\n @property({ type: String })\n declare actions: FeedbackAction[];\n\n constructor() {\n super();\n this.actions = [];\n }\n\n onClick(event: Event, key: string) {\n event.stopPropagation();\n event.preventDefault();\n const ev = new CustomEvent('action', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: {\n actionKey: key,\n },\n });\n this.dispatchEvent(ev);\n }\n\n render() {\n return html`\n <ul>\n ${this.actions.map((item) => {\n return html`\n <li>\n <button\n aria-pressed=${true}\n data-selected=${true}\n @click=${(ev: Event) => this.onClick(ev, item.actionKey)}\n >\n <ui-symbol-badge\n .size=${14}\n .symbol=${{\n type: 'FontAwesome',\n content: item.actionKey === 'yes' ? 'smile-o' : 'frown-o',\n }}\n ></ui-symbol-badge>\n <span>${item.label}</span>\n </button>\n </li>\n `;\n })}\n </ul>\n `;\n }\n}\n"],"names":["FeedbackList","LitElement","event","key","ev","html","item","unsafeCSS","styles","__decorateClass","property","customElement"],"mappings":";;;;;;;;;AAUa,IAAAA,IAAN,cAA2BC,EAAW;AAAA,EAMzC,cAAc;AACJ,aACN,KAAK,UAAU;EACnB;AAAA,EAEA,QAAQC,GAAcC,GAAa;AAC/B,IAAAD,EAAM,gBAAgB,GACtBA,EAAM,eAAe;AACf,UAAAE,IAAK,IAAI,YAAY,UAAU;AAAA,MACjC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,QACJ,WAAWD;AAAA,MACf;AAAA,IAAA,CACH;AACD,SAAK,cAAcC,CAAE;AAAA,EACzB;AAAA,EAEA,SAAS;AACE,WAAAC;AAAA;AAAA,kBAEG,KAAK,QAAQ,IAAI,CAACC,MACTD;AAAA;AAAA;AAAA,+CAGoB;AAAA,gDACC;AAAA,yCACP,CAACD,MAAc,KAAK,QAAQA,GAAIE,EAAK,SAAS;AAAA;AAAA;AAAA,4CAG3C;AAAA,8CACE;AAAA,MACN,MAAM;AAAA,MACN,SAASA,EAAK,cAAc,QAAQ,YAAY;AAAA,IAAA;AAAA;AAAA,wCAGhDA,EAAK;AAAA;AAAA;AAAA,qBAI5B;AAAA;AAAA;AAAA,EAGb;AACJ;AAnDaN,EACF,SAASO,EAAUC,CAAM;AAGxBC,EAAA;AAAA,EADPC,EAAS,EAAE,MAAM,QAAQ;AAAA,GAHjBV,EAID,WAAA,WAAA,CAAA;AAJCA,IAANS,EAAA;AAAA,EADNE,EAAc,iCAAiC;AAAA,GACnCX,CAAA;"}
@@ -1,48 +0,0 @@
1
- import { LitElement as c, html as p, unsafeCSS as b } from "lit";
2
- import { property as u, customElement as d } from "lit/decorators.js";
3
- const m = `.wrapper{display:flex;align-items:center;justify-content:center;margin:var(--size-medium) 0;padding:0 var(--size-medium)}button{padding:0;margin:0;line-height:normal;font-size:inherit;font-family:inherit;cursor:pointer;background-color:transparent;border:none;outline:none;appearance:button;font-weight:300;display:flex;gap:var(--size-small)}button>i,button svg{margin-right:var(--size-small)}button:focus-visible{outline:var(--accessibility-border);color:var(--accessibility-colors-inactiveText);border-color:transparent}
4
- `;
5
- var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, l = (o, t, i, r) => {
6
- for (var e = r > 1 ? void 0 : r ? y(t, i) : t, s = o.length - 1, a; s >= 0; s--)
7
- (a = o[s]) && (e = (r ? a(t, i, e) : a(e)) || e);
8
- return r && e && v(t, i, e), e;
9
- };
10
- let n = class extends c {
11
- constructor() {
12
- super(), this.body = "";
13
- }
14
- onClick(o) {
15
- o.stopPropagation(), o.preventDefault();
16
- const t = new CustomEvent("action", {
17
- bubbles: !0,
18
- cancelable: !0,
19
- composed: !0,
20
- detail: {
21
- actionKey: "help"
22
- }
23
- });
24
- this.dispatchEvent(t);
25
- }
26
- render() {
27
- return p`<div class="wrapper">
28
- <button @click=${this.onClick} aria-label=${this.body} title=${this.body}>
29
- <ui-symbol-badge
30
- .size=${14}
31
- .symbol=${{ type: "FontAwesome", content: "meh-o" }}
32
- ></ui-symbol-badge>
33
- <span>${this.body}</span>
34
- </button>
35
- </div>`;
36
- }
37
- };
38
- n.styles = b(m);
39
- l([
40
- u({ type: String })
41
- ], n.prototype, "body", 2);
42
- n = l([
43
- d("ace-knowledge-bot-no-good-alternative")
44
- ], n);
45
- export {
46
- n as NoGoodAlternative
47
- };
48
- //# sourceMappingURL=new-no-good-alternative.63439a76.js.map