{"version":3,"sources":["environment.ts","constants.ts","components/bot/webchat/WebChat.css.ts","services/Backend.ts","services/DirectLine.ts","components/bot/help/Help.tsx","components/bot/webchat/WebChat.tsx","components/footer/Footer.tsx","components/bot/Bot.tsx","models/KumulEvent.ts","components/kumul/UpsertModal.tsx","auth/authProvider.ts","auth/GraphService.ts","components/kumul/Kumul.tsx","components/header/Header.tsx","App.tsx","serviceWorker.ts","index.tsx","components/adaptivecards/GlobalActionHandler.ts","components/bot/webchat/charCounter.ts","components/bot/webchat/autoSize.ts"],"names":["environment","serverUrl","value","undefined","parse","process","groupIds","split","map","group","trim","styleOptions","accent","backgroundColor","cardEmphasisBackgroundColor","subtle","primaryFont","avatarBorderRadius","avatarSize","botAvatarBackgroundColor","botAvatarImage","userAvatarBackgroundColor","userAvatarImage","bubbleBackground","bubbleBorderColor","bubbleBorderRadius","bubbleFromUserBackground","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserNubSize","bubbleFromUserTextColor","bubbleMaxWidth","bubbleNubOffset","bubbleNubSize","bubbleTextColor","markdownRespectCRLF","rootHeight","rootWidth","sendBoxButtonColor","sendBoxButtonColorOnFocus","sendBoxButtonColorOnHover","sendBoxTextColor","sendBoxPlaceholderColor","transcriptOverlayButtonBackground","transcriptOverlayButtonBackgroundOnFocus","transcriptOverlayButtonBackgroundOnHover","failedConnectivity","typingAnimationBackgroundImage","typingAnimationHeight","createStyles","styleSet","createStyleSet","root","maxWidth","maxHeight","sendBoxTextBox","fontWeight","adaptiveCardRenderer","background","padding","color","backend","userId","console","debug","fetch","method","headers","body","response","json","token","event","JSON","stringify","name","directLine","uuid","botConnection","setInterval","a","refreshToken","this","getToken","createDirectLine","postEventActivity","subscribe","_","error","text","postMessageActivity","end","postActivity","from","id","type","channelData","window","location","host","getDirectLineToken","refreshDirectLineToken","reconnect","conversationId","HelpComponent","props","state","isTextVisible","handleClick","setState","className","onClick","src","alt","React","Component","WebChatComponent","helpText","store","md","MarkdownIt","html","breaks","linkify","helpComponent","renderMarkdown","markdown","options","render","handleClose","removeEventListener","endConversation","dispose","handleResize","width","document","clientWidth","height","header","getElementsByClassName","shadow","footer","clientHeight","createRef","connect","forceUpdate","createStore","next","action","initSendBoxTextBox","payload","activity","role","propagateChannelData","clearHelp","stopHighlightUploadButtonAnimation","hideAdaptiveCardButtons","then","startConversation","catch","placeholder","querySelector","focus","adaptiveCardButtons","n","length","button","item","style","display","updateHelp","updateProgress","stepCount","stepIndex","toggleHighlightUploadButtonAnimation","expectingAttachments","onNextStep","active","startHighlightUploadButtonAnimation","classList","add","remove","addEventListener","setTimeout","locale","userID","log","FooterComponent","ProgressBar","now","label","onReport","onContact","onBack","onReset","BotPage","webChatComponent","footerComponent","handleReport","requestProtocol","handleReset","requestEndOfConversation","handleBack","current","dispatch","handleContact","requestEmployeeChat","handleNext","update","ref","KumulEvent","welcomeMessage","conclusionText","UpsertModal","handleNameChange","e","target","handleWelcomeMessageChange","handleConclusionTextChange","handleSave","close","handleSaveAndActivate","handleCancel","open","isUpdateMode","onClose","Modal","show","onHide","centered","size","Header","closeButton","Title","Body","Form","Group","Label","Control","onChange","disabled","as","rows","Footer","Button","variant","authProvider","MsalAuthProvider","auth","authority","clientId","redirectUri","origin","cache","cacheLocation","storeAuthStateInCookie","scopes","loginType","LoginType","Redirect","getUserGroups","accessToken","client","Client","init","done","api","get","KumulPage","upsertModal","authorizationInProgress","handleNew","handleEdit","events","find","handleDelete","deleteKumulEvent","getKumulEvents","upsertKumulEvent","handleActivated","eventName","isAuthorized","getAccessToken","tokenResponse","userGroups","groupId","provider","forceLogin","login","logout","authenticationState","accountInfo","AuthenticationState","Authenticated","checked","icons","authorize","HeaderComponent","href","App","exact","path","component","Boolean","hostname","match","ReactDOM","getElementById","UploadButtonClickAction","click","Adaptive","actionTypeRegistry","registerType","registerAdaptiveCardUploadButton","HcaptchaComponent","_hcaptchaValue","_containerElement","_siteKey","errors","element","createElement","callbackName","Math","random","code","setAttribute","elementTypeRegistry","registerHcaptchaComponent","rootNode","observer","MutationObserver","changes","textAreas","querySelectorAll","i","textArea","charCounter","triggerUpdate","textContent","maxLength","parentElement","insertAdjacentElement","observe","subtree","childList","registerTextAreaCharCounter","autosize","registerAutosizeTextareasListener","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.8cceb265.chunk.js","sourcesContent":["export const environment = {\n serverUrl: parse(process.env.REACT_APP_SERVER_URL),\n groupIds: process.env.REACT_APP_GROUP_IDS\n ? process.env.REACT_APP_GROUP_IDS.split(',').map(group => group.trim())\n : []\n};\n\nfunction parse(value: string | undefined): string | null | undefined {\n if (value === 'undefined' || value === undefined) {\n return undefined;\n }\n if (value === 'null' || value === null) {\n return null;\n }\n return value;\n}\n","export const white = '#fff';\nexport const green = '#b3dc1f';\nexport const greyLighter = '#d8d8d8';\nexport const greyLight = '#9b9b9b';\nexport const grey = '#7f7f7f';\nexport const greyDark = '#4a4a4a';\nexport const red = '#dc3545';\nexport const redRgb = 'rgb(220, 53, 69)';\n// export const blueDark = ''; // primary button clicked background\n// export const blueLight = ''; // primary button clicked border\n\nexport const bubbleNubSize = 10;\nexport const bubbleBorderRadius = 8;\n\nexport const sendBoxTextBoxSelector = 'div.main > form > input';\nexport const sendBoxTextBoxPlaceholder = 'Haben Sie eine Frage?';\nexport const sendBoxTextBoxUploadAttachmentPlaceholder = 'Auf die Klammer klicken, um Anhänge hochzuladen.';\nexport const sendBoxTextBoxUploadButtonSelector = 'div.main > div > button';\n\nexport const adaptiveCardButtonClass = 'ac-pushButton';\n","import { createStyleSet } from \"botframework-webchat\";\nimport { environment } from \"../../../environment\";\nimport { green, white, greyLight, bubbleBorderRadius, greyLighter, bubbleNubSize, greyDark, grey, red } from \"../../../constants\";\n\n// const PADDING_REGULAR = 10;\n\n// https://github.com/microsoft/BotFramework-WebChat/blob/master/packages/component/src/Styles/defaultStyleOptions.js\n// https://github.com/microsoft/BotFramework-WebChat/blob/master/packages/component/src/Styles/createStyleSet.js\n// https://github.com/microsoft/BotFramework-WebChat/tree/master/samples/02.branding-styling-and-customization/a.branding-web-chat\nlet styleOptions = {\n // Color and paddings\n accent: green,\n backgroundColor: white,\n cardEmphasisBackgroundColor: '#F0F0F0',\n // paddingRegular: PADDING_REGULAR,\n // paddingWide: PADDING_REGULAR * 2,\n subtle: greyLight,\n\n // Word break\n // messageActivityWordBreak: 'break-word', // 'normal' || 'break-all' || 'break-word' || 'keep-all'\n\n // Fonts\n // fontSizeSmall: '100%',\n // monospaceFont: fontFamily(['Consolas', 'Courier New', 'monospace']),\n primaryFont: `'Open Sans', sans-serif`,\n\n // Avatar\n avatarBorderRadius: '0',\n avatarSize: 50,\n botAvatarBackgroundColor: white, // defaults to accent color\n botAvatarImage: './assets/bot_head_0.png',\n // botAvatarInitials: 'BO',\n userAvatarBackgroundColor: white, // defaults to accent color\n userAvatarImage: './assets/user.png',\n // userAvatarInitials: 'US',\n\n // Bubble\n bubbleBackground: green,\n bubbleBorderColor: green,\n bubbleBorderRadius: bubbleBorderRadius,\n // bubbleBorderStyle: 'solid',\n // bubbleBorderWidth: 1,\n bubbleFromUserBackground: greyLighter,\n bubbleFromUserBorderColor: greyLighter,\n bubbleFromUserBorderRadius: bubbleBorderRadius,\n // bubbleFromUserBorderStyle: 'solid',\n // bubbleFromUserBorderWidth: 1,\n // bubbleFromUserNubOffset: 'bottom',\n bubbleFromUserNubSize: bubbleNubSize,\n bubbleFromUserTextColor: greyDark,\n // bubbleImageHeight: 240,\n bubbleMaxWidth: 980, // screen width = 600px\n // bubbleMinHeight: 40,\n // bubbleMinWidth: 250, // min screen width = 300px, Edge requires 372px (https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/13621468/)\n bubbleNubOffset: 'top',\n bubbleNubSize: bubbleNubSize,\n bubbleTextColor: greyDark,\n\n // Markdown\n markdownRespectCRLF: true,\n\n // Rich Cards\n // richCardWrapTitle: false, // Applies to subtitles as well\n\n // Root\n rootHeight: '100%',\n rootWidth: '100%',\n\n // Scroll to end button\n // hideScrollToEndButton: false,\n\n // Send box\n // hideSendBox: false,\n // hideUploadButton: false,\n // microphoneButtonColorOnDictate: '#F33',\n // sendBoxBackground: 'White',\n sendBoxButtonColor: greyDark, // defaults to subtle\n // sendBoxButtonColorOnDisabled: '#CCC',\n sendBoxButtonColorOnFocus: greyDark,\n sendBoxButtonColorOnHover: grey,\n // sendBoxDisabledTextColor: undefined, // defaults to subtle\n // sendBoxHeight: 40,\n // sendBoxMaxHeight: 200,\n sendBoxTextColor: greyDark,\n // sendBoxBorderBottom: '',\n // sendBoxBorderLeft: '',\n // sendBoxBorderRight: '',\n // sendBoxBorderTop: 'solid 1px #E6E6E6',\n sendBoxPlaceholderColor: greyDark, // defaults to subtle\n // sendBoxTextWrap: false,\n\n // Visually show spoken text\n // showSpokenText: false,\n\n // Suggested actions\n // suggestedActionBackground: 'White',\n // suggestedActionBorder: undefined, // split into 3, null\n // suggestedActionBorderColor: undefined, // defaults to accent\n // suggestedActionBorderRadius: 0,\n // suggestedActionBorderStyle: 'solid',\n // suggestedActionBorderWidth: 2,\n // suggestedActionDisabledBackground: undefined, // defaults to suggestedActionBackground\n // suggestedActionDisabledBorder: null,\n // suggestedActionDisabledBorderColor: '#E6E6E6',\n // suggestedActionDisabledBorderStyle: 'solid',\n // suggestedActionDisabledBorderWidth: 2,\n // suggestedActionDisabledTextColor: undefined, // defaults to subtle\n // suggestedActionHeight: 40,\n // suggestedActionImageHeight: 20,\n // suggestedActionLayout: 'carousel', // either \"carousel\" or \"stacked\"\n // suggestedActionTextColor: null,\n\n // Timestamp\n // groupTimestamp: true,\n // sendTimeout: 20000,\n // sendTimeoutForAttachments: 120000,\n // timestampColor: undefined, // defaults to subtle\n // timestampFormat: 'relative', // 'absolute'\n\n // Transcript overlay buttons (e.g. carousel and suggested action flippers, scroll to bottom, etc.)\n transcriptOverlayButtonBackground: grey,\n transcriptOverlayButtonBackgroundOnFocus: greyLight,\n transcriptOverlayButtonBackgroundOnHover: greyLight,\n // transcriptOverlayButtonColor: 'White',\n // transcriptOverlayButtonColorOnFocus: undefined, // defaults to transcriptOverlayButtonColor\n // transcriptOverlayButtonColorOnHover: undefined, // defaults to transcriptOverlayButtonColor\n\n // Video\n // videoHeight: 270, // based on bubbleMaxWidth, 480 / 16 * 9 = 270\n\n // Connectivity UI\n // connectivityIconPadding: PADDING_REGULAR * 1.2,\n // connectivityMarginLeftRight: PADDING_REGULAR * 1.4,\n // connectivityMarginTopBottom: PADDING_REGULAR * 0.8,\n // connectivityTextSize: '75%',\n failedConnectivity: red,\n // slowConnectivity: '#EAA300',\n // notificationText: '#5E5E5E',\n // slowConnectionAfter: 15000,\n\n typingAnimationBackgroundImage: `url(${environment.serverUrl}/assets/typing-animation.gif)`,\n // typingAnimationDuration: 5000,\n typingAnimationHeight: 36,\n // typingAnimationWidth: 64,\n\n // spinnerAnimationBackgroundImage: null,\n // spinnerAnimationHeight: 16,\n // spinnerAnimationWidth: 16,\n // spinnerAnimationPadding: 12,\n\n // enableUploadThumbnail: true,\n // uploadThumbnailContentType: 'image/jpeg',\n // uploadThumbnailHeight: 360,\n // uploadThumbnailQuality: 0.6,\n // uploadThumbnailWidth: 720,\n\n // deprecated; will be removed on or after 2021-02-01\n // spinnerAnimationPaddingRight: undefined,\n\n // Toast UI\n\n // New debounce timeout value only affect new notifications.\n // notificationDebounceTimeout: 400,\n\n // hideToaster: false,\n // toasterHeight: 32,\n // toasterMaxHeight: 32 * 5,\n // toasterSingularMaxHeight: 50,\n // toastFontSize: '87.5%',\n // toastIconWidth: 36,\n // toastSeparatorColor: '#E8EAEC',\n // toastTextPadding: 6,\n\n // toastErrorBackgroundColor: '#FDE7E9',\n // toastErrorColor: '#A80000',\n // toastInfoBackgroundColor: '#CEF1FF',\n // toastInfoColor: '#105E7D',\n // toastSuccessBackgroundColor: '#DFF6DD',\n // toastSuccessColor: '#107C10',\n // toastWarnBackgroundColor: '#FFF4CE',\n // toastWarnColor: '#3B3A39'\n};\n\nexport function createStyles(rootWidth: string | null = null, rootHeight: string | null = null): any {\n\n if (rootWidth) {\n styleOptions.rootWidth = rootWidth;\n }\n if (rootHeight) {\n styleOptions.rootHeight = rootHeight;\n }\n\n // https://github.com/microsoft/BotFramework-WebChat/tree/master/samples/02.branding-styling-and-customization/a.branding-web-chat#my-required-changes-are-not-all-specified-in-defaultstyleoptionsjs-what-do-i-do-now\n // https://github.com/microsoft/BotFramework-WebChat/tree/master/samples/02.branding-styling-and-customization/b.idiosyncratic-manual-styles\n let styleSet = createStyleSet(styleOptions);\n\n if (rootWidth) {\n styleSet.root.maxWidth = rootWidth;\n }\n if (rootHeight) {\n styleSet.root.maxHeight = rootHeight;\n }\n \n // https://github.com/microsoft/BotFramework-WebChat/blob/df4fb972424a36ae5d24ebec249bce00644964e8/packages/component/src/Styles/StyleSet/SendBoxTextBox.js#L1\n styleSet.sendBoxTextBox['& > input'] = {\n ...styleSet.sendBoxTextBox['& > input'],\n fontWeight: 'bold'\n };\n\n // styleSet.bubble['& > .webchat__bubble__content'] = {\n // ...styleSet.bubble['& > .webchat__bubble__content'],\n // minWidth: '200px'\n // };\n \n // https://github.com/microsoft/BotFramework-WebChat/blob/master/packages/bundle/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.js\n styleSet.adaptiveCardRenderer['& .ac-container'] = {\n ...styleSet.adaptiveCardRenderer['& .ac-container'],\n background: white\n };\n styleSet.adaptiveCardRenderer['& .ac-textInput'] = {\n ...styleSet.adaptiveCardRenderer['& .ac-textInput'],\n padding: '10px'\n };\n styleSet.adaptiveCardRenderer['& .ac-dateInput'] = {\n ...styleSet.adaptiveCardRenderer['& .ac-dateInput'],\n padding: '10px'\n };\n styleSet.adaptiveCardRenderer['& .ac-pushButton'] = {\n ...styleSet.adaptiveCardRenderer['& .ac-pushButton'],\n background: greyLight,\n color: white\n };\n\n return styleSet;\n}\n","import { environment } from \"../environment\";\nimport { DirectLineToken } from \"../models/DirectLineToken\";\nimport { KumulEvent } from \"../models/KumulEvent\";\n\nclass BackendService {\n\n public async getDirectLineToken(userId: string): Promise {\n console.debug('BackendService.getToken()', userId);\n\n const response = await fetch(`${environment.serverUrl}/directline/auth/token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json;charset=utf-8'\n },\n body: `\"${userId}\"`\n });\n\n return await response.json();\n }\n\n public async refreshDirectLineToken(token: string): Promise {\n console.debug('BackendService.refreshToken()');\n \n const response = await fetch(`${environment.serverUrl}/directline/auth/token/refresh`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json;charset=utf-8'\n },\n body: `\"${token}\"`\n });\n \n return await response.json();\n }\n\n public async getKumulEvents(): Promise {\n console.debug('BackendService.getKumulEvents()');\n \n const response = await fetch(`${environment.serverUrl}/api/kumul`);\n \n return await response.json();\n }\n\n public async upsertKumulEvent(event: KumulEvent): Promise {\n console.debug('BackendService.updateKumulEvent()');\n \n await fetch(`${environment.serverUrl}/api/kumul`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json;charset=utf-8'\n },\n body: JSON.stringify(event)\n });\n }\n\n public async deleteKumulEvent(name: string): Promise {\n console.debug('BackendService.deleteKumulEvent()');\n \n await fetch(`${environment.serverUrl}/api/kumul?name=${name}`, { \n method: 'DELETE' \n });\n }\n}\n\nexport const backend = new BackendService();\n","import { DirectLine } from \"botframework-directlinejs\";\nimport { v4 as uuid } from 'uuid';\nimport { Observable } from \"rxjs/Observable\";\nimport { createDirectLine } from \"botframework-webchat\";\nimport { backend } from \"./Backend\";\nimport { DirectLineToken } from \"../models/DirectLineToken\";\n\nconst tokenRefreshInterval = 5 * 60 * 1000; // 5 minutes\n\nclass DirectLineService {\n\n public userId: string = `dl_${uuid()}`;\n public botConnection!: DirectLine;\n public token!: DirectLineToken;\n\n constructor() {\n console.debug('DirectLineService.ctor()');\n\n setInterval(async () => await this.refreshToken(), tokenRefreshInterval);\n }\n\n public async connect() {\n console.debug('DirectLineService.connect()');\n\n const token = await this.getToken();\n\n console.debug('DirectLineService.connect(): initializing direct line connection');\n this.botConnection = createDirectLine({ token });\n }\n\n public startConversation() {\n console.debug('DirectLineService.startConversation()');\n this.postEventActivity('startConversation')\n .subscribe(\n (_: any) => { },\n (error: any) => console.error(error)\n );\n }\n\n public endConversation(): Observable {\n console.debug('DirectLineService.resetConversation()');\n return this.postEventActivity('endOfConversation');\n }\n\n sendMessage(text: string) {\n console.debug('DirectLineService.sendMessage()');\n return this.postMessageActivity(text);\n }\n\n public requestProtocol() {\n console.debug('DirectLineService.requestProtocol()');\n this.postEventActivity('sendProtocol')\n .subscribe(\n _ => { },\n error => console.error(error)\n );\n }\n public requestEmployeeChat() {\n console.debug('DirectLineService.requestEmployeeChat()');\n this.postEventActivity('employeeChat')\n .subscribe(\n _ => { },\n error => console.error(error)\n );\n }\n\n public requestEndOfConversation() {\n console.debug('DirectLineService.requestRestart()');\n this.postEventActivity('endOfConversation')\n .subscribe(\n _ => { },\n error => console.error(error)\n );\n }\n\n public dispose() {\n console.debug('DirectLineService.dispose()');\n\n this.botConnection.end();\n delete this.botConnection;\n }\n\n private postEventActivity(name: string): Observable {\n console.debug('DirectLineService.postActivity()');\n\n return this.botConnection.postActivity({\n from: {\n id: this.userId\n },\n name: name,\n type: 'event',\n value: '',\n channelData: {\n \"personId\": this.userId,\n \"environment\": window.location.host\n }\n });\n }\n\n private postMessageActivity(text: string): Observable {\n console.debug('DirectLineService.postMessageActivity()');\n\n return this.botConnection.postActivity({\n from: {\n id: this.userId\n },\n type: 'message',\n text: text,\n channelData: {\n \"personId\": this.userId,\n \"environment\": window.location.host\n }\n });\n }\n\n private async getToken(): Promise {\n console.debug('DirectLineService.getToken()');\n\n this.token = await backend.getDirectLineToken(this.userId);\n\n return this.token.token;\n }\n\n public async refreshToken(): Promise {\n if (!this.token || !this.token.token) {\n return;\n }\n console.debug('DirectLineService.refreshToken()');\n\n const json = await backend.refreshDirectLineToken(this.token.token);\n\n this.token = json;\n\n this.botConnection.reconnect({\n conversationId: this.token.conversationId,\n token: this.token.token\n });\n }\n}\n\nexport const directLine = new DirectLineService();\n","import React from \"react\";\nimport './Help.scss';\n\nexport class HelpComponent extends React.Component<{\n text: string | null\n}, {\n isTextVisible: boolean\n}, any> {\n\n state = {\n isTextVisible: false\n };\n \n constructor(props: any) {\n super(props);\n console.debug('HelpComponent.ctor()');\n }\n\n handleClick = (_: any) => {\n console.debug('HelpComponent.handleClick()');\n \n this.setState({ isTextVisible: !this.state.isTextVisible });\n }\n \n render() {\n console.debug('HelpComponent.render()');\n\n if (!this.props.text) {\n return null;\n }\n\n return (\n
\n
\n \n
\n
Ausfüllhilfe
\n {this.state.isTextVisible &&
{this.props.text}
}\n
\n );\n }\n}\n","import React from \"react\";\nimport ReactWebChat, { createStore } from 'botframework-webchat';\nimport { createStyles } from './WebChat.css';\nimport { directLine } from \"../../../services/DirectLine\";\nimport MarkdownIt from 'markdown-it';\nimport './WebChat.scss';\nimport { HelpComponent } from \"../help/Help\";\nimport { sendBoxTextBoxPlaceholder, sendBoxTextBoxUploadAttachmentPlaceholder, sendBoxTextBoxSelector, adaptiveCardButtonClass, sendBoxTextBoxUploadButtonSelector } from \"../../../constants\";\n\nexport class WebChatComponent extends React.Component<{\n onNextStep: (event?: any) => void\n}, {\n styleSet: any,\n helpText: string | null\n}, any> {\n\n state = {\n styleSet: createStyles(),\n helpText: null\n };\n\n public store: any;\n private md: MarkdownIt = new MarkdownIt({\n html: true,\n breaks: true,\n linkify: true\n });\n\n private helpComponent: any;\n\n constructor(props: any) {\n super(props);\n console.debug('WebChatComponent.ctor()');\n\n this.helpComponent = React.createRef();\n\n this.connect();\n }\n\n public reconnect() {\n console.debug('WebChatComponent.reconnect()');\n\n directLine.endConversation()\n .subscribe(\n (_: any) => {\n directLine.dispose();\n this.store = null;\n this.forceUpdate();\n this.connect();\n },\n (error: any) => console.error(error)\n );\n }\n\n private connect() {\n console.debug('WebChatComponent.connect()');\n\n this.store = createStore({}, (_: any) => (next: any) => (action: any) => {\n console.debug(`WebChatComponent.store: ${action.type}`);\n if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {\n // connection established successfully\n // modify the placeholder of the input text box and focus it\n this.initSendBoxTextBox(sendBoxTextBoxPlaceholder);\n }\n if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {\n if (action.payload.activity.from.role === 'bot') {\n // received incoming activity from bot\n if (action.payload.activity.type === 'message') {\n // received incoming message activity from bot\n if (action.payload.activity.channelData) {\n this.propagateChannelData(action.payload.activity.channelData);\n }\n else {\n // clear old helpText and propagate it to help component\n // do this only in case the helpText was not cleared by the previous step already\n this.initSendBoxTextBox(sendBoxTextBoxPlaceholder);\n this.clearHelp();\n this.stopHighlightUploadButtonAnimation();\n }\n }\n else if (action.payload.activity.type === 'endOfConversation') {\n // received incoming endOfConversation activity from bot\n console.debug('WebChatComponent.store: incoming endOfConversation activity from bot');\n this.reconnect();\n }\n }\n }\n if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {\n // sending adaptive card back to bot\n // hide previous adaptive card buttons\n this.hideAdaptiveCardButtons();\n }\n return next(action);\n });\n\n directLine.connect()\n .then(_ => {\n this.forceUpdate();\n directLine.startConversation();\n })\n .catch(error => console.error(error));\n }\n\n private initSendBoxTextBox(placeholder: string) {\n console.debug(`WebChatComponent.initSendBoxTextBox(${placeholder})`);\n\n let sendBoxTextBox = document.querySelector(sendBoxTextBoxSelector) as any;\n if (!sendBoxTextBox) {\n return;\n }\n\n sendBoxTextBox.focus();\n\n if (sendBoxTextBox.placeholder === placeholder) {\n return;\n }\n sendBoxTextBox.placeholder = placeholder;\n }\n\n private hideAdaptiveCardButtons() {\n console.debug(`WebChatComponent.hideAdaptiveCardButtons()`);\n\n const adaptiveCardButtons = document.getElementsByClassName(adaptiveCardButtonClass);\n if (!adaptiveCardButtons) {\n return;\n }\n for (let n = 0; n < adaptiveCardButtons.length; n++) {\n let button = adaptiveCardButtons.item(n) as any;\n if (!button) {\n continue;\n }\n button.style.display = 'none';\n }\n }\n\n private propagateChannelData(channelData: any) {\n console.debug(`WebChatComponent.propagateChannelData()`);\n // propagate new helpText to help component\n this.updateHelp(channelData.helpText);\n // propagate new progress state to component\n this.updateProgress(channelData.stepCount, channelData.stepIndex);\n // highlight upload button if backend expects attachments\n this.toggleHighlightUploadButtonAnimation(channelData.expectingAttachments === true);\n }\n\n private updateHelp(helpText: string | null) {\n console.debug(`WebChatComponent.updateHelp()`);\n if (this.state.helpText === helpText) {\n // no update required, prevent re-rendering\n console.debug(`WebChatComponent.updateHelp(): already up to date`);\n return;\n }\n this.setState({ helpText: helpText });\n }\n\n private clearHelp() {\n console.debug(`WebChatComponent.clearHelp()`);\n this.updateHelp(null);\n }\n\n private updateProgress(stepCount: number, stepIndex: number) {\n console.debug(`WebChatComponent.updateProgress()`);\n // notify parent component about the changes\n this.props.onNextStep({ stepCount, stepIndex });\n }\n\n private toggleHighlightUploadButtonAnimation(active: boolean) {\n console.debug(`WebChatComponent.toggleHighlightUploadButtonAnimation(${active})`);\n\n if (active) {\n this.startHighlightUploadButtonAnimation();\n this.initSendBoxTextBox(sendBoxTextBoxUploadAttachmentPlaceholder);\n }\n else {\n this.stopHighlightUploadButtonAnimation();\n this.initSendBoxTextBox(sendBoxTextBoxPlaceholder);\n }\n }\n\n private startHighlightUploadButtonAnimation() {\n console.debug(`WebChatComponent.startHighlightUploadButtonAnimation()`);\n\n let uploadButton = document.querySelector(sendBoxTextBoxUploadButtonSelector) as HTMLElement;\n uploadButton.classList.add('highlight');\n }\n\n private stopHighlightUploadButtonAnimation() {\n let uploadButton = document.querySelector(sendBoxTextBoxUploadButtonSelector) as HTMLElement;\n uploadButton.classList.remove('highlight');\n }\n\n\n private renderMarkdown = (markdown: string, options: { markdownRespectCRLF: boolean }): string => {\n console.debug(`WebChatComponent.renderMarkdown(${markdown}, ${options})`);\n return this.md.render(markdown);\n }\n\n private handleClose = () => {\n console.debug('WebChatComponent.handleClose()');\n\n window.removeEventListener('beforeunload', this.handleClose);\n\n directLine.endConversation()\n .subscribe(\n () => {\n console.debug('WebChatComponent.handleClose(): succeeded');\n directLine.dispose();\n },\n error => console.error('WebChatComponent.handleClose()', error)\n );\n }\n\n private handleResize = () => {\n console.debug('WebChatComponent.handleResize()');\n\n const width = document.body.clientWidth < 980\n ? `${document.body.clientWidth}px`\n : `100%`;\n\n let height: string | null = null;\n const header = document.getElementsByClassName('header-container')[0];\n const shadow = document.getElementsByClassName('shadow-top')[0];\n const footer = document.getElementsByClassName('footer-container')[0];\n if (header && shadow && footer) {\n height = `${document.body.clientHeight - header.clientHeight - shadow.clientHeight - footer.clientHeight}px`;\n }\n\n // Note: This will cause all card components to re-render, which can lead to inconsistencies.\n this.setState({ styleSet: createStyles(width, height) });\n }\n\n componentDidMount() {\n console.debug('WebChat.componentDidMount()');\n\n window.addEventListener('beforeunload', this.handleClose);\n window.addEventListener('resize', this.handleResize);\n // Sometimes, the bots initializes really slowly, so we try to handle resize at increasing intervals.\n setTimeout(this.handleResize, 500);\n setTimeout(this.handleResize, 2000);\n setTimeout(this.handleResize, 5000);\n setTimeout(this.handleResize, 12000);\n }\n\n componentWillUnmount() {\n console.debug('WebChat.componentWillUnmount()');\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n render() {\n console.debug('WebChatComponent.render()');\n\n if (!directLine.botConnection) {\n console.log('WebChatComponent.render(): aborting, direct line not initialized yet');\n return null;\n }\n\n return (\n <>\n \"shadow\"\n
\n
\n
\n \n
\n
\n \n
\n
\n \n );\n }\n}\n","import React from \"react\";\nimport './Footer.scss';\nimport { ProgressBar } from \"react-bootstrap\";\n\nexport class FooterComponent extends React.Component<{\n onReport: ((event?: any) => void),\n onContact: ((event?: any) => void),\n onReset: ((event?: any) => void),\n onBack: ((event?: any) => void)\n}, {\n stepCount: number,\n stepIndex: number\n}> {\n\n state = {\n stepCount: 0,\n stepIndex: 0\n }\n\n constructor(props: any) {\n super(props);\n console.debug('FooterComponent.ctor()');\n }\n\n public update(stepCount: number, stepIndex: number) {\n console.debug('FooterComponent.update()');\n this.setState({\n stepCount: stepCount,\n stepIndex: stepIndex\n });\n }\n\n render() {\n console.debug('FooterComponent.render()');\n\n return (\n
\n
\n\n
\n \n
\n\n
\n {
\n
1 ? 'list-inline-item' : 'list-inline-item disabled'} onClick={this.props.onReport} >\n \n
\n

