@d19n/webchat 1.0.2 → 1.0.4
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/README.md +1 -1
- package/dist/NotificationBar/index.d.ts +3 -0
- package/dist/TwilioChat/Chat.d.ts +14 -0
- package/dist/TwilioChat/index.d.ts +13 -0
- package/dist/_virtual/Component.js +2 -0
- package/dist/_virtual/Component.js.map +1 -0
- package/dist/_virtual/ConfigApi.js +2 -0
- package/dist/_virtual/ConfigApi.js.map +1 -0
- package/dist/_virtual/ConfigApi2.js +2 -0
- package/dist/_virtual/ConfigApi2.js.map +1 -0
- package/dist/_virtual/_commonjs-dynamic-modules.js +2 -0
- package/dist/_virtual/_commonjs-dynamic-modules.js.map +1 -0
- package/dist/_virtual/_commonjsHelpers.js +2 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/api.provider.js +2 -0
- package/dist/_virtual/api.provider.js.map +1 -0
- package/dist/_virtual/browser.js +2 -0
- package/dist/_virtual/browser.js.map +1 -0
- package/dist/_virtual/constructs.js +2 -0
- package/dist/_virtual/constructs.js.map +1 -0
- package/dist/_virtual/content.js +2 -0
- package/dist/_virtual/content.js.map +1 -0
- package/dist/_virtual/disallow-node.js +2 -0
- package/dist/_virtual/disallow-node.js.map +1 -0
- package/dist/_virtual/document.js +2 -0
- package/dist/_virtual/document.js.map +1 -0
- package/dist/_virtual/errors.js +2 -0
- package/dist/_virtual/errors.js.map +1 -0
- package/dist/_virtual/flow.js +2 -0
- package/dist/_virtual/flow.js.map +1 -0
- package/dist/_virtual/from-markdown.js +2 -0
- package/dist/_virtual/from-markdown.js.map +1 -0
- package/dist/_virtual/from-markdown2.js +2 -0
- package/dist/_virtual/from-markdown2.js.map +1 -0
- package/dist/_virtual/from-markdown3.js +2 -0
- package/dist/_virtual/from-markdown3.js.map +1 -0
- package/dist/_virtual/from-markdown4.js +2 -0
- package/dist/_virtual/from-markdown4.js.map +1 -0
- package/dist/_virtual/helpers.js +2 -0
- package/dist/_virtual/helpers.js.map +1 -0
- package/dist/_virtual/hoist-non-react-statics.cjs.js +2 -0
- package/dist/_virtual/hoist-non-react-statics.cjs.js.map +1 -0
- package/dist/_virtual/index.js +2 -0
- package/dist/_virtual/index.js.map +1 -0
- package/dist/_virtual/index10.js +2 -0
- package/dist/_virtual/index10.js.map +1 -0
- package/dist/_virtual/index11.js +2 -0
- package/dist/_virtual/index11.js.map +1 -0
- package/dist/_virtual/index12.js +2 -0
- package/dist/_virtual/index12.js.map +1 -0
- package/dist/_virtual/index13.js +2 -0
- package/dist/_virtual/index13.js.map +1 -0
- package/dist/_virtual/index14.js +2 -0
- package/dist/_virtual/index14.js.map +1 -0
- package/dist/_virtual/index15.js +2 -0
- package/dist/_virtual/index15.js.map +1 -0
- package/dist/_virtual/index16.js +2 -0
- package/dist/_virtual/index16.js.map +1 -0
- package/dist/_virtual/index2.js +2 -0
- package/dist/_virtual/index2.js.map +1 -0
- package/dist/_virtual/index3.js +2 -0
- package/dist/_virtual/index3.js.map +1 -0
- package/dist/_virtual/index4.js +2 -0
- package/dist/_virtual/index4.js.map +1 -0
- package/dist/_virtual/index5.js +2 -0
- package/dist/_virtual/index5.js.map +1 -0
- package/dist/_virtual/index6.js +2 -0
- package/dist/_virtual/index6.js.map +1 -0
- package/dist/_virtual/index7.js +2 -0
- package/dist/_virtual/index7.js.map +1 -0
- package/dist/_virtual/index8.js +2 -0
- package/dist/_virtual/index8.js.map +1 -0
- package/dist/_virtual/index9.js +2 -0
- package/dist/_virtual/index9.js.map +1 -0
- package/dist/_virtual/minpath.browser.js +2 -0
- package/dist/_virtual/minpath.browser.js.map +1 -0
- package/dist/_virtual/minproc.browser.js +2 -0
- package/dist/_virtual/minproc.browser.js.map +1 -0
- package/dist/_virtual/moment.js +2 -0
- package/dist/_virtual/moment.js.map +1 -0
- package/dist/_virtual/moment2.js +2 -0
- package/dist/_virtual/moment2.js.map +1 -0
- package/dist/_virtual/react-is.development.js +2 -0
- package/dist/_virtual/react-is.development.js.map +1 -0
- package/dist/_virtual/react-is.development2.js +2 -0
- package/dist/_virtual/react-is.development2.js.map +1 -0
- package/dist/_virtual/react-is.development3.js +2 -0
- package/dist/_virtual/react-is.development3.js.map +1 -0
- package/dist/_virtual/react-is.development4.js +2 -0
- package/dist/_virtual/react-is.development4.js.map +1 -0
- package/dist/_virtual/react-is.production.js +2 -0
- package/dist/_virtual/react-is.production.js.map +1 -0
- package/dist/_virtual/react-is.production.min.js +2 -0
- package/dist/_virtual/react-is.production.min.js.map +1 -0
- package/dist/_virtual/react-is.production.min2.js +2 -0
- package/dist/_virtual/react-is.production.min2.js.map +1 -0
- package/dist/_virtual/react-is.production.min3.js +2 -0
- package/dist/_virtual/react-is.production.min3.js.map +1 -0
- package/dist/_virtual/react-markdown.js +2 -0
- package/dist/_virtual/react-markdown.js.map +1 -0
- package/dist/_virtual/schema.types.js +2 -0
- package/dist/_virtual/schema.types.js.map +1 -0
- package/dist/_virtual/symbols.js +2 -0
- package/dist/_virtual/symbols.js.map +1 -0
- package/dist/_virtual/syntax.js +2 -0
- package/dist/_virtual/syntax.js.map +1 -0
- package/dist/_virtual/syntax2.js +2 -0
- package/dist/_virtual/syntax2.js.map +1 -0
- package/dist/_virtual/syntax3.js +2 -0
- package/dist/_virtual/syntax3.js.map +1 -0
- package/dist/_virtual/text.js +2 -0
- package/dist/_virtual/text.js.map +1 -0
- package/dist/_virtual/to-markdown.js +2 -0
- package/dist/_virtual/to-markdown.js.map +1 -0
- package/dist/_virtual/to-markdown2.js +2 -0
- package/dist/_virtual/to-markdown2.js.map +1 -0
- package/dist/_virtual/to-markdown3.js +2 -0
- package/dist/_virtual/to-markdown3.js.map +1 -0
- package/dist/api/api.d.ts +17 -0
- package/dist/assets/audio/notification.wav +0 -0
- package/dist/assets/images/gif/loader-transparent.gif +0 -0
- package/dist/assets/images/png/ico-chat.png +0 -0
- package/dist/assets/images/png/ico-close.png +0 -0
- package/dist/assets/images/svg/chat.svg +1 -0
- package/dist/assets/images/svg/close.svg +4 -0
- package/dist/assets/images/svg/favicon.svg +12 -0
- package/dist/assets/images/svg/youfibre-upload.svg +6 -0
- package/dist/context/GlobalContext.d.ts +18 -0
- package/dist/context/types.d.ts +60 -0
- package/dist/index.d.ts +13 -3
- package/dist/index.js +45 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +45 -3
- package/dist/index.mjs.map +1 -1
- package/dist/node_modules/@d19n/odin-sdk-generator/dist/api.provider.js +2 -0
- package/dist/node_modules/@d19n/odin-sdk-generator/dist/api.provider.js.map +1 -0
- package/dist/node_modules/@d19n/odin-sdk-generator/dist/utilities/helpers.js +2 -0
- package/dist/node_modules/@d19n/odin-sdk-generator/dist/utilities/helpers.js.map +1 -0
- package/dist/node_modules/@d19n/odin-types/dist/types/errors.js +2 -0
- package/dist/node_modules/@d19n/odin-types/dist/types/errors.js.map +1 -0
- package/dist/node_modules/@d19n/odin-types/dist/types/schema.types.js +2 -0
- package/dist/node_modules/@d19n/odin-types/dist/types/schema.types.js.map +1 -0
- package/dist/node_modules/@d19n/youfibre-odin-sdk/dist/api-sdk-v2/ConfigApi.js +2 -0
- package/dist/node_modules/@d19n/youfibre-odin-sdk/dist/api-sdk-v2/ConfigApi.js.map +1 -0
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +2 -0
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +1 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js +2 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
- package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js +2 -0
- package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js.map +1 -0
- package/dist/node_modules/@emotion/unitless/dist/unitless.browser.esm.js +2 -0
- package/dist/node_modules/@emotion/unitless/dist/unitless.browser.esm.js.map +1 -0
- package/dist/node_modules/@socket.io/component-emitter/lib/esm/index.js +2 -0
- package/dist/node_modules/@socket.io/component-emitter/lib/esm/index.js.map +1 -0
- package/dist/node_modules/attr-accept/dist/es/index.js +2 -0
- package/dist/node_modules/attr-accept/dist/es/index.js.map +1 -0
- package/dist/node_modules/bail/index.js +2 -0
- package/dist/node_modules/bail/index.js.map +1 -0
- package/dist/node_modules/camel-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/camel-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/capital-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/capital-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/ccount/index.js +2 -0
- package/dist/node_modules/ccount/index.js.map +1 -0
- package/dist/node_modules/change-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/change-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/classnames/index.js +7 -0
- package/dist/node_modules/classnames/index.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.m.js +2 -0
- package/dist/node_modules/clsx/dist/clsx.m.js.map +1 -0
- package/dist/node_modules/constant-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/constant-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/dot-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/dot-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseqs.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseqs.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/globals.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/globals.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/socket.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/transport.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/index.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/index.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/polling-xhr.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/polling-xhr.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/util.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -0
- package/dist/node_modules/engine.io-parser/build/esm/commons.js +2 -0
- package/dist/node_modules/engine.io-parser/build/esm/commons.js.map +1 -0
- package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +2 -0
- package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js.map +1 -0
- package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +2 -0
- package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js.map +1 -0
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +2 -0
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -0
- package/dist/node_modules/engine.io-parser/build/esm/index.js +2 -0
- package/dist/node_modules/engine.io-parser/build/esm/index.js.map +1 -0
- package/dist/node_modules/escape-string-regexp/index.js +2 -0
- package/dist/node_modules/escape-string-regexp/index.js.map +1 -0
- package/dist/node_modules/extend/index.js +2 -0
- package/dist/node_modules/extend/index.js.map +1 -0
- package/dist/node_modules/file-selector/dist/es2015/file-selector.js +2 -0
- package/dist/node_modules/file-selector/dist/es2015/file-selector.js.map +1 -0
- package/dist/node_modules/file-selector/dist/es2015/file.js +2 -0
- package/dist/node_modules/file-selector/dist/es2015/file.js.map +1 -0
- package/dist/node_modules/form-data/lib/browser.js +2 -0
- package/dist/node_modules/form-data/lib/browser.js.map +1 -0
- package/dist/node_modules/header-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/header-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js +2 -0
- package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js.map +1 -0
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js +10 -0
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js +10 -0
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js +2 -0
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/is-buffer/index.js +8 -0
- package/dist/node_modules/is-buffer/index.js.map +1 -0
- package/dist/node_modules/is-plain-obj/index.js +2 -0
- package/dist/node_modules/is-plain-obj/index.js.map +1 -0
- package/dist/node_modules/linkify-html/dist/linkify-html.js +2 -0
- package/dist/node_modules/linkify-html/dist/linkify-html.js.map +1 -0
- package/dist/node_modules/linkifyjs/dist/linkify.js +2 -0
- package/dist/node_modules/linkifyjs/dist/linkify.js.map +1 -0
- package/dist/node_modules/lodash.debounce/index.js +2 -0
- package/dist/node_modules/lodash.debounce/index.js.map +1 -0
- package/dist/node_modules/lower-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/lower-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/markdown-table/index.js +2 -0
- package/dist/node_modules/markdown-table/index.js.map +1 -0
- package/dist/node_modules/mdast-add-list-metadata/index.js +2 -0
- package/dist/node_modules/mdast-add-list-metadata/index.js.map +1 -0
- package/dist/node_modules/mdast-util-find-and-replace/index.js +2 -0
- package/dist/node_modules/mdast-util-find-and-replace/index.js.map +1 -0
- package/dist/node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents/color.browser.js +2 -0
- package/dist/node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents/color.browser.js.map +1 -0
- package/dist/node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents/index.js +2 -0
- package/dist/node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents/index.js.map +1 -0
- package/dist/node_modules/mdast-util-from-markdown/dist/index.js +2 -0
- package/dist/node_modules/mdast-util-from-markdown/dist/index.js.map +1 -0
- package/dist/node_modules/mdast-util-from-markdown/index.js +2 -0
- package/dist/node_modules/mdast-util-from-markdown/index.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm/from-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm/from-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm/to-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm/to-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-autolink-literal/from-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-autolink-literal/from-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-autolink-literal/to-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-autolink-literal/to-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-strikethrough/from-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-strikethrough/from-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-strikethrough/to-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-strikethrough/to-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-table/from-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-table/from-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-table/to-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-table/to-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-task-list-item/from-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-task-list-item/from-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-gfm-task-list-item/to-markdown.js +2 -0
- package/dist/node_modules/mdast-util-gfm-task-list-item/to-markdown.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/configure.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/configure.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/handle/list-item.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/handle/list-item.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/container-flow.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/container-flow.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/indent-lines.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/indent-lines.js.map +1 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/pattern-compile.js +2 -0
- package/dist/node_modules/mdast-util-to-markdown/lib/util/pattern-compile.js.map +1 -0
- package/dist/node_modules/mdast-util-to-string/index.js +2 -0
- package/dist/node_modules/mdast-util-to-string/index.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/ascii-alpha.js +2 -0
- package/dist/node_modules/micromark/dist/character/ascii-alpha.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/ascii-alphanumeric.js +2 -0
- package/dist/node_modules/micromark/dist/character/ascii-alphanumeric.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/ascii-atext.js +2 -0
- package/dist/node_modules/micromark/dist/character/ascii-atext.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/ascii-control.js +2 -0
- package/dist/node_modules/micromark/dist/character/ascii-control.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/ascii-digit.js +2 -0
- package/dist/node_modules/micromark/dist/character/ascii-digit.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/ascii-hex-digit.js +2 -0
- package/dist/node_modules/micromark/dist/character/ascii-hex-digit.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/ascii-punctuation.js +2 -0
- package/dist/node_modules/micromark/dist/character/ascii-punctuation.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/markdown-line-ending-or-space.js +2 -0
- package/dist/node_modules/micromark/dist/character/markdown-line-ending-or-space.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/markdown-line-ending.js +2 -0
- package/dist/node_modules/micromark/dist/character/markdown-line-ending.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/markdown-space.js +2 -0
- package/dist/node_modules/micromark/dist/character/markdown-space.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/unicode-punctuation.js +2 -0
- package/dist/node_modules/micromark/dist/character/unicode-punctuation.js.map +1 -0
- package/dist/node_modules/micromark/dist/character/unicode-whitespace.js +2 -0
- package/dist/node_modules/micromark/dist/character/unicode-whitespace.js.map +1 -0
- package/dist/node_modules/micromark/dist/constant/assign.js +2 -0
- package/dist/node_modules/micromark/dist/constant/assign.js.map +1 -0
- package/dist/node_modules/micromark/dist/constant/from-char-code.js +2 -0
- package/dist/node_modules/micromark/dist/constant/from-char-code.js.map +1 -0
- package/dist/node_modules/micromark/dist/constant/has-own-property.js +2 -0
- package/dist/node_modules/micromark/dist/constant/has-own-property.js.map +1 -0
- package/dist/node_modules/micromark/dist/constant/html-block-names.js +2 -0
- package/dist/node_modules/micromark/dist/constant/html-block-names.js.map +1 -0
- package/dist/node_modules/micromark/dist/constant/html-raw-names.js +2 -0
- package/dist/node_modules/micromark/dist/constant/html-raw-names.js.map +1 -0
- package/dist/node_modules/micromark/dist/constant/splice.js +2 -0
- package/dist/node_modules/micromark/dist/constant/splice.js.map +1 -0
- package/dist/node_modules/micromark/dist/constant/unicode-punctuation-regex.js +2 -0
- package/dist/node_modules/micromark/dist/constant/unicode-punctuation-regex.js.map +1 -0
- package/dist/node_modules/micromark/dist/constructs.js +2 -0
- package/dist/node_modules/micromark/dist/constructs.js.map +1 -0
- package/dist/node_modules/micromark/dist/initialize/content.js +2 -0
- package/dist/node_modules/micromark/dist/initialize/content.js.map +1 -0
- package/dist/node_modules/micromark/dist/initialize/document.js +2 -0
- package/dist/node_modules/micromark/dist/initialize/document.js.map +1 -0
- package/dist/node_modules/micromark/dist/initialize/flow.js +2 -0
- package/dist/node_modules/micromark/dist/initialize/flow.js.map +1 -0
- package/dist/node_modules/micromark/dist/initialize/text.js +2 -0
- package/dist/node_modules/micromark/dist/initialize/text.js.map +1 -0
- package/dist/node_modules/micromark/dist/parse.js +2 -0
- package/dist/node_modules/micromark/dist/parse.js.map +1 -0
- package/dist/node_modules/micromark/dist/postprocess.js +2 -0
- package/dist/node_modules/micromark/dist/postprocess.js.map +1 -0
- package/dist/node_modules/micromark/dist/preprocess.js +2 -0
- package/dist/node_modules/micromark/dist/preprocess.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/attention.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/attention.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/autolink.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/autolink.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/block-quote.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/block-quote.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/character-escape.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/character-escape.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/character-reference.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/character-reference.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/code-fenced.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/code-fenced.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/code-indented.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/code-indented.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/code-text.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/code-text.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/content.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/content.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/definition.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/definition.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-destination.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-destination.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-label.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-label.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-space.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-space.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-title.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-title.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-whitespace.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/factory-whitespace.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/hard-break-escape.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/hard-break-escape.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/heading-atx.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/heading-atx.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/html-flow.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/html-flow.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/html-text.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/html-text.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/label-end.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/label-end.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/label-start-image.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/label-start-image.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/label-start-link.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/label-start-link.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/line-ending.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/line-ending.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/list.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/list.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/partial-blank-line.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/partial-blank-line.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/setext-underline.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/setext-underline.js.map +1 -0
- package/dist/node_modules/micromark/dist/tokenize/thematic-break.js +2 -0
- package/dist/node_modules/micromark/dist/tokenize/thematic-break.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/chunked-push.js +2 -0
- package/dist/node_modules/micromark/dist/util/chunked-push.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/chunked-splice.js +2 -0
- package/dist/node_modules/micromark/dist/util/chunked-splice.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/classify-character.js +2 -0
- package/dist/node_modules/micromark/dist/util/classify-character.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/combine-extensions.js +2 -0
- package/dist/node_modules/micromark/dist/util/combine-extensions.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/create-tokenizer.js +2 -0
- package/dist/node_modules/micromark/dist/util/create-tokenizer.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/miniflat.js +2 -0
- package/dist/node_modules/micromark/dist/util/miniflat.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/move-point.js +2 -0
- package/dist/node_modules/micromark/dist/util/move-point.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/normalize-identifier.js +2 -0
- package/dist/node_modules/micromark/dist/util/normalize-identifier.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/prefix-size.js +2 -0
- package/dist/node_modules/micromark/dist/util/prefix-size.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/regex-check.js +2 -0
- package/dist/node_modules/micromark/dist/util/regex-check.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/resolve-all.js +2 -0
- package/dist/node_modules/micromark/dist/util/resolve-all.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/safe-from-int.js +2 -0
- package/dist/node_modules/micromark/dist/util/safe-from-int.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/serialize-chunks.js +2 -0
- package/dist/node_modules/micromark/dist/util/serialize-chunks.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/shallow.js +2 -0
- package/dist/node_modules/micromark/dist/util/shallow.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/size-chunks.js +2 -0
- package/dist/node_modules/micromark/dist/util/size-chunks.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/slice-chunks.js +2 -0
- package/dist/node_modules/micromark/dist/util/slice-chunks.js.map +1 -0
- package/dist/node_modules/micromark/dist/util/subtokenize.js +2 -0
- package/dist/node_modules/micromark/dist/util/subtokenize.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm/index.js +2 -0
- package/dist/node_modules/micromark-extension-gfm/index.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm/syntax.js +2 -0
- package/dist/node_modules/micromark-extension-gfm/syntax.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm-autolink-literal/index.js +2 -0
- package/dist/node_modules/micromark-extension-gfm-autolink-literal/index.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm-autolink-literal/syntax.js +2 -0
- package/dist/node_modules/micromark-extension-gfm-autolink-literal/syntax.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm-strikethrough/index.js +2 -0
- package/dist/node_modules/micromark-extension-gfm-strikethrough/index.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm-table/index.js +2 -0
- package/dist/node_modules/micromark-extension-gfm-table/index.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm-table/syntax.js +2 -0
- package/dist/node_modules/micromark-extension-gfm-table/syntax.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm-task-list-item/index.js +2 -0
- package/dist/node_modules/micromark-extension-gfm-task-list-item/index.js.map +1 -0
- package/dist/node_modules/micromark-extension-gfm-task-list-item/syntax.js +2 -0
- package/dist/node_modules/micromark-extension-gfm-task-list-item/syntax.js.map +1 -0
- package/dist/node_modules/moment/moment.js +4 -0
- package/dist/node_modules/moment/moment.js.map +1 -0
- package/dist/node_modules/no-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/no-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/object-assign/index.js +7 -0
- package/dist/node_modules/object-assign/index.js.map +1 -0
- package/dist/node_modules/param-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/param-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/parse-entities/decode-entity.browser.js +2 -0
- package/dist/node_modules/parse-entities/decode-entity.browser.js.map +1 -0
- package/dist/node_modules/pascal-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/path-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/path-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/prop-types/checkPropTypes.js +2 -0
- package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +2 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +2 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -0
- package/dist/node_modules/prop-types/index.js +2 -0
- package/dist/node_modules/prop-types/index.js.map +1 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +2 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -0
- package/dist/node_modules/prop-types/lib/has.js +2 -0
- package/dist/node_modules/prop-types/lib/has.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +10 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +10 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +2 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-bootstrap/esm/Col.js +2 -0
- package/dist/node_modules/react-bootstrap/esm/Col.js.map +1 -0
- package/dist/node_modules/react-bootstrap/esm/Row.js +2 -0
- package/dist/node_modules/react-bootstrap/esm/Row.js.map +1 -0
- package/dist/node_modules/react-bootstrap/esm/ThemeProvider.js +2 -0
- package/dist/node_modules/react-bootstrap/esm/ThemeProvider.js.map +1 -0
- package/dist/node_modules/react-debounce-input/lib/Component.js +2 -0
- package/dist/node_modules/react-debounce-input/lib/Component.js.map +1 -0
- package/dist/node_modules/react-debounce-input/lib/index.js +2 -0
- package/dist/node_modules/react-debounce-input/lib/index.js.map +1 -0
- package/dist/node_modules/react-dropzone/dist/es/index.js +2 -0
- package/dist/node_modules/react-dropzone/dist/es/index.js.map +1 -0
- package/dist/node_modules/react-dropzone/dist/es/utils/index.js +2 -0
- package/dist/node_modules/react-dropzone/dist/es/utils/index.js.map +1 -0
- package/dist/node_modules/react-icons/bs/index.esm.js +2 -0
- package/dist/node_modules/react-icons/bs/index.esm.js.map +1 -0
- package/dist/node_modules/react-icons/lib/esm/iconBase.js +2 -0
- package/dist/node_modules/react-icons/lib/esm/iconBase.js.map +1 -0
- package/dist/node_modules/react-icons/lib/esm/iconContext.js +2 -0
- package/dist/node_modules/react-icons/lib/esm/iconContext.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js +11 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.production.js +11 -0
- package/dist/node_modules/react-is/cjs/react-is.production.js.map +1 -0
- package/dist/node_modules/react-is/index.js +2 -0
- package/dist/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/ast-to-react.js +2 -0
- package/dist/node_modules/react-markdown/lib/ast-to-react.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/get-definitions.js +2 -0
- package/dist/node_modules/react-markdown/lib/get-definitions.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/plugins/disallow-node.js +2 -0
- package/dist/node_modules/react-markdown/lib/plugins/disallow-node.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/plugins/naive-html.js +2 -0
- package/dist/node_modules/react-markdown/lib/plugins/naive-html.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/react-markdown.js +2 -0
- package/dist/node_modules/react-markdown/lib/react-markdown.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/renderers.js +2 -0
- package/dist/node_modules/react-markdown/lib/renderers.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/symbols.js +2 -0
- package/dist/node_modules/react-markdown/lib/symbols.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/uri-transformer.js +2 -0
- package/dist/node_modules/react-markdown/lib/uri-transformer.js.map +1 -0
- package/dist/node_modules/react-markdown/lib/wrap-table-rows.js +2 -0
- package/dist/node_modules/react-markdown/lib/wrap-table-rows.js.map +1 -0
- package/dist/node_modules/react-markdown/node_modules/react-is/cjs/react-is.development.js +10 -0
- package/dist/node_modules/react-markdown/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/react-markdown/node_modules/react-is/cjs/react-is.production.min.js +10 -0
- package/dist/node_modules/react-markdown/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/react-markdown/node_modules/react-is/index.js +2 -0
- package/dist/node_modules/react-markdown/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-modal-image/es/Header.js +2 -0
- package/dist/node_modules/react-modal-image/es/Header.js.map +1 -0
- package/dist/node_modules/react-modal-image/es/Image.js +2 -0
- package/dist/node_modules/react-modal-image/es/Image.js.map +1 -0
- package/dist/node_modules/react-modal-image/es/Lightbox.js +2 -0
- package/dist/node_modules/react-modal-image/es/Lightbox.js.map +1 -0
- package/dist/node_modules/react-modal-image/es/icons.js +2 -0
- package/dist/node_modules/react-modal-image/es/icons.js.map +1 -0
- package/dist/node_modules/react-modal-image/es/styles.js +2 -0
- package/dist/node_modules/react-modal-image/es/styles.js.map +1 -0
- package/dist/node_modules/react-timer-hook/dist/index.js +2 -0
- package/dist/node_modules/react-timer-hook/dist/index.js.map +1 -0
- package/dist/node_modules/react-toastify/dist/react-toastify.esm.js +2 -0
- package/dist/node_modules/react-toastify/dist/react-toastify.esm.js.map +1 -0
- package/dist/node_modules/remark-gfm/index.js +2 -0
- package/dist/node_modules/remark-gfm/index.js.map +1 -0
- package/dist/node_modules/remark-parse/index.js +2 -0
- package/dist/node_modules/remark-parse/index.js.map +1 -0
- package/dist/node_modules/repeat-string/index.js +8 -0
- package/dist/node_modules/repeat-string/index.js.map +1 -0
- package/dist/node_modules/sentence-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/snake-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/snake-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js +2 -0
- package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js.map +1 -0
- package/dist/node_modules/socket.io-client/build/esm/index.js +2 -0
- package/dist/node_modules/socket.io-client/build/esm/index.js.map +1 -0
- package/dist/node_modules/socket.io-client/build/esm/manager.js +2 -0
- package/dist/node_modules/socket.io-client/build/esm/manager.js.map +1 -0
- package/dist/node_modules/socket.io-client/build/esm/on.js +2 -0
- package/dist/node_modules/socket.io-client/build/esm/on.js.map +1 -0
- package/dist/node_modules/socket.io-client/build/esm/socket.js +2 -0
- package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -0
- package/dist/node_modules/socket.io-client/build/esm/url.js +2 -0
- package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -0
- package/dist/node_modules/socket.io-parser/build/esm/binary.js +2 -0
- package/dist/node_modules/socket.io-parser/build/esm/binary.js.map +1 -0
- package/dist/node_modules/socket.io-parser/build/esm/index.js +2 -0
- package/dist/node_modules/socket.io-parser/build/esm/index.js.map +1 -0
- package/dist/node_modules/socket.io-parser/build/esm/is-binary.js +2 -0
- package/dist/node_modules/socket.io-parser/build/esm/is-binary.js.map +1 -0
- package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js +2 -0
- package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js.map +1 -0
- package/dist/node_modules/trough/index.js +2 -0
- package/dist/node_modules/trough/index.js.map +1 -0
- package/dist/node_modules/trough/wrap.js +2 -0
- package/dist/node_modules/trough/wrap.js.map +1 -0
- package/dist/node_modules/tslib/tslib.es6.js +2 -0
- package/dist/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/node_modules/unified/index.js +2 -0
- package/dist/node_modules/unified/index.js.map +1 -0
- package/dist/node_modules/unist-util-is/convert.js +2 -0
- package/dist/node_modules/unist-util-is/convert.js.map +1 -0
- package/dist/node_modules/unist-util-stringify-position/index.js +2 -0
- package/dist/node_modules/unist-util-stringify-position/index.js.map +1 -0
- package/dist/node_modules/unist-util-visit/index.js +2 -0
- package/dist/node_modules/unist-util-visit/index.js.map +1 -0
- package/dist/node_modules/unist-util-visit/node_modules/unist-util-visit-parents/color.browser.js +2 -0
- package/dist/node_modules/unist-util-visit/node_modules/unist-util-visit-parents/color.browser.js.map +1 -0
- package/dist/node_modules/unist-util-visit/node_modules/unist-util-visit-parents/index.js +2 -0
- package/dist/node_modules/unist-util-visit/node_modules/unist-util-visit-parents/index.js.map +1 -0
- package/dist/node_modules/unist-util-visit-parents/index.js +2 -0
- package/dist/node_modules/unist-util-visit-parents/index.js.map +1 -0
- package/dist/node_modules/upper-case/dist.es2015/index.js +2 -0
- package/dist/node_modules/upper-case/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/upper-case-first/dist.es2015/index.js +2 -0
- package/dist/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
- package/dist/node_modules/uuid/dist/esm-browser/native.js +2 -0
- package/dist/node_modules/uuid/dist/esm-browser/native.js.map +1 -0
- package/dist/node_modules/uuid/dist/esm-browser/rng.js +2 -0
- package/dist/node_modules/uuid/dist/esm-browser/rng.js.map +1 -0
- package/dist/node_modules/uuid/dist/esm-browser/stringify.js +2 -0
- package/dist/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -0
- package/dist/node_modules/uuid/dist/esm-browser/v4.js +2 -0
- package/dist/node_modules/uuid/dist/esm-browser/v4.js.map +1 -0
- package/dist/node_modules/vfile/index.js +2 -0
- package/dist/node_modules/vfile/index.js.map +1 -0
- package/dist/node_modules/vfile/lib/core.js +2 -0
- package/dist/node_modules/vfile/lib/core.js.map +1 -0
- package/dist/node_modules/vfile/lib/index.js +2 -0
- package/dist/node_modules/vfile/lib/index.js.map +1 -0
- package/dist/node_modules/vfile/lib/minpath.browser.js +2 -0
- package/dist/node_modules/vfile/lib/minpath.browser.js.map +1 -0
- package/dist/node_modules/vfile/lib/minproc.browser.js +2 -0
- package/dist/node_modules/vfile/lib/minproc.browser.js.map +1 -0
- package/dist/node_modules/vfile-message/index.js +2 -0
- package/dist/node_modules/vfile-message/index.js.map +1 -0
- package/dist/node_modules/xtend/immutable.js +2 -0
- package/dist/node_modules/xtend/immutable.js.map +1 -0
- package/dist/package.json/package.json +75 -0
- package/dist/src/NotificationBar/index.js +2 -0
- package/dist/src/NotificationBar/index.js.map +1 -0
- package/dist/src/TwilioChat/Chat.js +2 -0
- package/dist/src/TwilioChat/Chat.js.map +1 -0
- package/dist/src/TwilioChat/index.js +2 -0
- package/dist/src/TwilioChat/index.js.map +1 -0
- package/dist/src/api/api.js +2 -0
- package/dist/src/api/api.js.map +1 -0
- package/dist/src/context/GlobalContext.js +2 -0
- package/dist/src/context/GlobalContext.js.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/utils/alert.js +2 -0
- package/dist/src/utils/alert.js.map +1 -0
- package/dist/src/utils/helperFn.js +2 -0
- package/dist/src/utils/helperFn.js.map +1 -0
- package/dist/utils/alert.d.ts +1 -0
- package/dist/utils/chats.d.ts +231 -0
- package/dist/utils/helperFn.d.ts +2 -0
- package/package.json +44 -7
- package/rollup.config.js +0 -42
- package/src/TwilioChat/index.tsx +0 -11
- package/src/index.ts +0 -2
- package/tsconfig.json +0 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/TwilioChat/index.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, FormEvent, useContext } from 'react';\nimport { io, Socket } from 'socket.io-client';\nimport FormData from 'form-data';\nimport styled from 'styled-components';\nimport GlobalContext from '../context/GlobalContext';\nimport linkifyHtml from 'linkify-html';\nimport Chat from './Chat';\nimport { Col, Row } from 'react-bootstrap';\nimport moment from 'moment';\nimport { toastrMsg } from '../utils/alert';\nimport { v4 as uuidv4 } from 'uuid';\nimport NoticationBar from '../NotificationBar';\nimport { isStagingOrDevelopment } from '../utils/helperFn';\nimport { useTime } from 'react-timer-hook';\nimport API, { setConfig } from '../api/api';\nimport axios from 'axios';\nimport { useDropzone } from 'react-dropzone';\n\nconst icoYouFibre = new URL(\"./assets/images/svg/favicon.svg\", import.meta.url);\nconst icoChat = new URL(\"./assets/images/svg/chat.svg\", import.meta.url);\nconst icoCloseChat = new URL(\"./assets/images/png/ico-close.png\", import.meta.url);\nconst loadingIcon = new URL(\"./assets/images/gif/loader-transparent.gif\", import.meta.url);\nconst icoUpload = new URL(\"./assets/images/svg/youfibre-upload.svg\", import.meta.url);\nconst icoClose = new URL(\"./assets/images/svg/close.svg\", import.meta.url);\nconst notificationSound = new URL(\"./assets/audio/notification.wav\", import.meta.url);\n\ninterface Message {\n createdAt: string;\n from?: string | null;\n files?: string | null;\n message: string | null;\n form: FormType | null;\n messageId: string;\n fromId: string;\n senderType: string;\n}\ninterface FormType {\n type: string;\n value: Array<{ title: string; action: string; placeholder?: string | null; type?: string; required?: boolean; options?:object }>;\n}\n\ntype UserType = 'NEW_CUSTOMER' | 'ACCOUNT_HOLDER' | 'NOT_ACCOUNT_HOLDER';\n\nconst Container = styled.div`\n width: 100%;\n max-width: 700px;\n height: 100%;\n position: relative;\n margin: 0px auto;\n display: flex;\n flex-direction: row;\n align-items: center;\n \n &.direction-column-reverse { flex-direction: column-reverse; }\n &.content-end { justify-content: end; }\n\n`;\n\nconst OverflowContainer = styled(Container)`\n overflow-y: auto;\n`\n\nconst Widget = styled.div`\n position: fixed;\n bottom: 40px;\n right: 40px;\n z-index: 100;\n display: flex;\n flex-direction: column;\n align-items: end;\n gap: 15px;\n`;\n\nconst Icon = styled.div`\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: #08DE9E;\n width: 50px;\n height: 50px;\n border-radius: 100px;\n cursor: pointer;\n -webkit-box-shadow: 2px 1px 8px 0px rgba(0, 0, 0, 0.27);\n -moz-box-shadow: 2px 1px 8px 0px rgba(0, 0, 0, 0.27);\n box-shadow: 2px 1px 8px 0px rgba(0, 0, 0, 0.27);\n -webkit-user-select: none;\n user-select: none; \n img {\n position: absolute;\n -moz-transition: all 0.3s ease;\n transition: all 0.3s ease;\n\t\t&.icon-hover {\n width: 15px;\n height: 15px;\n\t\t\ttransform: rotate(180deg) scale(.5);\n\t\t\topacity: 0;\n\t\t}\n\t\t&.icon-default {\n width: 20px;\n height: 20px;\n\t\t\ttransform: rotate(0deg) scale(1);\n\t\t\topacity: 1;\n\t\t}\n }\n &:hover {\n -webkit-box-shadow: 2px 1px 12px 0px rgba(0, 0, 0, 0.35);\n -moz-box-shadow: 2px 1px 12px 0px rgba(0, 0, 0, 0.35);\n box-shadow: 2px 1px 12px 0px rgba(0, 0, 0, 0.35);\n }\n &.open {\n\t\t.icon-hover {\n\t\t\ttransform: rotate(0deg) scale(1);\n\t\t\topacity: 1;\n\t\t}\n\t\t.icon-default {\n\t\t\ttransform: rotate(180deg) scale(.5);\n\t\t\topacity: 0;\n\t\t}\n }\n &.fullscreen {\n display: none;\n }\n\n .unread {\n background-color: red;\n padding: 3px;\n display: flex;\n width: 20px;\n height: 20px;\n aspect-ratio: 1 / 1;\n border-radius: 200px;\n color: #ffffff;\n position: absolute;\n top: -4px;\n right: -2px;\n font-size: 0.7rem !important;\n line-height: 0.5rem !important;\n flex-direction: row;\n align-content: center;\n justify-content: center;\n align-items: center;\n -webkit-box-shadow: 2px 1px 8px 0px rgba(0, 0, 0, 0.27);\n -moz-box-shadow: 2px 1px 8px 0px rgba(0, 0, 0, 0.27);\n box-shadow: 2px 1px 8px 0px rgba(0, 0, 0, 0.27);\n animation: pulseAnimation 1.5s infinite;\n @keyframes pulseAnimation {\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n }\n }\n`;\n\nconst ChatWrapper = styled.div`\n display: flex;\n flex-direction: column;\n background-color: #ffffff;\n width: 350px;\n height: 550px;\n border-radius: 5px;\n -webkit-box-shadow: 2px 1px 12px 0px rgba(0, 0, 0, 0.35);\n -moz-box-shadow: 2px 1px 12px 0px rgba(0, 0, 0, 0.35);\n box-shadow: 2px 1px 12px 0px rgba(0, 0, 0, 0.35);\n max-width: 0px;\n max-height: 0px;\n overflow: hidden;\n transition: max-height 0.5s ease-in-out;\n &.show {\n max-width: 350px;\n max-height: 540px;\n }\n .cover {\n background: rgba(255, 255, 255, 0.2);\n position: absolute;\n z-index: 92;\n padding: 1rem;\n width: 100%;\n height: calc(100% - 65px);\n border-radius: 5px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n -webkit-user-select: none;\n user-select: none;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n &.closed {\n background: rgba(255, 255, 255, 0.9);\n button { margin-top: 2rem; }\n }\n &.upload {\n background: rgba(9, 222, 158, 0.9);\n button { margin-top: 2rem; }\n }\n animation: showCover .4s cubic-bezier(0.41, 0.39, 0.53, 1.38) forwards;\n \n @keyframes showCover {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n }\n .files {\n margin: 0.5rem;\n border-radius: 5px;\n background-color: #c1f7e7;\n padding: 0rem;\n overlay: none;\n display: flex; \n flex-direction: column;\n justify-content: center;\n gap: 0rem;\n .file {\n display: flex;\n flex-direction: row;\n border-radius: 3px;\n justify-content: space-between;\n align-items: center;\n margin: 0.2rem;\n padding: 0.2rem 0.5rem;\n gap: 1rem;\n &:hover {\n background-color: #ffffff;\n }\n .fileName {\n font-size: 0.7rem !important;\n line-height: 0.8rem;\n word-break: keep-all;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .action {\n width: 0.8rem;\n height: 0.8rem;\n opacity: 0.7;\n cursor: pointer;\n &:hover {\n opacity: 1;\n }\n }\n\n }\n }\n &.fullscreen {\n max-width: 100% !important;\n max-height: 100% !important;\n position: fixed;\n left: 0px;\n top: 0px;\n width: 100%;\n height: 100%;\n border-radius: 0px;\n // @media (max-width: 768px) {\n // #listOfMessages {\n // max-height: calc(100vh - 210px);\n // }\n // .chat-content-container {\n // padding-bottom: 4rem;\n // }\n // }\n .cover {\n &.closed {\n height: 100%;\n }\n }\n }\n @media (max-width: 576px) {\n position: fixed;\n z-index: 100;\n bottom: 0px;\n right: 0px;\n width: 100%;\n height: 100%;\n border-radius: 0px;\n &.show {\n max-width: 100%;\n max-height: 100%;\n }\n .cover {\n &.closed, &.upload {\n height: 100%;\n }\n }\n }\n`;\n\nconst ChatHeader = styled.div`\n background-color: #08DE9E;\n width: 100%;\n padding: 15px;\n color: #ffffff;\n flex: 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 15px;\n -webkit-box-shadow: -2px 2px 5px 1px rgba(0,0,0,0.2);\n box-shadow: -2px 2px 5px 1px rgba(0,0,0,0.2);\n z-index: 91;\n img {\n width: 40px;\n height: 40px;\n -object-fit: fill;\n object-fit: fill;\n padding: 7px;\n border-radius: 200px;\n cursor: pointer;\n background-color: #FFFFFF;\n &.close {\n display: none;\n background-color: transparent;\n }\n }\n a {\n &:hover {\n text-decoration: none !important;\n cursor: pointer;\n }\n }\n span {\n padding: 0px;\n }\n @media (max-width: 576px) {\n img {\n &.close {\n display: block;\n }\n }\n }\n`;\n\nconst ChatContent = styled.div`\n width: 100%;\n padding: 0;\n color: #000000;\n flex: 1;\n display: flex;\n flex-direction: column-reverse;\n overflow-x: hidden;\n .chat-content-container {\n padding-bottom: 1.8rem;\n }\n button {\n display: block;\n background-color: #c1f7e7;\n flex: 0;\n padding: 5px;\n border-radius: 5px;\n color: #263238;\n font-weight: 100;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 100;\n min-width: 40%;\n border: 2px solid #08DE9E;\n cursor: pointer;\n &:hover {\n background-color: #08DE9E;\n }\n }\n @media (max-width: 768px) {\n overflow-y: hidden;\n .chat-content-container {\n overflow-y: auto;\n // padding-bottom: 0;\n }\n }\n`;\n\nconst ChatInput = styled.form`\n background-color: #f4f7f9;\n width: 100%;\n flex: 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n padding: 5px;\n .action {\n width: 1.3rem;\n height: 1.3rem;\n cursor: pointer;\n opacity: 0.7;\n -webkit-user-select: none;\n user-select: none;\n &:hover {\n opacity: 0.7;\n }\n }\n input {\n background-color: rgba(0,0,0,0);\n border: none;\n border-bottom: 1px solid rgba(0,0,0,0);\n outline: 0px;\n padding: 0px;\n margin-left: 15px;\n font-size: 0.9rem;\n font-weight: 100;\n flex: 1;\n &.invalid {\n border-bottom: 1px solid red;\n }\n }\n button {\n min-width: 90px;\n background-color: #09de9e;\n flex: 0;\n font-size: 1rem;\n &:hover {\n background-color: #08c98f;\n }\n &:disabled, &:disabled:hover {\n background-color: rgba(0,0,0,0.05);\n color: #aabbcc !important;\n }\n }\n @media (max-width: 576px) {\n padding: 15px;\n }\n // @media (max-width: 768px) {\n // &.form-fullscreen {\n // position: fixed;\n // bottom: 0;\n // }\n // } \n`;\n\nconst Agent = styled.div`\n width: 100%;\n display: flex;\n flex-direction: row-reverse;\n small {\n position: absolute;\n margin-top: -1.6rem;\n margin-right: 1rem;\n font-size: 0.7rem !important;\n font-weight: 100;\n line-height: 0.8rem;\n color: #015e9c;\n background-color: #ddf0fc;\n border: 1px solid #ffffff;\n border-radius: 100px;\n padding: 5px 15px;\n z-index: 50;\n }\n`;\n\ninterface Props {\n host: string;\n websocketUrl: string;\n postcodeSchemaId?: string;\n source?: string;\n fullscreen?: boolean;\n clientId:string;\n clientSecret:string;\n customToken?:string|undefined;\n}\n\nconst TwilioChat = ({ host, clientId, clientSecret, customToken, websocketUrl, postcodeSchemaId = \"6162c7da-a37d-4543-af2c-bdea7d49d6ca\", source = \"youfibre\", fullscreen = false}: Props) => {\n const gContext: any = useContext(GlobalContext);\n const outageFormMessage = useRef<string | null>(null);\n const [outage, setOutage] = useState<boolean>(false);\n const [outageMessage, setOutageMessage] = useState<string | null>(null);\n const [logged, setLogged] = useState<boolean>(false);\n const [token, setToken] = useState<string | null>(null);\n const [chatConversationId, setChatConversationId] = useState<string | null>(null);\n const [chatCaseId, setChatCaseId] = useState<string | null>(null);\n const [chatLoading, setChatLoading] = useState<boolean>(false);\n const [chatSending, setChatSending] = useState<boolean>(false);\n const [chatClosing, setChatClosing] = useState<boolean>(false);\n const [openChat, setOpenChat] = useState<boolean>(fullscreen);\n const [chatForm, setChatForm] = useState<{ [key: string]: any }>({});\n const [message, setMessage] = useState<string>('');\n const [chatUserId, setChatUserId] = useState<string | null>(null);\n const [chatUserType, setChatUserType] = useState<UserType | null>(null);\n const [chatUsername, setChatUsername] = useState<string | null>(null);\n const [uploadedFiles, setUploadedFiles] = useState<any>([]);\n const [uploadArea, setUploadArea] = useState<boolean>(false);\n const [resetFormValues, setResetFormValues] = useState<boolean>(false);\n const [chatSessionId, setChatSessionId] = useState<string | null>(null);\n const [confirmClosing, setConfirmClosing] = useState<boolean>(false);\n\n const [twilioChatUrlParams, setTwilioChatUrlParams] = useState<any>(null);\n\n const [chatUnreaded, setChatUnreaded] = useState<boolean>(false);\n\n const [chatActive, setChatActive] = useState<boolean>(true);\n const [appMessages, setAppMessages] = useState<any>(null);\n\n const [animateTabTitle, setAnimateTabTitle] = useState<boolean>(false);\n const [titleIndex, setTitleIndex] = useState(-1);\n \n const titleRef = useRef<string>(\"\");\n let timer = useRef<number>(0);\n const intervalRef = useRef<number | null>(null);\n\n let openChatRef = useRef<boolean>(openChat);\n let visibilityChange = useRef<boolean>(true);\n\n const fileCount = 5;\n const fileSize = 10; // MB\n const fileExtensions = ['jpg', 'jpeg', 'png', 'pdf', 'gif', 'txt', 'mp4', 'mp3'];\n\n const { seconds: londonSec } = useTime({ interval: 1 });\n \n let [agentTyping, setAgentTyping] = useState<boolean>(false);\n let agentIdRef = useRef<string|null>(null);\n\n const defaultMessages:Message[] = [\n {\n createdAt: moment(new Date()).format(),\n message: null,\n fromId: \"Client\",\n senderType: \"CUSTOMER\",\n form: {\n type: \"buttons\",\n value: [\n {\n title: \"I am the account holder\",\n action: \"old_customer\"\n },\n {\n title: \"I am not the account holder\",\n action: \"not_customer\"\n },\n {\n title: \"I am new here\",\n action: \"new_customer\"\n },\n ]\n },\n messageId: \"1\"\n },\n {\n senderType: \"AGENT\",\n createdAt: moment(new Date()).format(),\n from: \"YouFibre\",\n fromId: \"YouFibre\",\n message: \"Welcome to YouFibre!<br />We're going to ask you some questions to ensure we get you through to the right team, so please bear with us!<br />Are you the account holder?\",\n form: null,\n messageId: \"0\"\n }\n ];\n\n const categories = {\n SALES: \"Sales\",\n TECH_SUPPORT: \"Tech Support\",\n INSTALLS_AND_SERVICE_VISITS: \"Installs & Service Visits\",\n MANAGE_MY_ACCOUNT: \"Manage My Account\",\n BILLING: \"Billing\",\n CANCELLATION: \"Cancellation\",\n COMPLAINT: \"Complaint\",\n };\n\n const userTypeLabels = {\n NEW_CUSTOMER: \"New customer\",\n ACCOUNT_HOLDER: \"Account holder\",\n NOT_ACCOUNT_HOLDER: \"Not the account holder\"\n };\n\n const [messages, setMessages] = useState<Message[]>(defaultMessages);\n const [newMessages, setNewMessages] = useState<Message[]|null>(null);\n const messagesRef = useRef<Message[]>(messages);\n const chatBoxRef = useRef<HTMLDivElement | null>(null);\n const sc = useRef<Socket | null>(null);\n\n const scrollToBottom = () => {\n try {\n if (chatBoxRef.current) {\n chatBoxRef.current.scrollIntoView({ behavior: \"smooth\" });\n }\n } catch(e){ }\n };\n\n useEffect(() => {\n if (typeof document !== \"undefined\" && typeof window !== 'undefined'){\n if(animateTabTitle && titleIndex !== -1) {\n if(!localStorage.getItem(\"title\")) localStorage.setItem(\"title\", (typeof document !== \"undefined\" && document.getElementsByTagName('title')[0].textContent) || \"\");\n const updateTitle = () => {\n const title = titleRef.current;\n if (title) {\n const nextIndex = (titleIndex + 1) % title.length;\n document.title = title.slice(nextIndex) + \" \" + title.slice(0, nextIndex);\n setTitleIndex(nextIndex);\n }\n };\n intervalRef.current = window.setInterval(updateTitle, 200); // Change the title every 200ms\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current); // Cleanup on unmount\n }\n };\n } else {\n intervalRef.current = null;\n titleRef.current = \"\";\n }\n }\n }, [titleIndex]);\n\n useEffect(() => {\n setConfig(host, clientId, clientSecret, customToken);\n axios.get(`https://strapi.youfibre.com/api/information`)\n .then((response:any) =>{\n gContext.setAppMessages(response.data); \n })\n .catch((error:any) => {\n gContext.setAppMessages(null);\n });\n\n getUrlParams();\n \n let lastUrl = typeof window !== 'undefined' ? window.location.href : '';\n\n const observer = new MutationObserver(() => {\n if (typeof window !== 'undefined' && lastUrl !== window.location.href) {\n lastUrl = window.location.href;\n getUrlParams();\n }\n });\n\n typeof document !== 'undefined' && observer.observe(document.body, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }, []);\n\n useEffect(() => {\n // Get Settings from Strapi\n setAppMessages(gContext.appMessages);\n // Chech if current time isn't in time range\n setChatActive(!isTimeInRange());\n }, [gContext.appMessages]);\n\n useEffect(() => {\n // Live check if chat should be active\n setChatActive(!isTimeInRange());\n }, [londonSec]);\n\n useEffect(() => {\n // If we are on the second step - Login form\n !chatActive && !chatCaseId && resetChat();\n }, [chatActive]);\n\n const nowInLondon = new Date().toLocaleString(\"en-GB\", {\n timeZone: \"Europe/London\",\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false\n });\n\n const timeToSeconds = (timeStr) => {\n if(timeStr) {\n const [hours, minutes, seconds] = timeStr.split(':').map(Number);\n return hours * 3600 + minutes * 60 + seconds;\n }\n }\n\n const isTimeInRange = () => {\n if(gContext.appMessages?.chat_off_mode_toggle && nowInLondon && gContext.appMessages?.chat_off_mode_start && gContext.appMessages?.chat_off_mode_end) {\n const current = timeToSeconds(nowInLondon);\n const start = timeToSeconds(gContext.appMessages?.chat_off_mode_start);\n const end = timeToSeconds(gContext.appMessages?.chat_off_mode_end);\n if (start < end) {\n // Normal range (e.g., 08:00 to 20:00)\n return current >= start && current < end;\n } else {\n // Overnight range (e.g., 20:00 to 08:00)\n return current >= start || current < end;\n }\n } else {\n return false;\n }\n }\n\n const getUrlParams = () => {\n if (typeof window !== 'undefined') {\n setTwilioChatUrlParams(new URLSearchParams(window.location.search));\n }\n }; \n\n useEffect(() => {\n if(twilioChatUrlParams?.get(\"youFibreChat\") === ''){\n // Use params from URL, and init chat with messages from back-end (not from localstorage)\n const fetchData = async () => {\n await new Promise<void>((resolve) => {\n localStorage.setItem('chatUsername', twilioChatUrlParams.get(\"chatUsername\"));\n localStorage.setItem('chatUserId', twilioChatUrlParams.get(\"chatUserId\"));\n localStorage.setItem('chatSessionId', twilioChatUrlParams.get(\"chatSessionId\"));\n localStorage.setItem('conversationId', twilioChatUrlParams.get(\"conversationId\"));\n localStorage.setItem('caseId', twilioChatUrlParams.get(\"caseId\"));\n localStorage.setItem('participantId', twilioChatUrlParams.get(\"participantId\"));\n setChatUserId(twilioChatUrlParams.get(\"participantId\"));\n gContext.goSetRegistrationData({\n ...gContext.goGetRegistrationData(),\n twilioChat: {\n ...gContext.goGetRegistrationData()?.twilioChat || null,\n chatUsername: twilioChatUrlParams.get(\"chatUsername\") || null,\n chatSessionId: twilioChatUrlParams.get(\"chatSessionId\") || null,\n chatUserId: twilioChatUrlParams.get(\"chatUserId\") || null,\n conversationId: twilioChatUrlParams.get(\"conversationId\") || null,\n caseId: twilioChatUrlParams.get(\"caseId\") || null,\n participantId: twilioChatUrlParams.get(\"participantId\") || null,\n }\n });\n resolve();\n });\n init();\n };\n fetchData();\n } else if (twilioChatUrlParams && Object.keys(twilioChatUrlParams).length === 0){\n // Call existing chat\n init();\n } else {\n }\n },[twilioChatUrlParams]);\n \n const init = () => { \n const getData = async () => {\n if(localStorage.getItem('conversationId')){ \n try {\n const response = await API.get(`ChatModule/v1.0/gateway/conversation/${localStorage.getItem('conversationId')}`);\n // Check if the response is okay\n if (!response) {\n console.log(\"Can't check conversation!\");\n return null;\n }\n if(response?.data?.properties?.Status === \"CLOSED\") resetChat();\n else {\n gContext.goSetRegistrationData({\n ...gContext.goGetRegistrationData(),\n twilioChat: {\n ...gContext.goGetRegistrationData()?.twilioChat || null,\n chatUsername: localStorage.getItem('chatUsername') || null,\n chatSessionId: localStorage.getItem('chatSessionId') || null,\n chatUserId: localStorage.getItem('participantId') || null,\n conversationId: localStorage.getItem('conversationId') || null,\n caseId: localStorage.getItem('caseId') || null,\n participantId: localStorage.getItem('participantId') || null,\n }\n });\n }\n setChatLoading(false);\n } catch (error) { console.log('Error fetching conversation status: ', error); }\n }\n };\n getData();\n\n localStorage.removeItem(\"title\");\n setChatConversationId(localStorage.getItem('conversationId') || null);\n setChatCaseId(localStorage.getItem('caseId') || null);\n setChatUserId(localStorage.getItem('participantId') || null);\n agentIdRef.current = localStorage.getItem('agentId') || null;\n setChatSessionId(localStorage.getItem('chatSessionId') || null);\n\n localStorage.getItem('conversationId') && localStorage.getItem('participantId') && setLogged(true);\n localStorage.getItem('chatUsername') && setChatUsername(localStorage.getItem('chatUsername'));\n localStorage.getItem('chatUserType') && setChatUserType(localStorage.getItem('chatUserType') as UserType || 'NEW_CUSTOMER');\n\n setChatForm({\n full_name: localStorage.getItem('chatUsername'),\n email: localStorage.getItem('chatEmail'),\n category: localStorage.getItem('chatCategory'),\n address: localStorage.getItem('chatAddress'),\n last_bill: localStorage.getItem('chatLastBill'),\n });\n localStorage.getItem('chatMessages') ? \n setMessages(JSON.parse(localStorage.getItem('chatMessages') || '')) : \n localStorage.setItem('chatMessages', JSON.stringify(messages));\n\n localStorage.getItem('conversationId') && getAllMessages(localStorage.getItem('conversationId'), \"onLoad\");\n\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n // console.log('Tab is active');\n visibilityChange.current = true;\n if(typeof document !== \"undefined\" && openChatRef.current && localStorage.getItem(\"title\")){\n setAnimateTabTitle(false);\n setTitleIndex(-1);\n setChatUnreaded(false);\n document.title = localStorage.getItem(\"title\") || \"\";\n document.getElementById('inputMessage')?.focus();\n setTimeout(() => localStorage.removeItem(\"title\"), 1000);\n }\n localStorage.getItem('conversationId') && getAllMessages(localStorage.getItem('conversationId'), \"visibilitychange\");\n } else {\n // console.log('Tab is in the background');\n visibilityChange.current = false;\n }\n });\n };\n \n const getAllMessages = async (convID:string|null, location:string) => {\n try{\n if(convID){\n const response:any = await API.get(`NotificationModule/v2.0/records/Conversation/${convID}/links?targetEntities=[\"Message\"]`);\n if(response){ \n console.log(`getAllMessages: ${location}`, response);\n \n let tmpMessages:Message[] = await Promise.all(\n response?.Message?.dbRecords.map(async item => ({\n createdAt: item?.createdAt,\n from: item?.properties?.From,\n files: await getFiles(item?.properties?.Files), \n message: item?.properties?.Body,\n form: null,\n messageId: item?.id,\n fromId: item?.createdBy?.id,\n senderType: item.type === \"EVENT\" ? \"EVENT\" : item.properties.SenderType\n }))\n ); \n if(!openChatRef.current && Object.keys(tmpMessages).length > 0){\n setChatUnreaded(true); \n }\n // Sort messages by createdAt (string)\n tmpMessages = tmpMessages.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n setMessages(tmpMessages); \n localStorage.setItem('allMessages', JSON.stringify(tmpMessages)); \n }\n } else \n setMessages(defaultMessages); \n } catch (error) {\n console.log('Error fetching messages:', error);\n }\n };\n\n useEffect(() => {\n if (typeof document !== \"undefined\") {\n if (fullscreen) {\n document.body.style.overflow = 'hidden';\n document.documentElement.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n document.documentElement.style.overflow = '';\n }\n }\n }, [fullscreen])\n\n const connectToWebsocket = (sessionId:string|null = null) => {\n return io(`${websocketUrl}/ChatWebsocketModule/TwilioChatWebsocket/v1.0`, \n { \n path: '/ws',\n query: {\n clientId: sessionId \n },\n reconnection: true,\n reconnectionAttempts: Infinity, // Retry indefinitely\n reconnectionDelay: 1000, // Start with a 1-second delay\n reconnectionDelayMax: 5000, // Cap the delay at 5 seconds\n timeout: 10000, // Timeout after 10 seconds\n }); \n };\n\n useEffect(() => { \n if(chatUserId){\n const tmpUUID = chatSessionId || uuidv4();\n setChatSessionId(tmpUUID);\n localStorage.setItem('chatSessionId', tmpUUID);\n \n if(!sc.current) sc.current = connectToWebsocket(tmpUUID);\n\n sc.current?.on('connect', () => {\n console.log('Connected to WebSocket server');\n });\n\n sc.current?.on(\"connect_error\", (err) => {\n console.log(`Connect error due to ${err.message}`);\n sc.current = null;\n }); \n\n sc.current?.on(\"disconnect\", (reason) => {\n console.log(`Disconnected: ${reason}`);\n sc.current = null;\n });\n\n }\n }, [chatUserId]);\n\n useEffect(() => { \n const fetchData = async () => {\n // // Don't delete this code\n // sc.current && sc.current?.onAny((eventName, ...args) => {\n // console.log(\"All events:\", eventName, args);\n // });\n\n if(sc.current && chatCaseId){\n\n sc.current.emit(\"joinRoom\", chatCaseId);\n\n !sc.current.listeners(`case-event-${chatCaseId}`).length && sc.current?.on(`case-event-${chatCaseId}`, (data) => { \n // console.log(`case-event-${chatCaseId}`, data);\n if(data.caseId === localStorage.getItem('caseId')){ \n switch(data.type){\n case \"CASE_UPDATED\": \n agentIdRef.current = data.data.properties.OwnerId; \n localStorage.setItem('agentId', agentIdRef.current || \"\"); break;\n case \"CONVERSATION_CLOSED\": setChatClosing(true); break;\n case \"MESSAGE_CREATED\": receiveMessage(data.data); break;\n default: break;\n }\n }\n });\n \n !sc.current.listeners(`web-chat-input-${chatCaseId}`).length && sc.current?.on(`web-chat-input-${chatCaseId}`, async (data) => {\n // console.log(`web-chat-input-${chatCaseId}`, data);\n if(data.caseId === chatCaseId && data.sender === \"AGENT\"){\n setAgentTyping(true);\n }\n });\n }\n }; \n fetchData();\n }, [chatCaseId]);\n\n\n let typingTimeout:any;\n\n useEffect(() => { \n const fetchData = async () => {\n try {\n typingTimeout = agentTyping ? setTimeout(() => {\n setAgentTyping(false);\n clearTimeout(typingTimeout);\n }, 1500) : false; \n } catch (error) {\n console.log(\"Error fetching data:\", error);\n }\n }; \n fetchData();\n }, [agentTyping]);\n\n useEffect(() => {\n messagesRef.current = messages; \n }, [messages]);\n\n useEffect(() => { \n const fetchData = async () => {\n try {\n if(messages.length && chatCaseId){\n sc.current && sc.current?.emit(`web-chat-input`, {\n caseId: chatCaseId,\n conversationId: chatConversationId,\n message: message,\n sender: 'CUSTOMER'\n });\n } \n } catch (error) {\n console.log(\"Error fetching data:\", error);\n }\n }; \n fetchData();\n }, [message]);\n\n const getFiles = async (files: String[] | null = null) => {\n try{\n let tmpFiles:any = [];\n if(files){\n const response:any = await API.get(`SchemaModule/v1.0/db/File/many?ids=${files}`);\n // Check if the response is okay\n if (!response) {\n console.log(\"Can't close conversation!\");\n } else {\n console.log('tmpFiles response:', response);\n \n if(Object.keys(response).length){\n response.map((item) => {\n tmpFiles = [...tmpFiles, {\n id: item?.id || \"\",\n type: item?.properties?.Mimetype || \"\",\n url: item?.properties?.Url || \"\"\n }];\n });\n }\n return (Object.keys(tmpFiles).length !== 0) ? tmpFiles : [];\n }\n } else {\n return [];\n }\n } catch (error) {\n console.log('Error fetching files:', error);\n return [];\n }\n };\n \n const receiveMessage = async (data:any) => { \n if(data && !messagesRef.current.some(obj => obj.messageId === data.id)){\n try{\n data?.Conversation?.dbRecords[0]?.properties?.Status === \"CLOSED\" && setChatClosing(true);\n let tmpFiles:any = [];\n if(data.properties.Files){\n tmpFiles = await getFiles(data.properties.Files);\n if(Object.keys(tmpFiles).length === 0) tmpFiles = null;\n updateMessages(data, tmpFiles);\n } else {\n updateMessages(data, tmpFiles);\n }\n } catch (error) {\n console.log('Error fetching message:', error);\n }\n }\n };\n\n const updateMessages = (data: any, files:any) => {\n let tmpMessage:Message = {\n senderType: data.type !== 'EVENT' ? data.properties.SenderType : data.type,\n createdAt: moment(new Date()).format(),\n from: data.type !== 'EVENT' ? data.properties.From : data.type,\n message: data.type !== 'EVENT' ? data.properties.Body : data.title,\n form: null,\n files: files,\n messageId: data.id,\n fromId: data.type !== 'EVENT' ? data.createdBy.id : \"YouFibre\"\n };\n if(!openChatRef.current || !visibilityChange.current){\n setChatUnreaded(true); \n }\n setNewMessages([...(newMessages || []), tmpMessage]);\n \n setTimeout(() => {\n setNewMessages(null);\n setMessages([tmpMessage, ...messagesRef.current]);\n localStorage.setItem('chatMessages', JSON.stringify([tmpMessage, ...messagesRef.current]));\n setChatLoading(false);\n scrollToBottom();\n }, 400);\n };\n\n useEffect(() => {\n if(typeof document !== 'undefined'){\n if(!localStorage.getItem(\"title\")) localStorage.setItem(\"title\", (typeof document !== \"undefined\" && document.getElementsByTagName('title')[0].textContent) || \"\");\n if(chatUnreaded) {\n let sound = new Audio(notificationSound.toString());\n sound.setAttribute('crossorigin', 'anonymous'); \n sound.play().catch((error) => {\n console.log(\"User interaction required before playing sound\");\n });\n document.title = \"New message | YouFibre\";\n }\n else {\n document.title = localStorage.getItem(\"title\") || '';\n scrollToBottom();\n }\n } \n }, [chatUnreaded]);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n if(typeof window !== 'undefined' && typeof document !== \"undefined\"){\n if(openChat){\n if(window.innerWidth < 577) document.body.style.overflow = \"hidden\";\n intervalRef.current && clearInterval(intervalRef.current);\n if(localStorage.getItem(\"title\")) document.title = localStorage.getItem(\"title\") || \"\";\n setAnimateTabTitle(false);\n setTitleIndex(-1);\n setChatUnreaded(false);\n document.getElementById('inputMessage')?.focus();\n setTimeout(() => localStorage.removeItem(\"title\"), 1000);\n } else {\n document.body.style.overflow = \"\";\n setConfirmClosing(false);\n setChatClosing(false);\n }\n }\n scrollToBottom();\n openChatRef.current = openChat;\n } catch (error) {\n console.log(\"Error fetching data:\", error);\n }\n }; \n fetchData();\n }, [openChat]);\n\n const validateInput = (data) => {\n // // Don't delete this code\n // if(data.length === 0) return true;\n // const regex = /^[a-zA-Z0-9\\s\\-,.!?()/@#&£€$=+*\"']+$/;\n // return regex.test(data);\n return true;\n };\n\n const resetChat = () => {\n if(sc.current && chatCaseId){\n sc.current.emit(\"leaveRoom\", chatCaseId);\n sc.current.removeAllListeners();\n }\n setChatConversationId(null);\n setChatCaseId(null);\n setUploadedFiles([]);\n setResetFormValues(!resetFormValues);\n setOutage(false);\n setOutageMessage(null);\n outageFormMessage.current = null;\n localStorage.removeItem('chatEmail');\n localStorage.removeItem('conversationId');\n localStorage.removeItem('caseId');\n localStorage.removeItem('participantId');\n localStorage.removeItem('chatUsername');\n localStorage.removeItem('twilio_token');\n localStorage.removeItem('chatMessages');\n localStorage.removeItem('chatUserType');\n localStorage.removeItem('chatCategory'); \n localStorage.removeItem('chatAddress'); \n localStorage.removeItem('chatLastBill');\n localStorage.removeItem('agentId');\n localStorage.removeItem('chatSessionId');\n setChatUsername(null);\n setChatUserType(null);\n setChatUserId(null);\n setChatForm({});\n setChatLoading(false);\n setLogged(true);\n setToken(null);\n agentIdRef.current = null;\n setMessage('');\n localStorage.setItem('chatMessages', JSON.stringify(defaultMessages));\n setNewMessages(null);\n setMessages(defaultMessages);\n scrollToBottom();\n fullscreen && setOpenChat(true);\n\n gContext.goSetRegistrationData({\n ...gContext.goGetRegistrationData(),\n twilioChat: null\n });\n };\n\n const getToken = async (tmpEmail) => {\n try {\n const data = await API.get(`ChatModule/v1.0/gateway/token?identity=${tmpEmail}&source=twilio`);\n return data || null;\n } catch (error) { console.log('Error fetching token:', error); }\n };\n\n const createConversation = async (\n tmpChatUsername:string|null,\n tmpChatEmail:string|null,\n tmpChatAddress:string|null,\n tmpChatLastBill:string|null,\n tmpChatUserType:string|null,\n tmpChatCategory:string|null\n ) => { \n try {\n const response = await API.post(`ChatModule/v1.0/gateway/conversation/create`, \n {\n source: \"twilio\",\n channel: \"WEB_CHAT\",\n identifier: tmpChatEmail || null,\n DpaCustomerName: tmpChatUsername || null,\n DpaCustomerEmail: tmpChatEmail || null,\n DpaCustomerAddress: tmpChatAddress || null,\n DpaCustomerLastBill: tmpChatLastBill || null,\n DpaCustomerType: tmpChatUserType || null,\n DpaCustomerCategory: tmpChatCategory || null\n });\n // Check if the response is okay\n if (!response) {\n console.log(\"Can't create conversation!\");\n setChatActive(false);\n return null;\n }\n // Check if the statusCode matches\n return response ? response : null;\n } catch (error:any) {\n setChatActive(false);\n toastrMsg(error.message.replaceAll('OdinApiError:',''), \"error\");\n }\n };\n\n const closeConversation = async (closedBy:string = \"CUSTOMER\") => {\n try {\n const response = await API.post(\n `ChatModule/v1.0/gateway/conversation/${localStorage.getItem('conversationId')}/close`, \n { closedBy: closedBy }\n );\n // Check if the response is okay\n if (!response) {\n console.log(\"Can't close conversation!\");\n return null;\n }\n // Check if the statusCode matches\n resetChat();\n } catch (error) { console.log('Error closing conversation:', error); }\n };\n\n const sendMessage = async (btnMessage:string|null = null) => {\n if(message.length > 0 || btnMessage || Object.keys(uploadedFiles).length > 0) {\n typeof document !== \"undefined\" && document.getElementById('inputMessage')?.focus();\n let formData = new FormData();\n formData.append('conversationSid', localStorage.getItem('conversationId'));\n formData.append('message', message || btnMessage);\n formData.append('from', localStorage.getItem('chatUsername'));\n formData.append('sender', 'CUSTOMER');\n setMessage('');\n setChatSending(true);\n try{\n Object.keys(uploadedFiles).length > 0 && uploadedFiles.map(async (item: File) => {\n formData.append('files', item);\n }); \n } catch (e){\n\n }\n // Send a Message to the Conversation\n try {\n API.post(`ChatModule/v1.0/gateway/conversation/${localStorage.getItem('conversationId')}/message/send`, formData, {\n headers: {'Content-Type': 'multipart/form-data'}\n })\n .then(data => { \n if(data){\n setUploadedFiles([]);\n setLogged(true);\n setChatSending(false);\n setChatLoading(false);\n } \n else { \n setChatActive(!isTimeInRange());\n // if(data?.data?.statusCode === 500){\n resetChat();\n console.log(\"Conversation is closed\");\n }\n })\n .catch(error => {\n setChatActive(!isTimeInRange());\n console.log('Send a Message:', error);\n });\n } catch (error) {\n console.log(\"Error loading SVG:\", error);\n }\n }\n };\n\n const submitMessage = (e) => {\n e.preventDefault();\n sendMessage();\n };\n\n const submitForm = async () => { \n try {\n setChatLoading(true);\n // Indicating an outage\n const outageStatus = await API.get(`SupportModule/v1.0/Case/outage/verify?contactEmailAddress=${chatForm.email}`)\n .then(data => {\n setChatLoading(false);\n if(data?.data?.statusCode === 200 && data?.data?.data){ \n setOutage(true);\n setOutageMessage(data?.data?.message);\n return true;\n } else {\n startConversation();\n return false;\n }\n })\n .catch(error => {\n console.log('Outage Message:', error);\n });\n } catch (error) { console.log('Error fetching outage: ', error); }\n };\n\n const startConversation = async () => {\n // setMessages(messagesRef.current.slice(1, 0));\n setChatLoading(true);\n localStorage.setItem('chatUsername', chatForm.full_name);\n setChatUsername(chatForm.full_name);\n localStorage.setItem('chatEmail', chatForm.email);\n localStorage.setItem('chatCategory', chatForm.category); \n localStorage.setItem('chatAddress', chatForm.address); \n localStorage.setItem('chatLastBill', chatForm.last_bill);\n // Create Token\n const tmpToken = await getToken(chatForm.email);\n if(tmpToken){\n localStorage.setItem('twilio_token', tmpToken);\n setToken(tmpToken);\n // Create Conversation \n const tmpConversation = await createConversation(\n chatForm.full_name,\n chatForm.email,\n chatForm.address,\n chatForm.last_bill,\n chatUserType,\n chatForm.category \n );\n if(tmpConversation){\n setLogged(true);\n setChatUserId(tmpConversation?.participantId);\n localStorage.setItem('conversationId', tmpConversation?.conversationId);\n localStorage.setItem('caseId', tmpConversation?.caseId);\n localStorage.setItem('participantId', tmpConversation?.participantId);\n setChatCaseId(tmpConversation?.caseId);\n setChatConversationId(tmpConversation?.conversationId);\n gContext.goSetRegistrationData({\n ...gContext.goGetRegistrationData(),\n twilioChat: {\n ...gContext.goGetRegistrationData()?.twilioChat,\n chatUsername: chatForm.full_name,\n chatSessionId: chatSessionId,\n chatUserId: tmpConversation?.participantId,\n conversationId: tmpConversation?.conversationId,\n caseId: tmpConversation?.caseId,\n participantId: tmpConversation?.participantId,\n }\n });\n new Promise<void>((resolve) => {\n setMessages((prev) => {\n resolve();\n return [];\n });\n sendMessage(outageFormMessage.current); \n }).then(() => { \n updateMessages({type: 'EVENT', title: 'Waiting for the agent to join the chat.'}, null);\n });\n } else {\n setChatActive(!isTimeInRange());\n }\n } else {\n setChatLoading(false);\n }\n };\n \n const newAccountHolder = () => {\n setChatUserType('NEW_CUSTOMER');\n localStorage.setItem('chatUserType', 'NEW_CUSTOMER');\n let tmpMessages:Message[] = [\n {\n senderType: \"CUSTOMER\",\n createdAt: moment(new Date()).format(),\n from: \"YouFibre\",\n fromId: \"YouFibre\",\n message: null,\n form: {\n type: \"form\",\n value: [\n {\n title: \"Name\",\n action: \"full_name\",\n placeholder: null,\n type: 'text',\n required: true\n },\n {\n title: \"Email\",\n action: \"email\",\n placeholder: null,\n type: 'email',\n required: true\n },\n {\n title: \"Enter your Postcode\",\n action: \"address\",\n placeholder: \"Example: SW1 4EN\",\n type: 'zip',\n required: true\n },\n {\n title: \"What do you need help with today?\",\n action: \"category\",\n placeholder: null,\n type: 'select',\n required: true,\n options: {\n SALES: \"Sales\",\n TECH_SUPPORT: \"Tech Support\",\n COMPLAINT: \"Complaint\",\n },\n },\n {\n title: \"Submit\",\n action: \"submit_form\",\n type: 'button'\n }\n ]\n },\n messageId: \"3\"\n },\n {\n senderType: \"AGENT\",\n createdAt: moment(new Date()).format(),\n from: \"YouFibre\",\n fromId: \"YouFibre\",\n message: \"We're so happy to hear from you! So that we can provide the best possible support, please provide us with the following information.\",\n form: null,\n messageId: \"2\"\n },\n {\n senderType: \"CUSTOMER\",\n createdAt: moment(new Date()).format(),\n from: \"Client\",\n fromId: \"Client\",\n message: 'I am new here',\n form: null,\n messageId: \"1\"\n }, ...messages.slice(1)];\n setNewMessages([...(newMessages || []), tmpMessages[0]]);\n setTimeout(() => { setNewMessages(null); setMessages(tmpMessages);}, 400);\n // setMessages(tmpMessages);\n localStorage.setItem('chatMessages', JSON.stringify(tmpMessages)); \n };\n\n const notAccountHolder = () => {\n setChatUserType('NOT_ACCOUNT_HOLDER');\n localStorage.setItem('chatUserType', 'NOT_ACCOUNT_HOLDER');\n let tmpMessages:Message[] = [\n {\n senderType: \"CUSTOMER\",\n createdAt: moment(new Date()).format(),\n from: \"YouFibre\",\n fromId: \"YouFibre\",\n message: null,\n form: {\n type: \"form\",\n value: [\n {\n title: \"Name\",\n action: \"full_name\",\n placeholder: null,\n type: 'text',\n required: true\n },\n {\n title: \"Email\",\n action: \"email\",\n placeholder: null,\n type: 'email',\n required: true\n },\n {\n title: \"Enter your Postcode\",\n action: \"address\",\n placeholder: \"Example: SW1 4EN\",\n type: 'zip',\n required: true\n },\n {\n title: \"What do you need help with today?\",\n action: \"category\",\n placeholder: null,\n type: 'select',\n required: true,\n options: {\n SALES: \"Sales\",\n TECH_SUPPORT: \"Tech Support\",\n COMPLAINT: \"Complaint\",\n },\n },\n {\n title: \"Submit\",\n action: \"submit_form\",\n type: 'button'\n }\n ]\n },\n messageId: \"3\"\n },\n {\n senderType: \"AGENT\",\n createdAt: moment(new Date()).format(),\n from: \"YouFibre\",\n fromId: \"YouFibre\",\n message: \"We're so happy to hear from you! So that we can provide the best possible support, please provide us with the following information.\",\n form: null,\n messageId: \"2\"\n },\n {\n senderType: \"CUSTOMER\",\n createdAt: moment(new Date()).format(),\n from: \"Client\",\n fromId: \"Client\",\n message: 'I am not the account holder',\n form: null,\n messageId: \"1\"\n }, ...messages.slice(1)];\n setNewMessages([...(newMessages || []), tmpMessages[0]]);\n setTimeout(() => { setNewMessages(null); setMessages(tmpMessages);}, 400);\n // setMessages(tmpMessages);\n localStorage.setItem('chatMessages', JSON.stringify(tmpMessages)); \n };\n\n const yesAccountHolder = () => {\n setChatUserType('ACCOUNT_HOLDER');\n localStorage.setItem('chatUserType', 'ACCOUNT_HOLDER');\n let tmpMessages:Message[] = [\n {\n senderType: \"CUSTOMER\",\n createdAt: moment(new Date()).format(),\n from: \"YouFibre\",\n fromId: \"YouFibre\",\n message: null,\n form: {\n type: \"form\",\n value: [\n {\n title: \"Name\",\n action: \"full_name\",\n placeholder: null,\n type: 'text',\n required: true\n },\n {\n title: \"Email\",\n action: \"email\",\n placeholder: null,\n type: 'email',\n required: true\n },\n {\n title: \"Enter your Postcode\",\n action: \"address\",\n placeholder: \"Example: SW1 4EN\",\n type: 'zip',\n required: true\n },\n {\n title: \"What was the total value of your last bill?\",\n action: \"last_bill\",\n placeholder: 'Total amount of your last bill',\n type: 'number',\n required: true\n },\n {\n title: \"What do you need help with today?\",\n action: \"category\",\n placeholder: null,\n type: 'select',\n required: true,\n options: {\n SALES: \"Sales\",\n TECH_SUPPORT: \"Tech Support\",\n INSTALLS_AND_SERVICE_VISITS: \"Installs & Service Visits\",\n MANAGE_MY_ACCOUNT: \"Manage My Account\",\n BILLING: \"Billing\",\n CANCELLATION: \"Cancellation\",\n COMPLAINT: \"Complaint\",\n },\n },\n {\n title: \"Submit\",\n action: \"submit_form\",\n type: 'button'\n }\n ]\n },\n messageId: \"3\"\n },\n {\n senderType: \"AGENT\",\n createdAt: moment(new Date()).format(),\n from: \"YouFibre\",\n fromId: \"YouFibre\",\n message: \"We're so happy to hear from you! So that we can provide the best possible support, please provide us with the following information.\",\n form: null,\n messageId: \"2\"\n },\n {\n senderType: \"CUSTOMER\",\n createdAt: moment(new Date()).format(),\n from: \"Client\",\n fromId: \"Client\",\n message: 'I am the account holder',\n form: null,\n messageId: \"1\"\n }, ...messages.slice(1)];\n setNewMessages([...(newMessages || []), tmpMessages[0]]);\n setTimeout(() => { setNewMessages(null); setMessages(tmpMessages);}, 400);\n // setMessages(tmpMessages);\n localStorage.setItem('chatMessages', JSON.stringify(tmpMessages)); \n };\n\n const chatToggle = () => {\n if(chatClosing){\n resetChat();\n setChatClosing(false);\n }\n setOutage(!outage);\n setOpenChat(!openChat);\n };\n \n const buttonAction = (action) => {\n if(chatActive || chatCaseId || isStagingOrDevelopment()){\n switch(action){\n case 'new_customer': newAccountHolder(); break;\n case 'not_customer': notAccountHolder(); break;\n case 'old_customer': yesAccountHolder(); break;\n case 'submit_form': \n if(chatForm.full_name && \n chatForm.address && chatForm.address !== '/' && chatForm.email && \n (((localStorage.getItem(\"chatUserType\") === \"ACCOUNT_HOLDER\") && \n typeof chatForm.last_bill !== \"undefined\") || (localStorage.getItem(\"chatUserType\") !== \"ACCOUNT_HOLDER\")) && chatForm.category && chatUserType){\n outageFormMessage.current = `<b>${userTypeLabels[chatUserType]}</b><br /><b>Full name</b>: ${chatForm.full_name}<br /><b>Email</b>: ${chatForm.email}<br /><b>Address</b>: ${chatForm.address}<br />${(typeof chatForm.last_bill !== 'undefined')?'<b>What was the total value of your last bill</b>: '+chatForm.last_bill+'<br />':''}<b>What do you need help with today</b>: ${categories[chatForm.category]}`;\n submitForm();\n }\n break;\n default: break;\n }\n } else {\n resetChat();\n }\n\n };\n\n const {getRootProps, getInputProps, open} = useDropzone({\n noClick: true,\n noKeyboard: true,\n onDrop: (acceptedFiles:any) => {\n if(chatCaseId){\n acceptedFiles = acceptedFiles.filter(item => item.size < (fileSize*1048576) ? item : toastrMsg(`Maximum file size is ${fileSize}MB`, \"error\"));\n acceptedFiles = acceptedFiles.filter(item => fileExtensions.some(ext => item.name.endsWith(ext)) ? item : toastrMsg(`Unsupported File extension`, \"error\"));\n acceptedFiles = acceptedFiles.filter(item => Object.keys(uploadedFiles.filter(ext => ext.name === item.name)).length === 0); \n Object.keys(uploadedFiles).length + Object.keys(acceptedFiles).length < fileCount+1 ? \n setUploadedFiles([...uploadedFiles, ...acceptedFiles]) : \n toastrMsg(`Maximum ${fileCount} files`, \"warning\");\n setUploadArea(false);\n }\n },\n });\n\n const deleteFile = (name:string) => {\n const tmpFiles = uploadedFiles.filter((itm:any) => itm.name !== name);\n setUploadedFiles(tmpFiles);\n };\n\n return (\n <>\n { (typeof process.env.GATSBY_TWILIO_CHAT_VERSION === 'undefined' || process.env.GATSBY_TWILIO_CHAT_VERSION === '1') && \n <Widget>\n <ChatWrapper\n className={`${openChat ? 'show' : ''} ${fullscreen?'fullscreen':''}`}\n {...getRootProps()}\n onDragOver={() => chatCaseId && setUploadArea(true)}\n onMouseLeave={() => setUploadArea(false)}\n >\n <ChatHeader>\n <Container className='justify-between'>\n <Row className='p-0 m-0 align-items-center'>\n <div>\n <img src={icoYouFibre.toString()}/>\n <span> YouFibre</span>\n </div>\n </Row> \n <Row className='p-0 m-0 align-items-center'>\n {!chatConversationId && Object.keys(messages).length > 2 && <button onClick={() => resetChat()} className='small'>Back</button>}\n {chatConversationId && <button onClick={() => setConfirmClosing(true)} className='small'>End conversation</button>}\n {!fullscreen && <img src={icoCloseChat.toString()} className='close' onClick={() => setOpenChat(!openChat)} />}\n </Row> \n </Container>\n </ChatHeader>\n <NoticationBar type=\"chat\" />\n <ChatContent>\n <Container className={`direction-column-reverse content-end chat-content-container`}>\n <div ref={chatBoxRef} />\n <Chat\n messages={messages}\n chatUsername={chatUsername}\n chatUserId={chatUserId}\n chatConversationId={chatConversationId}\n resetFormValues={resetFormValues}\n setChatForm={setChatForm}\n buttonAction={buttonAction}\n newMessages={newMessages}\n chatActive={chatActive}\n API={API}\n />\n </Container>\n </ChatContent> \n { agentTyping && openChat && <Agent><small>Agent is typing...</small></Agent> }\n { logged && !chatClosing && !messages[0]?.form && <ChatInput className={`${fullscreen?'form-fullscreen':''}`}><OverflowContainer>\n <input id=\"inputMessage\" className={!validateInput(message) ? 'invalid' : ''} autoComplete='off' maxLength={500} onChange={(e) => setMessage(e.target.value)} value={message} type=\"text\" placeholder=\"Write a reply...\" />\n <input {...getInputProps()} />\n <img className='action' alt='Add attachment' src={icoUpload.toString()} onClick={() => open()} />\n <button type='submit' onClick={(e) => submitMessage(e)} disabled={chatSending || !validateInput(message)}>{ chatSending ? <img src={loadingIcon.toString()} width={16} height={16} /> : 'Send'}</button>\n </OverflowContainer></ChatInput> }\n {Object.keys(uploadedFiles).length > 0 && <div className='files'>\n {uploadedFiles.map((file:any) => (\n <div className='file' key={file.name}>\n <div className='fileName'>{file.name}</div>\n <img className='action' src={icoClose.toString()} onClick={() => deleteFile(file.name)} />\n </div>\n ))}\n </div>}\n { uploadArea && chatCaseId && openChat && <div className='cover upload'>\n <h4>Drag and drop your files here</h4>\n <p>Maximum {fileCount} files. Limit {fileSize}MB per file.</p>\n <p>Supported files: {fileExtensions && fileExtensions.map((item:string, index) => !['mp4','mp3'].some(ext => ext === item) && (index === 0 ? item : `, ${item}`))}</p>\n </div> }\n { chatLoading && openChat && <div className='cover'><img className=\"make-it-white\" src={loadingIcon.toString()} width={14} height={14} /></div> }\n { chatClosing && openChat && <div className='cover closed'>\n <h4>Conversation is closed</h4>\n <span>This chat has now closed. If you need any help, feel free to start a new chat.<br />We're always happy to assist you!</span> \n <button onClick={() => { setChatClosing(false); resetChat();}}>Create new</button>\n </div> }\n { outage && outageMessage && <div className='cover closed'>\n <h4>Outage in your area</h4>\n <span>{outageMessage}</span> \n <button onClick={() => { resetChat(); }} className='blue-bg' >Got It - Close Chat</button>\n <button onClick={() => { setOutage(false); setOutageMessage(null); startConversation();}}>Still Need Help - Start Chat</button>\n </div> }\n { confirmClosing && openChat && <div className='cover closed'>\n <h4>Close conversation</h4>\n <span>Are you sure you want to end this conversation?</span> \n <button onClick={() => { setConfirmClosing(false);}}>Cancel</button>\n <button onClick={() => { setConfirmClosing(false); closeConversation(\"CUSTOMER\"); resetChat();}} className='blue-bg'>Confirm</button>\n </div> }\n { !chatActive && openChat && !chatCaseId && appMessages && !isStagingOrDevelopment() && <div className='cover closed'>\n <h4>Out of service</h4>\n <span dangerouslySetInnerHTML={{ __html: linkifyHtml(appMessages.chat_off_mode_text, { target: \"_blank\" }).replaceAll(/\\r\\n|\\n/g, \"<br />\") }} />\n {!fullscreen && <button onClick={() => setOpenChat(false)}>Close chat</button>}\n </div> }\n </ChatWrapper>\n <Icon onClick={() => chatToggle()} className={`YFChat ${openChat ? 'open' : ''} ${fullscreen?'fullscreen':''}`}>\n <img src={icoChat.toString()} className='icon-default' />\n <img src={icoCloseChat.toString()} className='icon-hover' />\n {chatUnreaded && <small className='unread'>1</small>}\n </Icon>\n </Widget>}\n </>\n );\n};\n\nexport default TwilioChat;\n"],"names":["icoYouFibre","URL","url","icoChat","icoCloseChat","loadingIcon","icoUpload","icoClose","notificationSound","Container","styled","div","templateObject_1","__makeTemplateObject","OverflowContainer","templateObject_2","Widget","templateObject_3","Icon","templateObject_4","ChatWrapper","templateObject_5","ChatHeader","templateObject_6","ChatContent","templateObject_7","ChatInput","form","templateObject_8","Agent","templateObject_9","TwilioChat","_a","host","clientId","clientSecret","customToken","websocketUrl","postcodeSchemaId","source","_e","fullscreen","gContext","useContext","GlobalContext","outageFormMessage","useRef","_f","useState","outage","setOutage","_g","outageMessage","setOutageMessage","_h","logged","setLogged","_j","setToken","_k","chatConversationId","setChatConversationId","_l","chatCaseId","setChatCaseId","_m","chatLoading","setChatLoading","_o","chatSending","setChatSending","_p","chatClosing","setChatClosing","_q","openChat","setOpenChat","_r","chatForm","setChatForm","_s","message","setMessage","_t","chatUserId","setChatUserId","_u","chatUserType","setChatUserType","_v","chatUsername","setChatUsername","_w","uploadedFiles","setUploadedFiles","_x","uploadArea","setUploadArea","_y","resetFormValues","setResetFormValues","_z","chatSessionId","setChatSessionId","_0","confirmClosing","setConfirmClosing","_1","twilioChatUrlParams","setTwilioChatUrlParams","_2","chatUnreaded","setChatUnreaded","_3","chatActive","setChatActive","_4","appMessages","setAppMessages","_5","animateTabTitle","setAnimateTabTitle","_6","titleIndex","setTitleIndex","titleRef","intervalRef","openChatRef","visibilityChange","fileExtensions","londonSec","useTime","interval","seconds","_7","agentTyping","setAgentTyping","agentIdRef","defaultMessages","createdAt","moment","Date","format","fromId","senderType","type","value","title","action","messageId","from","categories","SALES","TECH_SUPPORT","INSTALLS_AND_SERVICE_VISITS","MANAGE_MY_ACCOUNT","BILLING","CANCELLATION","COMPLAINT","userTypeLabels","NEW_CUSTOMER","ACCOUNT_HOLDER","NOT_ACCOUNT_HOLDER","_8","messages","setMessages","_9","newMessages","setNewMessages","messagesRef","chatBoxRef","sc","scrollToBottom","current","scrollIntoView","behavior","e","useEffect","document","window","localStorage","getItem","setItem","getElementsByTagName","textContent","setInterval","nextIndex","length","slice","clearInterval","setConfig","axios","get","then","response","data","catch","error","getUrlParams","lastUrl","location","href","observer","MutationObserver","observe","body","childList","subtree","disconnect","isTimeInRange","resetChat","nowInLondon","toLocaleString","timeZone","hour","minute","second","hour12","timeToSeconds","timeStr","split","map","Number","chat_off_mode_toggle","_b","chat_off_mode_start","_c","chat_off_mode_end","start","_d","end","URLSearchParams","search","__awaiter","Promise","resolve","goSetRegistrationData","__assign","goGetRegistrationData","twilioChat","conversationId","caseId","participantId","sent","init","Object","keys","API","concat","properties","Status","console","log","error_1","removeItem","full_name","email","category","address","last_bill","JSON","parse","stringify","getAllMessages","addEventListener","visibilityState","getElementById","focus","setTimeout","convID","all","Message","dbRecords","item","From","getFiles","Files","files","Body","id","createdBy","SenderType","tmpMessages","sort","a","b","getTime","error_2","style","overflow","documentElement","typingTimeout","sessionId","tmpUUID","uuidv4","io","path","query","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","timeout","on","err","reason","emit","listeners","OwnerId","receiveMessage","sender","clearTimeout","tmpFiles_1","__spreadArray","Mimetype","Url","error_3","some","obj","Conversation","tmpFiles","updateMessages","error_4","tmpMessage","sound","Audio","toString","setAttribute","play","innerWidth","removeAllListeners","sendMessage","btnMessage","formData_1","FormData","append","post","headers","startConversation","tmpEmail","error_5","tmpToken","tmpChatUsername","tmpChatEmail","tmpChatAddress","tmpChatLastBill","tmpChatUserType","tmpChatCategory","channel","identifier","DpaCustomerName","DpaCustomerEmail","DpaCustomerAddress","DpaCustomerLastBill","DpaCustomerType","DpaCustomerCategory","toastrMsg","error_6","replaceAll","tmpConversation","prev","_10","useDropzone","noClick","noKeyboard","onDrop","acceptedFiles","filter","size","ext","name","endsWith","fileCount","getRootProps","getInputProps","open","React","createElement","Fragment","process","env","GATSBY_TWILIO_CHAT_VERSION","className","onDragOver","onMouseLeave","Row","src","onClick","NoticationBar","ref","Chat","buttonAction","isStagingOrDevelopment","placeholder","required","options","newAccountHolder","notAccountHolder","yesAccountHolder","statusCode","error_8","autoComplete","maxLength","onChange","target","alt","preventDefault","submitMessage","disabled","width","height","file","key","itm","index","closedBy","error_7","closeConversation","dangerouslySetInnerHTML","__html","linkifyHtml","chat_off_mode_text"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__awaiter as t,__generator as r,__assign as o}from"../../node_modules/tslib/tslib.es6.js";import{C as e}from"../../_virtual/ConfigApi.js";import{Buffer as n}from"buffer";import i from"process";var u;"undefined"!=typeof window&&(window.Buffer=window.Buffer||n,window.process=window.process||i);var c=function(t){return t.replace(/^https?:\/\//,"")},f=function(t){try{var r=new URL(t);return"".concat(r.pathname).concat(r.search).replace(/^\//,"")}catch(r){return t.replace(/^\//,"")}};function d(t,r,o,n){if(void 0===n&&(n=void 0),!t)throw new Error("Host is required");return u=new e.ConfigApi({host:c(t),clientId:r,clientSecret:o},n)}function s(e,n,i){return t(this,arguments,void 0,function(t,e,n,i){return void 0===i&&(i={}),r(this,function(r){if(!u)throw new Error("API not configured. Call setConfig first.");return[2,u.customApi(o(o({path:f(e),method:t.toUpperCase()},void 0!==n&&{body:n}),i))]})})}var p={get:function(t,r){return void 0===r&&(r={}),s("get",t,void 0,r)},post:function(t,r,o){return void 0===o&&(o={}),s("post",t,r,o)},put:function(t,r,o){return void 0===o&&(o={}),s("put",t,r,o)},patch:function(t,r,o){return void 0===o&&(o={}),s("patch",t,r,o)},delete:function(t,r){return void 0===r&&(r={}),s("delete",t,void 0,r)}};export{p as default,d as setConfig};
|
|
2
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sources":["../../../src/api/api.ts"],"sourcesContent":["import { ConfigApi } from '@d19n/youfibre-odin-sdk/dist/api-sdk-v2/ConfigApi.js';\n\n// Polyfills for Buffer/process in browser builds\nimport { Buffer } from 'buffer';\nimport process from 'process';\n\nif (typeof window !== 'undefined') {\n (window as any).Buffer = (window as any).Buffer || Buffer;\n (window as any).process = (window as any).process || process;\n}\n\nlet APIInstance: ConfigApi | undefined;\n\nconst stripProtocol = (host: string) => host.replace(/^https?:\\/\\//, '');\n\nconst formatPath = (urlOrPath: string) => {\n try {\n const u = new URL(urlOrPath);\n return `${u.pathname}${u.search}`.replace(/^\\//, '');\n } catch {\n return urlOrPath.replace(/^\\//, '');\n }\n};\n\n/**\n * Configure the API instance.\n * @param host Full host URL including protocol (e.g., https://youfibre.api.sandbox.odinfusion.com)\n * @param clientId OAuth client ID\n * @param clientSecret OAuth client secret\n * @param customToken Optional custom token\n */\n\nexport function setConfig(\n host: string,\n clientId: string,\n clientSecret: string,\n customToken: string|undefined = undefined\n) {\n if (!host) throw new Error('Host is required');\n APIInstance = new ConfigApi({ host: stripProtocol(host), clientId, clientSecret }, customToken);\n return APIInstance;\n}\n\nasync function callApi(\n method: string,\n urlOrPath: string,\n body?: any,\n options: Record<string, any> = {}\n) {\n if (!APIInstance) throw new Error('API not configured. Call setConfig first.');\n return (APIInstance as any).customApi({\n path: formatPath(urlOrPath),\n method: method.toUpperCase(),\n ...(body !== undefined && { body }),\n ...options,\n });\n}\n\nconst API = {\n get: (url: string, options = {}) => callApi('get', url, undefined, options),\n post: (url: string, body: any, options = {}) => callApi('post', url, body, options),\n put: (url: string, body: any, options = {}) => callApi('put', url, body, options),\n patch: (url: string, body: any, options = {}) => callApi('patch', url, body, options),\n delete: (url: string, options = {}) => callApi('delete', url, undefined, options),\n};\n\nexport default API;\n\n"],"names":["APIInstance","window","Buffer","process","stripProtocol","host","replace","formatPath","urlOrPath","u","URL","pathname","concat","search","_a","setConfig","clientId","clientSecret","customToken","undefined","Error","ConfigApi","callApi","method_1","urlOrPath_1","body_1","__awaiter","this","arguments","method","body","options","customApi","__assign","path","toUpperCase","API","get","url","post","put","patch","delete"],"mappings":"wMAWA,IAAIA,EALkB,oBAAXC,SACRA,OAAeC,OAAUD,OAAeC,QAAUA,EAClDD,OAAeE,QAAWF,OAAeE,SAAWA,GAKvD,IAAMC,EAAgB,SAACC,GAAiB,OAAAA,EAAKC,QAAQ,eAAgB,GAA7B,EAElCC,EAAa,SAACC,GAClB,IACE,IAAMC,EAAI,IAAIC,IAAIF,GAClB,MAAO,UAAGC,EAAEE,UAAQC,OAAGH,EAAEI,QAASP,QAAQ,MAAO,GACnD,CAAE,MAAAQ,GACA,OAAON,EAAUF,QAAQ,MAAO,GAClC,CACF,EAUM,SAAUS,EACdV,EACAW,EACAC,EACAC,GAEA,QAFA,IAAAA,IAAAA,OAAAC,IAEKd,EAAM,MAAM,IAAIe,MAAM,oBAE3B,OADApB,EAAc,IAAIqB,EAAAA,UAAU,CAAEhB,KAAMD,EAAcC,GAAOW,WAAUC,gBAAgBC,EAErF,CAEA,SAAeI,EAAOC,EAAAC,EAAAC,GACpB,OAAAC,EAAAC,KAAAC,eAAA,EAAA,SAAAC,EACArB,EACAsB,EACAC,eAAA,IAAAA,IAAAA,EAAA,CAAA,sBAEA,IAAK/B,EAAa,MAAM,IAAIoB,MAAM,6CAClC,MAAA,CAAA,EAAQpB,EAAoBgC,UAASC,EAAAA,EAAA,CACnCC,KAAM3B,EAAWC,GACjBqB,OAAQA,EAAOM,oBACFhB,IAATW,GAAsB,CAAEA,KAAIA,IAC7BC,QAEN,CAED,IAAMK,EAAM,CACVC,IAAK,SAACC,EAAaP,GAAiB,YAAjB,IAAAA,IAAAA,EAAA,CAAA,GAAiBT,EAAQ,MAAOgB,OAAKnB,EAAWY,EAA/B,EACpCQ,KAAM,SAACD,EAAaR,EAAWC,GAAiB,YAAjB,IAAAA,IAAAA,EAAA,CAAA,GAAiBT,EAAQ,OAAQgB,EAAKR,EAAMC,EAA3B,EAChDS,IAAK,SAACF,EAAaR,EAAWC,GAAiB,YAAjB,IAAAA,IAAAA,EAAA,CAAA,GAAiBT,EAAQ,MAAOgB,EAAKR,EAAMC,EAA1B,EAC/CU,MAAO,SAACH,EAAaR,EAAWC,GAAiB,YAAjB,IAAAA,IAAAA,EAAA,CAAA,GAAiBT,EAAQ,QAASgB,EAAKR,EAAMC,EAA5B,EACjDW,OAAQ,SAACJ,EAAaP,GAAiB,YAAjB,IAAAA,IAAAA,EAAA,CAAA,GAAiBT,EAAQ,SAAUgB,OAAKnB,EAAWY,EAAlC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__assign as e}from"../../node_modules/tslib/tslib.es6.js";import t,{createContext as o,useState as i,useContext as r}from"react";var n=o({}),a=function(o){var r=o.children,a=i({}),d=a[0],s=a[1],l=i({}),u=l[0],c=l[1],v=i(null),g=v[0],f=v[1],p={"Static IP":null,YouMesh:null,"YouMesh Pro":null,YouPhone:null},m={1:{name:"Speed",stepVisited:!0},2:{name:"Go live",stepVisited:!1},3:{name:"Add ons",stepVisited:!1},4:{name:"Payment",stepVisited:!1},5:{name:"Confirmation",stepVisited:!1}},S={"YouPhone Plus":!1,"YouPhone Pro":!1,"Battery Pack":!1,"Transfer landline number":!1},w=function(e){s(e),"undefined"!=typeof window&&localStorage.setItem("webchatData",JSON.stringify(e))},h=function(e){f(e),"undefined"!=typeof window&&window&&localStorage.setItem("registrationData",JSON.stringify(e)),null===e&&"undefined"!=typeof window&&window&&(localStorage.setItem("addonsSelected",JSON.stringify(p)),localStorage.setItem("toggleState",JSON.stringify(S)),localStorage.setItem("steps",JSON.stringify(m)))},y=function(){if(g)return g;if("undefined"!=typeof window&&window&&localStorage.getItem("registrationData")){var e=localStorage.getItem("registrationData");return e&&"undefined"!==e?JSON.parse(e):void 0}};return t.createElement(n.Provider,{value:{webchatData:d,appMessages:u,goSetWebchatData:w,goResetWebchatData:function(){w(null)},setAppMessages:c,goSetRegistrationData:h,goResetRegistrationData:function(){var t,o;h(e(e({},y()),{searchPremiseResults:void 0,personalData:void 0,currentProvider:void 0,checkoutStep:void 0,currentContractType:void 0,addressId:void 0,dateFilter:void 0,accountNumber:void 0,totalPrice:void 0,leadId:void 0,branchCode:void 0,registerStep:void 0,orderItems:null===(o=null===(t=y())||void 0===t?void 0:t.orderItems)||void 0===o?void 0:o.filter(function(e){return"BASE_PRODUCT"===e.properties.Type}),orderId:void 0,addonPrices:void 0,phoneNumber1:void 0,phoneNumber2:void 0,phoneNumber3:void 0,LOAAuthorized:void 0,portFromProvider:void 0,hasVoice:void 0,skipBooking:!1,recontractResponse:void 0,containsYouPhone:void 0,otsOrderId:void 0,otsStatus:void 0,earlierAvailability:void 0})),"undefined"!=typeof window&&window&&(localStorage.setItem("addonsSelected",JSON.stringify(p)),localStorage.setItem("toggleState",JSON.stringify(S)),localStorage.setItem("steps",JSON.stringify(m)))},goGetRegistrationData:y}},r)},d=function(){var e=r(n);if(!e)throw new Error("useGlobalContext must be used within a GlobalProvider");return e};export{a as GlobalProvider,n as default,d as useGlobalContext};
|
|
2
|
+
//# sourceMappingURL=GlobalContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalContext.js","sources":["../../../src/context/GlobalContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, ReactNode } from 'react';\n\ninterface GlobalContextType {\n webchatData: any;\n appMessages: any;\n goSetWebchatData: (data: any) => void;\n goResetWebchatData: () => void;\n goSetRegistrationData: (registrationData: any) => void;\n goResetRegistrationData: () => void;\n goGetRegistrationData: () => any;\n setAppMessages: React.Dispatch<React.SetStateAction<any>>;\n}\n\nconst GlobalContext = createContext<GlobalContextType>({} as GlobalContextType);\n\ninterface GlobalProviderProps {\n children: ReactNode;\n}\n\nexport const GlobalProvider: React.FC<GlobalProviderProps> = ({ children }) => {\n const [webchatData, setWebchatData] = useState<any>({});\n const [appMessages, setAppMessages] = useState<any>({});\n const [registrationData, setRegistrationData] = useState(null);\n\n const initialAddonsSelected = {\n 'Static IP': null,\n 'YouMesh': null,\n 'YouMesh Pro': null,\n 'YouPhone': null\n };\n\n const initialSteps = {\n 1: {\n name: 'Speed',\n stepVisited: true\n },\n 2: {\n name: 'Go live',\n stepVisited: false\n },\n 3: {\n name: 'Add ons',\n stepVisited: false\n },\n 4: {\n name: 'Payment',\n stepVisited: false\n },\n 5: {\n name: 'Confirmation',\n stepVisited: false\n }\n };\n\n const initialToggleState = {\n 'YouPhone Plus': false,\n 'YouPhone Pro': false,\n 'Battery Pack': false,\n 'Transfer landline number': false\n }\n\n const goSetWebchatData = (data: any) => {\n setWebchatData(data);\n if (typeof window !== 'undefined') {\n localStorage.setItem('webchatData', JSON.stringify(data));\n }\n };\n\n const goResetWebchatData = () => {\n goSetWebchatData(null);\n };\n\n\n const goSetRegistrationData = (registrationData) => {\n setRegistrationData(registrationData)\n if (typeof window !== 'undefined' && window) {\n localStorage.setItem('registrationData', JSON.stringify(registrationData));\n }\n // If registration data is reset than reset other data\n if (registrationData === null) {\n if (typeof window !== 'undefined' && window) { \n localStorage.setItem('addonsSelected', JSON.stringify(initialAddonsSelected));\n localStorage.setItem('toggleState', JSON.stringify(initialToggleState));\n localStorage.setItem('steps', JSON.stringify(initialSteps));\n }\n }\n }\n\n const goResetRegistrationData = () => {\n goSetRegistrationData({\n ...goGetRegistrationData(),\n searchPremiseResults: undefined,\n personalData: undefined,\n currentProvider: undefined,\n checkoutStep: undefined,\n currentContractType: undefined,\n addressId: undefined,\n dateFilter: undefined,\n accountNumber: undefined,\n totalPrice: undefined,\n leadId: undefined,\n branchCode: undefined,\n registerStep: undefined,\n orderItems: goGetRegistrationData()?.orderItems?.filter(item => item.properties.Type === 'BASE_PRODUCT'),\n orderId: undefined,\n addonPrices: undefined,\n phoneNumber1: undefined,\n phoneNumber2: undefined,\n phoneNumber3: undefined,\n LOAAuthorized: undefined,\n portFromProvider: undefined,\n hasVoice: undefined,\n skipBooking: false,\n recontractResponse: undefined,\n containsYouPhone: undefined,\n otsOrderId: undefined,\n otsStatus: undefined,\n earlierAvailability: undefined\n })\n\n if (typeof window !== 'undefined' && window) { \n localStorage.setItem('addonsSelected', JSON.stringify(initialAddonsSelected));\n localStorage.setItem('toggleState', JSON.stringify(initialToggleState));\n localStorage.setItem('steps', JSON.stringify(initialSteps));\n }\n }\n\n const goGetRegistrationData = () => {\n if (registrationData) {\n return registrationData\n } else if (typeof window !== 'undefined' && window && localStorage.getItem('registrationData')) {\n var regData = localStorage.getItem('registrationData')\n if (regData && regData !== \"undefined\") {\n return JSON.parse(regData)\n }\n } else {\n return undefined\n }\n }\n\n return (\n <GlobalContext.Provider\n value={{\n webchatData,\n appMessages,\n goSetWebchatData,\n goResetWebchatData,\n setAppMessages,\n goSetRegistrationData,\n goResetRegistrationData,\n goGetRegistrationData\n }}\n >\n {children}\n </GlobalContext.Provider>\n );\n};\n\nexport const useGlobalContext = (): GlobalContextType => {\n const context = useContext(GlobalContext);\n if (!context) {\n throw new Error('useGlobalContext must be used within a GlobalProvider');\n }\n return context;\n};\n\nexport default GlobalContext;\n"],"names":["GlobalContext","createContext","GlobalProvider","_a","children","_b","useState","webchatData","setWebchatData","_c","appMessages","setAppMessages","_d","registrationData","setRegistrationData","initialAddonsSelected","YouMesh","YouPhone","initialSteps","name","stepVisited","initialToggleState","goSetWebchatData","data","window","localStorage","setItem","JSON","stringify","goSetRegistrationData","goGetRegistrationData","getItem","regData","parse","React","createElement","Provider","value","goResetWebchatData","goResetRegistrationData","__assign","searchPremiseResults","undefined","personalData","currentProvider","checkoutStep","currentContractType","addressId","dateFilter","accountNumber","totalPrice","leadId","branchCode","registerStep","orderItems","filter","item","properties","Type","orderId","addonPrices","phoneNumber1","phoneNumber2","phoneNumber3","LOAAuthorized","portFromProvider","hasVoice","skipBooking","recontractResponse","containsYouPhone","otsOrderId","otsStatus","earlierAvailability","useGlobalContext","context","useContext","Error"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"react";import{GlobalProvider as t}from"./context/GlobalContext.js";import o from"./TwilioChat/index.js";function c(c){var r=c.host,l=c.clientId,n=c.clientSecret,s=c.websocketUrl,i=c.postcodeSchemaId,m=c.source,d=c.fullscreen,a=void 0!==d&&d,u=c.customToken,f=void 0===u?void 0:u;return e.createElement(t,null,e.createElement(o,{host:r,clientId:l,clientSecret:n,websocketUrl:s,postcodeSchemaId:i,source:m,fullscreen:a,customToken:f}))}export{c as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { GlobalProvider } from './context/GlobalContext';\nimport TwilioChat from './TwilioChat';\n\ninterface Props {\n host: string;\n clientId: string;\n clientSecret: string;\n websocketUrl: string;\n postcodeSchemaId: string;\n source: string;\n fullscreen: boolean;\n customToken?: string| undefined;\n}\n\nfunction App({host, clientId, clientSecret, websocketUrl, postcodeSchemaId, source, fullscreen = false, customToken = undefined }: Props) {\n return (\n <GlobalProvider>\n <TwilioChat \n host={host}\n clientId={clientId}\n clientSecret={clientSecret}\n websocketUrl={websocketUrl}\n postcodeSchemaId={postcodeSchemaId}\n source={source}\n fullscreen={fullscreen}\n customToken={customToken}\n />\n </GlobalProvider>\n );\n}\n\nexport default App;\n"],"names":["App","_a","host","clientId","clientSecret","websocketUrl","postcodeSchemaId","source","_b","fullscreen","_c","customToken","undefined","React","GlobalProvider","createElement","TwilioChat"],"mappings":"sHAeA,SAASA,EAAIC,GAAC,IAAAC,EAAID,EAAAC,KAAEC,EAAQF,EAAAE,SAAEC,EAAYH,EAAAG,aAAEC,EAAYJ,EAAAI,aAAEC,EAAgBL,EAAAK,iBAAEC,EAAMN,EAAAM,OAAEC,EAAAP,EAAAQ,WAAAA,OAAU,IAAAD,GAAQA,EAAEE,EAAAT,EAAAU,YAAAA,OAAW,IAAAD,OAAGE,EAASF,EAC7H,OACEG,gBAACC,EAAc,KACXD,EAAAE,cAACC,EAAU,CACTd,KAAMA,EACNC,SAAUA,EACVC,aAAcA,EACdC,aAAcA,EACdC,iBAAkBA,EAClBC,OAAQA,EACRE,WAAYA,EACZE,YAAaA,IAIvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert.js","sources":["../../../src/utils/alert.ts"],"sourcesContent":["import { toast } from 'react-toastify';\n\nexport const toastrMsg = (toastrText:any, toastrType:any) => {\n toast(toastrText, {\n type: toastrType\n })\n};"],"names":["toastrMsg","toastrText","toastrType","toast","type"],"mappings":"qFAEO,IAAMA,EAAY,SAACC,EAAgBC,GACtCC,EAAMF,EAAY,CACdG,KAAMF,GAEd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helperFn.js","sources":["../../../src/utils/helperFn.ts"],"sourcesContent":["export const isStagingOrDevelopment = () => {\n const hostName = window.location.host;\n return /staging|localhost/.test(hostName);\n};\n\nexport const isProduction = () => {\n const hostName = window.location.host;\n return !isStagingOrDevelopment();\n};"],"names":["isStagingOrDevelopment","hostName","window","location","host","test"],"mappings":"AAAO,IAAMA,EAAyB,WAClC,IAAMC,EAAWC,OAAOC,SAASC,KACjC,MAAO,oBAAoBC,KAAKJ,EACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const toastrMsg: (toastrText: any, toastrType: any) => void;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
export declare const defaultMessages: ({
|
|
2
|
+
createdAt: string;
|
|
3
|
+
message: any;
|
|
4
|
+
fromId: string;
|
|
5
|
+
senderType: string;
|
|
6
|
+
form: {
|
|
7
|
+
type: string;
|
|
8
|
+
value: {
|
|
9
|
+
title: string;
|
|
10
|
+
action: string;
|
|
11
|
+
}[];
|
|
12
|
+
};
|
|
13
|
+
messageId: string;
|
|
14
|
+
from?: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
senderType: string;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
from: string;
|
|
19
|
+
fromId: string;
|
|
20
|
+
message: string;
|
|
21
|
+
form: any;
|
|
22
|
+
messageId: string;
|
|
23
|
+
})[];
|
|
24
|
+
export declare const initialTwilioChatState: {
|
|
25
|
+
logged: boolean;
|
|
26
|
+
messages: ({
|
|
27
|
+
createdAt: string;
|
|
28
|
+
message: any;
|
|
29
|
+
fromId: string;
|
|
30
|
+
senderType: string;
|
|
31
|
+
form: {
|
|
32
|
+
type: string;
|
|
33
|
+
value: {
|
|
34
|
+
title: string;
|
|
35
|
+
action: string;
|
|
36
|
+
}[];
|
|
37
|
+
};
|
|
38
|
+
messageId: string;
|
|
39
|
+
from?: undefined;
|
|
40
|
+
} | {
|
|
41
|
+
senderType: string;
|
|
42
|
+
createdAt: string;
|
|
43
|
+
from: string;
|
|
44
|
+
fromId: string;
|
|
45
|
+
message: string;
|
|
46
|
+
form: any;
|
|
47
|
+
messageId: string;
|
|
48
|
+
})[];
|
|
49
|
+
chatCaseId: any;
|
|
50
|
+
uploadArea: boolean;
|
|
51
|
+
uploadedFiles: any[];
|
|
52
|
+
chatClosing: boolean;
|
|
53
|
+
chatClosingType: any;
|
|
54
|
+
chatLoading: boolean;
|
|
55
|
+
chatUserId: any;
|
|
56
|
+
chatUsername: any;
|
|
57
|
+
confirmClosing: boolean;
|
|
58
|
+
chatConversationId: any;
|
|
59
|
+
chatSessionId: any;
|
|
60
|
+
chatUserType: any;
|
|
61
|
+
openChat: boolean;
|
|
62
|
+
resetFormValues: boolean;
|
|
63
|
+
token: any;
|
|
64
|
+
typingAgent: boolean;
|
|
65
|
+
typingCustomer: boolean;
|
|
66
|
+
lightboxUrl: any;
|
|
67
|
+
agentId: any;
|
|
68
|
+
};
|
|
69
|
+
export declare const initialTwilioTimerState: {
|
|
70
|
+
receiveMsg: any;
|
|
71
|
+
chatUnreaded: boolean;
|
|
72
|
+
lastTimeActive: any;
|
|
73
|
+
};
|
|
74
|
+
export declare const initialTwilioSettingsState: {
|
|
75
|
+
fullscreen: boolean;
|
|
76
|
+
side: string;
|
|
77
|
+
};
|
|
78
|
+
export type UserType = 'NEW_CUSTOMER' | 'ACCOUNT_HOLDER' | 'NOT_ACCOUNT_HOLDER';
|
|
79
|
+
export declare const newAccountHolder: ({
|
|
80
|
+
senderType: string;
|
|
81
|
+
createdAt: string;
|
|
82
|
+
from: string;
|
|
83
|
+
fromId: string;
|
|
84
|
+
message: string;
|
|
85
|
+
form: any;
|
|
86
|
+
messageId: string;
|
|
87
|
+
} | {
|
|
88
|
+
senderType: string;
|
|
89
|
+
createdAt: string;
|
|
90
|
+
from: string;
|
|
91
|
+
fromId: string;
|
|
92
|
+
message: any;
|
|
93
|
+
form: {
|
|
94
|
+
type: string;
|
|
95
|
+
value: ({
|
|
96
|
+
title: string;
|
|
97
|
+
action: string;
|
|
98
|
+
placeholder: string;
|
|
99
|
+
type: string;
|
|
100
|
+
required: boolean;
|
|
101
|
+
options?: undefined;
|
|
102
|
+
} | {
|
|
103
|
+
title: string;
|
|
104
|
+
action: string;
|
|
105
|
+
placeholder: any;
|
|
106
|
+
type: string;
|
|
107
|
+
required: boolean;
|
|
108
|
+
options: {
|
|
109
|
+
SALES: string;
|
|
110
|
+
TECH_SUPPORT: string;
|
|
111
|
+
COMPLAINT: string;
|
|
112
|
+
};
|
|
113
|
+
} | {
|
|
114
|
+
title: string;
|
|
115
|
+
action: string;
|
|
116
|
+
type: string;
|
|
117
|
+
placeholder?: undefined;
|
|
118
|
+
required?: undefined;
|
|
119
|
+
options?: undefined;
|
|
120
|
+
})[];
|
|
121
|
+
};
|
|
122
|
+
messageId: string;
|
|
123
|
+
})[];
|
|
124
|
+
export declare const notAccountHolder: ({
|
|
125
|
+
senderType: string;
|
|
126
|
+
createdAt: string;
|
|
127
|
+
from: string;
|
|
128
|
+
fromId: string;
|
|
129
|
+
message: string;
|
|
130
|
+
form: any;
|
|
131
|
+
messageId: string;
|
|
132
|
+
} | {
|
|
133
|
+
senderType: string;
|
|
134
|
+
createdAt: string;
|
|
135
|
+
from: string;
|
|
136
|
+
fromId: string;
|
|
137
|
+
message: any;
|
|
138
|
+
form: {
|
|
139
|
+
type: string;
|
|
140
|
+
value: ({
|
|
141
|
+
title: string;
|
|
142
|
+
action: string;
|
|
143
|
+
placeholder: string;
|
|
144
|
+
type: string;
|
|
145
|
+
required: boolean;
|
|
146
|
+
options?: undefined;
|
|
147
|
+
} | {
|
|
148
|
+
title: string;
|
|
149
|
+
action: string;
|
|
150
|
+
placeholder: any;
|
|
151
|
+
type: string;
|
|
152
|
+
required: boolean;
|
|
153
|
+
options: {
|
|
154
|
+
SALES: string;
|
|
155
|
+
TECH_SUPPORT: string;
|
|
156
|
+
COMPLAINT: string;
|
|
157
|
+
};
|
|
158
|
+
} | {
|
|
159
|
+
title: string;
|
|
160
|
+
action: string;
|
|
161
|
+
type: string;
|
|
162
|
+
placeholder?: undefined;
|
|
163
|
+
required?: undefined;
|
|
164
|
+
options?: undefined;
|
|
165
|
+
})[];
|
|
166
|
+
};
|
|
167
|
+
messageId: string;
|
|
168
|
+
})[];
|
|
169
|
+
export declare const yesAccountHolder: ({
|
|
170
|
+
senderType: string;
|
|
171
|
+
createdAt: string;
|
|
172
|
+
from: string;
|
|
173
|
+
fromId: string;
|
|
174
|
+
message: string;
|
|
175
|
+
form: any;
|
|
176
|
+
messageId: string;
|
|
177
|
+
} | {
|
|
178
|
+
senderType: string;
|
|
179
|
+
createdAt: string;
|
|
180
|
+
from: string;
|
|
181
|
+
fromId: string;
|
|
182
|
+
message: any;
|
|
183
|
+
form: {
|
|
184
|
+
type: string;
|
|
185
|
+
value: ({
|
|
186
|
+
title: string;
|
|
187
|
+
action: string;
|
|
188
|
+
placeholder: string;
|
|
189
|
+
type: string;
|
|
190
|
+
required: boolean;
|
|
191
|
+
options?: undefined;
|
|
192
|
+
} | {
|
|
193
|
+
title: string;
|
|
194
|
+
action: string;
|
|
195
|
+
placeholder: any;
|
|
196
|
+
type: string;
|
|
197
|
+
required: boolean;
|
|
198
|
+
options: {
|
|
199
|
+
SALES: string;
|
|
200
|
+
TECH_SUPPORT: string;
|
|
201
|
+
INSTALLS_AND_SERVICE_VISITS: string;
|
|
202
|
+
MANAGE_MY_ACCOUNT: string;
|
|
203
|
+
BILLING: string;
|
|
204
|
+
CANCELLATION: string;
|
|
205
|
+
COMPLAINT: string;
|
|
206
|
+
};
|
|
207
|
+
} | {
|
|
208
|
+
title: string;
|
|
209
|
+
action: string;
|
|
210
|
+
type: string;
|
|
211
|
+
placeholder?: undefined;
|
|
212
|
+
required?: undefined;
|
|
213
|
+
options?: undefined;
|
|
214
|
+
})[];
|
|
215
|
+
};
|
|
216
|
+
messageId: string;
|
|
217
|
+
})[];
|
|
218
|
+
export declare const categories: {
|
|
219
|
+
SALES: string;
|
|
220
|
+
TECH_SUPPORT: string;
|
|
221
|
+
INSTALLS_AND_SERVICE_VISITS: string;
|
|
222
|
+
MANAGE_MY_ACCOUNT: string;
|
|
223
|
+
BILLING: string;
|
|
224
|
+
CANCELLATION: string;
|
|
225
|
+
COMPLAINT: string;
|
|
226
|
+
};
|
|
227
|
+
export declare const userTypeLabels: {
|
|
228
|
+
NEW_CUSTOMER: string;
|
|
229
|
+
ACCOUNT_HOLDER: string;
|
|
230
|
+
NOT_ACCOUNT_HOLDER: string;
|
|
231
|
+
};
|
package/package.json
CHANGED
|
@@ -1,35 +1,72 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d19n/webchat",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "D19N WebChat package",
|
|
5
5
|
"author": "@d19n",
|
|
6
6
|
"license": "ISC",
|
|
7
|
+
"type": "module",
|
|
7
8
|
"main": "dist/index.js",
|
|
8
9
|
"module": "dist/index.mjs",
|
|
9
10
|
"types": "dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
10
14
|
"scripts": {
|
|
15
|
+
"develop": "npm install && rm -rf node_modules/react node_modules/react-dom && npm run build && npm link",
|
|
11
16
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
12
|
-
"
|
|
17
|
+
"build": "rollup -c --bundleConfigAsCjs"
|
|
13
18
|
},
|
|
14
19
|
"repository": {
|
|
15
20
|
"type": "git",
|
|
16
21
|
"url": "https://github.com/d19n-llc/d19n-webchat.git"
|
|
17
22
|
},
|
|
18
|
-
"
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@d19n/odin-sdk-generator": "^3.0.39",
|
|
25
|
+
"@d19n/odin-types": "^1.0.62",
|
|
26
|
+
"@d19n/youfibre-odin-sdk": "^1.0.125",
|
|
19
27
|
"@rollup/plugin-commonjs": "^28.0.6",
|
|
28
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
20
29
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
30
|
+
"@rollup/plugin-replace": "^6.0.2",
|
|
21
31
|
"@rollup/plugin-terser": "^0.4.4",
|
|
22
32
|
"@rollup/plugin-typescript": "^12.1.4",
|
|
23
|
-
"@types/
|
|
24
|
-
"react": "^
|
|
25
|
-
"react-dom": "^
|
|
33
|
+
"@types/node": "^24.1.0",
|
|
34
|
+
"@types/react": "^18.3.23",
|
|
35
|
+
"@types/react-dom": "^18.3.7",
|
|
36
|
+
"@types/react-modal-image": "^2.6.4",
|
|
37
|
+
"@types/styled-components": "^5.1.34",
|
|
38
|
+
"buffer": "^6.0.3",
|
|
39
|
+
"form-data": "^4.0.4",
|
|
40
|
+
"linkify-html": "^4.3.2",
|
|
41
|
+
"linkifyjs": "^4.3.2",
|
|
42
|
+
"moment": "^2.30.1",
|
|
43
|
+
"package": "^1.0.1",
|
|
44
|
+
"process": "^0.11.10",
|
|
45
|
+
"react-bootstrap": "^2.10.10",
|
|
46
|
+
"react-debounce-input": "^3.3.0",
|
|
47
|
+
"react-dropzone": "^14.3.8",
|
|
48
|
+
"react-icons": "^4.2.0",
|
|
49
|
+
"react-markdown": "^5.0.3",
|
|
50
|
+
"react-modal-image": "^2.6.0",
|
|
51
|
+
"react-timer-hook": "^4.0.5",
|
|
52
|
+
"react-toastify": "^7.0.4",
|
|
53
|
+
"remark-gfm": "^1.0.0",
|
|
26
54
|
"rollup": "^4.46.1",
|
|
55
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
27
56
|
"rollup-plugin-dts": "^6.2.1",
|
|
28
57
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
29
58
|
"rollup-plugin-postcss": "^4.0.2",
|
|
59
|
+
"socket.io-client": "^4.7.5",
|
|
60
|
+
"styled-components": "^5.2.1",
|
|
30
61
|
"ts-node": "^10.9.2",
|
|
31
62
|
"tslib": "^2.8.1",
|
|
32
|
-
"typescript": "^5.8.3"
|
|
63
|
+
"typescript": "^5.8.3",
|
|
64
|
+
"uuid": "^11.1.0"
|
|
65
|
+
},
|
|
66
|
+
"peerDependencies": {
|
|
67
|
+
"axios": "^1.11.0",
|
|
68
|
+
"react": "^18.1.1",
|
|
69
|
+
"react-dom": "^18.1.1"
|
|
33
70
|
},
|
|
34
71
|
"keywords": [
|
|
35
72
|
"webchat",
|