@telia-ace/knowledge-widget-bot-provider 0.0.1-alpha.5 → 0.0.1-alpha.52
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/contact-method-list.js +111 -0
- package/dist/contact-method-list.js.map +1 -0
- package/dist/contact-method.js +154 -0
- package/dist/contact-method.js.map +1 -0
- package/dist/entry-handler.d.ts +2 -0
- package/dist/feedback-list.js +72 -0
- package/dist/feedback-list.js.map +1 -0
- package/dist/http-client.d.ts +42 -0
- package/{lib-esm → dist}/index.d.ts +0 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/index2.js +914 -0
- package/dist/index2.js.map +1 -0
- package/dist/no-good-alternative.js +46 -0
- package/dist/no-good-alternative.js.map +1 -0
- package/dist/notification-list.js +74 -0
- package/dist/notification-list.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/provider.d.ts +25 -0
- package/dist/store.d.ts +15 -0
- package/dist/styles.js +13 -0
- package/dist/styles.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/ui/contact-method-list.d.ts +10 -0
- package/dist/ui/contact-method.d.ts +9 -0
- package/dist/ui/feedback-list.d.ts +8 -0
- package/dist/ui/no-good-alternative.d.ts +6 -0
- package/dist/ui/notification-list.d.ts +11 -0
- package/dist/ui/styles.d.ts +1 -0
- package/dist/utils.d.ts +26 -0
- package/package.json +44 -45
- package/lib/client/chat.client.d.ts +0 -15
- package/lib/client/chat.client.js +0 -80
- package/lib/client/contact-method.client.d.ts +0 -22
- package/lib/client/contact-method.client.js +0 -276
- package/lib/client/http.client.d.ts +0 -22
- package/lib/client/http.client.js +0 -114
- package/lib/client/middleware.client.d.ts +0 -13
- package/lib/client/middleware.client.js +0 -60
- package/lib/contract/custom-component/contact-method-item.d.ts +0 -8
- package/lib/contract/custom-component/contact-method-item.js +0 -76
- package/lib/contract/custom-component/contact-method-list.d.ts +0 -7
- package/lib/contract/custom-component/contact-method-list.js +0 -41
- package/lib/contract/custom-component/contact-method.d.ts +0 -3
- package/lib/contract/custom-component/contact-method.js +0 -38
- package/lib/contract/enum/server-entry-type.enum.d.ts +0 -6
- package/lib/contract/enum/server-entry-type.enum.js +0 -10
- package/lib/contract/model/conversation-api-model/list.model.d.ts +0 -5
- package/lib/contract/model/conversation-api-model/list.model.js +0 -2
- package/lib/contract/model/conversation-api-model/message.model.d.ts +0 -7
- package/lib/contract/model/conversation-api-model/message.model.js +0 -2
- package/lib/contract/model/http/action.model.d.ts +0 -3
- package/lib/contract/model/http/action.model.js +0 -2
- package/lib/contract/model/http/client-action.model.d.ts +0 -4
- package/lib/contract/model/http/client-action.model.js +0 -3
- package/lib/contract/model/http/client-envelope.model.d.ts +0 -9
- package/lib/contract/model/http/client-envelope.model.js +0 -2
- package/lib/contract/model/http/connect-options.model.d.ts +0 -5
- package/lib/contract/model/http/connect-options.model.js +0 -2
- package/lib/contract/model/http/global-state.model.d.ts +0 -8
- package/lib/contract/model/http/global-state.model.js +0 -2
- package/lib/contract/model/http/http-client-options.model.d.ts +0 -5
- package/lib/contract/model/http/http-client-options.model.js +0 -2
- package/lib/contract/model/http/server-entry.model.d.ts +0 -11
- package/lib/contract/model/http/server-entry.model.js +0 -2
- package/lib/contract/model/http/server-envelope.model.d.ts +0 -10
- package/lib/contract/model/http/server-envelope.model.js +0 -2
- package/lib/contract/model/middleware/aggregator-state.model.d.ts +0 -4
- package/lib/contract/model/middleware/aggregator-state.model.js +0 -3
- package/lib/contract/model/shared/loose-object.model.d.ts +0 -3
- package/lib/contract/model/shared/loose-object.model.js +0 -2
- package/lib/helper/chat.helper.d.ts +0 -8
- package/lib/helper/chat.helper.js +0 -21
- package/lib/helper/http.helper.d.ts +0 -13
- package/lib/helper/http.helper.js +0 -33
- package/lib/helper/middleware.helper.d.ts +0 -12
- package/lib/helper/middleware.helper.js +0 -72
- package/lib/helper/store.helper.d.ts +0 -22
- package/lib/helper/store.helper.js +0 -80
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -8
- package/lib/interface/entry.interface.d.ts +0 -17
- package/lib/interface/entry.interface.js +0 -138
- package/lib/interface/middleware/contact-expanded.interface.d.ts +0 -0
- package/lib/interface/middleware/contact-expanded.interface.js +0 -50
- package/lib/interface/middleware/legacy-contact-methods.interface.d.ts +0 -0
- package/lib/interface/middleware/legacy-contact-methods.interface.js +0 -394
- package/lib/interface/middleware/paging.interface.d.ts +0 -4
- package/lib/interface/middleware/paging.interface.js +0 -55
- package/lib/interface/middleware/processor.interface.d.ts +0 -10
- package/lib/interface/middleware/processor.interface.js +0 -120
- package/lib/plugin.d.ts +0 -3
- package/lib/plugin.js +0 -172
- package/lib-esm/client/chat.client.d.ts +0 -15
- package/lib-esm/client/chat.client.js +0 -75
- package/lib-esm/client/contact-method.client.d.ts +0 -22
- package/lib-esm/client/contact-method.client.js +0 -270
- package/lib-esm/client/http.client.d.ts +0 -22
- package/lib-esm/client/http.client.js +0 -108
- package/lib-esm/client/middleware.client.d.ts +0 -13
- package/lib-esm/client/middleware.client.js +0 -55
- package/lib-esm/contract/custom-component/contact-method-item.d.ts +0 -8
- package/lib-esm/contract/custom-component/contact-method-item.js +0 -51
- package/lib-esm/contract/custom-component/contact-method-list.d.ts +0 -7
- package/lib-esm/contract/custom-component/contact-method-list.js +0 -13
- package/lib-esm/contract/custom-component/contact-method.d.ts +0 -3
- package/lib-esm/contract/custom-component/contact-method.js +0 -33
- package/lib-esm/contract/enum/server-entry-type.enum.d.ts +0 -6
- package/lib-esm/contract/enum/server-entry-type.enum.js +0 -7
- package/lib-esm/contract/model/conversation-api-model/list.model.d.ts +0 -5
- package/lib-esm/contract/model/conversation-api-model/list.model.js +0 -1
- package/lib-esm/contract/model/conversation-api-model/message.model.d.ts +0 -7
- package/lib-esm/contract/model/conversation-api-model/message.model.js +0 -1
- package/lib-esm/contract/model/http/action.model.d.ts +0 -3
- package/lib-esm/contract/model/http/action.model.js +0 -1
- package/lib-esm/contract/model/http/client-action.model.d.ts +0 -4
- package/lib-esm/contract/model/http/client-action.model.js +0 -2
- package/lib-esm/contract/model/http/client-envelope.model.d.ts +0 -9
- package/lib-esm/contract/model/http/client-envelope.model.js +0 -1
- package/lib-esm/contract/model/http/connect-options.model.d.ts +0 -5
- package/lib-esm/contract/model/http/connect-options.model.js +0 -1
- package/lib-esm/contract/model/http/global-state.model.d.ts +0 -8
- package/lib-esm/contract/model/http/global-state.model.js +0 -1
- package/lib-esm/contract/model/http/http-client-options.model.d.ts +0 -5
- package/lib-esm/contract/model/http/http-client-options.model.js +0 -1
- package/lib-esm/contract/model/http/server-entry.model.d.ts +0 -11
- package/lib-esm/contract/model/http/server-entry.model.js +0 -1
- package/lib-esm/contract/model/http/server-envelope.model.d.ts +0 -10
- package/lib-esm/contract/model/http/server-envelope.model.js +0 -1
- package/lib-esm/contract/model/middleware/aggregator-state.model.d.ts +0 -4
- package/lib-esm/contract/model/middleware/aggregator-state.model.js +0 -2
- package/lib-esm/contract/model/shared/loose-object.model.d.ts +0 -3
- package/lib-esm/contract/model/shared/loose-object.model.js +0 -1
- package/lib-esm/helper/chat.helper.d.ts +0 -8
- package/lib-esm/helper/chat.helper.js +0 -18
- package/lib-esm/helper/http.helper.d.ts +0 -13
- package/lib-esm/helper/http.helper.js +0 -30
- package/lib-esm/helper/middleware.helper.d.ts +0 -12
- package/lib-esm/helper/middleware.helper.js +0 -69
- package/lib-esm/helper/store.helper.d.ts +0 -22
- package/lib-esm/helper/store.helper.js +0 -77
- package/lib-esm/index.js +0 -2
- package/lib-esm/interface/entry.interface.d.ts +0 -17
- package/lib-esm/interface/entry.interface.js +0 -136
- package/lib-esm/interface/middleware/paging.interface.d.ts +0 -4
- package/lib-esm/interface/middleware/paging.interface.js +0 -53
- package/lib-esm/interface/middleware/processor.interface.d.ts +0 -10
- package/lib-esm/interface/middleware/processor.interface.js +0 -118
- package/lib-esm/plugin.d.ts +0 -3
- package/lib-esm/plugin.js +0 -144
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.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';\r\n\r\nexport enum CustomMessageTypes {\r\n ContactMethod = 'ace-knowledge-bot-contact-method',\r\n ContactList = 'ace-knowledge-bot-contact-list',\r\n FeedbackList = 'ace-knowledge-bot-feedback-list',\r\n NotificationList = 'ace-knowledge-bot-notification-list',\r\n NoGoodAlternative = 'ace-knowledge-bot-no-good-alternative',\r\n}\r\n\r\ntype LooseObject = { [key: string]: any };\r\n\r\nexport interface ActionItem {\r\n label: string;\r\n actionKey: string;\r\n data?: any;\r\n}\r\n\r\nexport interface MessageGroup {\r\n id: string;\r\n isUser: boolean;\r\n items: MessageGroupItem[];\r\n writer?: any;\r\n meta: { [key: string]: any };\r\n}\r\n\r\nexport interface MessageGroupItem {\r\n id: string;\r\n groupId: string;\r\n isUser: boolean;\r\n message: [ConversationMessageListItemType | CustomMessageTypes, any];\r\n}\r\n\r\nexport interface ClientEnvelope {\r\n command?: LooseObject;\r\n action?: {\r\n key: string;\r\n content: any;\r\n };\r\n globalState?: LooseObject;\r\n localState?: LooseObject;\r\n clientId?: string;\r\n}\r\n\r\nexport interface ServerEnvelope {\r\n clientId?: string | undefined;\r\n entries: ServerEntry[];\r\n globalState?: GlobalState;\r\n resolveCommand?: string;\r\n clientEnvelope?: ClientEnvelope;\r\n}\r\n\r\nexport interface GlobalState {\r\n completedInteractionsCount: number;\r\n lastQuestion?: string;\r\n lastBotGuide: number;\r\n lastGuideTitle?: string;\r\n site: string;\r\n invincibleParameters: object;\r\n}\r\n\r\nexport interface ServerEntry {\r\n id: string;\r\n type: string;\r\n content: any;\r\n actions: { [key: string]: any };\r\n tags: string[];\r\n relation?: string;\r\n timestamp: string;\r\n localState?: { [key: string]: any };\r\n}\r\n\r\nexport interface ListContent {\r\n header?: string;\r\n actions: ActionItem[];\r\n contactMethodIds?: string[];\r\n entryId: string;\r\n groupId: string;\r\n}\r\n","import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\r\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { FormBuilder, submitButton } from '@telia-ace/widget-forms';\r\nimport { Symbol } from '@telia-ace/widget-ui';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { CustomMessageTypes, MessageGroup, MessageGroupItem } from './types';\r\n\r\nconst convertLegacySymbol = (symbol?: { type: string; content: string }): Symbol | undefined => {\r\n if (symbol) {\r\n const { type, content } = symbol;\r\n if (type && content) {\r\n return { type, content };\r\n }\r\n }\r\n};\r\n\r\nexport const createGroup = ({\r\n isUser,\r\n items = [],\r\n meta = {},\r\n}: {\r\n isUser: boolean;\r\n items?: Partial<MessageGroupItem>[];\r\n meta?: MessageGroup['meta'];\r\n}) => {\r\n const groupId = uuid();\r\n\r\n const group = {\r\n id: groupId,\r\n isUser,\r\n items: items.map((i) => {\r\n return {\r\n id: i.id || uuid(),\r\n isUser: isUser,\r\n groupId: groupId,\r\n message: i.message || [],\r\n };\r\n }),\r\n meta,\r\n } as MessageGroup;\r\n\r\n return group;\r\n};\r\n\r\nexport const contactMethodFromLegacy = (\r\n {\r\n id,\r\n title,\r\n defaultIcon,\r\n exits: [exit],\r\n exitType,\r\n confirmationText,\r\n expandFormAutomatically,\r\n form,\r\n description,\r\n }: any,\r\n options: {\r\n validation?: any;\r\n guideId?: string;\r\n } = {}\r\n): any => {\r\n const { adapter } = exit || { Adapter: {} };\r\n const { clientName = '', settings: adapterSettings = {}, customClientName = '' } = adapter;\r\n const { validation } = options;\r\n\r\n const settings: any = {\r\n id: id.toString(),\r\n title: title,\r\n description: description,\r\n symbol: convertLegacySymbol(defaultIcon),\r\n clientName: clientName === 'custom.adapter' ? customClientName : clientName,\r\n expanded: true,\r\n inline: true,\r\n body: {},\r\n };\r\n\r\n if (clientName.indexOf('phone') > -1 || clientName.indexOf('freetext') > -1) {\r\n const { displayTextBeforeClick, textBeforeClick } = adapterSettings;\r\n if (displayTextBeforeClick === 'true') {\r\n settings.expanded = false;\r\n settings.title = textBeforeClick;\r\n }\r\n\r\n if (clientName.indexOf('phone.text') > -1) {\r\n settings.body.phoneNumber = adapterSettings.phoneNumber;\r\n } else {\r\n settings.body.freetext = adapterSettings.freetext;\r\n }\r\n }\r\n\r\n if (\r\n clientName.indexOf('chat.popup') > -1 ||\r\n clientName.indexOf('link') > -1 ||\r\n (clientName === 'custom.adapter' && exitType === 'custom')\r\n ) {\r\n settings.body = adapterSettings;\r\n settings.body.confirmationFallback = confirmationText;\r\n }\r\n\r\n if (clientName.indexOf('ace') > -1) {\r\n settings.body = adapterSettings;\r\n }\r\n\r\n if (form && form.hasValueComponents) {\r\n if (validation) {\r\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form, validation).get();\r\n } else {\r\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form).get();\r\n }\r\n if (!expandFormAutomatically) {\r\n settings.expanded = settings.inline = false;\r\n }\r\n\r\n settings.body = updateForm(settings, { submit: 'Submit' });\r\n }\r\n\r\n if (options.guideId) {\r\n settings.body.guideId = options.guideId;\r\n }\r\n\r\n return settings;\r\n};\r\n\r\nexport const getListType = (state: any) => {\r\n if (state?.$type === 'Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching') {\r\n return ConversationMessageListItemType.LinkList;\r\n } else if (\r\n state?.$type ===\r\n 'Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching'\r\n ) {\r\n return CustomMessageTypes.FeedbackList;\r\n } else if (\r\n state?.$type === 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\r\n ) {\r\n return CustomMessageTypes.ContactList;\r\n } else return ConversationMessageListItemType.ButtonList;\r\n};\r\n\r\nexport const getKnowledgeBotEndpoint = (\r\n container: Container,\r\n component: any /*: ComponentNodeController */\r\n) => {\r\n const { knowledgeBotEndpoint } = component.properties();\r\n\r\n if (knowledgeBotEndpoint) {\r\n return `${knowledgeBotEndpoint}/conversations`;\r\n }\r\n\r\n const { data } = container.get('$settings');\r\n\r\n if (!data || !data.projection) throw new Error('Missing Knowledge Bot endpoint');\r\n\r\n return `${data.projection}/conversations`;\r\n};\r\n\r\nexport const updateForm = (\r\n contactMethod: ContactMethodType,\r\n {\r\n submit,\r\n errors,\r\n meta,\r\n }: { submit: string; errors?: { [key: string]: string }; meta?: { [key: string]: string } }\r\n): any => {\r\n if (contactMethod?.body?.form) {\r\n const { body } = contactMethod;\r\n const builder = new FormBuilder(body.form);\r\n\r\n if (!body.form.layout.submit) {\r\n builder.createComponent(submitButton(submit, 'submit'));\r\n }\r\n\r\n if (errors) {\r\n builder.setValidationErrors(errors);\r\n }\r\n\r\n if (meta) {\r\n (builder as any).setMeta(meta);\r\n }\r\n\r\n return {\r\n ...body,\r\n form: builder.get(),\r\n };\r\n }\r\n return contactMethod?.body || {};\r\n};\r\n","import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport {\r\n ActionItem,\r\n CustomMessageTypes,\r\n ListContent,\r\n MessageGroup,\r\n MessageGroupItem,\r\n ServerEntry,\r\n} from './types';\r\nimport { contactMethodFromLegacy, createGroup, getListType } from './utils';\r\n\r\nconst createGroupItem = ({\r\n messageId,\r\n message,\r\n group,\r\n}: {\r\n messageId: string;\r\n message: MessageGroupItem['message'];\r\n group: MessageGroup;\r\n}) => {\r\n return {\r\n id: messageId,\r\n message,\r\n groupId: group.id,\r\n isUser: group.isUser,\r\n };\r\n};\r\n\r\nexport const processEntries = async (entries: ServerEntry[], prevGroup?: MessageGroup) => {\r\n const createListContent = (\r\n listType: string,\r\n entry: ServerEntry,\r\n groupId: string,\r\n listContent: ListContent = {\r\n actions: [],\r\n entryId: entry.id,\r\n groupId,\r\n }\r\n ) => {\r\n const contactMethodIds: string[] = [];\r\n\r\n listContent.actions = entry.content.items.map((i: any) => {\r\n const action = {\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n } as ActionItem;\r\n\r\n if (i.data) {\r\n const entryAction = entry.actions[i.actionKey];\r\n if (listType === CustomMessageTypes.ContactList) {\r\n contactMethodIds.push(i.data.id);\r\n action.data = contactMethodFromLegacy(i.data, {\r\n guideId: entryAction?.guideId?.toString(),\r\n });\r\n } else {\r\n action.data = i.data;\r\n }\r\n }\r\n return action;\r\n });\r\n\r\n if (listType === CustomMessageTypes.ContactList) {\r\n listContent.contactMethodIds = contactMethodIds;\r\n }\r\n\r\n return listContent;\r\n };\r\n\r\n const transform = async (\r\n entry: ServerEntry,\r\n group: MessageGroup,\r\n related: ServerEntry[] = [],\r\n prevGroup?: MessageGroup\r\n ) => {\r\n const messageId = uuid();\r\n\r\n switch (entry.type) {\r\n case 'List':\r\n {\r\n const { header, items, html } = entry.content;\r\n\r\n const result = [];\r\n\r\n let listContent = {\r\n actions: [],\r\n entryId: entry.id,\r\n groupId: group.id,\r\n } as ListContent;\r\n\r\n if (header) {\r\n listContent.header = header;\r\n }\r\n\r\n if (items?.length > 0) {\r\n const listType = getListType(entry.localState);\r\n listContent = createListContent(listType, entry, group.id, listContent);\r\n\r\n // entry has related entries\r\n if (!!related.length) {\r\n const pagingEntry = related.find((e) => e.tags.includes('paging'));\r\n const fallbackEntry = related.find((e) => e.tags.includes('fallback'));\r\n\r\n if (pagingEntry?.content) {\r\n group.meta.paging = {\r\n actions: pagingEntry.actions,\r\n items: pagingEntry.content.items,\r\n localState: pagingEntry.localState,\r\n };\r\n pagingEntry.content.items.forEach((i: any) => {\r\n listContent.actions.push({\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n data: {\r\n groupId: !!prevGroup ? prevGroup.id : group.id,\r\n },\r\n });\r\n });\r\n }\r\n\r\n if (fallbackEntry) {\r\n const fallbackAction = fallbackEntry.content.items.find(\r\n (i: any) => i.actionKey === 'help'\r\n );\r\n if (fallbackAction) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.Separator,\r\n undefined,\r\n ],\r\n group,\r\n })\r\n );\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.NoGoodAlternative,\r\n { body: fallbackAction.title },\r\n ],\r\n group,\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n result.unshift(\r\n createGroupItem({\r\n messageId,\r\n message: [listType, listContent],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (html) {\r\n result.unshift(\r\n createGroupItem({\r\n messageId,\r\n message: [ConversationMessageListItemType.HTML, { body: html }],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n break;\r\n case 'Text':\r\n {\r\n const result = [];\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n { body: entry.content.html },\r\n ],\r\n group,\r\n })\r\n );\r\n\r\n // embedded contact methods\r\n if (!!related.length) {\r\n const contactMethodListEntry = related.find(\r\n (e) =>\r\n e.type === 'List' &&\r\n e.localState?.$type ===\r\n 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\r\n );\r\n\r\n const dialogListEntry = related.find((e) => e.tags.includes('dialog'));\r\n const feedbackEntry = related.find((e) => e.tags.includes('feedback'));\r\n\r\n if (dialogListEntry) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.ButtonList,\r\n {\r\n actions: dialogListEntry.content.items.map((i: any) => {\r\n return {\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n };\r\n }),\r\n },\r\n ],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (contactMethodListEntry) {\r\n const listContent = createListContent(\r\n CustomMessageTypes.ContactList,\r\n contactMethodListEntry,\r\n group.id\r\n );\r\n\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [ConversationMessageListItemType.Separator, undefined],\r\n group,\r\n })\r\n );\r\n\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [CustomMessageTypes.ContactList, listContent],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (feedbackEntry) {\r\n if (feedbackEntry.content.html) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n group,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: feedbackEntry.content.html,\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n group,\r\n message: [\r\n CustomMessageTypes.FeedbackList,\r\n {\r\n actions: feedbackEntry.content.items.map((i: any) => {\r\n return {\r\n actionKey: i.actionKey,\r\n label: i.title,\r\n };\r\n }),\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n }\r\n return result;\r\n }\r\n break;\r\n case 'Contact': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.ContactMethod,\r\n {\r\n contactMethodId: entry.content.id,\r\n groupId: group.id,\r\n guideId: entry.content.guideId,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n case 'CategorizedNoticeList': {\r\n const result = [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.NotificationList,\r\n {\r\n id: entry.content.item.id.toString(),\r\n header: entry.content.item.title,\r\n items: entry.content.item.listNotices,\r\n symbol: entry.content.item.defaultIcon,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n\r\n (entry.content.notices || []).forEach((notice: any) => {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: notice.body,\r\n },\r\n ],\r\n group,\r\n })\r\n );\r\n });\r\n\r\n return result;\r\n }\r\n case 'footerNotice': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: entry.content.item.body,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n case 'Error': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: entry.content.message || 'Something went wrong.',\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n\r\n default:\r\n return [];\r\n }\r\n };\r\n\r\n const splitEntry = (entry: ServerEntry): ServerEntry | ServerEntry[] => {\r\n if (['CategorizedNoticeList', 'NoticeList'].includes(entry.type)) {\r\n return (entry.content.items || []).reduce((acc: any, item: any) => {\r\n if (!entry.content.isInitialNotices) {\r\n return acc;\r\n }\r\n acc.push({\r\n ...entry,\r\n id: uuid(),\r\n type: item.type || entry.type,\r\n content: {\r\n $type: entry.content.$type,\r\n isInitialNotices: entry.content.isInitialNotices,\r\n notices: item.notices,\r\n item,\r\n },\r\n });\r\n return acc;\r\n }, []);\r\n }\r\n return entry;\r\n };\r\n\r\n // map of in which order the messages should be displayed\r\n // lower numbers will be displayed above higher\r\n const sortMap = new Map<string, number>([\r\n ['Text', 1],\r\n ['List', 2],\r\n ['Contact', 3],\r\n ['CategorizedNoticeList', 10],\r\n ]);\r\n\r\n const result: MessageGroup[] = [];\r\n const filteredEntries = entries\r\n .sort((item, other) => {\r\n // sort the entries based on it's types sort value\r\n const defaultSortValue = 20;\r\n\r\n var sortValue = sortMap.get(item.type) || defaultSortValue;\r\n var sortValueOther = sortMap.get(other.type) || defaultSortValue;\r\n return sortValue - sortValueOther;\r\n })\r\n .filter((entry) => !entry.relation) // remove any \"relation entries\"\r\n .reduce<ServerEntry[]>((acc, entry) => {\r\n // some entries needs to be splitted into seperate groups\r\n return acc.concat(splitEntry(entry));\r\n }, []);\r\n\r\n for (const entry of filteredEntries) {\r\n const relatedEntries = entries.filter((other) => other.relation === entry.id);\r\n const group = createGroup({ isUser: false });\r\n\r\n const items = await transform(entry, group, relatedEntries, prevGroup);\r\n items.forEach((item) => {\r\n group.items.push(item);\r\n });\r\n\r\n if (group.items.length) {\r\n result.push(group);\r\n }\r\n }\r\n return result;\r\n};\r\n","import { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager } from '@webprovisions/platform';\r\nimport { processEntries } from './entry-handler';\r\nimport Store from './store';\r\nimport { ClientEnvelope, MessageGroup, ServerEntry, ServerEnvelope } from './types';\r\n\r\nclass HttpClient {\r\n private globalState: any;\r\n private clientId: string;\r\n private entries: ServerEntry[];\r\n\r\n constructor(\r\n private endpoint: string,\r\n private events: EventManager,\r\n private store: Store,\r\n private container: Container\r\n ) {\r\n this.clientId = uuid();\r\n this.entries = [];\r\n }\r\n\r\n async start() {\r\n const storedMessages = await this.store.read();\r\n\r\n // if there are a session stored, rehydrate the messages\r\n // otherwise create a new session\r\n if (storedMessages && storedMessages.length > 0) {\r\n const storedGlobalState = this.store.readGlobalState();\r\n this.globalState = storedGlobalState;\r\n return storedMessages;\r\n } else {\r\n const envelope = this.createInitialEnvelope();\r\n const initialResponse = await this.postEnvelope(envelope);\r\n return initialResponse;\r\n }\r\n }\r\n\r\n async sendMessage(message: string) {\r\n const envelope = {\r\n command: { phrase: message },\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n };\r\n\r\n const result = await this.postEnvelope(envelope);\r\n return result;\r\n }\r\n\r\n async helpAction() {\r\n return this.postEnvelope({\r\n action: {\r\n key: 'help',\r\n content: {\r\n $type: 'Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching',\r\n },\r\n },\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n async nextAction(group: MessageGroup) {\r\n const { paging } = group.meta;\r\n if (!paging.actions?.next) {\r\n return;\r\n }\r\n return this.postEnvelope(\r\n {\r\n action: {\r\n key: 'next',\r\n content: paging.actions.next,\r\n },\r\n localState: paging.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n },\r\n group\r\n ).then((response) => {\r\n const listItemIndex = group.items.findIndex((item) => item.message[0] === 'link-list');\r\n if (listItemIndex === -1 || !response) {\r\n return group;\r\n }\r\n\r\n return {\r\n ...group,\r\n meta: {\r\n ...group.meta,\r\n ...response[0].meta,\r\n },\r\n items: [\r\n ...group.items.slice(0, listItemIndex),\r\n {\r\n ...group.items[listItemIndex],\r\n message: [\r\n response[0].items[0].message[0],\r\n {\r\n ...group.items[listItemIndex].message[1],\r\n ...response[0].items[0].message[1],\r\n },\r\n ],\r\n },\r\n ...group.items.slice(listItemIndex + 1),\r\n ],\r\n };\r\n });\r\n }\r\n\r\n async showContactMethodAction(data: {\r\n contactMethod: any;\r\n actionKey: string;\r\n entryId: string;\r\n }) {\r\n const entry = this.entries.find((e) => e.id === data.entryId);\r\n const actionItem = entry?.actions[data.actionKey];\r\n\r\n if (!actionItem) {\r\n return;\r\n }\r\n\r\n return this.postEnvelope({\r\n action: {\r\n key: data.actionKey,\r\n content: actionItem,\r\n },\r\n localState: entry.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n async defaultAction(action: string) {\r\n const entry = this.getEntryOfAction(action);\r\n\r\n if (!entry) {\r\n return;\r\n }\r\n\r\n return this.postEnvelope({\r\n action: {\r\n key: action,\r\n content: entry.actions[action],\r\n },\r\n localState: entry.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n private createInitialEnvelope(): ClientEnvelope {\r\n return {\r\n command: { site: this.endpoint },\r\n clientId: this.clientId,\r\n globalState: {},\r\n };\r\n }\r\n\r\n private async postEnvelope(envelope: ClientEnvelope, prevGroup?: MessageGroup) {\r\n try {\r\n const response = await fetch(this.endpoint, this.getHttpOptions(envelope));\r\n\r\n if (!response.ok) {\r\n throw response;\r\n }\r\n\r\n const data = await response.json();\r\n\r\n return this.handleResponse(data, prevGroup);\r\n } catch (error: any) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('Something went wrong when posting the envelope.');\r\n }\r\n let message = 'Something went wrong';\r\n\r\n if (error.message === 'Failed to fetch') {\r\n message = 'Lost connection... Please try again.';\r\n }\r\n return this.handleResponse({\r\n entries: [\r\n {\r\n id: uuid(),\r\n type: 'Error',\r\n timestamp: new Date().toISOString(),\r\n content: {\r\n message,\r\n },\r\n actions: {},\r\n tags: [],\r\n },\r\n ],\r\n });\r\n }\r\n }\r\n\r\n private async handleResponse(data: ServerEnvelope, prevGroup?: MessageGroup) {\r\n this.entries = this.entries.concat(data.entries);\r\n\r\n const widgetEntry = data.entries.find((e) => e.type === 'Widget');\r\n\r\n if (widgetEntry) {\r\n this.events.dispatch('provider:widget-entry', widgetEntry.content);\r\n }\r\n\r\n if (data.globalState) {\r\n this.globalState = data.globalState;\r\n }\r\n const groups = await processEntries(data.entries, prevGroup);\r\n return groups;\r\n }\r\n\r\n private getHttpOptions(envelope: ClientEnvelope) {\r\n const fetchOptions = {\r\n method: 'POST',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n };\r\n return Object.assign({}, fetchOptions, {\r\n body: JSON.stringify(envelope),\r\n credentials: 'same-origin' as RequestCredentials,\r\n });\r\n }\r\n\r\n private getEntryOfAction(action: string) {\r\n return this.entries.find((entry) => !!entry.actions[action]);\r\n }\r\n}\r\n\r\nexport default HttpClient;\r\n","import { createStorageWriter, readStorage, StorageCategory } from '@telia-ace/widget-services';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { GlobalState, MessageGroup } from './types';\r\n\r\nclass Store {\r\n private enabled = false; // set whether or not to store data\r\n private sessionMessageStorageVariable: string = 'knowledge-bot-messages';\r\n private botProviderGlobalStateKey = 'bot-provider-global-state';\r\n private botProviderMetaStateKey = 'bot-provider-conversation-meta';\r\n\r\n constructor(private container: Container) {}\r\n\r\n async readGlobalState() {\r\n if (!this.enabled) {\r\n return undefined;\r\n }\r\n const state: GlobalState | undefined = await readStorage(\r\n this.container,\r\n this.botProviderGlobalStateKey\r\n );\r\n return state;\r\n }\r\n\r\n async readMetaState() {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n return readStorage(this.container, this.botProviderMetaStateKey);\r\n }\r\n\r\n async write(groups: MessageGroup[]) {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n return createStorageWriter(\r\n this.container,\r\n this.sessionMessageStorageVariable,\r\n StorageCategory.Necessary\r\n ).then((write) => {\r\n return write(groups);\r\n });\r\n }\r\n\r\n async read() {\r\n if (!this.enabled) {\r\n return [];\r\n }\r\n return readStorage<MessageGroup[]>(this.container, this.sessionMessageStorageVariable).then(\r\n (groups) => {\r\n return groups || [];\r\n }\r\n );\r\n }\r\n}\r\n\r\nexport default Store;\r\n","import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\r\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { createStorageWriter, StorageCategory } from '@telia-ace/widget-services';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\r\nimport HttpClient from './http-client';\r\nimport Store from './store';\r\nimport { MessageGroup, ServerEntry } from './types';\r\nimport { createGroup, getKnowledgeBotEndpoint } from './utils';\r\n\r\nclass KnowledgeBotProvider {\r\n private agent: any;\r\n private user: any;\r\n private httpClient: HttpClient;\r\n private events: EventManager;\r\n private groups: MessageGroup[] = [];\r\n private store: Store;\r\n\r\n constructor(\r\n private container: Container,\r\n private conversation: any,\r\n component: ComponentNodeController\r\n ) {\r\n const { events } = this.container.get('$widget') as Widget;\r\n this.events = events;\r\n this.store = new Store(container);\r\n this.agent = conversation.createAgent({\r\n name: '',\r\n avatar: undefined,\r\n });\r\n this.user = conversation.user;\r\n const endpoint = getKnowledgeBotEndpoint(container, component);\r\n this.httpClient = new HttpClient(endpoint, events, this.store, this.container);\r\n\r\n this.events.subscribe('provider:widget-entry', (_event, data: ServerEntry['content']) => {\r\n this.onWidgetEntryReceived(data);\r\n });\r\n\r\n this.events.subscribe(\r\n 'provider:open-contact-method',\r\n async (_event, data: { contactMethod: any; entryId: string; actionKey: string }) => {\r\n const response = await this.httpClient.showContactMethodAction(data);\r\n\r\n if (response) {\r\n if (!!data.contactMethod.title) this.printUserMessage(data.contactMethod.title);\r\n this.onMessagesReceived(response);\r\n }\r\n }\r\n );\r\n }\r\n\r\n async initialize() {\r\n const loader = this.conversation.loading();\r\n\r\n const storedMeta: any = await this.store.readMetaState();\r\n if (storedMeta?.agent) {\r\n this.agent.update({\r\n name: storedMeta.agent.name,\r\n avatar: storedMeta.agent.avatar,\r\n });\r\n }\r\n\r\n const response = await this.httpClient.start();\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n\r\n loader();\r\n }\r\n\r\n async onMessagesReceived(groups: MessageGroup[]) {\r\n this.groups = this.groups.concat(groups);\r\n await this.store.write(this.groups);\r\n groups.forEach((group) => {\r\n const items = group.items.map((item) => item.message);\r\n if (group.isUser) {\r\n group.writer = this.user.print(items);\r\n } else {\r\n group.writer = this.agent.print(items);\r\n }\r\n });\r\n }\r\n\r\n async onInput(action: string | { [key: string]: any; actionKey: string; label?: string }) {\r\n const actionKey = typeof action === 'string' ? action : action.actionKey;\r\n\r\n switch (actionKey) {\r\n case 'next':\r\n {\r\n if (typeof action === 'string') {\r\n return;\r\n }\r\n const group = this.groups.find((other) => other.id === action.data?.groupId);\r\n\r\n if (group) {\r\n const response = await this.httpClient.nextAction(group);\r\n if (response) {\r\n const combined = response.items.map((item) => item.message);\r\n group.meta.paging = response?.meta.paging;\r\n group.writer.update(combined);\r\n }\r\n }\r\n }\r\n break;\r\n case 'help':\r\n {\r\n const loader = this.conversation.loading();\r\n\r\n const response = await this.httpClient.helpAction();\r\n loader();\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n }\r\n break;\r\n default:\r\n {\r\n if (typeof action !== 'string' && action.label) {\r\n this.printUserMessage(action.label);\r\n }\r\n const loader = this.conversation.loading();\r\n const response = await this.httpClient.defaultAction(actionKey);\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n loader();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private printUserMessage(message: string) {\r\n const group = createGroup({\r\n isUser: true,\r\n items: [\r\n {\r\n id: uuid(),\r\n isUser: true,\r\n message: [ConversationMessageListItemType.HTML, { body: message }],\r\n },\r\n ],\r\n });\r\n this.onMessagesReceived([group]);\r\n return group;\r\n }\r\n\r\n async onMessageSend(message: string) {\r\n const loader = this.conversation.loading();\r\n const response = await this.httpClient.sendMessage(message);\r\n\r\n this.printUserMessage(message);\r\n\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n loader();\r\n }\r\n\r\n private async onWidgetEntryReceived(data: ServerEntry['content']) {\r\n const agentSettings = {\r\n name: data.agent.name,\r\n avatar: data.agent.avatar,\r\n };\r\n this.agent.update(agentSettings);\r\n const write = await createStorageWriter(\r\n this.container,\r\n 'bot-provider-conversation-meta',\r\n StorageCategory.Necessary\r\n );\r\n write({\r\n agent: agentSettings,\r\n });\r\n }\r\n}\r\n\r\nexport default KnowledgeBotProvider;\r\n","import {\r\n ConversationPlatform,\r\n registerCustomMessageComponent,\r\n} from '@telia-ace/widget-conversation';\r\nimport { Container, Widget } from '@webprovisions/platform';\r\nimport KnowledgeBotProvider from './provider';\r\nimport { CustomMessageTypes } from './types';\r\n\r\nconst KnowledgeBotProviderPlugin = async (container: Container) => {\r\n const platform = await ConversationPlatform.getInstance(container);\r\n\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.ContactList,\r\n import('./ui/contact-method-list')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.ContactMethod,\r\n import('./ui/contact-method')\r\n );\r\n\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.NotificationList,\r\n import('./ui/notification-list')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.NoGoodAlternative,\r\n import('./ui/no-good-alternative')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.FeedbackList,\r\n import('./ui/feedback-list')\r\n );\r\n\r\n platform.registerProvider('ace-knowledge-bot', (conversation, component) => {\r\n const provider = new KnowledgeBotProvider(container, conversation, component);\r\n provider.initialize();\r\n\r\n component.actions.watch('conversation.user-submit', (input, next) => {\r\n provider.onMessageSend(input.text);\r\n });\r\n\r\n component.actions.watch('conversation.action', (input, next) => {\r\n provider.onInput(input);\r\n\r\n return next(input);\r\n });\r\n\r\n component.actions.create('evaluate', (input) => {\r\n const { events } = container.get('$widget') as Widget;\r\n events.dispatch('bot-provider:evaluate', input);\r\n });\r\n\r\n component.actions.create('submit', (input) => {\r\n const { events } = container.get('$widget') as Widget;\r\n events.dispatch('bot-provider:form-submitted', input);\r\n });\r\n });\r\n};\r\n\r\nexport default KnowledgeBotProviderPlugin;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEY,IAAA,uCAAA,wBAAL;AACa,sBAAA,mBAAA;AACF,sBAAA,iBAAA;AACC,sBAAA,kBAAA;AACI,sBAAA,sBAAA;AACC,sBAAA,uBAAA;AALZ,SAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;ACMZ,MAAM,sBAAsB,CAAC,WAAmE;AAC5F,MAAI,QAAQ;AACF,UAAA,EAAE,MAAM,YAAY;AAC1B,QAAI,QAAQ,SAAS;AACV,aAAA,EAAE,MAAM;IACnB;AAAA,EACJ;AACJ;AAEO,MAAM,cAAc,CAAC;AAAA,EACxB;AAAA,EACA,QAAQ,CAAC;AAAA,EACT,OAAO,CAAC;AAAA,MAKN;AACF,QAAM,UAAU;AAEhB,QAAM,QAAQ;AAAA,IACV,IAAI;AAAA,IACJ;AAAA,IACA,OAAO,MAAM,IAAI,CAAC,MAAM;AACb,aAAA;AAAA,QACH,IAAI,EAAE,MAAM,KAAK;AAAA,QACjB;AAAA,QACA;AAAA,QACA,SAAS,EAAE,WAAW,CAAC;AAAA,MAAA;AAAA,IAC3B,CACH;AAAA,IACD;AAAA,EAAA;AAGG,SAAA;AACX;AAEO,MAAM,0BAA0B,CACnC;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO,CAAC;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAEJ,UAGI,CAAA,MACE;AACN,QAAM,EAAE,YAAY,QAAQ,EAAE,SAAS,CAAG,EAAA;AACpC,QAAA,EAAE,aAAa,IAAI,UAAU,kBAAkB,CAAA,GAAI,mBAAmB,OAAO;AACnF,QAAM,EAAE,eAAe;AAEvB,QAAM,WAAgB;AAAA,IAClB,IAAI,GAAG,SAAS;AAAA,IAChB;AAAA,IACA;AAAA,IACA,QAAQ,oBAAoB,WAAW;AAAA,IACvC,YAAY,eAAe,mBAAmB,mBAAmB;AAAA,IACjE,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM,CAAC;AAAA,EAAA;AAGP,MAAA,WAAW,QAAQ,OAAO,IAAI,MAAM,WAAW,QAAQ,UAAU,IAAI,IAAI;AACnE,UAAA,EAAE,wBAAwB,oBAAoB;AACpD,QAAI,2BAA2B,QAAQ;AACnC,eAAS,WAAW;AACpB,eAAS,QAAQ;AAAA,IACrB;AAEA,QAAI,WAAW,QAAQ,YAAY,IAAI,IAAI;AAC9B,eAAA,KAAK,cAAc,gBAAgB;AAAA,IAAA,OACzC;AACM,eAAA,KAAK,WAAW,gBAAgB;AAAA,IAC7C;AAAA,EACJ;AAEA,MACI,WAAW,QAAQ,YAAY,IAAI,MACnC,WAAW,QAAQ,MAAM,IAAI,MAC5B,eAAe,oBAAoB,aAAa,UACnD;AACE,aAAS,OAAO;AAChB,aAAS,KAAK,uBAAuB;AAAA,EACzC;AAEA,MAAI,WAAW,QAAQ,KAAK,IAAI,IAAI;AAChC,aAAS,OAAO;AAAA,EACpB;AAEI,MAAA,QAAQ,KAAK,oBAAoB;AACjC,QAAI,YAAY;AACH,eAAA,KAAK,OAAO,YAAY,eAAe,GAAG,YAAY,MAAM,UAAU,EAAE,IAAI;AAAA,IAAA,OAClF;AACM,eAAA,KAAK,OAAO,YAAY,eAAe,GAAG,YAAY,IAAI,EAAE;IACzE;AACA,QAAI,CAAC,yBAAyB;AACjB,eAAA,WAAW,SAAS,SAAS;AAAA,IAC1C;AAEA,aAAS,OAAO,WAAW,UAAU,EAAE,QAAQ,UAAU;AAAA,EAC7D;AAEA,MAAI,QAAQ,SAAS;AACR,aAAA,KAAK,UAAU,QAAQ;AAAA,EACpC;AAEO,SAAA;AACX;AAEa,MAAA,cAAc,CAAC,UAAe;AACnC,MAAA,gCAAO,WAAU,sEAAsE;AACvF,WAAO,gCAAgC;AAAA,EAAA,WAEvC,gCAAO,WACP,iFACF;AACE,WAAO,mBAAmB;AAAA,EAAA,WAE1B,gCAAO,WAAU,2EACnB;AACE,WAAO,mBAAmB;AAAA,EAC9B;AAAO,WAAO,gCAAgC;AAClD;AAEa,MAAA,0BAA0B,CACnC,WACA,cACC;AACK,QAAA,EAAE,yBAAyB,UAAU,WAAW;AAEtD,MAAI,sBAAsB;AACtB,WAAO,GAAG;AAAA,EACd;AAEA,QAAM,EAAE,SAAS,UAAU,IAAI,WAAW;AAEtC,MAAA,CAAC,QAAQ,CAAC,KAAK;AAAkB,UAAA,IAAI,MAAM,gCAAgC;AAE/E,SAAO,GAAG,KAAK;AACnB;AAEa,MAAA,aAAa,CACtB,eACA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,MAEE;;AACF,MAAA,qDAAe,SAAf,mBAAqB,MAAM;AAC3B,UAAM,EAAE,SAAS;AACjB,UAAM,UAAU,IAAI,YAAY,KAAK,IAAI;AAEzC,QAAI,CAAC,KAAK,KAAK,OAAO,QAAQ;AAC1B,cAAQ,gBAAgB,aAAa,QAAQ,QAAQ,CAAC;AAAA,IAC1D;AAEA,QAAI,QAAQ;AACR,cAAQ,oBAAoB,MAAM;AAAA,IACtC;AAEA,QAAI,MAAM;AACL,cAAgB,QAAQ,IAAI;AAAA,IACjC;AAEO,WAAA,iCACA,OADA;AAAA,MAEH,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE1B;AACO,SAAA,gDAAe,SAAQ;AAClC;AC9KA,MAAM,kBAAkB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,MAKE;AACK,SAAA;AAAA,IACH,IAAI;AAAA,IACJ;AAAA,IACA,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,EAAA;AAEtB;AAEa,MAAA,iBAAiB,CAAO,SAAwB,cAA6B;AACtF,QAAM,oBAAoB,CACtB,UACA,OACA,SACA,cAA2B;AAAA,IACvB,SAAS,CAAC;AAAA,IACV,SAAS,MAAM;AAAA,IACf;AAAA,EAAA,MAEH;AACD,UAAM,mBAA6B,CAAA;AAEnC,gBAAY,UAAU,MAAM,QAAQ,MAAM,IAAI,CAAC,MAAW;;AACtD,YAAM,SAAS;AAAA,QACX,OAAO,EAAE;AAAA,QACT,WAAW,EAAE;AAAA,MAAA;AAGjB,UAAI,EAAE,MAAM;AACF,cAAA,cAAc,MAAM,QAAQ,EAAE;AAChC,YAAA,aAAa,mBAAmB,aAAa;AAC5B,2BAAA,KAAK,EAAE,KAAK,EAAE;AACxB,iBAAA,OAAO,wBAAwB,EAAE,MAAM;AAAA,YAC1C,SAAS,iDAAa,YAAb,mBAAsB;AAAA,UAAS,CAC3C;AAAA,QAAA,OACE;AACH,iBAAO,OAAO,EAAE;AAAA,QACpB;AAAA,MACJ;AACO,aAAA;AAAA,IAAA,CACV;AAEG,QAAA,aAAa,mBAAmB,aAAa;AAC7C,kBAAY,mBAAmB;AAAA,IACnC;AAEO,WAAA;AAAA,EAAA;AAGX,QAAM,YAAY,CACd,IACA,OAGC,sBAJD,IACA,IAGC,mBAJD,OACA,OACA,UAAyB,IACzB,YACC;AACD,UAAM,YAAY;AAElB,YAAQ,MAAM;AAAA,WACL,QACD;AACI,cAAM,EAAE,QAAQ,OAAO,SAAS,MAAM;AAEtC,cAAM,UAAS,CAAA;AAEf,YAAI,cAAc;AAAA,UACd,SAAS,CAAC;AAAA,UACV,SAAS,MAAM;AAAA,UACf,SAAS,MAAM;AAAA,QAAA;AAGnB,YAAI,QAAQ;AACR,sBAAY,SAAS;AAAA,QACzB;AAEI,YAAA,gCAAO,UAAS,GAAG;AACb,gBAAA,WAAW,YAAY,MAAM,UAAU;AAC7C,wBAAc,kBAAkB,UAAU,OAAO,MAAM,IAAI,WAAW;AAGlE,cAAA,CAAC,CAAC,QAAQ,QAAQ;AACZ,kBAAA,cAAc,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,SAAS,QAAQ,CAAC;AAC3D,kBAAA,gBAAgB,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,SAAS,UAAU,CAAC;AAErE,gBAAI,2CAAa,SAAS;AACtB,oBAAM,KAAK,SAAS;AAAA,gBAChB,SAAS,YAAY;AAAA,gBACrB,OAAO,YAAY,QAAQ;AAAA,gBAC3B,YAAY,YAAY;AAAA,cAAA;AAE5B,0BAAY,QAAQ,MAAM,QAAQ,CAAC,MAAW;AAC1C,4BAAY,QAAQ,KAAK;AAAA,kBACrB,OAAO,EAAE;AAAA,kBACT,WAAW,EAAE;AAAA,kBACb,MAAM;AAAA,oBACF,SAAS,CAAC,CAAC,aAAY,WAAU,KAAK,MAAM;AAAA,kBAChD;AAAA,gBAAA,CACH;AAAA,cAAA,CACJ;AAAA,YACL;AAEA,gBAAI,eAAe;AACT,oBAAA,iBAAiB,cAAc,QAAQ,MAAM,KAC/C,CAAC,MAAW,EAAE,cAAc,MAChC;AACA,kBAAI,gBAAgB;AAChB,wBAAO,KACH,gBAAgB;AAAA,kBACZ;AAAA,kBACA,SAAS;AAAA,oBACL,gCAAgC;AAAA,oBAChC;AAAA,kBACJ;AAAA,kBACA;AAAA,gBACH,CAAA,CACL;AACA,wBAAO,KACH,gBAAgB;AAAA,kBACZ;AAAA,kBACA,SAAS;AAAA,oBACL,mBAAmB;AAAA,oBACnB,EAAE,MAAM,eAAe,MAAM;AAAA,kBACjC;AAAA,kBACA;AAAA,gBACH,CAAA,CACL;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAEA,kBAAO,QACH,gBAAgB;AAAA,YACZ;AAAA,YACA,SAAS,CAAC,UAAU,WAAW;AAAA,YAC/B;AAAA,UACH,CAAA,CACL;AAAA,QACJ;AAEA,YAAI,MAAM;AACN,kBAAO,QACH,gBAAgB;AAAA,YACZ;AAAA,YACA,SAAS,CAAC,gCAAgC,MAAM,EAAE,MAAM,MAAM;AAAA,YAC9D;AAAA,UACH,CAAA,CACL;AAAA,QACJ;AAEO,eAAA;AAAA,MACX;AAAA,WAEC,QACD;AACI,cAAM,UAAS,CAAA;AACf,gBAAO,KACH,gBAAgB;AAAA,UACZ;AAAA,UACA,SAAS;AAAA,YACL,gCAAgC;AAAA,YAChC,EAAE,MAAM,MAAM,QAAQ,KAAK;AAAA,UAC/B;AAAA,UACA;AAAA,QACH,CAAA,CACL;AAGI,YAAA,CAAC,CAAC,QAAQ,QAAQ;AACZ,gBAAA,yBAAyB,QAAQ,KACnC,CAAC,MAAA;;AACG,qBAAE,SAAS,UACX,SAAE,eAAF,mBAAc,WACV;AAAA,WACZ;AAEM,gBAAA,kBAAkB,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,SAAS,QAAQ,CAAC;AAC/D,gBAAA,gBAAgB,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,SAAS,UAAU,CAAC;AAErE,cAAI,iBAAiB;AACjB,oBAAO,KACH,gBAAgB;AAAA,cACZ;AAAA,cACA,SAAS;AAAA,gBACL,gCAAgC;AAAA,gBAChC;AAAA,kBACI,SAAS,gBAAgB,QAAQ,MAAM,IAAI,CAAC,MAAW;AAC5C,2BAAA;AAAA,sBACH,OAAO,EAAE;AAAA,sBACT,WAAW,EAAE;AAAA,oBAAA;AAAA,kBACjB,CACH;AAAA,gBACL;AAAA,cACJ;AAAA,cACA;AAAA,YACH,CAAA,CACL;AAAA,UACJ;AAEA,cAAI,wBAAwB;AACxB,kBAAM,cAAc,kBAChB,mBAAmB,aACnB,wBACA,MAAM,EACV;AAEA,oBAAO,KACH,gBAAgB;AAAA,cACZ;AAAA,cACA,SAAS,CAAC,gCAAgC,WAAW,MAAS;AAAA,cAC9D;AAAA,YACH,CAAA,CACL;AAEA,oBAAO,KACH,gBAAgB;AAAA,cACZ;AAAA,cACA,SAAS,CAAC,mBAAmB,aAAa,WAAW;AAAA,cACrD;AAAA,YACH,CAAA,CACL;AAAA,UACJ;AAEA,cAAI,eAAe;AACX,gBAAA,cAAc,QAAQ,MAAM;AAC5B,sBAAO,KACH,gBAAgB;AAAA,gBACZ;AAAA,gBACA;AAAA,gBACA,SAAS;AAAA,kBACL,gCAAgC;AAAA,kBAChC;AAAA,oBACI,MAAM,cAAc,QAAQ;AAAA,kBAChC;AAAA,gBACJ;AAAA,cACH,CAAA,CACL;AAAA,YACJ;AACA,oBAAO,KACH,gBAAgB;AAAA,cACZ;AAAA,cACA;AAAA,cACA,SAAS;AAAA,gBACL,mBAAmB;AAAA,gBACnB;AAAA,kBACI,SAAS,cAAc,QAAQ,MAAM,IAAI,CAAC,MAAW;AAC1C,2BAAA;AAAA,sBACH,WAAW,EAAE;AAAA,sBACb,OAAO,EAAE;AAAA,oBAAA;AAAA,kBACb,CACH;AAAA,gBACL;AAAA,cACJ;AAAA,YACH,CAAA,CACL;AAAA,UACJ;AAAA,QACJ;AACO,eAAA;AAAA,MACX;AAAA,WAEC,WAAW;AACL,eAAA;AAAA,UACH,gBAAgB;AAAA,YACZ;AAAA,YACA,SAAS;AAAA,cACL,mBAAmB;AAAA,cACnB;AAAA,gBACI,iBAAiB,MAAM,QAAQ;AAAA,gBAC/B,SAAS,MAAM;AAAA,gBACf,SAAS,MAAM,QAAQ;AAAA,cAC3B;AAAA,YACJ;AAAA,YACA;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAET;AAAA,WACK,yBAAyB;AAC1B,cAAM,UAAS;AAAA,UACX,gBAAgB;AAAA,YACZ;AAAA,YACA,SAAS;AAAA,cACL,mBAAmB;AAAA,cACnB;AAAA,gBACI,IAAI,MAAM,QAAQ,KAAK,GAAG,SAAS;AAAA,gBACnC,QAAQ,MAAM,QAAQ,KAAK;AAAA,gBAC3B,OAAO,MAAM,QAAQ,KAAK;AAAA,gBAC1B,QAAQ,MAAM,QAAQ,KAAK;AAAA,cAC/B;AAAA,YACJ;AAAA,YACA;AAAA,UAAA,CACH;AAAA,QAAA;AAGJ,eAAM,QAAQ,WAAW,CAAA,GAAI,QAAQ,CAAC,WAAgB;AACnD,kBAAO,KACH,gBAAgB;AAAA,YACZ;AAAA,YACA,SAAS;AAAA,cACL,gCAAgC;AAAA,cAChC;AAAA,gBACI,MAAM,OAAO;AAAA,cACjB;AAAA,YACJ;AAAA,YACA;AAAA,UACH,CAAA,CACL;AAAA,QAAA,CACH;AAEM,eAAA;AAAA,MACX;AAAA,WACK,gBAAgB;AACV,eAAA;AAAA,UACH,gBAAgB;AAAA,YACZ;AAAA,YACA,SAAS;AAAA,cACL,gCAAgC;AAAA,cAChC;AAAA,gBACI,MAAM,MAAM,QAAQ,KAAK;AAAA,cAC7B;AAAA,YACJ;AAAA,YACA;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAET;AAAA,WACK,SAAS;AACH,eAAA;AAAA,UACH,gBAAgB;AAAA,YACZ;AAAA,YACA,SAAS;AAAA,cACL,gCAAgC;AAAA,cAChC;AAAA,gBACI,MAAM,MAAM,QAAQ,WAAW;AAAA,cACnC;AAAA,YACJ;AAAA,YACA;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAET;AAAA;AAGI,eAAO;;EAAC;AAId,QAAA,aAAa,CAAC,UAAoD;AACpE,QAAI,CAAC,yBAAyB,YAAY,EAAE,SAAS,MAAM,IAAI,GAAG;AACtD,aAAA,OAAM,QAAQ,SAAS,IAAI,OAAO,CAAC,KAAU,SAAc;AAC3D,YAAA,CAAC,MAAM,QAAQ,kBAAkB;AAC1B,iBAAA;AAAA,QACX;AACA,YAAI,KAAK,iCACF,QADE;AAAA,UAEL,IAAI,KAAK;AAAA,UACT,MAAM,KAAK,QAAQ,MAAM;AAAA,UACzB,SAAS;AAAA,YACL,OAAO,MAAM,QAAQ;AAAA,YACrB,kBAAkB,MAAM,QAAQ;AAAA,YAChC,SAAS,KAAK;AAAA,YACd;AAAA,UACJ;AAAA,QAAA,EACH;AACM,eAAA;AAAA,MACX,GAAG,CAAE,CAAA;AAAA,IACT;AACO,WAAA;AAAA,EAAA;AAKL,QAAA,8BAAc,IAAoB;AAAA,IACpC,CAAC,QAAQ,CAAC;AAAA,IACV,CAAC,QAAQ,CAAC;AAAA,IACV,CAAC,WAAW,CAAC;AAAA,IACb,CAAC,yBAAyB,EAAE;AAAA,EAAA,CAC/B;AAED,QAAM,SAAyB,CAAA;AAC/B,QAAM,kBAAkB,QACnB,KAAK,CAAC,MAAM,UAAU;AAEnB,UAAM,mBAAmB;AAEzB,QAAI,YAAY,QAAQ,IAAI,KAAK,IAAI,KAAK;AAC1C,QAAI,iBAAiB,QAAQ,IAAI,MAAM,IAAI,KAAK;AAChD,WAAO,YAAY;AAAA,EAAA,CACtB,EACA,OAAO,CAAC,UAAU,CAAC,MAAM,QAAQ,EACjC,OAAsB,CAAC,KAAK,UAAU;AAEnC,WAAO,IAAI,OAAO,WAAW,KAAK,CAAC;AAAA,EACvC,GAAG,CAAE,CAAA;AAET,aAAW,SAAS,iBAAiB;AAC3B,UAAA,iBAAiB,QAAQ,OAAO,CAAC,UAAU,MAAM,aAAa,MAAM,EAAE;AAC5E,UAAM,QAAQ,YAAY,EAAE,QAAQ,MAAO,CAAA;AAE3C,UAAM,QAAQ,MAAM,UAAU,OAAO,OAAO,gBAAgB,SAAS;AAC/D,UAAA,QAAQ,CAAC,SAAS;AACd,YAAA,MAAM,KAAK,IAAI;AAAA,IAAA,CACxB;AAEG,QAAA,MAAM,MAAM,QAAQ;AACpB,aAAO,KAAK,KAAK;AAAA,IACrB;AAAA,EACJ;AACO,SAAA;AACX;AClaA,MAAM,WAAW;AAAA,EAKb,YACY,UACA,QACA,OACA,WACV;AAJU,SAAA,WAAA;AACA,SAAA,SAAA;AACA,SAAA,QAAA;AACA,SAAA,YAAA;AAER,SAAK,WAAW;AAChB,SAAK,UAAU;EACnB;AAAA,EAEA,AAAM,QAAQ;AAAA;AACV,YAAM,iBAAiB,MAAM,KAAK,MAAM,KAAK;AAIzC,UAAA,kBAAkB,eAAe,SAAS,GAAG;AACvC,cAAA,oBAAoB,KAAK,MAAM,gBAAgB;AACrD,aAAK,cAAc;AACZ,eAAA;AAAA,MAAA,OACJ;AACG,cAAA,WAAW,KAAK;AACtB,cAAM,kBAAkB,MAAM,KAAK,aAAa,QAAQ;AACjD,eAAA;AAAA,MACX;AAAA,IACJ;AAAA;AAAA,EAEA,AAAM,YAAY,SAAiB;AAAA;AAC/B,YAAM,WAAW;AAAA,QACb,SAAS,EAAE,QAAQ,QAAQ;AAAA,QAC3B,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MAAA;AAGnB,YAAM,SAAS,MAAM,KAAK,aAAa,QAAQ;AACxC,aAAA;AAAA,IACX;AAAA;AAAA,EAEA,AAAM,aAAa;AAAA;AACf,aAAO,KAAK,aAAa;AAAA,QACrB,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,SAAS;AAAA,YACL,OAAO;AAAA,UACX;AAAA,QACJ;AAAA,QACA,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MAAA,CAClB;AAAA,IACL;AAAA;AAAA,EAEA,AAAM,WAAW,OAAqB;AAAA;;AAC5B,YAAA,EAAE,WAAW,MAAM;AACrB,UAAA,CAAC,cAAO,YAAP,mBAAgB,OAAM;AACvB;AAAA,MACJ;AACA,aAAO,KAAK,aACR;AAAA,QACI,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,SAAS,OAAO,QAAQ;AAAA,QAC5B;AAAA,QACA,YAAY,OAAO;AAAA,QACnB,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MAEnB,GAAA,KACJ,EAAE,KAAK,CAAC,aAAa;AACX,cAAA,gBAAgB,MAAM,MAAM,UAAU,CAAC,SAAS,KAAK,QAAQ,OAAO,WAAW;AACjF,YAAA,kBAAkB,MAAM,CAAC,UAAU;AAC5B,iBAAA;AAAA,QACX;AAEO,eAAA,iCACA,QADA;AAAA,UAEH,MAAM,kCACC,MAAM,OACN,SAAS,GAAG;AAAA,UAEnB,OAAO;AAAA,YACH,GAAG,MAAM,MAAM,MAAM,GAAG,aAAa;AAAA,YACrC,iCACO,MAAM,MAAM,iBADnB;AAAA,cAEI,SAAS;AAAA,gBACL,SAAS,GAAG,MAAM,GAAG,QAAQ;AAAA,gBAC7B,kCACO,MAAM,MAAM,eAAe,QAAQ,KACnC,SAAS,GAAG,MAAM,GAAG,QAAQ;AAAA,cAExC;AAAA,YACJ;AAAA,YACA,GAAG,MAAM,MAAM,MAAM,gBAAgB,CAAC;AAAA,UAC1C;AAAA,QAAA;AAAA,MACJ,CACH;AAAA,IACL;AAAA;AAAA,EAEA,AAAM,wBAAwB,MAI3B;AAAA;AACO,YAAA,QAAQ,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO;AACtD,YAAA,aAAa,+BAAO,QAAQ,KAAK;AAEvC,UAAI,CAAC,YAAY;AACb;AAAA,MACJ;AAEA,aAAO,KAAK,aAAa;AAAA,QACrB,QAAQ;AAAA,UACJ,KAAK,KAAK;AAAA,UACV,SAAS;AAAA,QACb;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MAAA,CAClB;AAAA,IACL;AAAA;AAAA,EAEA,AAAM,cAAc,QAAgB;AAAA;AAC1B,YAAA,QAAQ,KAAK,iBAAiB,MAAM;AAE1C,UAAI,CAAC,OAAO;AACR;AAAA,MACJ;AAEA,aAAO,KAAK,aAAa;AAAA,QACrB,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,SAAS,MAAM,QAAQ;AAAA,QAC3B;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MAAA,CAClB;AAAA,IACL;AAAA;AAAA,EAEA,wBAAgD;AACrC,WAAA;AAAA,MACH,SAAS,EAAE,MAAM,KAAK,SAAS;AAAA,MAC/B,UAAU,KAAK;AAAA,MACf,aAAa,CAAC;AAAA,IAAA;AAAA,EAEtB;AAAA,EAEA,AAAc,aAAa,UAA0B,WAA0B;AAAA;AACvE,UAAA;AACM,cAAA,WAAW,MAAM,MAAM,KAAK,UAAU,KAAK,eAAe,QAAQ,CAAC;AAErE,YAAA,CAAC,SAAS,IAAI;AACR,gBAAA;AAAA,QACV;AAEM,cAAA,OAAO,MAAM,SAAS;AAErB,eAAA,KAAK,eAAe,MAAM,SAAS;AAAA,eACrC;AAIL,YAAI,UAAU;AAEV,YAAA,MAAM,YAAY,mBAAmB;AAC3B,oBAAA;AAAA,QACd;AACA,eAAO,KAAK,eAAe;AAAA,UACvB,SAAS;AAAA,YACL;AAAA,cACI,IAAI,KAAK;AAAA,cACT,MAAM;AAAA,cACN,WAAW,IAAI,KAAK,EAAE,YAAY;AAAA,cAClC,SAAS;AAAA,gBACL;AAAA,cACJ;AAAA,cACA,SAAS,CAAC;AAAA,cACV,MAAM,CAAC;AAAA,YACX;AAAA,UACJ;AAAA,QAAA,CACH;AAAA,MACL;AAAA,IACJ;AAAA;AAAA,EAEA,AAAc,eAAe,MAAsB,WAA0B;AAAA;AACzE,WAAK,UAAU,KAAK,QAAQ,OAAO,KAAK,OAAO;AAEzC,YAAA,cAAc,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ;AAEhE,UAAI,aAAa;AACb,aAAK,OAAO,SAAS,yBAAyB,YAAY,OAAO;AAAA,MACrE;AAEA,UAAI,KAAK,aAAa;AAClB,aAAK,cAAc,KAAK;AAAA,MAC5B;AACA,YAAM,SAAS,MAAM,eAAe,KAAK,SAAS,SAAS;AACpD,aAAA;AAAA,IACX;AAAA;AAAA,EAEQ,eAAe,UAA0B;AAC7C,UAAM,eAAe;AAAA,MACjB,QAAQ;AAAA,MACR,SAAS;AAAA,QACL,QAAQ;AAAA,QACR,gBAAgB;AAAA,MACpB;AAAA,IAAA;AAEJ,WAAO,OAAO,OAAO,CAAC,GAAG,cAAc;AAAA,MACnC,MAAM,KAAK,UAAU,QAAQ;AAAA,MAC7B,aAAa;AAAA,IAAA,CAChB;AAAA,EACL;AAAA,EAEQ,iBAAiB,QAAgB;AAC9B,WAAA,KAAK,QAAQ,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,QAAQ,OAAO;AAAA,EAC/D;AACJ;AC9NA,MAAM,MAAM;AAAA,EAMR,YAAoB,WAAsB;AAAtB,SAAA,YAAA;AALpB,SAAQ,UAAU;AAClB,SAAQ,gCAAwC;AAChD,SAAQ,4BAA4B;AACpC,SAAQ,0BAA0B;AAAA,EAES;AAAA,EAE3C,AAAM,kBAAkB;AAAA;AAChB,UAAA,CAAC,KAAK,SAAS;AACR,eAAA;AAAA,MACX;AACA,YAAM,QAAiC,MAAM,YACzC,KAAK,WACL,KAAK,yBACT;AACO,aAAA;AAAA,IACX;AAAA;AAAA,EAEA,AAAM,gBAAgB;AAAA;AACd,UAAA,CAAC,KAAK,SAAS;AACf;AAAA,MACJ;AACA,aAAO,YAAY,KAAK,WAAW,KAAK,uBAAuB;AAAA,IACnE;AAAA;AAAA,EAEA,AAAM,MAAM,QAAwB;AAAA;AAC5B,UAAA,CAAC,KAAK,SAAS;AACf;AAAA,MACJ;AACO,aAAA,oBACH,KAAK,WACL,KAAK,+BACL,gBAAgB,SACpB,EAAE,KAAK,CAAC,UAAU;AACd,eAAO,MAAM,MAAM;AAAA,MAAA,CACtB;AAAA,IACL;AAAA;AAAA,EAEA,AAAM,OAAO;AAAA;AACL,UAAA,CAAC,KAAK,SAAS;AACf,eAAO;MACX;AACO,aAAA,YAA4B,KAAK,WAAW,KAAK,6BAA6B,EAAE,KACnF,CAAC,WAAW;AACR,eAAO,UAAU,CAAA;AAAA,MAAC,CAE1B;AAAA,IACJ;AAAA;AACJ;AC3CA,MAAM,qBAAqB;AAAA,EAQvB,YACY,WACA,cACR,WACF;AAHU,SAAA,YAAA;AACA,SAAA,eAAA;AALZ,SAAQ,SAAyB;AAQ7B,UAAM,EAAE,WAAW,KAAK,UAAU,IAAI,SAAS;AAC/C,SAAK,SAAS;AACT,SAAA,QAAQ,IAAI,MAAM,SAAS;AAC3B,SAAA,QAAQ,aAAa,YAAY;AAAA,MAClC,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,CACX;AACD,SAAK,OAAO,aAAa;AACnB,UAAA,WAAW,wBAAwB,WAAW,SAAS;AACxD,SAAA,aAAa,IAAI,WAAW,UAAU,QAAQ,KAAK,OAAO,KAAK,SAAS;AAE7E,SAAK,OAAO,UAAU,yBAAyB,CAAC,QAAQ,SAAiC;AACrF,WAAK,sBAAsB,IAAI;AAAA,IAAA,CAClC;AAED,SAAK,OAAO,UACR,gCACA,CAAO,QAAQ,SAAqE;AAChF,YAAM,WAAW,MAAM,KAAK,WAAW,wBAAwB,IAAI;AAEnE,UAAI,UAAU;AACN,YAAA,CAAC,CAAC,KAAK,cAAc;AAAY,eAAA,iBAAiB,KAAK,cAAc,KAAK;AAC9E,aAAK,mBAAmB,QAAQ;AAAA,MACpC;AAAA,IAAA,EAER;AAAA,EACJ;AAAA,EAEA,AAAM,aAAa;AAAA;AACT,YAAA,SAAS,KAAK,aAAa,QAAQ;AAEzC,YAAM,aAAkB,MAAM,KAAK,MAAM,cAAc;AACvD,UAAI,yCAAY,OAAO;AACnB,aAAK,MAAM,OAAO;AAAA,UACd,MAAM,WAAW,MAAM;AAAA,UACvB,QAAQ,WAAW,MAAM;AAAA,QAAA,CAC5B;AAAA,MACL;AAEA,YAAM,WAAW,MAAM,KAAK,WAAW,MAAM;AAC7C,UAAI,UAAU;AACV,aAAK,mBAAmB,QAAQ;AAAA,MACpC;AAEO;IACX;AAAA;AAAA,EAEA,AAAM,mBAAmB,QAAwB;AAAA;AAC7C,WAAK,SAAS,KAAK,OAAO,OAAO,MAAM;AACvC,YAAM,KAAK,MAAM,MAAM,KAAK,MAAM;AAC3B,aAAA,QAAQ,CAAC,UAAU;AACtB,cAAM,QAAQ,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,OAAO;AACpD,YAAI,MAAM,QAAQ;AACd,gBAAM,SAAS,KAAK,KAAK,MAAM,KAAK;AAAA,QAAA,OACjC;AACH,gBAAM,SAAS,KAAK,MAAM,MAAM,KAAK;AAAA,QACzC;AAAA,MAAA,CACH;AAAA,IACL;AAAA;AAAA,EAEA,AAAM,QAAQ,QAA4E;AAAA;AACtF,YAAM,YAAY,OAAO,WAAW,WAAW,SAAS,OAAO;AAEvD,cAAA;AAAA,aACC;AACD;AACQ,gBAAA,OAAO,WAAW,UAAU;AAC5B;AAAA,YACJ;AACM,kBAAA,QAAQ,KAAK,OAAO,KAAK,CAAC;;AAAU,2BAAM,OAAO,cAAO,SAAP,mBAAa;AAAA,aAAO;AAE3E,gBAAI,OAAO;AACP,oBAAM,WAAW,MAAM,KAAK,WAAW,WAAW,KAAK;AACvD,kBAAI,UAAU;AACV,sBAAM,WAAW,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,OAAO;AACpD,sBAAA,KAAK,SAAS,qCAAU,KAAK;AAC7B,sBAAA,OAAO,OAAO,QAAQ;AAAA,cAChC;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,aACC;AACD;AACU,kBAAA,SAAS,KAAK,aAAa,QAAQ;AAEzC,kBAAM,WAAW,MAAM,KAAK,WAAW,WAAW;AAC3C;AACP,gBAAI,UAAU;AACV,mBAAK,mBAAmB,QAAQ;AAAA,YACpC;AAAA,UACJ;AACA;AAAA;AAEA;AACI,gBAAI,OAAO,WAAW,YAAY,OAAO,OAAO;AACvC,mBAAA,iBAAiB,OAAO,KAAK;AAAA,YACtC;AACM,kBAAA,SAAS,KAAK,aAAa,QAAQ;AACzC,kBAAM,WAAW,MAAM,KAAK,WAAW,cAAc,SAAS;AAC9D,gBAAI,UAAU;AACV,mBAAK,mBAAmB,QAAQ;AAAA,YACpC;AACO;UACX;AACA;AAAA;AAAA,IAEZ;AAAA;AAAA,EAEQ,iBAAiB,SAAiB;AACtC,UAAM,QAAQ,YAAY;AAAA,MACtB,QAAQ;AAAA,MACR,OAAO;AAAA,QACH;AAAA,UACI,IAAI,KAAK;AAAA,UACT,QAAQ;AAAA,UACR,SAAS,CAAC,gCAAgC,MAAM,EAAE,MAAM,SAAS;AAAA,QACrE;AAAA,MACJ;AAAA,IAAA,CACH;AACI,SAAA,mBAAmB,CAAC,KAAK,CAAC;AACxB,WAAA;AAAA,EACX;AAAA,EAEA,AAAM,cAAc,SAAiB;AAAA;AAC3B,YAAA,SAAS,KAAK,aAAa,QAAQ;AACzC,YAAM,WAAW,MAAM,KAAK,WAAW,YAAY,OAAO;AAE1D,WAAK,iBAAiB,OAAO;AAE7B,UAAI,UAAU;AACV,aAAK,mBAAmB,QAAQ;AAAA,MACpC;AACO;IACX;AAAA;AAAA,EAEA,AAAc,sBAAsB,MAA8B;AAAA;AAC9D,YAAM,gBAAgB;AAAA,QAClB,MAAM,KAAK,MAAM;AAAA,QACjB,QAAQ,KAAK,MAAM;AAAA,MAAA;AAElB,WAAA,MAAM,OAAO,aAAa;AAC/B,YAAM,QAAQ,MAAM,oBAChB,KAAK,WACL,kCACA,gBAAgB,SACpB;AACM,YAAA;AAAA,QACF,OAAO;AAAA,MAAA,CACV;AAAA,IACL;AAAA;AACJ;ACrKM,MAAA,6BAA6B,CAAO,cAAyB;AAC/D,QAAM,WAAW,MAAM,qBAAqB,YAAY,SAAS;AAEjE,iCACI,WACA,mBAAmB,aACnB,OAAO,2BACX;AACA,iCACI,WACA,mBAAmB,eACnB,OAAO,sBACX;AAEA,iCACI,WACA,mBAAmB,kBACnB,OAAO,yBACX;AACA,iCACI,WACA,mBAAmB,mBACnB,OAAO,2BACX;AACA,iCACI,WACA,mBAAmB,cACnB,OAAO,qBACX;AAEA,WAAS,iBAAiB,qBAAqB,CAAC,cAAc,cAAc;AACxE,UAAM,WAAW,IAAI,qBAAqB,WAAW,cAAc,SAAS;AAC5E,aAAS,WAAW;AAEpB,cAAU,QAAQ,MAAM,4BAA4B,CAAC,OAAO,SAAS;AACxD,eAAA,cAAc,MAAM,IAAI;AAAA,IAAA,CACpC;AAED,cAAU,QAAQ,MAAM,uBAAuB,CAAC,OAAO,SAAS;AAC5D,eAAS,QAAQ,KAAK;AAEtB,aAAO,KAAK,KAAK;AAAA,IAAA,CACpB;AAED,cAAU,QAAQ,OAAO,YAAY,CAAC,UAAU;AAC5C,YAAM,EAAE,WAAW,UAAU,IAAI,SAAS;AACnC,aAAA,SAAS,yBAAyB,KAAK;AAAA,IAAA,CACjD;AAED,cAAU,QAAQ,OAAO,UAAU,CAAC,UAAU;AAC1C,YAAM,EAAE,WAAW,UAAU,IAAI,SAAS;AACnC,aAAA,SAAS,+BAA+B,KAAK;AAAA,IAAA,CACvD;AAAA,EAAA,CACJ;AACL;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useDispatch, SymbolBadge, Button, borderTabStyle } from "@telia-ace/knowledge-widget-ui";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import styled, { css } from "styled-components";
|
|
4
|
+
import { m as messageContentPadding } from "./styles.js";
|
|
5
|
+
const NoGoodAlternative = ({ body }) => {
|
|
6
|
+
const dispatch = useDispatch();
|
|
7
|
+
return /* @__PURE__ */ React.createElement(Wrapper, null, /* @__PURE__ */ React.createElement(StyledButton, {
|
|
8
|
+
onClick: () => {
|
|
9
|
+
dispatch("action", "help");
|
|
10
|
+
},
|
|
11
|
+
"aria-label": body,
|
|
12
|
+
title: body
|
|
13
|
+
}, /* @__PURE__ */ React.createElement(SymbolBadge, {
|
|
14
|
+
size: 14,
|
|
15
|
+
symbol: {
|
|
16
|
+
type: "FontAwesome",
|
|
17
|
+
content: "meh-o"
|
|
18
|
+
}
|
|
19
|
+
}), /* @__PURE__ */ React.createElement("span", null, body)));
|
|
20
|
+
};
|
|
21
|
+
const Wrapper = styled.div`
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
justify-content: center;
|
|
25
|
+
${messageContentPadding}
|
|
26
|
+
`;
|
|
27
|
+
const StyledButton = styled(Button)`
|
|
28
|
+
> i,
|
|
29
|
+
svg {
|
|
30
|
+
margin-right: ${(p) => {
|
|
31
|
+
var _a;
|
|
32
|
+
return (_a = p.theme.sizes) == null ? void 0 : _a.small;
|
|
33
|
+
}};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:focus {
|
|
37
|
+
${(p) => {
|
|
38
|
+
var _a;
|
|
39
|
+
return ((_a = p.theme.accessibility) == null ? void 0 : _a.isTabbing) && css`
|
|
40
|
+
${borderTabStyle}
|
|
41
|
+
`;
|
|
42
|
+
}};
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
export { NoGoodAlternative as default };
|
|
46
|
+
//# sourceMappingURL=no-good-alternative.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-good-alternative.js","sources":["../src/ui/no-good-alternative.tsx"],"sourcesContent":["import { borderTabStyle, Button, SymbolBadge, useDispatch } from '@telia-ace/knowledge-widget-ui';\r\nimport React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { messageContentPadding } from './styles';\r\n\r\ntype Props = {\r\n body: string;\r\n};\r\nconst NoGoodAlternative: React.FC<Props> = ({ body }) => {\r\n const dispatch = useDispatch();\r\n return (\r\n <Wrapper>\r\n <StyledButton\r\n onClick={() => {\r\n dispatch('action', 'help');\r\n }}\r\n aria-label={body}\r\n title={body}\r\n >\r\n <SymbolBadge\r\n size={14}\r\n symbol={{\r\n type: 'FontAwesome',\r\n content: 'meh-o',\r\n }}\r\n />\r\n <span>{body}</span>\r\n </StyledButton>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default NoGoodAlternative;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n ${messageContentPadding}\r\n`;\r\n\r\nconst StyledButton = styled(Button)`\r\n > i,\r\n svg {\r\n margin-right: ${(p) => p.theme.sizes?.small};\r\n }\r\n\r\n &:focus {\r\n ${(p) =>\r\n p.theme.accessibility?.isTabbing &&\r\n css`\r\n ${borderTabStyle}\r\n `};\r\n }\r\n`;\r\n"],"names":[],"mappings":";;;;AAQM,MAAA,oBAAqC,CAAC,EAAE,WAAW;AACrD,QAAM,WAAW;AAEb,SAAA,sBAAA,cAAC,eACI,sBAAA,cAAA,cAAA;AAAA,IACG,SAAS,MAAM;AACX,eAAS,UAAU,MAAM;AAAA,IAC7B;AAAA,IACA,cAAY;AAAA,IACZ,OAAO;AAAA,EAAA,GAEN,sBAAA,cAAA,aAAA;AAAA,IACG,MAAM;AAAA,IACN,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACb;AAAA,EAAA,CACJ,GACA,sBAAA,cAAC,QAAM,MAAA,IAAK,CAChB,CACJ;AAER;AAIA,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA,MAIjB;AAAA;AAGN,MAAM,eAAe,OAAO,MAAM;AAAA;AAAA;AAAA,wBAGV,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;AAAA;AAAA;AAAA,UAIpC,CAAC,MAAA;;AACC,kBAAE,MAAM,kBAAR,mBAAuB,cACvB;AAAA,kBACM;AAAA;AAAA;AAAA;AAAA;;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
var __objRest = (source, exclude) => {
|
|
18
|
+
var target = {};
|
|
19
|
+
for (var prop in source)
|
|
20
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
21
|
+
target[prop] = source[prop];
|
|
22
|
+
if (source != null && __getOwnPropSymbols)
|
|
23
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
24
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
25
|
+
target[prop] = source[prop];
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
};
|
|
29
|
+
import { NotificationList as NotificationList$1 } from "@telia-ace/knowledge-widget-ui";
|
|
30
|
+
import React, { useMemo } from "react";
|
|
31
|
+
import styled from "styled-components";
|
|
32
|
+
import { m as messageContentPadding } from "./styles.js";
|
|
33
|
+
const NotificationList = (_a) => {
|
|
34
|
+
var _b = _a, { id, header, items, symbol, className } = _b, other = __objRest(_b, ["id", "header", "items", "symbol", "className"]);
|
|
35
|
+
const list = useMemo(() => {
|
|
36
|
+
return {
|
|
37
|
+
id,
|
|
38
|
+
title: header,
|
|
39
|
+
symbol,
|
|
40
|
+
defaultHeaderOptions: {
|
|
41
|
+
visible: true
|
|
42
|
+
},
|
|
43
|
+
notifications: items.map((item) => ({
|
|
44
|
+
id: item.id.toString(),
|
|
45
|
+
title: item.title,
|
|
46
|
+
body: item.body,
|
|
47
|
+
modified: item.modified,
|
|
48
|
+
expandable: true
|
|
49
|
+
}))
|
|
50
|
+
};
|
|
51
|
+
}, [header, items]);
|
|
52
|
+
if (!list) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return /* @__PURE__ */ React.createElement(StyledNotificationListUi, __spreadValues({
|
|
56
|
+
className,
|
|
57
|
+
showHeader: true,
|
|
58
|
+
notificationList: list,
|
|
59
|
+
loading: false
|
|
60
|
+
}, other));
|
|
61
|
+
};
|
|
62
|
+
const StyledNotificationListUi = styled(NotificationList$1)`
|
|
63
|
+
${messageContentPadding}
|
|
64
|
+
min-width: 10em;
|
|
65
|
+
|
|
66
|
+
span {
|
|
67
|
+
color: ${(p) => {
|
|
68
|
+
var _a;
|
|
69
|
+
return (_a = p.theme.colors) == null ? void 0 : _a.text;
|
|
70
|
+
}};
|
|
71
|
+
}
|
|
72
|
+
`;
|
|
73
|
+
export { NotificationList as default };
|
|
74
|
+
//# sourceMappingURL=notification-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-list.js","sources":["../src/ui/notification-list.tsx"],"sourcesContent":["import { NotificationList as NotificationListUi, Symbol } from '@telia-ace/knowledge-widget-ui';\r\nimport React, { useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport { messageContentPadding } from './styles';\r\n\r\ntype Props = {\r\n id: string;\r\n header: string;\r\n items: any[];\r\n symbol?: Symbol;\r\n className?: string;\r\n};\r\nconst NotificationList: React.FC<Props> = ({ id, header, items, symbol, className, ...other }) => {\r\n const list = useMemo(() => {\r\n return {\r\n id: id,\r\n title: header,\r\n symbol,\r\n defaultHeaderOptions: {\r\n visible: true,\r\n },\r\n notifications: items.map((item) => ({\r\n id: item.id.toString(),\r\n title: item.title,\r\n body: item.body,\r\n modified: item.modified,\r\n expandable: true,\r\n })),\r\n };\r\n }, [header, items]);\r\n\r\n if (!list) {\r\n return null;\r\n }\r\n\r\n return (\r\n <StyledNotificationListUi\r\n className={className}\r\n showHeader={true}\r\n notificationList={list}\r\n loading={false}\r\n {...other}\r\n />\r\n );\r\n};\r\n\r\nexport default NotificationList;\r\n\r\nconst StyledNotificationListUi = styled(NotificationListUi)`\r\n ${messageContentPadding}\r\n min-width: 10em;\r\n\r\n span {\r\n color: ${(p) => p.theme.colors?.text};\r\n }\r\n`;\r\n"],"names":["NotificationListUi"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYM,MAAA,mBAAoC,CAAC,OAAuD;AAAvD,eAAE,MAAI,QAAQ,OAAO,QAAQ,cAA7B,IAA2C,kBAA3C,IAA2C,CAAzC,MAAI,UAAQ,SAAO,UAAQ;AAC9D,QAAA,OAAO,QAAQ,MAAM;AAChB,WAAA;AAAA,MACH;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,sBAAsB;AAAA,QAClB,SAAS;AAAA,MACb;AAAA,MACA,eAAe,MAAM,IAAI,CAAC,SAAU;AAAA,QAChC,IAAI,KAAK,GAAG,SAAS;AAAA,QACrB,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,UAAU,KAAK;AAAA,QACf,YAAY;AAAA,MAAA,EACd;AAAA,IAAA;AAAA,EACN,GACD,CAAC,QAAQ,KAAK,CAAC;AAElB,MAAI,CAAC,MAAM;AACA,WAAA;AAAA,EACX;AAEA,SACK,sBAAA,cAAA,0BAAA;AAAA,IACG;AAAA,IACA,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,SAAS;AAAA,KACL,MACR;AAER;AAIA,MAAM,2BAA2B,OAAOA,kBAAkB;AAAA,MACpD;AAAA;AAAA;AAAA;AAAA,iBAIW,CAAC,MAAM;;AAAA,iBAAE,MAAM,WAAR,mBAAgB;AAAA;AAAA;AAAA;;"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';
|
|
2
|
+
import { Container } from '@webprovisions/platform';
|
|
3
|
+
import { MessageGroup } from './types';
|
|
4
|
+
declare class KnowledgeBotProvider {
|
|
5
|
+
private container;
|
|
6
|
+
private conversation;
|
|
7
|
+
private agent;
|
|
8
|
+
private user;
|
|
9
|
+
private httpClient;
|
|
10
|
+
private events;
|
|
11
|
+
private groups;
|
|
12
|
+
private store;
|
|
13
|
+
constructor(container: Container, conversation: any, component: ComponentNodeController);
|
|
14
|
+
initialize(): Promise<void>;
|
|
15
|
+
onMessagesReceived(groups: MessageGroup[]): Promise<void>;
|
|
16
|
+
onInput(action: string | {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
actionKey: string;
|
|
19
|
+
label?: string;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
private printUserMessage;
|
|
22
|
+
onMessageSend(message: string): Promise<void>;
|
|
23
|
+
private onWidgetEntryReceived;
|
|
24
|
+
}
|
|
25
|
+
export default KnowledgeBotProvider;
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Container } from '@webprovisions/platform';
|
|
2
|
+
import { GlobalState, MessageGroup } from './types';
|
|
3
|
+
declare class Store {
|
|
4
|
+
private container;
|
|
5
|
+
private enabled;
|
|
6
|
+
private sessionMessageStorageVariable;
|
|
7
|
+
private botProviderGlobalStateKey;
|
|
8
|
+
private botProviderMetaStateKey;
|
|
9
|
+
constructor(container: Container);
|
|
10
|
+
readGlobalState(): Promise<GlobalState | undefined>;
|
|
11
|
+
readMetaState(): Promise<unknown>;
|
|
12
|
+
write(groups: MessageGroup[]): Promise<void>;
|
|
13
|
+
read(): Promise<MessageGroup[]>;
|
|
14
|
+
}
|
|
15
|
+
export default Store;
|
package/dist/styles.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { css } from "styled-components";
|
|
2
|
+
const messageContentPadding = css`
|
|
3
|
+
margin: ${(p) => {
|
|
4
|
+
var _a;
|
|
5
|
+
return (_a = p.theme.sizes) == null ? void 0 : _a.normal;
|
|
6
|
+
}} 0;
|
|
7
|
+
padding: 0 ${(p) => {
|
|
8
|
+
var _a;
|
|
9
|
+
return (_a = p.theme.sizes) == null ? void 0 : _a.normal;
|
|
10
|
+
}};
|
|
11
|
+
`;
|
|
12
|
+
export { messageContentPadding as m };
|
|
13
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../src/ui/styles.tsx"],"sourcesContent":["import { css } from 'styled-components';\r\n\r\nexport const messageContentPadding = css`\r\n margin: ${(p) => p.theme.sizes?.normal} 0;\r\n padding: 0 ${(p) => p.theme.sizes?.normal};\r\n`;\r\n"],"names":[],"mappings":";AAEO,MAAM,wBAAwB;AAAA,cACvB,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA,iBACnB,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;;"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';
|
|
2
|
+
export declare enum CustomMessageTypes {
|
|
3
|
+
ContactMethod = "ace-knowledge-bot-contact-method",
|
|
4
|
+
ContactList = "ace-knowledge-bot-contact-list",
|
|
5
|
+
FeedbackList = "ace-knowledge-bot-feedback-list",
|
|
6
|
+
NotificationList = "ace-knowledge-bot-notification-list",
|
|
7
|
+
NoGoodAlternative = "ace-knowledge-bot-no-good-alternative"
|
|
8
|
+
}
|
|
9
|
+
declare type LooseObject = {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
};
|
|
12
|
+
export interface ActionItem {
|
|
13
|
+
label: string;
|
|
14
|
+
actionKey: string;
|
|
15
|
+
data?: any;
|
|
16
|
+
}
|
|
17
|
+
export interface MessageGroup {
|
|
18
|
+
id: string;
|
|
19
|
+
isUser: boolean;
|
|
20
|
+
items: MessageGroupItem[];
|
|
21
|
+
writer?: any;
|
|
22
|
+
meta: {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface MessageGroupItem {
|
|
27
|
+
id: string;
|
|
28
|
+
groupId: string;
|
|
29
|
+
isUser: boolean;
|
|
30
|
+
message: [ConversationMessageListItemType | CustomMessageTypes, any];
|
|
31
|
+
}
|
|
32
|
+
export interface ClientEnvelope {
|
|
33
|
+
command?: LooseObject;
|
|
34
|
+
action?: {
|
|
35
|
+
key: string;
|
|
36
|
+
content: any;
|
|
37
|
+
};
|
|
38
|
+
globalState?: LooseObject;
|
|
39
|
+
localState?: LooseObject;
|
|
40
|
+
clientId?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ServerEnvelope {
|
|
43
|
+
clientId?: string | undefined;
|
|
44
|
+
entries: ServerEntry[];
|
|
45
|
+
globalState?: GlobalState;
|
|
46
|
+
resolveCommand?: string;
|
|
47
|
+
clientEnvelope?: ClientEnvelope;
|
|
48
|
+
}
|
|
49
|
+
export interface GlobalState {
|
|
50
|
+
completedInteractionsCount: number;
|
|
51
|
+
lastQuestion?: string;
|
|
52
|
+
lastBotGuide: number;
|
|
53
|
+
lastGuideTitle?: string;
|
|
54
|
+
site: string;
|
|
55
|
+
invincibleParameters: object;
|
|
56
|
+
}
|
|
57
|
+
export interface ServerEntry {
|
|
58
|
+
id: string;
|
|
59
|
+
type: string;
|
|
60
|
+
content: any;
|
|
61
|
+
actions: {
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
};
|
|
64
|
+
tags: string[];
|
|
65
|
+
relation?: string;
|
|
66
|
+
timestamp: string;
|
|
67
|
+
localState?: {
|
|
68
|
+
[key: string]: any;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export interface ListContent {
|
|
72
|
+
header?: string;
|
|
73
|
+
actions: ActionItem[];
|
|
74
|
+
contactMethodIds?: string[];
|
|
75
|
+
entryId: string;
|
|
76
|
+
groupId: string;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ActionItem } from '../types';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
actions: ActionItem[];
|
|
5
|
+
contactMethodIds?: string[];
|
|
6
|
+
entryId: string;
|
|
7
|
+
groupId: string;
|
|
8
|
+
};
|
|
9
|
+
declare const ContactMethodList: React.FC<Props>;
|
|
10
|
+
export default ContactMethodList;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Symbol } from '@telia-ace/knowledge-widget-ui';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
declare 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>;
|
|
11
|
+
export default NotificationList;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const messageContentPadding: import("styled-components").FlattenInterpolation<import("styled-components").ThemeProps<any>>;
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';
|
|
2
|
+
import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';
|
|
3
|
+
import { Container } from '@webprovisions/platform';
|
|
4
|
+
import { CustomMessageTypes, MessageGroup, MessageGroupItem } from './types';
|
|
5
|
+
export declare const createGroup: ({ isUser, items, meta, }: {
|
|
6
|
+
isUser: boolean;
|
|
7
|
+
items?: Partial<MessageGroupItem>[] | undefined;
|
|
8
|
+
meta?: {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
} | undefined;
|
|
11
|
+
}) => MessageGroup;
|
|
12
|
+
export declare const contactMethodFromLegacy: ({ id, title, defaultIcon, exits: [exit], exitType, confirmationText, expandFormAutomatically, form, description, }: any, options?: {
|
|
13
|
+
validation?: any;
|
|
14
|
+
guideId?: string;
|
|
15
|
+
}) => any;
|
|
16
|
+
export declare const getListType: (state: any) => ConversationMessageListItemType.LinkList | ConversationMessageListItemType.ButtonList | CustomMessageTypes.ContactList | CustomMessageTypes.FeedbackList;
|
|
17
|
+
export declare const getKnowledgeBotEndpoint: (container: Container, component: any) => string;
|
|
18
|
+
export declare const updateForm: (contactMethod: ContactMethodType, { submit, errors, meta, }: {
|
|
19
|
+
submit: string;
|
|
20
|
+
errors?: {
|
|
21
|
+
[key: string]: string;
|
|
22
|
+
} | undefined;
|
|
23
|
+
meta?: {
|
|
24
|
+
[key: string]: string;
|
|
25
|
+
} | undefined;
|
|
26
|
+
}) => any;
|
package/package.json
CHANGED
|
@@ -1,45 +1,44 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@telia-ace/knowledge-widget-bot-provider",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
4
|
-
"description": "Bot Provider Plugin ACE Knowledge Widgets.",
|
|
5
|
-
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
|
-
"author": "Telia Company AB",
|
|
7
|
-
"keywords": [
|
|
8
|
-
"telia"
|
|
9
|
-
],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"files": [
|
|
13
|
-
"LICENSE.txt",
|
|
14
|
-
"README.md",
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
"compile": "
|
|
24
|
-
},
|
|
25
|
-
"sideEffects": false,
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
"@telia-ace/knowledge-widget-
|
|
29
|
-
"@telia-ace/knowledge-widget-
|
|
30
|
-
"@telia-ace/
|
|
31
|
-
"@telia-ace/widget-
|
|
32
|
-
"@telia-ace/widget-
|
|
33
|
-
"@telia-ace/widget-
|
|
34
|
-
"@
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@telia-ace/knowledge-widget-bot-provider",
|
|
3
|
+
"version": "0.0.1-alpha.52",
|
|
4
|
+
"description": "Bot Provider Plugin ACE Knowledge Widgets.",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
|
+
"author": "Telia Company AB",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"telia"
|
|
9
|
+
],
|
|
10
|
+
"module": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"LICENSE.txt",
|
|
14
|
+
"README.md",
|
|
15
|
+
"dist/"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"clean": "rimraf ./dist",
|
|
22
|
+
"precompile": "tsc -emitDeclarationOnly",
|
|
23
|
+
"compile": "vite build"
|
|
24
|
+
},
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@telia-ace/knowledge-widget-adapters": "^1.0.19",
|
|
28
|
+
"@telia-ace/knowledge-widget-types-grid": "^1.0.19",
|
|
29
|
+
"@telia-ace/knowledge-widget-ui": "^1.0.16",
|
|
30
|
+
"@telia-ace/widget-conversation": "^1.0.17",
|
|
31
|
+
"@telia-ace/widget-forms": "^1.0.13",
|
|
32
|
+
"@telia-ace/widget-services": "^1.0.9",
|
|
33
|
+
"@telia-ace/widget-utilities": "^1.0.2",
|
|
34
|
+
"@webprovisions/bootstrapping": "^1.0.12"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"react": "^16.8.0",
|
|
38
|
+
"styled-components": "^4.3.2"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/uuid": "^8.3.4"
|
|
42
|
+
},
|
|
43
|
+
"gitHead": "1ebcbf462e3e5d7ba00dfce49f11b5936c7da555"
|
|
44
|
+
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Message } from '../contract/model/conversation-api-model/message.model';
|
|
2
|
-
import EntryInterface from '../interface/entry.interface';
|
|
3
|
-
export default class ChatClient {
|
|
4
|
-
entryInterface: EntryInterface;
|
|
5
|
-
constructor();
|
|
6
|
-
static initialize(user: any, agent: any): void;
|
|
7
|
-
processMessageArrayAndStoreIt(messages: Message[]): void;
|
|
8
|
-
updateMessageArrayAndStoreIt(messages: Message[]): void;
|
|
9
|
-
printUserMessageAndStoreIt(action: string): void;
|
|
10
|
-
private postUserMessage;
|
|
11
|
-
private postAgentMessage;
|
|
12
|
-
private getTitleFromEntry;
|
|
13
|
-
private getTitleFromText;
|
|
14
|
-
private getTitleFromList;
|
|
15
|
-
}
|