Chatverlauf via E-Mail senden

\n
\n
1 ? 'list-inline-item' : 'list-inline-item disabled'} onClick={this.props.onContact} >\n \n
\n

Mit Mitarbeiter chatten

\n
\n
1 ? 'list-inline-item' : 'list-inline-item disabled'} onClick={this.props.onBack} >\n \n
\n

Letzten Schritt wiederholen

\n
\n
1 ? 'list-inline-item' : 'list-inline-item disabled'} onClick={this.props.onReset} >\n \n
\n

Schadenassistent erneut starten

\n
\n
}\n
\n\n
\n
\n );\n }\n}\n","import React from 'react';\nimport './Bot.scss';\nimport { WebChatComponent } from './webchat/WebChat';\nimport { FooterComponent } from '../footer/Footer';\nimport { directLine } from '../../services/DirectLine';\n\nexport class BotPage extends React.Component {\n\n private webChatComponent: any;\n private footerComponent: any;\n\n constructor(props: any) {\n super(props);\n console.debug('BotPage.ctor()');\n\n this.webChatComponent = React.createRef();\n this.footerComponent = React.createRef();\n }\n\n handleReport = (_: any) => {\n console.debug('BotPage.handleReport()');\n directLine.requestProtocol();\n }\n\n handleReset = (_: any) => {\n console.debug('BotPage.handleReset()');\n directLine.requestEndOfConversation();\n }\n\n handleBack = (_: any) => {\n console.debug('BotPage.handleBack()');\n this.webChatComponent.current.store.dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE',\n payload: { text: 'zurück' }\n });\n }\n\n handleContact = (_: any) => {\n console.debug('BotPage.handleContact()');\n directLine.requestEmployeeChat();\n }\n\n handleNext = ({ stepCount, stepIndex }) => {\n console.debug('BotPage.handleNext()');\n this.footerComponent.current.update(stepCount, stepIndex || 0);\n }\n\n render() {\n console.debug('BotPage.render()');\n\n return (\n
\n \n \n
\n );\n }\n}\n","export class KumulEvent {\n constructor(\n public name: string = '',\n public welcomeMessage: string = '',\n public conclusionText: string = '',\n public active: boolean = false\n ) {\n\n }\n}\n","import React from \"react\";\nimport \"./UpsertModal.scss\";\nimport { Modal, Button, Form } from 'react-bootstrap';\nimport { KumulEvent } from \"../../models/KumulEvent\";\n\nexport class UpsertModal extends React.Component<{\n onClose: (event: KumulEvent | null) => void\n}, {\n open: boolean,\n isUpdateMode: boolean,\n event: KumulEvent\n}> {\n\n constructor(props: any) {\n super(props);\n console.debug('UpsertModal.ctor()');\n\n this.state = { \n open: false,\n isUpdateMode: false,\n event: new KumulEvent()\n };\n }\n\n private handleNameChange = (e) => {\n console.debug(`UpsertModal.handleNameChange(${e.target.value})`);\n let event = this.state.event;\n if (!event) {\n return;\n }\n event.name = e.target.value;\n this.setState({ event });\n };\n\n private handleWelcomeMessageChange = (e) => {\n console.debug(`UpsertModal.handleTextChange(${e.target.value})`);\n let event = this.state.event;\n if (!event) {\n return;\n }\n event.welcomeMessage = e.target.value;\n this.setState({ event });\n };\n\n private handleConclusionTextChange = (e) => {\n console.debug(`UpsertModal.handleConclusionTextChange(${e.target.value})`);\n let event = this.state.event;\n if (!event) {\n return;\n }\n event.conclusionText = e.target.value;\n this.setState({ event });\n };\n\n private handleSave = () => {\n console.debug('UpsertModal.handleSave()');\n this.close(this.state.event);\n };\n \n private handleSaveAndActivate = () => {\n console.debug('UpsertModal.handleSaveAndActivate()');\n let event = this.state.event;\n event.active = true;\n this.close(event);\n };\n \n private handleCancel = () => {\n console.debug('UpsertModal.handleCancel()');\n this.close(null);\n };\n\n public open(event: KumulEvent | null = null) {\n console.debug(`UpsertModal.open(${event})`);\n this.setState({ \n open: true,\n isUpdateMode: event !== null,\n event: event === null ? new KumulEvent() : event\n });\n }\n\n private close(event: KumulEvent | null) {\n console.debug('UpsertModal.close()');\n this.props.onClose(event);\n this.setState({ open: false });\n }\n\n render() {\n console.debug('UpsertModal.render()');\n if (!this.state) {\n return null;\n }\n\n return (\n <>\n \n \n Kumul Ereignis {this.state.isUpdateMode ? 'bearbeiten' : 'erstellen'}\n \n \n
\n \n Name\n \n \n \n Willkommensnachricht\n \n \n \n Zusammenfassung\n \n \n
\n
\n \n \n \n \n \n
\n \n );\n }\n\n}\n","import { MsalAuthProvider, LoginType } from 'react-aad-msal';\n\nexport const authProvider = new MsalAuthProvider(\n {\n auth: {\n authority: 'https://login.microsoftonline.com/common',\n clientId: '1bc0017e-3dc5-4d69-b60b-61a8f6e4cbc8',\n redirectUri: window.location.origin\n },\n cache: {\n cacheLocation: \"localStorage\",\n storeAuthStateInCookie: true\n }\n }, \n {\n scopes: [\n 'User.Read'\n ]\n },\n {\n loginType: LoginType.Redirect,\n // tokenRefreshUri: window.location.origin + '/auth.html'\n }\n);\n","import { Client } from '@microsoft/microsoft-graph-client';\n\nexport async function getUserGroups(accessToken: string) {\n console.debug('GraphService.getUserGroups()');\n \n const client = Client.init({ authProvider: done => done(null, accessToken) });\n return await client.api('/me/memberOf').get();\n}\n","import React from \"react\";\nimport './Kumul.scss';\nimport { UpsertModal } from \"./UpsertModal\";\nimport Toggle from 'react-toggle';\nimport \"react-toggle/style.css\";\nimport { KumulEvent } from \"../../models/KumulEvent\";\nimport { backend } from \"../../services/Backend\";\nimport AzureAD, { AuthenticationState } from \"react-aad-msal\";\nimport { authProvider } from \"../../auth/authProvider\";\nimport { getUserGroups } from \"../../auth/GraphService\";\nimport { environment } from \"../../environment\";\n\nexport class KumulPage extends React.Component<{}, {\n events: KumulEvent[],\n isAuthorized: boolean\n}> {\n\n private upsertModal: any;\n\n private authorizationInProgress: boolean = false;\n\n constructor(props: any) {\n super(props);\n console.debug('KumulPage.ctor()');\n \n this.upsertModal = React.createRef();\n\n this.state = { \n events: [],\n isAuthorized: false\n };\n\n this.getKumulEvents();\n }\n\n async authorize() {\n console.debug('KumulPage.authorize()');\n if (this.authorizationInProgress) {\n return;\n }\n this.authorizationInProgress = true;\n try {\n const tokenResponse = await authProvider.getAccessToken();\n const userGroups = await getUserGroups(tokenResponse.accessToken);\n for (let groupId of environment.groupIds) {\n if (userGroups.value.find(group => group.id === groupId)) {\n this.setState({ isAuthorized: true });\n break;\n }\n }\n }\n catch (error) {\n console.error('KumulPage.authorize()', error);\n }\n finally {\n this.authorizationInProgress = false;\n }\n }\n\n getKumulEvents() {\n console.debug('KumulPage.getKumulEvents()');\n backend.getKumulEvents()\n .then((events: KumulEvent[]) => this.setState({ events }))\n .catch(error => console.error(error));\n }\n\n handleNew = (event) => {\n console.debug('KumulPage.handleNew()');\n this.upsertModal.current.open();\n };\n\n handleEdit = (name: string | null) => {\n console.debug(`KumulPage.handleEdit(${name})`);\n if (!name) {\n return;\n }\n const event = this.state.events.find(event => event.name === name);\n if (!event) {\n return;\n }\n this.upsertModal.current.open(event);\n };\n\n handleDelete = (name: string | null) => {\n console.debug(`KumulPage.handleDelete(${name})`);\n if (!name) {\n return;\n }\n backend.deleteKumulEvent(name)\n .then(() => this.getKumulEvents())\n .catch(error => console.error(error));\n };\n\n handleClose = (event: KumulEvent | null) => {\n console.debug(`KumulPage.handleClose()`, event);\n if (!event) {\n // cancelled\n return;\n }\n backend.upsertKumulEvent(event)\n .then(() => this.getKumulEvents())\n .catch(error => console.error(error));\n };\n\n handleActivated = (active: boolean, eventName: string | null) => {\n console.debug(`KumulPage.handleActivated()`, active, eventName);\n const event = this.state.events.find(e => e.name === eventName);\n if (!event) {\n return;\n }\n event.active = active;\n backend.upsertKumulEvent(event)\n .then(() => this.getKumulEvents())\n .catch(error => console.error(error));\n };\n\n render() {\n return (\n <>\n
\n \n {\n ({login, logout, authenticationState, error, accountInfo}) => {\n console.debug('KumulPage.AzureAD', authenticationState);\n if (error) console.error('KumulPage.AzureAD', error);\n \n if (authenticationState === AuthenticationState.Authenticated) {\n if (!this.state.isAuthorized) {\n this.authorize();\n return (

Sie sind nicht autorisiert.

);\n }\n return (\n
\n \"shadow\"\n

Kumul Ereignisse

\n
\n
\n
Name
\n
Text
\n
Status
\n
\n
\n \n
\n
\n
\n {this.state.events.map(event =>\n
\n
{event.name}
\n
{event.welcomeMessage}
\n
\n this.handleActivated(e.target.checked, event.name)} />\n
\n
\n
this.handleEdit(event?.name)} className=\"icon\">\n \n
\n
this.handleDelete(event?.name)} className=\"icon delete\">\n \n
\n
\n
)}\n
\n
\n );\n }\n else {\n return (

Sie sind nicht authentifiziert.

);\n }\n }\n }\n
\n
\n\n \n \n );\n }\n\n}\n","import React from \"react\";\nimport './Header.scss';\n\nexport class HeaderComponent extends React.Component {\n render() {\n return (\n <>\n
\n
\n
\n
\n \n \"DOMCURA\n \n
\n {/*
\n \n \n \n \n \n
*/}\n
\n
\n
\n \n );\n }\n}\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { BotPage } from './components/bot/Bot';\nimport { KumulPage } from './components/kumul/Kumul';\nimport { HeaderComponent } from './components/header/Header';\n\nclass App extends React.Component {\n render() {\n return (\n <>\n \n \n \n \n \n \n );\n }\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","// https://github.com/Microsoft/BotFramework-WebChat#browser-compatibility\nimport 'babel-polyfill';\nimport 'react-app-polyfill/ie11';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport './index.scss';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport registerAutosizeTextareasListener from \"./components/bot/webchat/autoSize\";\nimport {\n registerAdaptiveCardUploadButton,\n registerHcaptchaComponent\n} from './components/adaptivecards/GlobalActionHandler';\nimport registerTextAreaCharCounter from './components/bot/webchat/charCounter';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\nregisterAdaptiveCardUploadButton();\nregisterHcaptchaComponent();\nregisterTextAreaCharCounter(document.body);\nregisterAutosizeTextareasListener(document.body);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import * as Adaptive from \"adaptivecards\";\nimport { sendBoxTextBoxUploadButtonSelector } from '../../constants';\n\nexport function registerAdaptiveCardUploadButton() {\n class UploadButtonClickAction extends Adaptive.Action {\n\n getJsonTypeName(): string {\n return \"Action.UploadButtonClick\";\n }\n\n execute() {\n (document.querySelector(sendBoxTextBoxUploadButtonSelector) as HTMLElement).click();\n }\n }\n\n Adaptive.AdaptiveCard.actionTypeRegistry.registerType(\"Action.UploadButtonClick\", () => { return new UploadButtonClickAction(); });\n}\n\nexport function registerHcaptchaComponent() {\n class HcaptchaComponent extends Adaptive.Input{\n\n protected _hcaptchaValue : string = \"\";\n protected _containerElement : HTMLElement | null = null;\n protected _siteKey: string = \"\";\n\n getJsonTypeName(): string {\n return \"domcura.captcha\";\n }\n\n get value(): string {\n return this._hcaptchaValue;\n }\n\n parse(json: any, errors?: Array) {\n super.parse(json, errors);\n\n this._siteKey = json[\"siteKey\"];\n }\n\n protected internalRender(): HTMLElement {\n if (this._containerElement) {\n return this._containerElement;\n }\n\n const element = document.createElement('div');\n element.className = 'h-captcha';\n\n // I found no way to set a callback using JS in the documentation, so we'll create a unique global function.\n // This might prevent this object from being garbage collected, but that shouldn't be THAT bad.\n const callbackName = \"hcaptcha_callback_\" + Math.random();\n window[callbackName] = (code) => {\n console.log(\"Got Captcha result\", code);\n this._hcaptchaValue = code;\n };\n element.setAttribute('data-callback', callbackName);\n element.setAttribute('data-sitekey', this._siteKey);\n this._containerElement = element;\n (window[\"hcaptcha\"]).render(element);\n\n return element;\n }\n }\n Adaptive.AdaptiveCard.elementTypeRegistry.registerType(\"domcura.captcha\", () => { return new HcaptchaComponent(); });\n}\n","export default function registerTextAreaCharCounter(rootNode: HTMLElement): () => void {\n const observer = new MutationObserver(function (changes) {\n const textAreas : NodeListOf= rootNode.querySelectorAll(\".ac-textInput.ac-multiline[maxlength]:not(.has-counter)\");\n for (let i = 0; i < textAreas.length; i++) {\n const textArea = textAreas[i];\n const charCounter = document.createElement('span');\n let triggerUpdate = function () {\n charCounter.textContent = textArea.value.length + ' / ' + textArea.maxLength + \" Zeichen\";\n };\n textArea.addEventListener('input', triggerUpdate);\n textArea.parentElement?.insertAdjacentElement('afterend', charCounter);\n textArea.classList.add('has-counter');\n triggerUpdate();\n }\n });\n\n observer.observe(rootNode, {\n subtree: true,\n childList: true\n });\n\n return () => observer.disconnect();\n}\n","import autosize from 'autosize';\n\n/**\n * Autosize any textarea that gets added within the specified rootnode.\n * This may be optimized further by looking at the individual mutations and by a good root node.\n */\nexport default function registerAutosizeTextareasListener(rootNode: HTMLElement): () => void {\n const observer = new MutationObserver(function (changes) {\n autosize(rootNode.querySelectorAll('textarea'));\n });\n\n observer.observe(rootNode, {\n subtree: true,\n childList: true\n });\n\n return () => observer.disconnect();\n}\n"],"sourceRoot":""}