From 8a79fb177f89d4f27cef07fe164e8f0dfa4e818c Mon Sep 17 00:00:00 2001 From: muppeth Date: Thu, 4 Nov 2021 10:16:12 +0100 Subject: [PATCH] small color scheme update (work in progress) and update to latest upstream --- dist/converse.css | 31 +- dist/converse.css.map | 2 +- dist/converse.js | 35761 +++++++++------- dist/converse.js.map | 2 +- dist/converse.min.css | 31 +- dist/converse.min.css.map | 2 +- dist/converse.min.js | 2176 +- dist/converse.min.js.LICENSE.txt | 121 +- dist/converse.min.js.map | 2 +- dist/images/logo/conversejs-filled.svg | 19 + dist/locales/af-LC_MESSAGES-converse-po.js | 2 +- dist/locales/ar-LC_MESSAGES-converse-po.js | 2 +- dist/locales/bg-LC_MESSAGES-converse-po.js | 2 +- dist/locales/ca-LC_MESSAGES-converse-po.js | 2 +- dist/locales/cs-LC_MESSAGES-converse-po.js | 2 +- dist/locales/da-LC_MESSAGES-converse-po.js | 2 +- dist/locales/dayjs/af-js.js | 2 +- dist/locales/dayjs/af-js.js.map | 2 +- dist/locales/dayjs/am-js.js | 2 +- dist/locales/dayjs/am-js.js.map | 2 +- dist/locales/dayjs/ar-dz-js.js | 2 +- dist/locales/dayjs/ar-dz-js.js.map | 2 +- dist/locales/dayjs/ar-js.js | 2 +- dist/locales/dayjs/ar-js.js.map | 2 +- dist/locales/dayjs/ar-kw-js.js | 2 +- dist/locales/dayjs/ar-kw-js.js.map | 2 +- dist/locales/dayjs/ar-ly-js.js | 2 +- dist/locales/dayjs/ar-ly-js.js.map | 2 +- dist/locales/dayjs/ar-ma-js.js | 2 +- dist/locales/dayjs/ar-ma-js.js.map | 2 +- dist/locales/dayjs/ar-sa-js.js | 2 +- dist/locales/dayjs/ar-sa-js.js.map | 2 +- dist/locales/dayjs/ar-tn-js.js | 2 +- dist/locales/dayjs/ar-tn-js.js.map | 2 +- dist/locales/dayjs/az-js.js | 2 +- dist/locales/dayjs/az-js.js.map | 2 +- dist/locales/dayjs/be-js.js | 2 +- dist/locales/dayjs/be-js.js.map | 2 +- dist/locales/dayjs/bg-js.js | 2 +- dist/locales/dayjs/bg-js.js.map | 2 +- dist/locales/dayjs/bi-js.js | 2 +- dist/locales/dayjs/bi-js.js.map | 2 +- dist/locales/dayjs/bm-js.js | 2 +- dist/locales/dayjs/bm-js.js.map | 2 +- dist/locales/dayjs/bn-js.js | 2 +- dist/locales/dayjs/bn-js.js.map | 2 +- dist/locales/dayjs/bo-js.js | 2 +- dist/locales/dayjs/bo-js.js.map | 2 +- dist/locales/dayjs/br-js.js | 2 +- dist/locales/dayjs/br-js.js.map | 2 +- dist/locales/dayjs/bs-js.js | 2 +- dist/locales/dayjs/bs-js.js.map | 2 +- dist/locales/dayjs/ca-js.js | 2 +- dist/locales/dayjs/ca-js.js.map | 2 +- dist/locales/dayjs/cs-js.js | 2 +- dist/locales/dayjs/cs-js.js.map | 2 +- dist/locales/dayjs/cv-js.js | 2 +- dist/locales/dayjs/cv-js.js.map | 2 +- dist/locales/dayjs/cy-js.js | 2 +- dist/locales/dayjs/cy-js.js.map | 2 +- dist/locales/dayjs/da-js.js | 2 +- dist/locales/dayjs/da-js.js.map | 2 +- dist/locales/dayjs/de-at-js.js | 2 +- dist/locales/dayjs/de-at-js.js.map | 2 +- dist/locales/dayjs/de-ch-js.js | 2 +- dist/locales/dayjs/de-ch-js.js.map | 2 +- dist/locales/dayjs/de-js.js | 2 +- dist/locales/dayjs/de-js.js.map | 2 +- dist/locales/dayjs/dv-js.js | 2 +- dist/locales/dayjs/dv-js.js.map | 2 +- dist/locales/dayjs/el-js.js | 2 +- dist/locales/dayjs/el-js.js.map | 2 +- dist/locales/dayjs/en-au-js.js | 2 +- dist/locales/dayjs/en-au-js.js.map | 2 +- dist/locales/dayjs/en-ca-js.js | 2 +- dist/locales/dayjs/en-ca-js.js.map | 2 +- dist/locales/dayjs/en-gb-js.js | 2 +- dist/locales/dayjs/en-gb-js.js.map | 2 +- dist/locales/dayjs/en-ie-js.js | 2 +- dist/locales/dayjs/en-ie-js.js.map | 2 +- dist/locales/dayjs/en-il-js.js | 2 +- dist/locales/dayjs/en-il-js.js.map | 2 +- dist/locales/dayjs/en-in-js.js | 2 +- dist/locales/dayjs/en-in-js.js.map | 2 +- dist/locales/dayjs/en-js.js.map | 2 +- dist/locales/dayjs/en-nz-js.js | 2 +- dist/locales/dayjs/en-nz-js.js.map | 2 +- dist/locales/dayjs/en-sg-js.js | 2 +- dist/locales/dayjs/en-sg-js.js.map | 2 +- dist/locales/dayjs/en-tt-js.js | 2 +- dist/locales/dayjs/en-tt-js.js.map | 2 +- dist/locales/dayjs/eo-js.js | 2 +- dist/locales/dayjs/eo-js.js.map | 2 +- dist/locales/dayjs/es-do-js.js | 2 +- dist/locales/dayjs/es-do-js.js.map | 2 +- dist/locales/dayjs/es-js.js | 2 +- dist/locales/dayjs/es-js.js.map | 2 +- dist/locales/dayjs/es-pr-js.js | 2 +- dist/locales/dayjs/es-pr-js.js.map | 2 +- dist/locales/dayjs/es-us-js.js | 2 +- dist/locales/dayjs/es-us-js.js.map | 2 +- dist/locales/dayjs/et-js.js | 2 +- dist/locales/dayjs/et-js.js.map | 2 +- dist/locales/dayjs/eu-js.js | 2 +- dist/locales/dayjs/eu-js.js.map | 2 +- dist/locales/dayjs/fa-js.js | 2 +- dist/locales/dayjs/fa-js.js.map | 2 +- dist/locales/dayjs/fi-js.js | 2 +- dist/locales/dayjs/fi-js.js.map | 2 +- dist/locales/dayjs/fo-js.js | 2 +- dist/locales/dayjs/fo-js.js.map | 2 +- dist/locales/dayjs/fr-ca-js.js | 2 +- dist/locales/dayjs/fr-ca-js.js.map | 2 +- dist/locales/dayjs/fr-ch-js.js | 2 +- dist/locales/dayjs/fr-ch-js.js.map | 2 +- dist/locales/dayjs/fr-js.js | 2 +- dist/locales/dayjs/fr-js.js.map | 2 +- dist/locales/dayjs/fy-js.js | 2 +- dist/locales/dayjs/fy-js.js.map | 2 +- dist/locales/dayjs/ga-js.js | 2 +- dist/locales/dayjs/ga-js.js.map | 2 +- dist/locales/dayjs/gd-js.js | 2 +- dist/locales/dayjs/gd-js.js.map | 2 +- dist/locales/dayjs/gl-js.js | 2 +- dist/locales/dayjs/gl-js.js.map | 2 +- dist/locales/dayjs/gom-latn-js.js | 2 +- dist/locales/dayjs/gom-latn-js.js.map | 2 +- dist/locales/dayjs/gu-js.js | 2 +- dist/locales/dayjs/gu-js.js.map | 2 +- dist/locales/dayjs/he-js.js | 2 +- dist/locales/dayjs/he-js.js.map | 2 +- dist/locales/dayjs/hi-js.js | 2 +- dist/locales/dayjs/hi-js.js.map | 2 +- dist/locales/dayjs/hr-js.js | 2 +- dist/locales/dayjs/hr-js.js.map | 2 +- dist/locales/dayjs/ht-js.js | 2 +- dist/locales/dayjs/ht-js.js.map | 2 +- dist/locales/dayjs/hu-js.js | 2 +- dist/locales/dayjs/hu-js.js.map | 2 +- dist/locales/dayjs/hy-am-js.js | 2 +- dist/locales/dayjs/hy-am-js.js.map | 2 +- dist/locales/dayjs/id-js.js | 2 +- dist/locales/dayjs/id-js.js.map | 2 +- dist/locales/dayjs/is-js.js | 2 +- dist/locales/dayjs/is-js.js.map | 2 +- dist/locales/dayjs/it-ch-js.js | 2 +- dist/locales/dayjs/it-ch-js.js.map | 2 +- dist/locales/dayjs/it-js.js | 2 +- dist/locales/dayjs/it-js.js.map | 2 +- dist/locales/dayjs/ja-js.js | 2 +- dist/locales/dayjs/ja-js.js.map | 2 +- dist/locales/dayjs/jv-js.js | 2 +- dist/locales/dayjs/jv-js.js.map | 2 +- dist/locales/dayjs/ka-js.js | 2 +- dist/locales/dayjs/ka-js.js.map | 2 +- dist/locales/dayjs/kk-js.js | 2 +- dist/locales/dayjs/kk-js.js.map | 2 +- dist/locales/dayjs/km-js.js | 2 +- dist/locales/dayjs/km-js.js.map | 2 +- dist/locales/dayjs/kn-js.js | 2 +- dist/locales/dayjs/kn-js.js.map | 2 +- dist/locales/dayjs/ko-js.js | 2 +- dist/locales/dayjs/ko-js.js.map | 2 +- dist/locales/dayjs/ku-js.js | 2 +- dist/locales/dayjs/ku-js.js.map | 2 +- dist/locales/dayjs/ky-js.js | 2 +- dist/locales/dayjs/ky-js.js.map | 2 +- dist/locales/dayjs/lb-js.js | 2 +- dist/locales/dayjs/lb-js.js.map | 2 +- dist/locales/dayjs/lo-js.js | 2 +- dist/locales/dayjs/lo-js.js.map | 2 +- dist/locales/dayjs/lt-js.js | 2 +- dist/locales/dayjs/lt-js.js.map | 2 +- dist/locales/dayjs/lv-js.js | 2 +- dist/locales/dayjs/lv-js.js.map | 2 +- dist/locales/dayjs/me-js.js | 2 +- dist/locales/dayjs/me-js.js.map | 2 +- dist/locales/dayjs/mi-js.js | 2 +- dist/locales/dayjs/mi-js.js.map | 2 +- dist/locales/dayjs/mk-js.js | 2 +- dist/locales/dayjs/mk-js.js.map | 2 +- dist/locales/dayjs/ml-js.js | 2 +- dist/locales/dayjs/ml-js.js.map | 2 +- dist/locales/dayjs/mn-js.js | 2 +- dist/locales/dayjs/mn-js.js.map | 2 +- dist/locales/dayjs/mr-js.js | 2 +- dist/locales/dayjs/mr-js.js.map | 2 +- dist/locales/dayjs/ms-js.js | 2 +- dist/locales/dayjs/ms-js.js.map | 2 +- dist/locales/dayjs/ms-my-js.js | 2 +- dist/locales/dayjs/ms-my-js.js.map | 2 +- dist/locales/dayjs/mt-js.js | 2 +- dist/locales/dayjs/mt-js.js.map | 2 +- dist/locales/dayjs/my-js.js | 2 +- dist/locales/dayjs/my-js.js.map | 2 +- dist/locales/dayjs/nb-js.js | 2 +- dist/locales/dayjs/nb-js.js.map | 2 +- dist/locales/dayjs/ne-js.js | 2 +- dist/locales/dayjs/ne-js.js.map | 2 +- dist/locales/dayjs/nl-be-js.js | 2 +- dist/locales/dayjs/nl-be-js.js.map | 2 +- dist/locales/dayjs/nl-js.js | 2 +- dist/locales/dayjs/nl-js.js.map | 2 +- dist/locales/dayjs/nn-js.js | 2 +- dist/locales/dayjs/nn-js.js.map | 2 +- dist/locales/dayjs/oc-lnc-js.js | 2 +- dist/locales/dayjs/oc-lnc-js.js.map | 2 +- dist/locales/dayjs/pa-in-js.js | 2 +- dist/locales/dayjs/pa-in-js.js.map | 2 +- dist/locales/dayjs/pl-js.js | 2 +- dist/locales/dayjs/pl-js.js.map | 2 +- dist/locales/dayjs/pt-br-js.js | 2 +- dist/locales/dayjs/pt-br-js.js.map | 2 +- dist/locales/dayjs/pt-js.js | 2 +- dist/locales/dayjs/pt-js.js.map | 2 +- dist/locales/dayjs/ro-js.js | 2 +- dist/locales/dayjs/ro-js.js.map | 2 +- dist/locales/dayjs/ru-js.js | 2 +- dist/locales/dayjs/ru-js.js.map | 2 +- dist/locales/dayjs/rw-js.js | 2 +- dist/locales/dayjs/rw-js.js.map | 2 +- dist/locales/dayjs/sd-js.js | 2 +- dist/locales/dayjs/sd-js.js.map | 2 +- dist/locales/dayjs/se-js.js | 2 +- dist/locales/dayjs/se-js.js.map | 2 +- dist/locales/dayjs/si-js.js | 2 +- dist/locales/dayjs/si-js.js.map | 2 +- dist/locales/dayjs/sk-js.js | 2 +- dist/locales/dayjs/sk-js.js.map | 2 +- dist/locales/dayjs/sl-js.js | 2 +- dist/locales/dayjs/sl-js.js.map | 2 +- dist/locales/dayjs/sq-js.js | 2 +- dist/locales/dayjs/sq-js.js.map | 2 +- dist/locales/dayjs/sr-cyrl-js.js | 2 +- dist/locales/dayjs/sr-cyrl-js.js.map | 2 +- dist/locales/dayjs/sr-js.js | 2 +- dist/locales/dayjs/sr-js.js.map | 2 +- dist/locales/dayjs/ss-js.js | 2 +- dist/locales/dayjs/ss-js.js.map | 2 +- dist/locales/dayjs/sv-fi-js.js | 2 + dist/locales/dayjs/sv-fi-js.js.map | 1 + dist/locales/dayjs/sv-js.js | 2 +- dist/locales/dayjs/sv-js.js.map | 2 +- dist/locales/dayjs/sw-js.js | 2 +- dist/locales/dayjs/sw-js.js.map | 2 +- dist/locales/dayjs/ta-js.js | 2 +- dist/locales/dayjs/ta-js.js.map | 2 +- dist/locales/dayjs/te-js.js | 2 +- dist/locales/dayjs/te-js.js.map | 2 +- dist/locales/dayjs/tet-js.js | 2 +- dist/locales/dayjs/tet-js.js.map | 2 +- dist/locales/dayjs/tg-js.js | 2 +- dist/locales/dayjs/tg-js.js.map | 2 +- dist/locales/dayjs/th-js.js | 2 +- dist/locales/dayjs/th-js.js.map | 2 +- dist/locales/dayjs/tk-js.js | 2 +- dist/locales/dayjs/tk-js.js.map | 2 +- dist/locales/dayjs/tl-ph-js.js | 2 +- dist/locales/dayjs/tl-ph-js.js.map | 2 +- dist/locales/dayjs/tlh-js.js | 2 +- dist/locales/dayjs/tlh-js.js.map | 2 +- dist/locales/dayjs/tr-js.js | 2 +- dist/locales/dayjs/tr-js.js.map | 2 +- dist/locales/dayjs/tzl-js.js | 2 +- dist/locales/dayjs/tzl-js.js.map | 2 +- dist/locales/dayjs/tzm-js.js | 2 +- dist/locales/dayjs/tzm-js.js.map | 2 +- dist/locales/dayjs/tzm-latn-js.js | 2 +- dist/locales/dayjs/tzm-latn-js.js.map | 2 +- dist/locales/dayjs/ug-cn-js.js | 2 +- dist/locales/dayjs/ug-cn-js.js.map | 2 +- dist/locales/dayjs/uk-js.js | 2 +- dist/locales/dayjs/uk-js.js.map | 2 +- dist/locales/dayjs/ur-js.js | 2 +- dist/locales/dayjs/ur-js.js.map | 2 +- dist/locales/dayjs/uz-js.js | 2 +- dist/locales/dayjs/uz-js.js.map | 2 +- dist/locales/dayjs/uz-latn-js.js | 2 +- dist/locales/dayjs/uz-latn-js.js.map | 2 +- dist/locales/dayjs/vi-js.js | 2 +- dist/locales/dayjs/vi-js.js.map | 2 +- dist/locales/dayjs/x-pseudo-js.js | 2 +- dist/locales/dayjs/x-pseudo-js.js.map | 2 +- dist/locales/dayjs/yo-js.js | 2 +- dist/locales/dayjs/yo-js.js.map | 2 +- dist/locales/dayjs/zh-cn-js.js | 2 +- dist/locales/dayjs/zh-cn-js.js.map | 2 +- dist/locales/dayjs/zh-hk-js.js | 2 +- dist/locales/dayjs/zh-hk-js.js.map | 2 +- dist/locales/dayjs/zh-js.js | 2 +- dist/locales/dayjs/zh-js.js.map | 2 +- dist/locales/dayjs/zh-tw-js.js | 2 +- dist/locales/dayjs/zh-tw-js.js.map | 2 +- dist/locales/de-LC_MESSAGES-converse-po.js | 2 +- dist/locales/el-LC_MESSAGES-converse-po.js | 2 +- dist/locales/eo-LC_MESSAGES-converse-po.js | 2 +- dist/locales/es-LC_MESSAGES-converse-po.js | 2 +- dist/locales/eu-LC_MESSAGES-converse-po.js | 2 +- dist/locales/fa-LC_MESSAGES-converse-po.js | 2 +- dist/locales/fi-LC_MESSAGES-converse-po.js | 2 +- dist/locales/fr-LC_MESSAGES-converse-po.js | 2 +- dist/locales/gl-LC_MESSAGES-converse-po.js | 2 +- dist/locales/he-LC_MESSAGES-converse-po.js | 2 +- dist/locales/hi-LC_MESSAGES-converse-po.js | 2 +- dist/locales/hu-LC_MESSAGES-converse-po.js | 2 +- dist/locales/id-LC_MESSAGES-converse-po.js | 2 +- dist/locales/it-LC_MESSAGES-converse-po.js | 2 +- dist/locales/ja-LC_MESSAGES-converse-po.js | 2 +- dist/locales/lt-LC_MESSAGES-converse-po.js | 2 +- dist/locales/mr-LC_MESSAGES-converse-po.js | 2 +- dist/locales/nb-LC_MESSAGES-converse-po.js | 2 +- dist/locales/nl-LC_MESSAGES-converse-po.js | 2 +- dist/locales/nl_BE-LC_MESSAGES-converse-po.js | 2 +- dist/locales/oc-LC_MESSAGES-converse-po.js | 2 +- dist/locales/pl-LC_MESSAGES-converse-po.js | 2 +- dist/locales/pt-LC_MESSAGES-converse-po.js | 2 +- dist/locales/pt_BR-LC_MESSAGES-converse-po.js | 2 +- dist/locales/ro-LC_MESSAGES-converse-po.js | 2 +- dist/locales/ru-LC_MESSAGES-converse-po.js | 2 +- dist/locales/sv-LC_MESSAGES-converse-po.js | 2 +- dist/locales/th-LC_MESSAGES-converse-po.js | 2 +- dist/locales/tr-LC_MESSAGES-converse-po.js | 2 +- dist/locales/uk-LC_MESSAGES-converse-po.js | 2 +- dist/locales/vi-LC_MESSAGES-converse-po.js | 2 +- dist/locales/zh_CN-LC_MESSAGES-converse-po.js | 2 +- dist/locales/zh_TW-LC_MESSAGES-converse-po.js | 2 +- dist/website.css | 7 +- dist/website.css.map | 2 +- dist/website.min.css | 2 +- 329 files changed, 22389 insertions(+), 16400 deletions(-) create mode 100644 dist/images/logo/conversejs-filled.svg create mode 100644 dist/locales/dayjs/sv-fi-js.js create mode 100644 dist/locales/dayjs/sv-fi-js.js.map diff --git a/dist/converse.css b/dist/converse.css index 66f7797..727e794 100644 --- a/dist/converse.css +++ b/dist/converse.css @@ -4,27 +4,36 @@ * * Copyright (c) 2013-2021, JC Brand * Licensed under the Mozilla Public License - */@font-face{font-family:Baumans;font-style:normal;font-weight:400;src:local("Baumans Regular"),local("Baumans-Regular"),url(webfonts/baumans.ttf) format("truetype")}@font-face{font-family:Muli;font-style:normal;font-weight:400;src:local("Muli Regular"),local("Muli-Regular"),url(webfonts/muli.ttf) format("truetype")}@font-face{font-family:ConverseFontAwesomeBrands;font-style:normal;font-weight:400;src:url(webfonts/fa-brands-400.eot);src:url(webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-brands-400.woff2) format("woff2"),url(webfonts/fa-brands-400.woff) format("woff"),url(webfonts/fa-brands-400.ttf) format("truetype"),url(webfonts/fa-brands-400.svg#fontawesome) format("svg")}@font-face{font-family:ConverseFontAwesomeRegular;font-style:normal;font-weight:400;src:url(webfonts/fa-regular-400.eot);src:url(webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-regular-400.woff2) format("woff2"),url(webfonts/fa-regular-400.woff) format("woff"),url(webfonts/fa-regular-400.ttf) format("truetype"),url(webfonts/fa-regular-400.svg#fontawesome) format("svg");font-weight:400;font-style:normal}@font-face{font-family:ConverseFontAwesomeSolid;font-style:normal;font-weight:900;src:url(webfonts/fa-solid-900.eot);src:url(webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-solid-900.svg#fontawesome) format("svg"),url(webfonts/fa-solid-900.woff2) format("woff2"),url(webfonts/fa-solid-900.woff) format("woff"),url(webfonts/fa-solid-900.ttf) format("truetype")}.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scale(-1,1)}.fa-flip-vertical{transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:""}.fa-accessible-icon:before{content:""}.fa-accusoft:before{content:""}.fa-acquisitions-incorporated:before{content:""}.fa-ad:before{content:""}.fa-address-book:before{content:""}.fa-address-card:before{content:""}.fa-adjust:before{content:""}.fa-adn:before{content:""}.fa-adobe:before{content:""}.fa-adversal:before{content:""}.fa-affiliatetheme:before{content:""}.fa-air-freshener:before{content:""}.fa-airbnb:before{content:""}.fa-algolia:before{content:""}.fa-align-center:before{content:""}.fa-align-justify:before{content:""}.fa-align-left:before{content:""}.fa-align-right:before{content:""}.fa-alipay:before{content:""}.fa-allergies:before{content:""}.fa-amazon:before{content:""}.fa-amazon-pay:before{content:""}.fa-ambulance:before{content:""}.fa-american-sign-language-interpreting:before{content:""}.fa-amilia:before{content:""}.fa-anchor:before{content:""}.fa-android:before{content:""}.fa-angellist:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angry:before{content:""}.fa-angrycreative:before{content:""}.fa-angular:before{content:""}.fa-ankh:before{content:""}.fa-app-store:before{content:""}.fa-app-store-ios:before{content:""}.fa-apper:before{content:""}.fa-apple:before{content:""}.fa-apple-alt:before{content:""}.fa-apple-pay:before{content:""}.fa-archive:before{content:""}.fa-archway:before{content:""}.fa-arrow-alt-circle-down:before{content:""}.fa-arrow-alt-circle-left:before{content:""}.fa-arrow-alt-circle-right:before{content:""}.fa-arrow-alt-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-down:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrows-alt:before{content:""}.fa-arrows-alt-h:before{content:""}.fa-arrows-alt-v:before{content:""}.fa-artstation:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asterisk:before{content:""}.fa-asymmetrik:before{content:""}.fa-at:before{content:""}.fa-atlas:before{content:""}.fa-atlassian:before{content:""}.fa-atom:before{content:""}.fa-audible:before{content:""}.fa-audio-description:before{content:""}.fa-autoprefixer:before{content:""}.fa-avianex:before{content:""}.fa-aviato:before{content:""}.fa-award:before{content:""}.fa-aws:before{content:""}.fa-baby:before{content:""}.fa-baby-carriage:before{content:""}.fa-backspace:before{content:""}.fa-backward:before{content:""}.fa-bacon:before{content:""}.fa-bacteria:before{content:""}.fa-bacterium:before{content:""}.fa-bahai:before{content:""}.fa-balance-scale:before{content:""}.fa-balance-scale-left:before{content:""}.fa-balance-scale-right:before{content:""}.fa-ban:before{content:""}.fa-band-aid:before{content:""}.fa-bandcamp:before{content:""}.fa-barcode:before{content:""}.fa-bars:before{content:""}.fa-baseball-ball:before{content:""}.fa-basketball-ball:before{content:""}.fa-bath:before{content:""}.fa-battery-empty:before{content:""}.fa-battery-full:before{content:""}.fa-battery-half:before{content:""}.fa-battery-quarter:before{content:""}.fa-battery-three-quarters:before{content:""}.fa-battle-net:before{content:""}.fa-bed:before{content:""}.fa-beer:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-bell:before{content:""}.fa-bell-slash:before{content:""}.fa-bezier-curve:before{content:""}.fa-bible:before{content:""}.fa-bicycle:before{content:""}.fa-biking:before{content:""}.fa-bimobject:before{content:""}.fa-binoculars:before{content:""}.fa-biohazard:before{content:""}.fa-birthday-cake:before{content:""}.fa-bitbucket:before{content:""}.fa-bitcoin:before{content:""}.fa-bity:before{content:""}.fa-black-tie:before{content:""}.fa-blackberry:before{content:""}.fa-blender:before{content:""}.fa-blender-phone:before{content:""}.fa-blind:before{content:""}.fa-blog:before{content:""}.fa-blogger:before{content:""}.fa-blogger-b:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-bold:before{content:""}.fa-bolt:before{content:""}.fa-bomb:before{content:""}.fa-bone:before{content:""}.fa-bong:before{content:""}.fa-book:before{content:""}.fa-book-dead:before{content:""}.fa-book-medical:before{content:""}.fa-book-open:before{content:""}.fa-book-reader:before{content:""}.fa-bookmark:before{content:""}.fa-bootstrap:before{content:""}.fa-border-all:before{content:""}.fa-border-none:before{content:""}.fa-border-style:before{content:""}.fa-bowling-ball:before{content:""}.fa-box:before{content:""}.fa-box-open:before{content:""}.fa-box-tissue:before{content:""}.fa-boxes:before{content:""}.fa-braille:before{content:""}.fa-brain:before{content:""}.fa-bread-slice:before{content:""}.fa-briefcase:before{content:""}.fa-briefcase-medical:before{content:""}.fa-broadcast-tower:before{content:""}.fa-broom:before{content:""}.fa-brush:before{content:""}.fa-btc:before{content:""}.fa-buffer:before{content:""}.fa-bug:before{content:""}.fa-building:before{content:""}.fa-bullhorn:before{content:""}.fa-bullseye:before{content:""}.fa-burn:before{content:""}.fa-buromobelexperte:before{content:""}.fa-bus:before{content:""}.fa-bus-alt:before{content:""}.fa-business-time:before{content:""}.fa-buy-n-large:before{content:""}.fa-buysellads:before{content:""}.fa-calculator:before{content:""}.fa-calendar:before{content:""}.fa-calendar-alt:before{content:""}.fa-calendar-check:before{content:""}.fa-calendar-day:before{content:""}.fa-calendar-minus:before{content:""}.fa-calendar-plus:before{content:""}.fa-calendar-times:before{content:""}.fa-calendar-week:before{content:""}.fa-camera:before{content:""}.fa-camera-retro:before{content:""}.fa-campground:before{content:""}.fa-canadian-maple-leaf:before{content:""}.fa-candy-cane:before{content:""}.fa-cannabis:before{content:""}.fa-capsules:before{content:""}.fa-car:before{content:""}.fa-car-alt:before{content:""}.fa-car-battery:before{content:""}.fa-car-crash:before{content:""}.fa-car-side:before{content:""}.fa-caravan:before{content:""}.fa-caret-down:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-caret-square-down:before{content:""}.fa-caret-square-left:before{content:""}.fa-caret-square-right:before{content:""}.fa-caret-square-up:before{content:""}.fa-caret-up:before{content:""}.fa-carrot:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-cart-plus:before{content:""}.fa-cash-register:before{content:""}.fa-cat:before{content:""}.fa-cc-amazon-pay:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-apple-pay:before{content:""}.fa-cc-diners-club:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-cc-visa:before{content:""}.fa-centercode:before{content:""}.fa-centos:before{content:""}.fa-certificate:before{content:""}.fa-chair:before{content:""}.fa-chalkboard:before{content:""}.fa-chalkboard-teacher:before{content:""}.fa-charging-station:before{content:""}.fa-chart-area:before{content:""}.fa-chart-bar:before{content:""}.fa-chart-line:before{content:""}.fa-chart-pie:before{content:""}.fa-check:before{content:""}.fa-check-circle:before{content:""}.fa-check-double:before{content:""}.fa-check-square:before{content:""}.fa-cheese:before{content:""}.fa-chess:before{content:""}.fa-chess-bishop:before{content:""}.fa-chess-board:before{content:""}.fa-chess-king:before{content:""}.fa-chess-knight:before{content:""}.fa-chess-pawn:before{content:""}.fa-chess-queen:before{content:""}.fa-chess-rook:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-down:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-chevron-up:before{content:""}.fa-child:before{content:""}.fa-chrome:before{content:""}.fa-chromecast:before{content:""}.fa-church:before{content:""}.fa-circle:before{content:""}.fa-circle-notch:before{content:""}.fa-city:before{content:""}.fa-clinic-medical:before{content:""}.fa-clipboard:before{content:""}.fa-clipboard-check:before{content:""}.fa-clipboard-list:before{content:""}.fa-clock:before{content:""}.fa-clone:before{content:""}.fa-closed-captioning:before{content:""}.fa-cloud:before{content:""}.fa-cloud-download-alt:before{content:""}.fa-cloud-meatball:before{content:""}.fa-cloud-moon:before{content:""}.fa-cloud-moon-rain:before{content:""}.fa-cloud-rain:before{content:""}.fa-cloud-showers-heavy:before{content:""}.fa-cloud-sun:before{content:""}.fa-cloud-sun-rain:before{content:""}.fa-cloud-upload-alt:before{content:""}.fa-cloudscale:before{content:""}.fa-cloudsmith:before{content:""}.fa-cloudversify:before{content:""}.fa-cocktail:before{content:""}.fa-code:before{content:""}.fa-code-branch:before{content:""}.fa-codepen:before{content:""}.fa-codiepie:before{content:""}.fa-coffee:before{content:""}.fa-cog:before{content:""}.fa-cogs:before{content:""}.fa-coins:before{content:""}.fa-columns:before{content:""}.fa-comment:before{content:""}.fa-comment-alt:before{content:""}.fa-comment-dollar:before{content:""}.fa-comment-dots:before{content:""}.fa-comment-medical:before{content:""}.fa-comment-slash:before{content:""}.fa-comments:before{content:""}.fa-comments-dollar:before{content:""}.fa-compact-disc:before{content:""}.fa-compass:before{content:""}.fa-compress:before{content:""}.fa-compress-alt:before{content:""}.fa-compress-arrows-alt:before{content:""}.fa-concierge-bell:before{content:""}.fa-confluence:before{content:""}.fa-connectdevelop:before{content:""}.fa-contao:before{content:""}.fa-cookie:before{content:""}.fa-cookie-bite:before{content:""}.fa-copy:before{content:""}.fa-copyright:before{content:""}.fa-cotton-bureau:before{content:""}.fa-couch:before{content:""}.fa-cpanel:before{content:""}.fa-creative-commons:before{content:""}.fa-creative-commons-by:before{content:""}.fa-creative-commons-nc:before{content:""}.fa-creative-commons-nc-eu:before{content:""}.fa-creative-commons-nc-jp:before{content:""}.fa-creative-commons-nd:before{content:""}.fa-creative-commons-pd:before{content:""}.fa-creative-commons-pd-alt:before{content:""}.fa-creative-commons-remix:before{content:""}.fa-creative-commons-sa:before{content:""}.fa-creative-commons-sampling:before{content:""}.fa-creative-commons-sampling-plus:before{content:""}.fa-creative-commons-share:before{content:""}.fa-creative-commons-zero:before{content:""}.fa-credit-card:before{content:""}.fa-critical-role:before{content:""}.fa-crop:before{content:""}.fa-crop-alt:before{content:""}.fa-cross:before{content:""}.fa-crosshairs:before{content:""}.fa-crow:before{content:""}.fa-crown:before{content:""}.fa-crutch:before{content:""}.fa-css3:before{content:""}.fa-css3-alt:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-cut:before{content:""}.fa-cuttlefish:before{content:""}.fa-d-and-d:before{content:""}.fa-d-and-d-beyond:before{content:""}.fa-dailymotion:before{content:""}.fa-dashcube:before{content:""}.fa-database:before{content:""}.fa-deaf:before{content:""}.fa-deezer:before{content:""}.fa-delicious:before{content:""}.fa-democrat:before{content:""}.fa-deploydog:before{content:""}.fa-deskpro:before{content:""}.fa-desktop:before{content:""}.fa-dev:before{content:""}.fa-deviantart:before{content:""}.fa-dharmachakra:before{content:""}.fa-dhl:before{content:""}.fa-diagnoses:before{content:""}.fa-diaspora:before{content:""}.fa-dice:before{content:""}.fa-dice-d20:before{content:""}.fa-dice-d6:before{content:""}.fa-dice-five:before{content:""}.fa-dice-four:before{content:""}.fa-dice-one:before{content:""}.fa-dice-six:before{content:""}.fa-dice-three:before{content:""}.fa-dice-two:before{content:""}.fa-digg:before{content:""}.fa-digital-ocean:before{content:""}.fa-digital-tachograph:before{content:""}.fa-directions:before{content:""}.fa-discord:before{content:""}.fa-discourse:before{content:""}.fa-disease:before{content:""}.fa-divide:before{content:""}.fa-dizzy:before{content:""}.fa-dna:before{content:""}.fa-dochub:before{content:""}.fa-docker:before{content:""}.fa-dog:before{content:""}.fa-dollar-sign:before{content:""}.fa-dolly:before{content:""}.fa-dolly-flatbed:before{content:""}.fa-donate:before{content:""}.fa-door-closed:before{content:""}.fa-door-open:before{content:""}.fa-dot-circle:before{content:""}.fa-dove:before{content:""}.fa-download:before{content:""}.fa-draft2digital:before{content:""}.fa-drafting-compass:before{content:""}.fa-dragon:before{content:""}.fa-draw-polygon:before{content:""}.fa-dribbble:before{content:""}.fa-dribbble-square:before{content:""}.fa-dropbox:before{content:""}.fa-drum:before{content:""}.fa-drum-steelpan:before{content:""}.fa-drumstick-bite:before{content:""}.fa-drupal:before{content:""}.fa-dumbbell:before{content:""}.fa-dumpster:before{content:""}.fa-dumpster-fire:before{content:""}.fa-dungeon:before{content:""}.fa-dyalog:before{content:""}.fa-earlybirds:before{content:""}.fa-ebay:before{content:""}.fa-edge:before{content:""}.fa-edge-legacy:before{content:""}.fa-edit:before{content:""}.fa-egg:before{content:""}.fa-eject:before{content:""}.fa-elementor:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-ello:before{content:""}.fa-ember:before{content:""}.fa-empire:before{content:""}.fa-envelope:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-text:before{content:""}.fa-envelope-square:before{content:""}.fa-envira:before{content:""}.fa-equals:before{content:""}.fa-eraser:before{content:""}.fa-erlang:before{content:""}.fa-ethereum:before{content:""}.fa-ethernet:before{content:""}.fa-etsy:before{content:""}.fa-euro-sign:before{content:""}.fa-evernote:before{content:""}.fa-exchange-alt:before{content:""}.fa-exclamation:before{content:""}.fa-exclamation-circle:before{content:""}.fa-exclamation-triangle:before{content:""}.fa-expand:before{content:""}.fa-expand-alt:before{content:""}.fa-expand-arrows-alt:before{content:""}.fa-expeditedssl:before{content:""}.fa-external-link-alt:before{content:""}.fa-external-link-square-alt:before{content:""}.fa-eye:before{content:""}.fa-eye-dropper:before{content:""}.fa-eye-slash:before{content:""}.fa-facebook:before{content:""}.fa-facebook-f:before{content:""}.fa-facebook-messenger:before{content:""}.fa-facebook-square:before{content:""}.fa-fan:before{content:""}.fa-fantasy-flight-games:before{content:""}.fa-fast-backward:before{content:""}.fa-fast-forward:before{content:""}.fa-faucet:before{content:""}.fa-fax:before{content:""}.fa-feather:before{content:""}.fa-feather-alt:before{content:""}.fa-fedex:before{content:""}.fa-fedora:before{content:""}.fa-female:before{content:""}.fa-fighter-jet:before{content:""}.fa-figma:before{content:""}.fa-file:before{content:""}.fa-file-alt:before{content:""}.fa-file-archive:before{content:""}.fa-file-audio:before{content:""}.fa-file-code:before{content:""}.fa-file-contract:before{content:""}.fa-file-csv:before{content:""}.fa-file-download:before{content:""}.fa-file-excel:before{content:""}.fa-file-export:before{content:""}.fa-file-image:before{content:""}.fa-file-import:before{content:""}.fa-file-invoice:before{content:""}.fa-file-invoice-dollar:before{content:""}.fa-file-medical:before{content:""}.fa-file-medical-alt:before{content:""}.fa-file-pdf:before{content:""}.fa-file-powerpoint:before{content:""}.fa-file-prescription:before{content:""}.fa-file-signature:before{content:""}.fa-file-upload:before{content:""}.fa-file-video:before{content:""}.fa-file-word:before{content:""}.fa-fill:before{content:""}.fa-fill-drip:before{content:""}.fa-film:before{content:""}.fa-filter:before{content:""}.fa-fingerprint:before{content:""}.fa-fire:before{content:""}.fa-fire-alt:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-firefox:before{content:""}.fa-firefox-browser:before{content:""}.fa-first-aid:before{content:""}.fa-first-order:before{content:""}.fa-first-order-alt:before{content:""}.fa-firstdraft:before{content:""}.fa-fish:before{content:""}.fa-fist-raised:before{content:""}.fa-flag:before{content:""}.fa-flag-checkered:before{content:""}.fa-flag-usa:before{content:""}.fa-flask:before{content:""}.fa-flickr:before{content:""}.fa-flipboard:before{content:""}.fa-flushed:before{content:""}.fa-fly:before{content:""}.fa-folder:before{content:""}.fa-folder-minus:before{content:""}.fa-folder-open:before{content:""}.fa-folder-plus:before{content:""}.fa-font:before{content:""}.fa-font-awesome:before{content:""}.fa-font-awesome-alt:before{content:""}.fa-font-awesome-flag:before{content:""}.fa-font-awesome-logo-full:before{content:""}.fa-fonticons:before{content:""}.fa-fonticons-fi:before{content:""}.fa-football-ball:before{content:""}.fa-fort-awesome:before{content:""}.fa-fort-awesome-alt:before{content:""}.fa-forumbee:before{content:""}.fa-forward:before{content:""}.fa-foursquare:before{content:""}.fa-free-code-camp:before{content:""}.fa-freebsd:before{content:""}.fa-frog:before{content:""}.fa-frown:before{content:""}.fa-frown-open:before{content:""}.fa-fulcrum:before{content:""}.fa-funnel-dollar:before{content:""}.fa-futbol:before{content:""}.fa-galactic-republic:before{content:""}.fa-galactic-senate:before{content:""}.fa-gamepad:before{content:""}.fa-gas-pump:before{content:""}.fa-gavel:before{content:""}.fa-gem:before{content:""}.fa-genderless:before{content:""}.fa-get-pocket:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-ghost:before{content:""}.fa-gift:before{content:""}.fa-gifts:before{content:""}.fa-git:before{content:""}.fa-git-alt:before{content:""}.fa-git-square:before{content:""}.fa-github:before{content:""}.fa-github-alt:before{content:""}.fa-github-square:before{content:""}.fa-gitkraken:before{content:""}.fa-gitlab:before{content:""}.fa-gitter:before{content:""}.fa-glass-cheers:before{content:""}.fa-glass-martini:before{content:""}.fa-glass-martini-alt:before{content:""}.fa-glass-whiskey:before{content:""}.fa-glasses:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-globe:before{content:""}.fa-globe-africa:before{content:""}.fa-globe-americas:before{content:""}.fa-globe-asia:before{content:""}.fa-globe-europe:before{content:""}.fa-gofore:before{content:""}.fa-golf-ball:before{content:""}.fa-goodreads:before{content:""}.fa-goodreads-g:before{content:""}.fa-google:before{content:""}.fa-google-drive:before{content:""}.fa-google-pay:before{content:""}.fa-google-play:before{content:""}.fa-google-plus:before{content:""}.fa-google-plus-g:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-wallet:before{content:""}.fa-gopuram:before{content:""}.fa-graduation-cap:before{content:""}.fa-gratipay:before{content:""}.fa-grav:before{content:""}.fa-greater-than:before{content:""}.fa-greater-than-equal:before{content:""}.fa-grimace:before{content:""}.fa-grin:before{content:""}.fa-grin-alt:before{content:""}.fa-grin-beam:before{content:""}.fa-grin-beam-sweat:before{content:""}.fa-grin-hearts:before{content:""}.fa-grin-squint:before{content:""}.fa-grin-squint-tears:before{content:""}.fa-grin-stars:before{content:""}.fa-grin-tears:before{content:""}.fa-grin-tongue:before{content:""}.fa-grin-tongue-squint:before{content:""}.fa-grin-tongue-wink:before{content:""}.fa-grin-wink:before{content:""}.fa-grip-horizontal:before{content:""}.fa-grip-lines:before{content:""}.fa-grip-lines-vertical:before{content:""}.fa-grip-vertical:before{content:""}.fa-gripfire:before{content:""}.fa-grunt:before{content:""}.fa-guitar:before{content:""}.fa-gulp:before{content:""}.fa-h-square:before{content:""}.fa-hacker-news:before{content:""}.fa-hacker-news-square:before{content:""}.fa-hackerrank:before{content:""}.fa-hamburger:before{content:""}.fa-hammer:before{content:""}.fa-hamsa:before{content:""}.fa-hand-holding:before{content:""}.fa-hand-holding-heart:before{content:""}.fa-hand-holding-medical:before{content:""}.fa-hand-holding-usd:before{content:""}.fa-hand-holding-water:before{content:""}.fa-hand-lizard:before{content:""}.fa-hand-middle-finger:before{content:""}.fa-hand-paper:before{content:""}.fa-hand-peace:before{content:""}.fa-hand-point-down:before{content:""}.fa-hand-point-left:before{content:""}.fa-hand-point-right:before{content:""}.fa-hand-point-up:before{content:""}.fa-hand-pointer:before{content:""}.fa-hand-rock:before{content:""}.fa-hand-scissors:before{content:""}.fa-hand-sparkles:before{content:""}.fa-hand-spock:before{content:""}.fa-hands:before{content:""}.fa-hands-helping:before{content:""}.fa-hands-wash:before{content:""}.fa-handshake:before{content:""}.fa-handshake-alt-slash:before{content:""}.fa-handshake-slash:before{content:""}.fa-hanukiah:before{content:""}.fa-hard-hat:before{content:""}.fa-hashtag:before{content:""}.fa-hat-cowboy:before{content:""}.fa-hat-cowboy-side:before{content:""}.fa-hat-wizard:before{content:""}.fa-hdd:before{content:""}.fa-head-side-cough:before{content:""}.fa-head-side-cough-slash:before{content:""}.fa-head-side-mask:before{content:""}.fa-head-side-virus:before{content:""}.fa-heading:before{content:""}.fa-headphones:before{content:""}.fa-headphones-alt:before{content:""}.fa-headset:before{content:""}.fa-heart:before{content:""}.fa-heart-broken:before{content:""}.fa-heartbeat:before{content:""}.fa-helicopter:before{content:""}.fa-highlighter:before{content:""}.fa-hiking:before{content:""}.fa-hippo:before{content:""}.fa-hips:before{content:""}.fa-hire-a-helper:before{content:""}.fa-history:before{content:""}.fa-hockey-puck:before{content:""}.fa-holly-berry:before{content:""}.fa-home:before{content:""}.fa-hooli:before{content:""}.fa-hornbill:before{content:""}.fa-horse:before{content:""}.fa-horse-head:before{content:""}.fa-hospital:before{content:""}.fa-hospital-alt:before{content:""}.fa-hospital-symbol:before{content:""}.fa-hospital-user:before{content:""}.fa-hot-tub:before{content:""}.fa-hotdog:before{content:""}.fa-hotel:before{content:""}.fa-hotjar:before{content:""}.fa-hourglass:before{content:""}.fa-hourglass-end:before{content:""}.fa-hourglass-half:before{content:""}.fa-hourglass-start:before{content:""}.fa-house-damage:before{content:""}.fa-house-user:before{content:""}.fa-houzz:before{content:""}.fa-hryvnia:before{content:""}.fa-html5:before{content:""}.fa-hubspot:before{content:""}.fa-i-cursor:before{content:""}.fa-ice-cream:before{content:""}.fa-icicles:before{content:""}.fa-icons:before{content:""}.fa-id-badge:before{content:""}.fa-id-card:before{content:""}.fa-id-card-alt:before{content:""}.fa-ideal:before{content:""}.fa-igloo:before{content:""}.fa-image:before{content:""}.fa-images:before{content:""}.fa-imdb:before{content:""}.fa-inbox:before{content:""}.fa-indent:before{content:""}.fa-industry:before{content:""}.fa-infinity:before{content:""}.fa-info:before{content:""}.fa-info-circle:before{content:""}.fa-instagram:before{content:""}.fa-instagram-square:before{content:""}.fa-intercom:before{content:""}.fa-internet-explorer:before{content:""}.fa-invision:before{content:""}.fa-ioxhost:before{content:""}.fa-italic:before{content:""}.fa-itch-io:before{content:""}.fa-itunes:before{content:""}.fa-itunes-note:before{content:""}.fa-java:before{content:""}.fa-jedi:before{content:""}.fa-jedi-order:before{content:""}.fa-jenkins:before{content:""}.fa-jira:before{content:""}.fa-joget:before{content:""}.fa-joint:before{content:""}.fa-joomla:before{content:""}.fa-journal-whills:before{content:""}.fa-js:before{content:""}.fa-js-square:before{content:""}.fa-jsfiddle:before{content:""}.fa-kaaba:before{content:""}.fa-kaggle:before{content:""}.fa-key:before{content:""}.fa-keybase:before{content:""}.fa-keyboard:before{content:""}.fa-keycdn:before{content:""}.fa-khanda:before{content:""}.fa-kickstarter:before{content:""}.fa-kickstarter-k:before{content:""}.fa-kiss:before{content:""}.fa-kiss-beam:before{content:""}.fa-kiss-wink-heart:before{content:""}.fa-kiwi-bird:before{content:""}.fa-korvue:before{content:""}.fa-landmark:before{content:""}.fa-language:before{content:""}.fa-laptop:before{content:""}.fa-laptop-code:before{content:""}.fa-laptop-house:before{content:""}.fa-laptop-medical:before{content:""}.fa-laravel:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-laugh:before{content:""}.fa-laugh-beam:before{content:""}.fa-laugh-squint:before{content:""}.fa-laugh-wink:before{content:""}.fa-layer-group:before{content:""}.fa-leaf:before{content:""}.fa-leanpub:before{content:""}.fa-lemon:before{content:""}.fa-less:before{content:""}.fa-less-than:before{content:""}.fa-less-than-equal:before{content:""}.fa-level-down-alt:before{content:""}.fa-level-up-alt:before{content:""}.fa-life-ring:before{content:""}.fa-lightbulb:before{content:""}.fa-line:before{content:""}.fa-link:before{content:""}.fa-linkedin:before{content:""}.fa-linkedin-in:before{content:""}.fa-linode:before{content:""}.fa-linux:before{content:""}.fa-lira-sign:before{content:""}.fa-list:before{content:""}.fa-list-alt:before{content:""}.fa-list-ol:before{content:""}.fa-list-ul:before{content:""}.fa-location-arrow:before{content:""}.fa-lock:before{content:""}.fa-lock-open:before{content:""}.fa-long-arrow-alt-down:before{content:""}.fa-long-arrow-alt-left:before{content:""}.fa-long-arrow-alt-right:before{content:""}.fa-long-arrow-alt-up:before{content:""}.fa-low-vision:before{content:""}.fa-luggage-cart:before{content:""}.fa-lungs:before{content:""}.fa-lungs-virus:before{content:""}.fa-lyft:before{content:""}.fa-magento:before{content:""}.fa-magic:before{content:""}.fa-magnet:before{content:""}.fa-mail-bulk:before{content:""}.fa-mailchimp:before{content:""}.fa-male:before{content:""}.fa-mandalorian:before{content:""}.fa-map:before{content:""}.fa-map-marked:before{content:""}.fa-map-marked-alt:before{content:""}.fa-map-marker:before{content:""}.fa-map-marker-alt:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-markdown:before{content:""}.fa-marker:before{content:""}.fa-mars:before{content:""}.fa-mars-double:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mask:before{content:""}.fa-mastodon:before{content:""}.fa-maxcdn:before{content:""}.fa-mdb:before{content:""}.fa-medal:before{content:""}.fa-medapps:before{content:""}.fa-medium:before{content:""}.fa-medium-m:before{content:""}.fa-medkit:before{content:""}.fa-medrt:before{content:""}.fa-meetup:before{content:""}.fa-megaport:before{content:""}.fa-meh:before{content:""}.fa-meh-blank:before{content:""}.fa-meh-rolling-eyes:before{content:""}.fa-memory:before{content:""}.fa-mendeley:before{content:""}.fa-menorah:before{content:""}.fa-mercury:before{content:""}.fa-meteor:before{content:""}.fa-microblog:before{content:""}.fa-microchip:before{content:""}.fa-microphone:before{content:""}.fa-microphone-alt:before{content:""}.fa-microphone-alt-slash:before{content:""}.fa-microphone-slash:before{content:""}.fa-microscope:before{content:""}.fa-microsoft:before{content:""}.fa-minus:before{content:""}.fa-minus-circle:before{content:""}.fa-minus-square:before{content:""}.fa-mitten:before{content:""}.fa-mix:before{content:""}.fa-mixcloud:before{content:""}.fa-mixer:before{content:""}.fa-mizuni:before{content:""}.fa-mobile:before{content:""}.fa-mobile-alt:before{content:""}.fa-modx:before{content:""}.fa-monero:before{content:""}.fa-money-bill:before{content:""}.fa-money-bill-alt:before{content:""}.fa-money-bill-wave:before{content:""}.fa-money-bill-wave-alt:before{content:""}.fa-money-check:before{content:""}.fa-money-check-alt:before{content:""}.fa-monument:before{content:""}.fa-moon:before{content:""}.fa-mortar-pestle:before{content:""}.fa-mosque:before{content:""}.fa-motorcycle:before{content:""}.fa-mountain:before{content:""}.fa-mouse:before{content:""}.fa-mouse-pointer:before{content:""}.fa-mug-hot:before{content:""}.fa-music:before{content:""}.fa-napster:before{content:""}.fa-neos:before{content:""}.fa-network-wired:before{content:""}.fa-neuter:before{content:""}.fa-newspaper:before{content:""}.fa-nimblr:before{content:""}.fa-node:before{content:""}.fa-node-js:before{content:""}.fa-not-equal:before{content:""}.fa-notes-medical:before{content:""}.fa-npm:before{content:""}.fa-ns8:before{content:""}.fa-nutritionix:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-oil-can:before{content:""}.fa-old-republic:before{content:""}.fa-om:before{content:""}.fa-opencart:before{content:""}.fa-openid:before{content:""}.fa-opera:before{content:""}.fa-optin-monster:before{content:""}.fa-orcid:before{content:""}.fa-osi:before{content:""}.fa-otter:before{content:""}.fa-outdent:before{content:""}.fa-page4:before{content:""}.fa-pagelines:before{content:""}.fa-pager:before{content:""}.fa-paint-brush:before{content:""}.fa-paint-roller:before{content:""}.fa-palette:before{content:""}.fa-palfed:before{content:""}.fa-pallet:before{content:""}.fa-paper-plane:before{content:""}.fa-paperclip:before{content:""}.fa-parachute-box:before{content:""}.fa-paragraph:before{content:""}.fa-parking:before{content:""}.fa-passport:before{content:""}.fa-pastafarianism:before{content:""}.fa-paste:before{content:""}.fa-patreon:before{content:""}.fa-pause:before{content:""}.fa-pause-circle:before{content:""}.fa-paw:before{content:""}.fa-paypal:before{content:""}.fa-peace:before{content:""}.fa-pen:before{content:""}.fa-pen-alt:before{content:""}.fa-pen-fancy:before{content:""}.fa-pen-nib:before{content:""}.fa-pen-square:before{content:""}.fa-pencil-alt:before{content:""}.fa-pencil-ruler:before{content:""}.fa-penny-arcade:before{content:""}.fa-people-arrows:before{content:""}.fa-people-carry:before{content:""}.fa-pepper-hot:before{content:""}.fa-percent:before{content:""}.fa-percentage:before{content:""}.fa-periscope:before{content:""}.fa-person-booth:before{content:""}.fa-phabricator:before{content:""}.fa-phoenix-framework:before{content:""}.fa-phoenix-squadron:before{content:""}.fa-phone:before{content:""}.fa-phone-alt:before{content:""}.fa-phone-slash:before{content:""}.fa-phone-square:before{content:""}.fa-phone-square-alt:before{content:""}.fa-phone-volume:before{content:""}.fa-photo-video:before{content:""}.fa-php:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-pied-piper-hat:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-square:before{content:""}.fa-piggy-bank:before{content:""}.fa-pills:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-p:before{content:""}.fa-pinterest-square:before{content:""}.fa-pizza-slice:before{content:""}.fa-place-of-worship:before{content:""}.fa-plane:before{content:""}.fa-plane-arrival:before{content:""}.fa-plane-departure:before{content:""}.fa-plane-slash:before{content:""}.fa-play:before{content:""}.fa-play-circle:before{content:""}.fa-playstation:before{content:""}.fa-plug:before{content:""}.fa-plus:before{content:""}.fa-plus-circle:before{content:""}.fa-plus-square:before{content:""}.fa-podcast:before{content:""}.fa-poll:before{content:""}.fa-poll-h:before{content:""}.fa-poo:before{content:""}.fa-poo-storm:before{content:""}.fa-poop:before{content:""}.fa-portrait:before{content:""}.fa-pound-sign:before{content:""}.fa-power-off:before{content:""}.fa-pray:before{content:""}.fa-praying-hands:before{content:""}.fa-prescription:before{content:""}.fa-prescription-bottle:before{content:""}.fa-prescription-bottle-alt:before{content:""}.fa-print:before{content:""}.fa-procedures:before{content:""}.fa-product-hunt:before{content:""}.fa-project-diagram:before{content:""}.fa-pump-medical:before{content:""}.fa-pump-soap:before{content:""}.fa-pushed:before{content:""}.fa-puzzle-piece:before{content:""}.fa-python:before{content:""}.fa-qq:before{content:""}.fa-qrcode:before{content:""}.fa-question:before{content:""}.fa-question-circle:before{content:""}.fa-quidditch:before{content:""}.fa-quinscape:before{content:""}.fa-quora:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-quran:before{content:""}.fa-r-project:before{content:""}.fa-radiation:before{content:""}.fa-radiation-alt:before{content:""}.fa-rainbow:before{content:""}.fa-random:before{content:""}.fa-raspberry-pi:before{content:""}.fa-ravelry:before{content:""}.fa-react:before{content:""}.fa-reacteurope:before{content:""}.fa-readme:before{content:""}.fa-rebel:before{content:""}.fa-receipt:before{content:""}.fa-record-vinyl:before{content:""}.fa-recycle:before{content:""}.fa-red-river:before{content:""}.fa-reddit:before{content:""}.fa-reddit-alien:before{content:""}.fa-reddit-square:before{content:""}.fa-redhat:before{content:""}.fa-redo:before{content:""}.fa-redo-alt:before{content:""}.fa-registered:before{content:""}.fa-remove-format:before{content:""}.fa-renren:before{content:""}.fa-reply:before{content:""}.fa-reply-all:before{content:""}.fa-replyd:before{content:""}.fa-republican:before{content:""}.fa-researchgate:before{content:""}.fa-resolving:before{content:""}.fa-restroom:before{content:""}.fa-retweet:before{content:""}.fa-rev:before{content:""}.fa-ribbon:before{content:""}.fa-ring:before{content:""}.fa-road:before{content:""}.fa-robot:before{content:""}.fa-rocket:before{content:""}.fa-rocketchat:before{content:""}.fa-rockrms:before{content:""}.fa-route:before{content:""}.fa-rss:before{content:""}.fa-rss-square:before{content:""}.fa-ruble-sign:before{content:""}.fa-ruler:before{content:""}.fa-ruler-combined:before{content:""}.fa-ruler-horizontal:before{content:""}.fa-ruler-vertical:before{content:""}.fa-running:before{content:""}.fa-rupee-sign:before{content:""}.fa-rust:before{content:""}.fa-sad-cry:before{content:""}.fa-sad-tear:before{content:""}.fa-safari:before{content:""}.fa-salesforce:before{content:""}.fa-sass:before{content:""}.fa-satellite:before{content:""}.fa-satellite-dish:before{content:""}.fa-save:before{content:""}.fa-schlix:before{content:""}.fa-school:before{content:""}.fa-screwdriver:before{content:""}.fa-scribd:before{content:""}.fa-scroll:before{content:""}.fa-sd-card:before{content:""}.fa-search:before{content:""}.fa-search-dollar:before{content:""}.fa-search-location:before{content:""}.fa-search-minus:before{content:""}.fa-search-plus:before{content:""}.fa-searchengin:before{content:""}.fa-seedling:before{content:""}.fa-sellcast:before{content:""}.fa-sellsy:before{content:""}.fa-server:before{content:""}.fa-servicestack:before{content:""}.fa-shapes:before{content:""}.fa-share:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-share-square:before{content:""}.fa-shekel-sign:before{content:""}.fa-shield-alt:before{content:""}.fa-shield-virus:before{content:""}.fa-ship:before{content:""}.fa-shipping-fast:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-shoe-prints:before{content:""}.fa-shopify:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-shopping-cart:before{content:""}.fa-shopware:before{content:""}.fa-shower:before{content:""}.fa-shuttle-van:before{content:""}.fa-sign:before{content:""}.fa-sign-in-alt:before{content:""}.fa-sign-language:before{content:""}.fa-sign-out-alt:before{content:""}.fa-signal:before{content:""}.fa-signature:before{content:""}.fa-sim-card:before{content:""}.fa-simplybuilt:before{content:""}.fa-sink:before{content:""}.fa-sistrix:before{content:""}.fa-sitemap:before{content:""}.fa-sith:before{content:""}.fa-skating:before{content:""}.fa-sketch:before{content:""}.fa-skiing:before{content:""}.fa-skiing-nordic:before{content:""}.fa-skull:before{content:""}.fa-skull-crossbones:before{content:""}.fa-skyatlas:before{content:""}.fa-skype:before{content:""}.fa-slack:before{content:""}.fa-slack-hash:before{content:""}.fa-slash:before{content:""}.fa-sleigh:before{content:""}.fa-sliders-h:before{content:""}.fa-slideshare:before{content:""}.fa-smile:before{content:""}.fa-smile-beam:before{content:""}.fa-smile-wink:before{content:""}.fa-smog:before{content:""}.fa-smoking:before{content:""}.fa-smoking-ban:before{content:""}.fa-sms:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-snowboarding:before{content:""}.fa-snowflake:before{content:""}.fa-snowman:before{content:""}.fa-snowplow:before{content:""}.fa-soap:before{content:""}.fa-socks:before{content:""}.fa-solar-panel:before{content:""}.fa-sort:before{content:""}.fa-sort-alpha-down:before{content:""}.fa-sort-alpha-down-alt:before{content:""}.fa-sort-alpha-up:before{content:""}.fa-sort-alpha-up-alt:before{content:""}.fa-sort-amount-down:before{content:""}.fa-sort-amount-down-alt:before{content:""}.fa-sort-amount-up:before{content:""}.fa-sort-amount-up-alt:before{content:""}.fa-sort-down:before{content:""}.fa-sort-numeric-down:before{content:""}.fa-sort-numeric-down-alt:before{content:""}.fa-sort-numeric-up:before{content:""}.fa-sort-numeric-up-alt:before{content:""}.fa-sort-up:before{content:""}.fa-soundcloud:before{content:""}.fa-sourcetree:before{content:""}.fa-spa:before{content:""}.fa-space-shuttle:before{content:""}.fa-speakap:before{content:""}.fa-speaker-deck:before{content:""}.fa-spell-check:before{content:""}.fa-spider:before{content:""}.fa-spinner:before{content:""}.fa-splotch:before{content:""}.fa-spotify:before{content:""}.fa-spray-can:before{content:""}.fa-square:before{content:""}.fa-square-full:before{content:""}.fa-square-root-alt:before{content:""}.fa-squarespace:before{content:""}.fa-stack-exchange:before{content:""}.fa-stack-overflow:before{content:""}.fa-stackpath:before{content:""}.fa-stamp:before{content:""}.fa-star:before{content:""}.fa-star-and-crescent:before{content:""}.fa-star-half:before{content:""}.fa-star-half-alt:before{content:""}.fa-star-of-david:before{content:""}.fa-star-of-life:before{content:""}.fa-staylinked:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-steam-symbol:before{content:""}.fa-step-backward:before{content:""}.fa-step-forward:before{content:""}.fa-stethoscope:before{content:""}.fa-sticker-mule:before{content:""}.fa-sticky-note:before{content:""}.fa-stop:before{content:""}.fa-stop-circle:before{content:""}.fa-stopwatch:before{content:""}.fa-stopwatch-20:before{content:""}.fa-store:before{content:""}.fa-store-alt:before{content:""}.fa-store-alt-slash:before{content:""}.fa-store-slash:before{content:""}.fa-strava:before{content:""}.fa-stream:before{content:""}.fa-street-view:before{content:""}.fa-strikethrough:before{content:""}.fa-stripe:before{content:""}.fa-stripe-s:before{content:""}.fa-stroopwafel:before{content:""}.fa-studiovinari:before{content:""}.fa-stumbleupon:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-subscript:before{content:""}.fa-subway:before{content:""}.fa-suitcase:before{content:""}.fa-suitcase-rolling:before{content:""}.fa-sun:before{content:""}.fa-superpowers:before{content:""}.fa-superscript:before{content:""}.fa-supple:before{content:""}.fa-surprise:before{content:""}.fa-suse:before{content:""}.fa-swatchbook:before{content:""}.fa-swift:before{content:""}.fa-swimmer:before{content:""}.fa-swimming-pool:before{content:""}.fa-symfony:before{content:""}.fa-synagogue:before{content:""}.fa-sync:before{content:""}.fa-sync-alt:before{content:""}.fa-syringe:before{content:""}.fa-table:before{content:""}.fa-table-tennis:before{content:""}.fa-tablet:before{content:""}.fa-tablet-alt:before{content:""}.fa-tablets:before{content:""}.fa-tachometer-alt:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-tape:before{content:""}.fa-tasks:before{content:""}.fa-taxi:before{content:""}.fa-teamspeak:before{content:""}.fa-teeth:before{content:""}.fa-teeth-open:before{content:""}.fa-telegram:before{content:""}.fa-telegram-plane:before{content:""}.fa-temperature-high:before{content:""}.fa-temperature-low:before{content:""}.fa-tencent-weibo:before{content:""}.fa-tenge:before{content:""}.fa-terminal:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-th:before{content:""}.fa-th-large:before{content:""}.fa-th-list:before{content:""}.fa-the-red-yeti:before{content:""}.fa-theater-masks:before{content:""}.fa-themeco:before{content:""}.fa-themeisle:before{content:""}.fa-thermometer:before{content:""}.fa-thermometer-empty:before{content:""}.fa-thermometer-full:before{content:""}.fa-thermometer-half:before{content:""}.fa-thermometer-quarter:before{content:""}.fa-thermometer-three-quarters:before{content:""}.fa-think-peaks:before{content:""}.fa-thumbs-down:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbtack:before{content:""}.fa-ticket-alt:before{content:""}.fa-tiktok:before{content:""}.fa-times:before{content:""}.fa-times-circle:before{content:""}.fa-tint:before{content:""}.fa-tint-slash:before{content:""}.fa-tired:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-toilet:before{content:""}.fa-toilet-paper:before{content:""}.fa-toilet-paper-slash:before{content:""}.fa-toolbox:before{content:""}.fa-tools:before{content:""}.fa-tooth:before{content:""}.fa-torah:before{content:""}.fa-torii-gate:before{content:""}.fa-tractor:before{content:""}.fa-trade-federation:before{content:""}.fa-trademark:before{content:""}.fa-traffic-light:before{content:""}.fa-trailer:before{content:""}.fa-train:before{content:""}.fa-tram:before{content:""}.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-trash:before{content:""}.fa-trash-alt:before{content:""}.fa-trash-restore:before{content:""}.fa-trash-restore-alt:before{content:""}.fa-tree:before{content:""}.fa-trello:before{content:""}.fa-tripadvisor:before{content:""}.fa-trophy:before{content:""}.fa-truck:before{content:""}.fa-truck-loading:before{content:""}.fa-truck-monster:before{content:""}.fa-truck-moving:before{content:""}.fa-truck-pickup:before{content:""}.fa-tshirt:before{content:""}.fa-tty:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-tv:before{content:""}.fa-twitch:before{content:""}.fa-twitter:before{content:""}.fa-twitter-square:before{content:""}.fa-typo3:before{content:""}.fa-uber:before{content:""}.fa-ubuntu:before{content:""}.fa-uikit:before{content:""}.fa-umbraco:before{content:""}.fa-umbrella:before{content:""}.fa-umbrella-beach:before{content:""}.fa-underline:before{content:""}.fa-undo:before{content:""}.fa-undo-alt:before{content:""}.fa-uniregistry:before{content:""}.fa-unity:before{content:""}.fa-universal-access:before{content:""}.fa-university:before{content:""}.fa-unlink:before{content:""}.fa-unlock:before{content:""}.fa-unlock-alt:before{content:""}.fa-unsplash:before{content:""}.fa-untappd:before{content:""}.fa-upload:before{content:""}.fa-ups:before{content:""}.fa-usb:before{content:""}.fa-user:before{content:""}.fa-user-alt:before{content:""}.fa-user-alt-slash:before{content:""}.fa-user-astronaut:before{content:""}.fa-user-check:before{content:""}.fa-user-circle:before{content:""}.fa-user-clock:before{content:""}.fa-user-cog:before{content:""}.fa-user-edit:before{content:""}.fa-user-friends:before{content:""}.fa-user-graduate:before{content:""}.fa-user-injured:before{content:""}.fa-user-lock:before{content:""}.fa-user-md:before{content:""}.fa-user-minus:before{content:""}.fa-user-ninja:before{content:""}.fa-user-nurse:before{content:""}.fa-user-plus:before{content:""}.fa-user-secret:before{content:""}.fa-user-shield:before{content:""}.fa-user-slash:before{content:""}.fa-user-tag:before{content:""}.fa-user-tie:before{content:""}.fa-user-times:before{content:""}.fa-users:before{content:""}.fa-users-cog:before{content:""}.fa-users-slash:before{content:""}.fa-usps:before{content:""}.fa-ussunnah:before{content:""}.fa-utensil-spoon:before{content:""}.fa-utensils:before{content:""}.fa-vaadin:before{content:""}.fa-vector-square:before{content:""}.fa-venus:before{content:""}.fa-venus-double:before{content:""}.fa-venus-mars:before{content:""}.fa-viacoin:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-vial:before{content:""}.fa-vials:before{content:""}.fa-viber:before{content:""}.fa-video:before{content:""}.fa-video-slash:before{content:""}.fa-vihara:before{content:""}.fa-vimeo:before{content:""}.fa-vimeo-square:before{content:""}.fa-vimeo-v:before{content:""}.fa-vine:before{content:""}.fa-virus:before{content:""}.fa-virus-slash:before{content:""}.fa-viruses:before{content:""}.fa-vk:before{content:""}.fa-vnv:before{content:""}.fa-voicemail:before{content:""}.fa-volleyball-ball:before{content:""}.fa-volume-down:before{content:""}.fa-volume-mute:before{content:""}.fa-volume-off:before{content:""}.fa-volume-up:before{content:""}.fa-vote-yea:before{content:""}.fa-vr-cardboard:before{content:""}.fa-vuejs:before{content:""}.fa-walking:before{content:""}.fa-wallet:before{content:""}.fa-warehouse:before{content:""}.fa-water:before{content:""}.fa-wave-square:before{content:""}.fa-waze:before{content:""}.fa-weebly:before{content:""}.fa-weibo:before{content:""}.fa-weight:before{content:""}.fa-weight-hanging:before{content:""}.fa-weixin:before{content:""}.fa-whatsapp:before{content:""}.fa-whatsapp-square:before{content:""}.fa-wheelchair:before{content:""}.fa-whmcs:before{content:""}.fa-wifi:before{content:""}.fa-wikipedia-w:before{content:""}.fa-wind:before{content:""}.fa-window-close:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-windows:before{content:""}.fa-wine-bottle:before{content:""}.fa-wine-glass:before{content:""}.fa-wine-glass-alt:before{content:""}.fa-wix:before{content:""}.fa-wizards-of-the-coast:before{content:""}.fa-wolf-pack-battalion:before{content:""}.fa-won-sign:before{content:""}.fa-wordpress:before{content:""}.fa-wordpress-simple:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpexplorer:before{content:""}.fa-wpforms:before{content:""}.fa-wpressr:before{content:""}.fa-wrench:before{content:""}.fa-x-ray:before{content:""}.fa-xbox:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-y-combinator:before{content:""}.fa-yahoo:before{content:""}.fa-yammer:before{content:""}.fa-yandex:before{content:""}.fa-yandex-international:before{content:""}.fa-yarn:before{content:""}.fa-yelp:before{content:""}.fa-yen-sign:before{content:""}.fa-yin-yang:before{content:""}.fa-yoast:before{content:""}.fa-youtube:before{content:""}.fa-youtube-square:before{content:""}.fa-zhihu:before{content:""}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.converse-website converse-icon:before,.conversejs converse-icon:before{content:none!important}.converse-website .far:not(converse-icon),.conversejs .far:not(converse-icon){font-family:ConverseFontAwesomeRegular!important;font-weight:400}.converse-website .fa:not(converse-icon),.converse-website .fas:not(converse-icon),.conversejs .fa:not(converse-icon),.conversejs .fas:not(converse-icon){font-family:ConverseFontAwesomeSolid!important;font-weight:900}.converse-website .fab:not(converse-icon),.conversejs .fab:not(converse-icon){font-family:ConverseFontAwesomeBrands}.converse-website .fa:not(converse-icon),.converse-website .fab:not(converse-icon),.converse-website .far:not(converse-icon),.converse-website .fas:not(converse-icon),.conversejs .fa:not(converse-icon),.conversejs .fab:not(converse-icon),.conversejs .far:not(converse-icon),.conversejs .fas:not(converse-icon){display:inline-block;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.converse-website .fa-info-circle,.conversejs .fa-info-circle{height:1em}.conversejs :root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.conversejs *,.conversejs ::after,.conversejs ::before{box-sizing:border-box}.conversejs html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}.conversejs article,.conversejs aside,.conversejs figcaption,.conversejs figure,.conversejs footer,.conversejs header,.conversejs hgroup,.conversejs main,.conversejs nav,.conversejs section{display:block}.conversejs body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}.conversejs [tabindex="-1"]:focus:not(:focus-visible){outline:0!important}.conversejs hr{box-sizing:content-box;height:0;overflow:visible}.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6{margin-top:0;margin-bottom:.5rem}.conversejs p{margin-top:0;margin-bottom:1rem}.conversejs abbr[data-original-title],.conversejs abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}.conversejs address{margin-bottom:1rem;font-style:normal;line-height:inherit}.conversejs dl,.conversejs ol,.conversejs ul{margin-top:0;margin-bottom:1rem}.conversejs ol ol,.conversejs ol ul,.conversejs ul ol,.conversejs ul ul{margin-bottom:0}.conversejs dt{font-weight:700}.conversejs dd{margin-bottom:.5rem;margin-left:0}.conversejs blockquote{margin:0 0 1rem}.conversejs b,.conversejs strong{font-weight:bolder}.conversejs small{font-size:80%}.conversejs sub,.conversejs sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.conversejs sub{bottom:-.25em}.conversejs sup{top:-.5em}.conversejs a{color:#007bff;text-decoration:none;background-color:transparent}.conversejs a:hover{color:#0056b3;text-decoration:underline}.conversejs a:not([href]):not([class]){color:inherit;text-decoration:none}.conversejs a:not([href]):not([class]):hover{color:inherit;text-decoration:none}.conversejs code,.conversejs kbd,.conversejs pre,.conversejs samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}.conversejs pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}.conversejs figure{margin:0 0 1rem}.conversejs img{vertical-align:middle;border-style:none}.conversejs svg{overflow:hidden;vertical-align:middle}.conversejs table{border-collapse:collapse}.conversejs caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}.conversejs th{text-align:inherit;text-align:-webkit-match-parent}.conversejs label{display:inline-block;margin-bottom:.5rem}.conversejs button{border-radius:0}.conversejs button:focus:not(:focus-visible){outline:0}.conversejs button,.conversejs input,.conversejs optgroup,.conversejs select,.conversejs textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.conversejs button,.conversejs input{overflow:visible}.conversejs button,.conversejs select{text-transform:none}.conversejs [role=button]{cursor:pointer}.conversejs select{word-wrap:normal}.conversejs [type=button],.conversejs [type=reset],.conversejs [type=submit],.conversejs button{-webkit-appearance:button}.conversejs [type=button]:not(:disabled),.conversejs [type=reset]:not(:disabled),.conversejs [type=submit]:not(:disabled),.conversejs button:not(:disabled){cursor:pointer}.conversejs [type=button]::-moz-focus-inner,.conversejs [type=reset]::-moz-focus-inner,.conversejs [type=submit]::-moz-focus-inner,.conversejs button::-moz-focus-inner{padding:0;border-style:none}.conversejs input[type=checkbox],.conversejs input[type=radio]{box-sizing:border-box;padding:0}.conversejs textarea{overflow:auto;resize:vertical}.conversejs fieldset{min-width:0;padding:0;margin:0;border:0}.conversejs legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}.conversejs progress{vertical-align:baseline}.conversejs [type=number]::-webkit-inner-spin-button,.conversejs [type=number]::-webkit-outer-spin-button{height:auto}.conversejs [type=search]{outline-offset:-2px;-webkit-appearance:none}.conversejs [type=search]::-webkit-search-decoration{-webkit-appearance:none}.conversejs ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}.conversejs output{display:inline-block}.conversejs summary{display:list-item;cursor:pointer}.conversejs template{display:none}.conversejs [hidden]{display:none!important}.conversejs .h1,.conversejs .h2,.conversejs .h3,.conversejs .h4,.conversejs .h5,.conversejs .h6,.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.conversejs .h1,.conversejs h1{font-size:2.5rem}.conversejs .h2,.conversejs h2{font-size:2rem}.conversejs .h3,.conversejs h3{font-size:1.75rem}.conversejs .h4,.conversejs h4{font-size:1.5rem}.conversejs .h5,.conversejs h5{font-size:1.25rem}.conversejs .h6,.conversejs h6{font-size:1rem}.conversejs .lead{font-size:1.25rem;font-weight:300}.conversejs .display-1{font-size:6rem;font-weight:300;line-height:1.2}.conversejs .display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.conversejs .display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.conversejs .display-4{font-size:3.5rem;font-weight:300;line-height:1.2}.conversejs hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.conversejs .small,.conversejs small{font-size:80%;font-weight:400}.conversejs .mark,.conversejs mark{padding:.2em;background-color:#fcf8e3}.conversejs .list-unstyled{padding-left:0;list-style:none}.conversejs .list-inline{padding-left:0;list-style:none}.conversejs .list-inline-item{display:inline-block}.conversejs .list-inline-item:not(:last-child){margin-right:.5rem}.conversejs .initialism{font-size:90%;text-transform:uppercase}.conversejs .blockquote{margin-bottom:1rem;font-size:1.25rem}.conversejs .blockquote-footer{display:block;font-size:80%;color:#6c757d}.conversejs .blockquote-footer::before{content:"— "}.conversejs .img-fluid{max-width:100%;height:auto}.conversejs .img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.conversejs .figure{display:inline-block}.conversejs .figure-img{margin-bottom:.5rem;line-height:1}.conversejs .figure-caption{font-size:90%;color:#6c757d}.conversejs .container,.conversejs .container-fluid,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm,.conversejs .container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width:576px){.conversejs .container,.conversejs .container-sm{max-width:540px}}@media(min-width:768px){.conversejs .container,.conversejs .container-md,.conversejs .container-sm{max-width:720px}}@media(min-width:992px){.conversejs .container,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm{max-width:960px}}@media(min-width:1200px){.conversejs .container,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm,.conversejs .container-xl{max-width:1140px}}.conversejs .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.conversejs .no-gutters{margin-right:0;margin-left:0}.conversejs .no-gutters>.col,.conversejs .no-gutters>[class*=col-]{padding-right:0;padding-left:0}.conversejs .col,.conversejs .col-1,.conversejs .col-10,.conversejs .col-11,.conversejs .col-12,.conversejs .col-2,.conversejs .col-3,.conversejs .col-4,.conversejs .col-5,.conversejs .col-6,.conversejs .col-7,.conversejs .col-8,.conversejs .col-9,.conversejs .col-auto,.conversejs .col-lg,.conversejs .col-lg-1,.conversejs .col-lg-10,.conversejs .col-lg-11,.conversejs .col-lg-12,.conversejs .col-lg-2,.conversejs .col-lg-3,.conversejs .col-lg-4,.conversejs .col-lg-5,.conversejs .col-lg-6,.conversejs .col-lg-7,.conversejs .col-lg-8,.conversejs .col-lg-9,.conversejs .col-lg-auto,.conversejs .col-md,.conversejs .col-md-1,.conversejs .col-md-10,.conversejs .col-md-11,.conversejs .col-md-12,.conversejs .col-md-2,.conversejs .col-md-3,.conversejs .col-md-4,.conversejs .col-md-5,.conversejs .col-md-6,.conversejs .col-md-7,.conversejs .col-md-8,.conversejs .col-md-9,.conversejs .col-md-auto,.conversejs .col-sm,.conversejs .col-sm-1,.conversejs .col-sm-10,.conversejs .col-sm-11,.conversejs .col-sm-12,.conversejs .col-sm-2,.conversejs .col-sm-3,.conversejs .col-sm-4,.conversejs .col-sm-5,.conversejs .col-sm-6,.conversejs .col-sm-7,.conversejs .col-sm-8,.conversejs .col-sm-9,.conversejs .col-sm-auto,.conversejs .col-xl,.conversejs .col-xl-1,.conversejs .col-xl-10,.conversejs .col-xl-11,.conversejs .col-xl-12,.conversejs .col-xl-2,.conversejs .col-xl-3,.conversejs .col-xl-4,.conversejs .col-xl-5,.conversejs .col-xl-6,.conversejs .col-xl-7,.conversejs .col-xl-8,.conversejs .col-xl-9,.conversejs .col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.conversejs .col{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-3{flex:0 0 25%;max-width:25%}.conversejs .col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-6{flex:0 0 50%;max-width:50%}.conversejs .col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-9{flex:0 0 75%;max-width:75%}.conversejs .col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-12{flex:0 0 100%;max-width:100%}.conversejs .order-first{order:-1}.conversejs .order-last{order:13}.conversejs .order-0{order:0}.conversejs .order-1{order:1}.conversejs .order-2{order:2}.conversejs .order-3{order:3}.conversejs .order-4{order:4}.conversejs .order-5{order:5}.conversejs .order-6{order:6}.conversejs .order-7{order:7}.conversejs .order-8{order:8}.conversejs .order-9{order:9}.conversejs .order-10{order:10}.conversejs .order-11{order:11}.conversejs .order-12{order:12}.conversejs .offset-1{margin-left:8.3333333333%}.conversejs .offset-2{margin-left:16.6666666667%}.conversejs .offset-3{margin-left:25%}.conversejs .offset-4{margin-left:33.3333333333%}.conversejs .offset-5{margin-left:41.6666666667%}.conversejs .offset-6{margin-left:50%}.conversejs .offset-7{margin-left:58.3333333333%}.conversejs .offset-8{margin-left:66.6666666667%}.conversejs .offset-9{margin-left:75%}.conversejs .offset-10{margin-left:83.3333333333%}.conversejs .offset-11{margin-left:91.6666666667%}@media(min-width:576px){.conversejs .col-sm{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-sm-3{flex:0 0 25%;max-width:25%}.conversejs .col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-sm-6{flex:0 0 50%;max-width:50%}.conversejs .col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-sm-9{flex:0 0 75%;max-width:75%}.conversejs .col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-sm-12{flex:0 0 100%;max-width:100%}.conversejs .order-sm-first{order:-1}.conversejs .order-sm-last{order:13}.conversejs .order-sm-0{order:0}.conversejs .order-sm-1{order:1}.conversejs .order-sm-2{order:2}.conversejs .order-sm-3{order:3}.conversejs .order-sm-4{order:4}.conversejs .order-sm-5{order:5}.conversejs .order-sm-6{order:6}.conversejs .order-sm-7{order:7}.conversejs .order-sm-8{order:8}.conversejs .order-sm-9{order:9}.conversejs .order-sm-10{order:10}.conversejs .order-sm-11{order:11}.conversejs .order-sm-12{order:12}.conversejs .offset-sm-0{margin-left:0}.conversejs .offset-sm-1{margin-left:8.3333333333%}.conversejs .offset-sm-2{margin-left:16.6666666667%}.conversejs .offset-sm-3{margin-left:25%}.conversejs .offset-sm-4{margin-left:33.3333333333%}.conversejs .offset-sm-5{margin-left:41.6666666667%}.conversejs .offset-sm-6{margin-left:50%}.conversejs .offset-sm-7{margin-left:58.3333333333%}.conversejs .offset-sm-8{margin-left:66.6666666667%}.conversejs .offset-sm-9{margin-left:75%}.conversejs .offset-sm-10{margin-left:83.3333333333%}.conversejs .offset-sm-11{margin-left:91.6666666667%}}@media(min-width:768px){.conversejs .col-md{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-md-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-md-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-md-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-md-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-md-3{flex:0 0 25%;max-width:25%}.conversejs .col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-md-6{flex:0 0 50%;max-width:50%}.conversejs .col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-md-9{flex:0 0 75%;max-width:75%}.conversejs .col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-md-12{flex:0 0 100%;max-width:100%}.conversejs .order-md-first{order:-1}.conversejs .order-md-last{order:13}.conversejs .order-md-0{order:0}.conversejs .order-md-1{order:1}.conversejs .order-md-2{order:2}.conversejs .order-md-3{order:3}.conversejs .order-md-4{order:4}.conversejs .order-md-5{order:5}.conversejs .order-md-6{order:6}.conversejs .order-md-7{order:7}.conversejs .order-md-8{order:8}.conversejs .order-md-9{order:9}.conversejs .order-md-10{order:10}.conversejs .order-md-11{order:11}.conversejs .order-md-12{order:12}.conversejs .offset-md-0{margin-left:0}.conversejs .offset-md-1{margin-left:8.3333333333%}.conversejs .offset-md-2{margin-left:16.6666666667%}.conversejs .offset-md-3{margin-left:25%}.conversejs .offset-md-4{margin-left:33.3333333333%}.conversejs .offset-md-5{margin-left:41.6666666667%}.conversejs .offset-md-6{margin-left:50%}.conversejs .offset-md-7{margin-left:58.3333333333%}.conversejs .offset-md-8{margin-left:66.6666666667%}.conversejs .offset-md-9{margin-left:75%}.conversejs .offset-md-10{margin-left:83.3333333333%}.conversejs .offset-md-11{margin-left:91.6666666667%}}@media(min-width:992px){.conversejs .col-lg{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-lg-3{flex:0 0 25%;max-width:25%}.conversejs .col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-lg-6{flex:0 0 50%;max-width:50%}.conversejs .col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-lg-9{flex:0 0 75%;max-width:75%}.conversejs .col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-lg-12{flex:0 0 100%;max-width:100%}.conversejs .order-lg-first{order:-1}.conversejs .order-lg-last{order:13}.conversejs .order-lg-0{order:0}.conversejs .order-lg-1{order:1}.conversejs .order-lg-2{order:2}.conversejs .order-lg-3{order:3}.conversejs .order-lg-4{order:4}.conversejs .order-lg-5{order:5}.conversejs .order-lg-6{order:6}.conversejs .order-lg-7{order:7}.conversejs .order-lg-8{order:8}.conversejs .order-lg-9{order:9}.conversejs .order-lg-10{order:10}.conversejs .order-lg-11{order:11}.conversejs .order-lg-12{order:12}.conversejs .offset-lg-0{margin-left:0}.conversejs .offset-lg-1{margin-left:8.3333333333%}.conversejs .offset-lg-2{margin-left:16.6666666667%}.conversejs .offset-lg-3{margin-left:25%}.conversejs .offset-lg-4{margin-left:33.3333333333%}.conversejs .offset-lg-5{margin-left:41.6666666667%}.conversejs .offset-lg-6{margin-left:50%}.conversejs .offset-lg-7{margin-left:58.3333333333%}.conversejs .offset-lg-8{margin-left:66.6666666667%}.conversejs .offset-lg-9{margin-left:75%}.conversejs .offset-lg-10{margin-left:83.3333333333%}.conversejs .offset-lg-11{margin-left:91.6666666667%}}@media(min-width:1200px){.conversejs .col-xl{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-xl-3{flex:0 0 25%;max-width:25%}.conversejs .col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-xl-6{flex:0 0 50%;max-width:50%}.conversejs .col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-xl-9{flex:0 0 75%;max-width:75%}.conversejs .col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-xl-12{flex:0 0 100%;max-width:100%}.conversejs .order-xl-first{order:-1}.conversejs .order-xl-last{order:13}.conversejs .order-xl-0{order:0}.conversejs .order-xl-1{order:1}.conversejs .order-xl-2{order:2}.conversejs .order-xl-3{order:3}.conversejs .order-xl-4{order:4}.conversejs .order-xl-5{order:5}.conversejs .order-xl-6{order:6}.conversejs .order-xl-7{order:7}.conversejs .order-xl-8{order:8}.conversejs .order-xl-9{order:9}.conversejs .order-xl-10{order:10}.conversejs .order-xl-11{order:11}.conversejs .order-xl-12{order:12}.conversejs .offset-xl-0{margin-left:0}.conversejs .offset-xl-1{margin-left:8.3333333333%}.conversejs .offset-xl-2{margin-left:16.6666666667%}.conversejs .offset-xl-3{margin-left:25%}.conversejs .offset-xl-4{margin-left:33.3333333333%}.conversejs .offset-xl-5{margin-left:41.6666666667%}.conversejs .offset-xl-6{margin-left:50%}.conversejs .offset-xl-7{margin-left:58.3333333333%}.conversejs .offset-xl-8{margin-left:66.6666666667%}.conversejs .offset-xl-9{margin-left:75%}.conversejs .offset-xl-10{margin-left:83.3333333333%}.conversejs .offset-xl-11{margin-left:91.6666666667%}}.conversejs .fade{transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.conversejs .fade{transition:none}}.conversejs .fade:not(.show){opacity:0}.conversejs .collapse:not(.show){display:none}.conversejs .collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion:reduce){.conversejs .collapsing{transition:none}}.conversejs .dropdown,.conversejs .dropleft,.conversejs .dropright,.conversejs .dropup{position:relative}.conversejs .dropdown-toggle{white-space:nowrap}.conversejs .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.conversejs .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.conversejs .dropdown-menu-left{right:auto;left:0}.conversejs .dropdown-menu-right{right:0;left:auto}@media(min-width:576px){.conversejs .dropdown-menu-sm-left{right:auto;left:0}.conversejs .dropdown-menu-sm-right{right:0;left:auto}}@media(min-width:768px){.conversejs .dropdown-menu-md-left{right:auto;left:0}.conversejs .dropdown-menu-md-right{right:0;left:auto}}@media(min-width:992px){.conversejs .dropdown-menu-lg-left{right:auto;left:0}.conversejs .dropdown-menu-lg-right{right:0;left:auto}}@media(min-width:1200px){.conversejs .dropdown-menu-xl-left{right:auto;left:0}.conversejs .dropdown-menu-xl-right{right:0;left:auto}}.conversejs .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.conversejs .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.conversejs .dropup .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.conversejs .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.conversejs .dropright .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-toggle::after{vertical-align:0}.conversejs .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.conversejs .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.conversejs .dropleft .dropdown-toggle::after{display:none}.conversejs .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.conversejs .dropleft .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropleft .dropdown-toggle::before{vertical-align:0}.conversejs .dropdown-menu[x-placement^=bottom],.conversejs .dropdown-menu[x-placement^=left],.conversejs .dropdown-menu[x-placement^=right],.conversejs .dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.conversejs .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.conversejs .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.conversejs .dropdown-item:focus,.conversejs .dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.conversejs .dropdown-item.active,.conversejs .dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.conversejs .dropdown-item.disabled,.conversejs .dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.conversejs .dropdown-menu.show{display:block}.conversejs .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.conversejs .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.conversejs .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.conversejs .nav-link{display:block;padding:.5rem 1rem}.conversejs .nav-link:focus,.conversejs .nav-link:hover{text-decoration:none}.conversejs .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.conversejs .nav-tabs{border-bottom:1px solid #dee2e6}.conversejs .nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.conversejs .nav-tabs .nav-link:focus,.conversejs .nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.conversejs .nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.conversejs .nav-tabs .nav-item.show .nav-link,.conversejs .nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.conversejs .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.conversejs .nav-pills .nav-link{border-radius:.25rem}.conversejs .nav-pills .nav-link.active,.conversejs .nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.conversejs .nav-fill .nav-item,.conversejs .nav-fill>.nav-link{flex:1 1 auto;text-align:center}.conversejs .nav-justified .nav-item,.conversejs .nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.conversejs .tab-content>.tab-pane{display:none}.conversejs .tab-content>.active{display:block}.conversejs .alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.conversejs .alert-heading{color:inherit}.conversejs .alert-link{font-weight:700}.conversejs .alert-dismissible{padding-right:4rem}.conversejs .alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.conversejs .alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.conversejs .alert-primary hr{border-top-color:#9fcdff}.conversejs .alert-primary .alert-link{color:#002752}.conversejs .alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.conversejs .alert-secondary hr{border-top-color:#c8cbcf}.conversejs .alert-secondary .alert-link{color:#202326}.conversejs .alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.conversejs .alert-success hr{border-top-color:#b1dfbb}.conversejs .alert-success .alert-link{color:#0b2e13}.conversejs .alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.conversejs .alert-info hr{border-top-color:#abdde5}.conversejs .alert-info .alert-link{color:#062c33}.conversejs .alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.conversejs .alert-warning hr{border-top-color:#ffe8a1}.conversejs .alert-warning .alert-link{color:#533f03}.conversejs .alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.conversejs .alert-danger hr{border-top-color:#f1b0b7}.conversejs .alert-danger .alert-link{color:#491217}.conversejs .alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.conversejs .alert-light hr{border-top-color:#ececf6}.conversejs .alert-light .alert-link{color:#686868}.conversejs .alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.conversejs .alert-dark hr{border-top-color:#b9bbbe}.conversejs .alert-dark .alert-link{color:#040505}.conversejs .media{display:flex;align-items:flex-start}.conversejs .media-body{flex:1}.conversejs .close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.conversejs .close:hover{color:#000;text-decoration:none}.conversejs .close:not(:disabled):not(.disabled):focus,.conversejs .close:not(:disabled):not(.disabled):hover{opacity:.75}.conversejs button.close{padding:0;background-color:transparent;border:0}.conversejs a.close.disabled{pointer-events:none}.conversejs .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.conversejs .popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.conversejs .popover .arrow::after,.conversejs .popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.conversejs .bs-popover-auto[x-placement^=top],.conversejs .bs-popover-top{margin-bottom:.5rem}.conversejs .bs-popover-auto[x-placement^=top]>.arrow,.conversejs .bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.conversejs .bs-popover-auto[x-placement^=top]>.arrow::before,.conversejs .bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=top]>.arrow::after,.conversejs .bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.conversejs .bs-popover-auto[x-placement^=right],.conversejs .bs-popover-right{margin-left:.5rem}.conversejs .bs-popover-auto[x-placement^=right]>.arrow,.conversejs .bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.conversejs .bs-popover-auto[x-placement^=right]>.arrow::before,.conversejs .bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=right]>.arrow::after,.conversejs .bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.conversejs .bs-popover-auto[x-placement^=bottom],.conversejs .bs-popover-bottom{margin-top:.5rem}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow,.conversejs .bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::before,.conversejs .bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::after,.conversejs .bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.conversejs .bs-popover-auto[x-placement^=bottom] .popover-header::before,.conversejs .bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.conversejs .bs-popover-auto[x-placement^=left],.conversejs .bs-popover-left{margin-right:.5rem}.conversejs .bs-popover-auto[x-placement^=left]>.arrow,.conversejs .bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.conversejs .bs-popover-auto[x-placement^=left]>.arrow::before,.conversejs .bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=left]>.arrow::after,.conversejs .bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.conversejs .popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.conversejs .popover-header:empty{display:none}.conversejs .popover-body{padding:.5rem .75rem;color:#212529}.conversejs .align-baseline{vertical-align:baseline!important}.conversejs .align-top{vertical-align:top!important}.conversejs .align-middle{vertical-align:middle!important}.conversejs .align-bottom{vertical-align:bottom!important}.conversejs .align-text-bottom{vertical-align:text-bottom!important}.conversejs .align-text-top{vertical-align:text-top!important}.conversejs .bg-primary{background-color:#007bff!important}.conversejs a.bg-primary:focus,.conversejs a.bg-primary:hover,.conversejs button.bg-primary:focus,.conversejs button.bg-primary:hover{background-color:#0062cc!important}.conversejs .bg-secondary{background-color:#6c757d!important}.conversejs a.bg-secondary:focus,.conversejs a.bg-secondary:hover,.conversejs button.bg-secondary:focus,.conversejs button.bg-secondary:hover{background-color:#545b62!important}.conversejs .bg-success{background-color:#28a745!important}.conversejs a.bg-success:focus,.conversejs a.bg-success:hover,.conversejs button.bg-success:focus,.conversejs button.bg-success:hover{background-color:#1e7e34!important}.conversejs .bg-info{background-color:#17a2b8!important}.conversejs a.bg-info:focus,.conversejs a.bg-info:hover,.conversejs button.bg-info:focus,.conversejs button.bg-info:hover{background-color:#117a8b!important}.conversejs .bg-warning{background-color:#ffc107!important}.conversejs a.bg-warning:focus,.conversejs a.bg-warning:hover,.conversejs button.bg-warning:focus,.conversejs button.bg-warning:hover{background-color:#d39e00!important}.conversejs .bg-danger{background-color:#dc3545!important}.conversejs a.bg-danger:focus,.conversejs a.bg-danger:hover,.conversejs button.bg-danger:focus,.conversejs button.bg-danger:hover{background-color:#bd2130!important}.conversejs .bg-light{background-color:#f8f9fa!important}.conversejs a.bg-light:focus,.conversejs a.bg-light:hover,.conversejs button.bg-light:focus,.conversejs button.bg-light:hover{background-color:#dae0e5!important}.conversejs .bg-dark{background-color:#343a40!important}.conversejs a.bg-dark:focus,.conversejs a.bg-dark:hover,.conversejs button.bg-dark:focus,.conversejs button.bg-dark:hover{background-color:#1d2124!important}.conversejs .bg-white{background-color:#fff!important}.conversejs .bg-transparent{background-color:transparent!important}.conversejs .border{border:1px solid #dee2e6!important}.conversejs .border-top{border-top:1px solid #dee2e6!important}.conversejs .border-right{border-right:1px solid #dee2e6!important}.conversejs .border-bottom{border-bottom:1px solid #dee2e6!important}.conversejs .border-left{border-left:1px solid #dee2e6!important}.conversejs .border-0{border:0!important}.conversejs .border-top-0{border-top:0!important}.conversejs .border-right-0{border-right:0!important}.conversejs .border-bottom-0{border-bottom:0!important}.conversejs .border-left-0{border-left:0!important}.conversejs .border-primary{border-color:#007bff!important}.conversejs .border-secondary{border-color:#6c757d!important}.conversejs .border-success{border-color:#28a745!important}.conversejs .border-info{border-color:#17a2b8!important}.conversejs .border-warning{border-color:#ffc107!important}.conversejs .border-danger{border-color:#dc3545!important}.conversejs .border-light{border-color:#f8f9fa!important}.conversejs .border-dark{border-color:#343a40!important}.conversejs .border-white{border-color:#fff!important}.conversejs .rounded-sm{border-radius:.2rem!important}.conversejs .rounded{border-radius:.25rem!important}.conversejs .rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.conversejs .rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.conversejs .rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.conversejs .rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.conversejs .rounded-lg{border-radius:.3rem!important}.conversejs .rounded-circle{border-radius:50%!important}.conversejs .rounded-pill{border-radius:50rem!important}.conversejs .rounded-0{border-radius:0!important}.conversejs .clearfix::after{display:block;clear:both;content:""}.conversejs .d-none{display:none!important}.conversejs .d-inline{display:inline!important}.conversejs .d-inline-block{display:inline-block!important}.conversejs .d-block{display:block!important}.conversejs .d-table{display:table!important}.conversejs .d-table-row{display:table-row!important}.conversejs .d-table-cell{display:table-cell!important}.conversejs .d-flex{display:flex!important}.conversejs .d-inline-flex{display:inline-flex!important}@media(min-width:576px){.conversejs .d-sm-none{display:none!important}.conversejs .d-sm-inline{display:inline!important}.conversejs .d-sm-inline-block{display:inline-block!important}.conversejs .d-sm-block{display:block!important}.conversejs .d-sm-table{display:table!important}.conversejs .d-sm-table-row{display:table-row!important}.conversejs .d-sm-table-cell{display:table-cell!important}.conversejs .d-sm-flex{display:flex!important}.conversejs .d-sm-inline-flex{display:inline-flex!important}}@media(min-width:768px){.conversejs .d-md-none{display:none!important}.conversejs .d-md-inline{display:inline!important}.conversejs .d-md-inline-block{display:inline-block!important}.conversejs .d-md-block{display:block!important}.conversejs .d-md-table{display:table!important}.conversejs .d-md-table-row{display:table-row!important}.conversejs .d-md-table-cell{display:table-cell!important}.conversejs .d-md-flex{display:flex!important}.conversejs .d-md-inline-flex{display:inline-flex!important}}@media(min-width:992px){.conversejs .d-lg-none{display:none!important}.conversejs .d-lg-inline{display:inline!important}.conversejs .d-lg-inline-block{display:inline-block!important}.conversejs .d-lg-block{display:block!important}.conversejs .d-lg-table{display:table!important}.conversejs .d-lg-table-row{display:table-row!important}.conversejs .d-lg-table-cell{display:table-cell!important}.conversejs .d-lg-flex{display:flex!important}.conversejs .d-lg-inline-flex{display:inline-flex!important}}@media(min-width:1200px){.conversejs .d-xl-none{display:none!important}.conversejs .d-xl-inline{display:inline!important}.conversejs .d-xl-inline-block{display:inline-block!important}.conversejs .d-xl-block{display:block!important}.conversejs .d-xl-table{display:table!important}.conversejs .d-xl-table-row{display:table-row!important}.conversejs .d-xl-table-cell{display:table-cell!important}.conversejs .d-xl-flex{display:flex!important}.conversejs .d-xl-inline-flex{display:inline-flex!important}}@media print{.conversejs .d-print-none{display:none!important}.conversejs .d-print-inline{display:inline!important}.conversejs .d-print-inline-block{display:inline-block!important}.conversejs .d-print-block{display:block!important}.conversejs .d-print-table{display:table!important}.conversejs .d-print-table-row{display:table-row!important}.conversejs .d-print-table-cell{display:table-cell!important}.conversejs .d-print-flex{display:flex!important}.conversejs .d-print-inline-flex{display:inline-flex!important}}.conversejs .embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.conversejs .embed-responsive::before{display:block;content:""}.conversejs .embed-responsive .embed-responsive-item,.conversejs .embed-responsive embed,.conversejs .embed-responsive iframe,.conversejs .embed-responsive object,.conversejs .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.conversejs .embed-responsive-21by9::before{padding-top:42.8571428571%}.conversejs .embed-responsive-16by9::before{padding-top:56.25%}.conversejs .embed-responsive-4by3::before{padding-top:75%}.conversejs .embed-responsive-1by1::before{padding-top:100%}.conversejs .flex-row{flex-direction:row!important}.conversejs .flex-column{flex-direction:column!important}.conversejs .flex-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-wrap{flex-wrap:wrap!important}.conversejs .flex-nowrap{flex-wrap:nowrap!important}.conversejs .flex-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-fill{flex:1 1 auto!important}.conversejs .flex-grow-0{flex-grow:0!important}.conversejs .flex-grow-1{flex-grow:1!important}.conversejs .flex-shrink-0{flex-shrink:0!important}.conversejs .flex-shrink-1{flex-shrink:1!important}.conversejs .justify-content-start{justify-content:flex-start!important}.conversejs .justify-content-end{justify-content:flex-end!important}.conversejs .justify-content-center{justify-content:center!important}.conversejs .justify-content-between{justify-content:space-between!important}.conversejs .justify-content-around{justify-content:space-around!important}.conversejs .align-items-start{align-items:flex-start!important}.conversejs .align-items-end{align-items:flex-end!important}.conversejs .align-items-center{align-items:center!important}.conversejs .align-items-baseline{align-items:baseline!important}.conversejs .align-items-stretch{align-items:stretch!important}.conversejs .align-content-start{align-content:flex-start!important}.conversejs .align-content-end{align-content:flex-end!important}.conversejs .align-content-center{align-content:center!important}.conversejs .align-content-between{align-content:space-between!important}.conversejs .align-content-around{align-content:space-around!important}.conversejs .align-content-stretch{align-content:stretch!important}.conversejs .align-self-auto{align-self:auto!important}.conversejs .align-self-start{align-self:flex-start!important}.conversejs .align-self-end{align-self:flex-end!important}.conversejs .align-self-center{align-self:center!important}.conversejs .align-self-baseline{align-self:baseline!important}.conversejs .align-self-stretch{align-self:stretch!important}@media(min-width:576px){.conversejs .flex-sm-row{flex-direction:row!important}.conversejs .flex-sm-column{flex-direction:column!important}.conversejs .flex-sm-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-sm-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-sm-wrap{flex-wrap:wrap!important}.conversejs .flex-sm-nowrap{flex-wrap:nowrap!important}.conversejs .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-sm-fill{flex:1 1 auto!important}.conversejs .flex-sm-grow-0{flex-grow:0!important}.conversejs .flex-sm-grow-1{flex-grow:1!important}.conversejs .flex-sm-shrink-0{flex-shrink:0!important}.conversejs .flex-sm-shrink-1{flex-shrink:1!important}.conversejs .justify-content-sm-start{justify-content:flex-start!important}.conversejs .justify-content-sm-end{justify-content:flex-end!important}.conversejs .justify-content-sm-center{justify-content:center!important}.conversejs .justify-content-sm-between{justify-content:space-between!important}.conversejs .justify-content-sm-around{justify-content:space-around!important}.conversejs .align-items-sm-start{align-items:flex-start!important}.conversejs .align-items-sm-end{align-items:flex-end!important}.conversejs .align-items-sm-center{align-items:center!important}.conversejs .align-items-sm-baseline{align-items:baseline!important}.conversejs .align-items-sm-stretch{align-items:stretch!important}.conversejs .align-content-sm-start{align-content:flex-start!important}.conversejs .align-content-sm-end{align-content:flex-end!important}.conversejs .align-content-sm-center{align-content:center!important}.conversejs .align-content-sm-between{align-content:space-between!important}.conversejs .align-content-sm-around{align-content:space-around!important}.conversejs .align-content-sm-stretch{align-content:stretch!important}.conversejs .align-self-sm-auto{align-self:auto!important}.conversejs .align-self-sm-start{align-self:flex-start!important}.conversejs .align-self-sm-end{align-self:flex-end!important}.conversejs .align-self-sm-center{align-self:center!important}.conversejs .align-self-sm-baseline{align-self:baseline!important}.conversejs .align-self-sm-stretch{align-self:stretch!important}}@media(min-width:768px){.conversejs .flex-md-row{flex-direction:row!important}.conversejs .flex-md-column{flex-direction:column!important}.conversejs .flex-md-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-md-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-md-wrap{flex-wrap:wrap!important}.conversejs .flex-md-nowrap{flex-wrap:nowrap!important}.conversejs .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-md-fill{flex:1 1 auto!important}.conversejs .flex-md-grow-0{flex-grow:0!important}.conversejs .flex-md-grow-1{flex-grow:1!important}.conversejs .flex-md-shrink-0{flex-shrink:0!important}.conversejs .flex-md-shrink-1{flex-shrink:1!important}.conversejs .justify-content-md-start{justify-content:flex-start!important}.conversejs .justify-content-md-end{justify-content:flex-end!important}.conversejs .justify-content-md-center{justify-content:center!important}.conversejs .justify-content-md-between{justify-content:space-between!important}.conversejs .justify-content-md-around{justify-content:space-around!important}.conversejs .align-items-md-start{align-items:flex-start!important}.conversejs .align-items-md-end{align-items:flex-end!important}.conversejs .align-items-md-center{align-items:center!important}.conversejs .align-items-md-baseline{align-items:baseline!important}.conversejs .align-items-md-stretch{align-items:stretch!important}.conversejs .align-content-md-start{align-content:flex-start!important}.conversejs .align-content-md-end{align-content:flex-end!important}.conversejs .align-content-md-center{align-content:center!important}.conversejs .align-content-md-between{align-content:space-between!important}.conversejs .align-content-md-around{align-content:space-around!important}.conversejs .align-content-md-stretch{align-content:stretch!important}.conversejs .align-self-md-auto{align-self:auto!important}.conversejs .align-self-md-start{align-self:flex-start!important}.conversejs .align-self-md-end{align-self:flex-end!important}.conversejs .align-self-md-center{align-self:center!important}.conversejs .align-self-md-baseline{align-self:baseline!important}.conversejs .align-self-md-stretch{align-self:stretch!important}}@media(min-width:992px){.conversejs .flex-lg-row{flex-direction:row!important}.conversejs .flex-lg-column{flex-direction:column!important}.conversejs .flex-lg-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-lg-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-lg-wrap{flex-wrap:wrap!important}.conversejs .flex-lg-nowrap{flex-wrap:nowrap!important}.conversejs .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-lg-fill{flex:1 1 auto!important}.conversejs .flex-lg-grow-0{flex-grow:0!important}.conversejs .flex-lg-grow-1{flex-grow:1!important}.conversejs .flex-lg-shrink-0{flex-shrink:0!important}.conversejs .flex-lg-shrink-1{flex-shrink:1!important}.conversejs .justify-content-lg-start{justify-content:flex-start!important}.conversejs .justify-content-lg-end{justify-content:flex-end!important}.conversejs .justify-content-lg-center{justify-content:center!important}.conversejs .justify-content-lg-between{justify-content:space-between!important}.conversejs .justify-content-lg-around{justify-content:space-around!important}.conversejs .align-items-lg-start{align-items:flex-start!important}.conversejs .align-items-lg-end{align-items:flex-end!important}.conversejs .align-items-lg-center{align-items:center!important}.conversejs .align-items-lg-baseline{align-items:baseline!important}.conversejs .align-items-lg-stretch{align-items:stretch!important}.conversejs .align-content-lg-start{align-content:flex-start!important}.conversejs .align-content-lg-end{align-content:flex-end!important}.conversejs .align-content-lg-center{align-content:center!important}.conversejs .align-content-lg-between{align-content:space-between!important}.conversejs .align-content-lg-around{align-content:space-around!important}.conversejs .align-content-lg-stretch{align-content:stretch!important}.conversejs .align-self-lg-auto{align-self:auto!important}.conversejs .align-self-lg-start{align-self:flex-start!important}.conversejs .align-self-lg-end{align-self:flex-end!important}.conversejs .align-self-lg-center{align-self:center!important}.conversejs .align-self-lg-baseline{align-self:baseline!important}.conversejs .align-self-lg-stretch{align-self:stretch!important}}@media(min-width:1200px){.conversejs .flex-xl-row{flex-direction:row!important}.conversejs .flex-xl-column{flex-direction:column!important}.conversejs .flex-xl-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-xl-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-xl-wrap{flex-wrap:wrap!important}.conversejs .flex-xl-nowrap{flex-wrap:nowrap!important}.conversejs .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-xl-fill{flex:1 1 auto!important}.conversejs .flex-xl-grow-0{flex-grow:0!important}.conversejs .flex-xl-grow-1{flex-grow:1!important}.conversejs .flex-xl-shrink-0{flex-shrink:0!important}.conversejs .flex-xl-shrink-1{flex-shrink:1!important}.conversejs .justify-content-xl-start{justify-content:flex-start!important}.conversejs .justify-content-xl-end{justify-content:flex-end!important}.conversejs .justify-content-xl-center{justify-content:center!important}.conversejs .justify-content-xl-between{justify-content:space-between!important}.conversejs .justify-content-xl-around{justify-content:space-around!important}.conversejs .align-items-xl-start{align-items:flex-start!important}.conversejs .align-items-xl-end{align-items:flex-end!important}.conversejs .align-items-xl-center{align-items:center!important}.conversejs .align-items-xl-baseline{align-items:baseline!important}.conversejs .align-items-xl-stretch{align-items:stretch!important}.conversejs .align-content-xl-start{align-content:flex-start!important}.conversejs .align-content-xl-end{align-content:flex-end!important}.conversejs .align-content-xl-center{align-content:center!important}.conversejs .align-content-xl-between{align-content:space-between!important}.conversejs .align-content-xl-around{align-content:space-around!important}.conversejs .align-content-xl-stretch{align-content:stretch!important}.conversejs .align-self-xl-auto{align-self:auto!important}.conversejs .align-self-xl-start{align-self:flex-start!important}.conversejs .align-self-xl-end{align-self:flex-end!important}.conversejs .align-self-xl-center{align-self:center!important}.conversejs .align-self-xl-baseline{align-self:baseline!important}.conversejs .align-self-xl-stretch{align-self:stretch!important}}.conversejs .float-left{float:left!important}.conversejs .float-right{float:right!important}.conversejs .float-none{float:none!important}@media(min-width:576px){.conversejs .float-sm-left{float:left!important}.conversejs .float-sm-right{float:right!important}.conversejs .float-sm-none{float:none!important}}@media(min-width:768px){.conversejs .float-md-left{float:left!important}.conversejs .float-md-right{float:right!important}.conversejs .float-md-none{float:none!important}}@media(min-width:992px){.conversejs .float-lg-left{float:left!important}.conversejs .float-lg-right{float:right!important}.conversejs .float-lg-none{float:none!important}}@media(min-width:1200px){.conversejs .float-xl-left{float:left!important}.conversejs .float-xl-right{float:right!important}.conversejs .float-xl-none{float:none!important}}.conversejs .user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.conversejs .user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.conversejs .user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.conversejs .overflow-auto{overflow:auto!important}.conversejs .overflow-hidden{overflow:hidden!important}.conversejs .position-static{position:static!important}.conversejs .position-relative{position:relative!important}.conversejs .position-absolute{position:absolute!important}.conversejs .position-fixed{position:fixed!important}.conversejs .position-sticky{position:-webkit-sticky!important;position:sticky!important}.conversejs .fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.conversejs .fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports((position:-webkit-sticky) or (position:sticky)){.conversejs .sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.conversejs .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.conversejs .sr-only-focusable:active,.conversejs .sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.conversejs .shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.conversejs .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.conversejs .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.conversejs .shadow-none{box-shadow:none!important}.conversejs .w-25{width:25%!important}.conversejs .w-50{width:50%!important}.conversejs .w-75{width:75%!important}.conversejs .w-100{width:100%!important}.conversejs .w-auto{width:auto!important}.conversejs .h-25{height:25%!important}.conversejs .h-50{height:50%!important}.conversejs .h-75{height:75%!important}.conversejs .h-100{height:100%!important}.conversejs .h-auto{height:auto!important}.conversejs .mw-100{max-width:100%!important}.conversejs .mh-100{max-height:100%!important}.conversejs .min-vw-100{min-width:100vw!important}.conversejs .min-vh-100{min-height:100vh!important}.conversejs .vw-100{width:100vw!important}.conversejs .vh-100{height:100vh!important}.conversejs .m-0{margin:0!important}.conversejs .mt-0,.conversejs .my-0{margin-top:0!important}.conversejs .mr-0,.conversejs .mx-0{margin-right:0!important}.conversejs .mb-0,.conversejs .my-0{margin-bottom:0!important}.conversejs .ml-0,.conversejs .mx-0{margin-left:0!important}.conversejs .m-1{margin:.25rem!important}.conversejs .mt-1,.conversejs .my-1{margin-top:.25rem!important}.conversejs .mr-1,.conversejs .mx-1{margin-right:.25rem!important}.conversejs .mb-1,.conversejs .my-1{margin-bottom:.25rem!important}.conversejs .ml-1,.conversejs .mx-1{margin-left:.25rem!important}.conversejs .m-2{margin:.5rem!important}.conversejs .mt-2,.conversejs .my-2{margin-top:.5rem!important}.conversejs .mr-2,.conversejs .mx-2{margin-right:.5rem!important}.conversejs .mb-2,.conversejs .my-2{margin-bottom:.5rem!important}.conversejs .ml-2,.conversejs .mx-2{margin-left:.5rem!important}.conversejs .m-3{margin:1rem!important}.conversejs .mt-3,.conversejs .my-3{margin-top:1rem!important}.conversejs .mr-3,.conversejs .mx-3{margin-right:1rem!important}.conversejs .mb-3,.conversejs .my-3{margin-bottom:1rem!important}.conversejs .ml-3,.conversejs .mx-3{margin-left:1rem!important}.conversejs .m-4{margin:1.5rem!important}.conversejs .mt-4,.conversejs .my-4{margin-top:1.5rem!important}.conversejs .mr-4,.conversejs .mx-4{margin-right:1.5rem!important}.conversejs .mb-4,.conversejs .my-4{margin-bottom:1.5rem!important}.conversejs .ml-4,.conversejs .mx-4{margin-left:1.5rem!important}.conversejs .m-5{margin:3rem!important}.conversejs .mt-5,.conversejs .my-5{margin-top:3rem!important}.conversejs .mr-5,.conversejs .mx-5{margin-right:3rem!important}.conversejs .mb-5,.conversejs .my-5{margin-bottom:3rem!important}.conversejs .ml-5,.conversejs .mx-5{margin-left:3rem!important}.conversejs .p-0{padding:0!important}.conversejs .pt-0,.conversejs .py-0{padding-top:0!important}.conversejs .pr-0,.conversejs .px-0{padding-right:0!important}.conversejs .pb-0,.conversejs .py-0{padding-bottom:0!important}.conversejs .pl-0,.conversejs .px-0{padding-left:0!important}.conversejs .p-1{padding:.25rem!important}.conversejs .pt-1,.conversejs .py-1{padding-top:.25rem!important}.conversejs .pr-1,.conversejs .px-1{padding-right:.25rem!important}.conversejs .pb-1,.conversejs .py-1{padding-bottom:.25rem!important}.conversejs .pl-1,.conversejs .px-1{padding-left:.25rem!important}.conversejs .p-2{padding:.5rem!important}.conversejs .pt-2,.conversejs .py-2{padding-top:.5rem!important}.conversejs .pr-2,.conversejs .px-2{padding-right:.5rem!important}.conversejs .pb-2,.conversejs .py-2{padding-bottom:.5rem!important}.conversejs .pl-2,.conversejs .px-2{padding-left:.5rem!important}.conversejs .p-3{padding:1rem!important}.conversejs .pt-3,.conversejs .py-3{padding-top:1rem!important}.conversejs .pr-3,.conversejs .px-3{padding-right:1rem!important}.conversejs .pb-3,.conversejs .py-3{padding-bottom:1rem!important}.conversejs .pl-3,.conversejs .px-3{padding-left:1rem!important}.conversejs .p-4{padding:1.5rem!important}.conversejs .pt-4,.conversejs .py-4{padding-top:1.5rem!important}.conversejs .pr-4,.conversejs .px-4{padding-right:1.5rem!important}.conversejs .pb-4,.conversejs .py-4{padding-bottom:1.5rem!important}.conversejs .pl-4,.conversejs .px-4{padding-left:1.5rem!important}.conversejs .p-5{padding:3rem!important}.conversejs .pt-5,.conversejs .py-5{padding-top:3rem!important}.conversejs .pr-5,.conversejs .px-5{padding-right:3rem!important}.conversejs .pb-5,.conversejs .py-5{padding-bottom:3rem!important}.conversejs .pl-5,.conversejs .px-5{padding-left:3rem!important}.conversejs .m-n1{margin:-.25rem!important}.conversejs .mt-n1,.conversejs .my-n1{margin-top:-.25rem!important}.conversejs .mr-n1,.conversejs .mx-n1{margin-right:-.25rem!important}.conversejs .mb-n1,.conversejs .my-n1{margin-bottom:-.25rem!important}.conversejs .ml-n1,.conversejs .mx-n1{margin-left:-.25rem!important}.conversejs .m-n2{margin:-.5rem!important}.conversejs .mt-n2,.conversejs .my-n2{margin-top:-.5rem!important}.conversejs .mr-n2,.conversejs .mx-n2{margin-right:-.5rem!important}.conversejs .mb-n2,.conversejs .my-n2{margin-bottom:-.5rem!important}.conversejs .ml-n2,.conversejs .mx-n2{margin-left:-.5rem!important}.conversejs .m-n3{margin:-1rem!important}.conversejs .mt-n3,.conversejs .my-n3{margin-top:-1rem!important}.conversejs .mr-n3,.conversejs .mx-n3{margin-right:-1rem!important}.conversejs .mb-n3,.conversejs .my-n3{margin-bottom:-1rem!important}.conversejs .ml-n3,.conversejs .mx-n3{margin-left:-1rem!important}.conversejs .m-n4{margin:-1.5rem!important}.conversejs .mt-n4,.conversejs .my-n4{margin-top:-1.5rem!important}.conversejs .mr-n4,.conversejs .mx-n4{margin-right:-1.5rem!important}.conversejs .mb-n4,.conversejs .my-n4{margin-bottom:-1.5rem!important}.conversejs .ml-n4,.conversejs .mx-n4{margin-left:-1.5rem!important}.conversejs .m-n5{margin:-3rem!important}.conversejs .mt-n5,.conversejs .my-n5{margin-top:-3rem!important}.conversejs .mr-n5,.conversejs .mx-n5{margin-right:-3rem!important}.conversejs .mb-n5,.conversejs .my-n5{margin-bottom:-3rem!important}.conversejs .ml-n5,.conversejs .mx-n5{margin-left:-3rem!important}.conversejs .m-auto{margin:auto!important}.conversejs .mt-auto,.conversejs .my-auto{margin-top:auto!important}.conversejs .mr-auto,.conversejs .mx-auto{margin-right:auto!important}.conversejs .mb-auto,.conversejs .my-auto{margin-bottom:auto!important}.conversejs .ml-auto,.conversejs .mx-auto{margin-left:auto!important}@media(min-width:576px){.conversejs .m-sm-0{margin:0!important}.conversejs .mt-sm-0,.conversejs .my-sm-0{margin-top:0!important}.conversejs .mr-sm-0,.conversejs .mx-sm-0{margin-right:0!important}.conversejs .mb-sm-0,.conversejs .my-sm-0{margin-bottom:0!important}.conversejs .ml-sm-0,.conversejs .mx-sm-0{margin-left:0!important}.conversejs .m-sm-1{margin:.25rem!important}.conversejs .mt-sm-1,.conversejs .my-sm-1{margin-top:.25rem!important}.conversejs .mr-sm-1,.conversejs .mx-sm-1{margin-right:.25rem!important}.conversejs .mb-sm-1,.conversejs .my-sm-1{margin-bottom:.25rem!important}.conversejs .ml-sm-1,.conversejs .mx-sm-1{margin-left:.25rem!important}.conversejs .m-sm-2{margin:.5rem!important}.conversejs .mt-sm-2,.conversejs .my-sm-2{margin-top:.5rem!important}.conversejs .mr-sm-2,.conversejs .mx-sm-2{margin-right:.5rem!important}.conversejs .mb-sm-2,.conversejs .my-sm-2{margin-bottom:.5rem!important}.conversejs .ml-sm-2,.conversejs .mx-sm-2{margin-left:.5rem!important}.conversejs .m-sm-3{margin:1rem!important}.conversejs .mt-sm-3,.conversejs .my-sm-3{margin-top:1rem!important}.conversejs .mr-sm-3,.conversejs .mx-sm-3{margin-right:1rem!important}.conversejs .mb-sm-3,.conversejs .my-sm-3{margin-bottom:1rem!important}.conversejs .ml-sm-3,.conversejs .mx-sm-3{margin-left:1rem!important}.conversejs .m-sm-4{margin:1.5rem!important}.conversejs .mt-sm-4,.conversejs .my-sm-4{margin-top:1.5rem!important}.conversejs .mr-sm-4,.conversejs .mx-sm-4{margin-right:1.5rem!important}.conversejs .mb-sm-4,.conversejs .my-sm-4{margin-bottom:1.5rem!important}.conversejs .ml-sm-4,.conversejs .mx-sm-4{margin-left:1.5rem!important}.conversejs .m-sm-5{margin:3rem!important}.conversejs .mt-sm-5,.conversejs .my-sm-5{margin-top:3rem!important}.conversejs .mr-sm-5,.conversejs .mx-sm-5{margin-right:3rem!important}.conversejs .mb-sm-5,.conversejs .my-sm-5{margin-bottom:3rem!important}.conversejs .ml-sm-5,.conversejs .mx-sm-5{margin-left:3rem!important}.conversejs .p-sm-0{padding:0!important}.conversejs .pt-sm-0,.conversejs .py-sm-0{padding-top:0!important}.conversejs .pr-sm-0,.conversejs .px-sm-0{padding-right:0!important}.conversejs .pb-sm-0,.conversejs .py-sm-0{padding-bottom:0!important}.conversejs .pl-sm-0,.conversejs .px-sm-0{padding-left:0!important}.conversejs .p-sm-1{padding:.25rem!important}.conversejs .pt-sm-1,.conversejs .py-sm-1{padding-top:.25rem!important}.conversejs .pr-sm-1,.conversejs .px-sm-1{padding-right:.25rem!important}.conversejs .pb-sm-1,.conversejs .py-sm-1{padding-bottom:.25rem!important}.conversejs .pl-sm-1,.conversejs .px-sm-1{padding-left:.25rem!important}.conversejs .p-sm-2{padding:.5rem!important}.conversejs .pt-sm-2,.conversejs .py-sm-2{padding-top:.5rem!important}.conversejs .pr-sm-2,.conversejs .px-sm-2{padding-right:.5rem!important}.conversejs .pb-sm-2,.conversejs .py-sm-2{padding-bottom:.5rem!important}.conversejs .pl-sm-2,.conversejs .px-sm-2{padding-left:.5rem!important}.conversejs .p-sm-3{padding:1rem!important}.conversejs .pt-sm-3,.conversejs .py-sm-3{padding-top:1rem!important}.conversejs .pr-sm-3,.conversejs .px-sm-3{padding-right:1rem!important}.conversejs .pb-sm-3,.conversejs .py-sm-3{padding-bottom:1rem!important}.conversejs .pl-sm-3,.conversejs .px-sm-3{padding-left:1rem!important}.conversejs .p-sm-4{padding:1.5rem!important}.conversejs .pt-sm-4,.conversejs .py-sm-4{padding-top:1.5rem!important}.conversejs .pr-sm-4,.conversejs .px-sm-4{padding-right:1.5rem!important}.conversejs .pb-sm-4,.conversejs .py-sm-4{padding-bottom:1.5rem!important}.conversejs .pl-sm-4,.conversejs .px-sm-4{padding-left:1.5rem!important}.conversejs .p-sm-5{padding:3rem!important}.conversejs .pt-sm-5,.conversejs .py-sm-5{padding-top:3rem!important}.conversejs .pr-sm-5,.conversejs .px-sm-5{padding-right:3rem!important}.conversejs .pb-sm-5,.conversejs .py-sm-5{padding-bottom:3rem!important}.conversejs .pl-sm-5,.conversejs .px-sm-5{padding-left:3rem!important}.conversejs .m-sm-n1{margin:-.25rem!important}.conversejs .mt-sm-n1,.conversejs .my-sm-n1{margin-top:-.25rem!important}.conversejs .mr-sm-n1,.conversejs .mx-sm-n1{margin-right:-.25rem!important}.conversejs .mb-sm-n1,.conversejs .my-sm-n1{margin-bottom:-.25rem!important}.conversejs .ml-sm-n1,.conversejs .mx-sm-n1{margin-left:-.25rem!important}.conversejs .m-sm-n2{margin:-.5rem!important}.conversejs .mt-sm-n2,.conversejs .my-sm-n2{margin-top:-.5rem!important}.conversejs .mr-sm-n2,.conversejs .mx-sm-n2{margin-right:-.5rem!important}.conversejs .mb-sm-n2,.conversejs .my-sm-n2{margin-bottom:-.5rem!important}.conversejs .ml-sm-n2,.conversejs .mx-sm-n2{margin-left:-.5rem!important}.conversejs .m-sm-n3{margin:-1rem!important}.conversejs .mt-sm-n3,.conversejs .my-sm-n3{margin-top:-1rem!important}.conversejs .mr-sm-n3,.conversejs .mx-sm-n3{margin-right:-1rem!important}.conversejs .mb-sm-n3,.conversejs .my-sm-n3{margin-bottom:-1rem!important}.conversejs .ml-sm-n3,.conversejs .mx-sm-n3{margin-left:-1rem!important}.conversejs .m-sm-n4{margin:-1.5rem!important}.conversejs .mt-sm-n4,.conversejs .my-sm-n4{margin-top:-1.5rem!important}.conversejs .mr-sm-n4,.conversejs .mx-sm-n4{margin-right:-1.5rem!important}.conversejs .mb-sm-n4,.conversejs .my-sm-n4{margin-bottom:-1.5rem!important}.conversejs .ml-sm-n4,.conversejs .mx-sm-n4{margin-left:-1.5rem!important}.conversejs .m-sm-n5{margin:-3rem!important}.conversejs .mt-sm-n5,.conversejs .my-sm-n5{margin-top:-3rem!important}.conversejs .mr-sm-n5,.conversejs .mx-sm-n5{margin-right:-3rem!important}.conversejs .mb-sm-n5,.conversejs .my-sm-n5{margin-bottom:-3rem!important}.conversejs .ml-sm-n5,.conversejs .mx-sm-n5{margin-left:-3rem!important}.conversejs .m-sm-auto{margin:auto!important}.conversejs .mt-sm-auto,.conversejs .my-sm-auto{margin-top:auto!important}.conversejs .mr-sm-auto,.conversejs .mx-sm-auto{margin-right:auto!important}.conversejs .mb-sm-auto,.conversejs .my-sm-auto{margin-bottom:auto!important}.conversejs .ml-sm-auto,.conversejs .mx-sm-auto{margin-left:auto!important}}@media(min-width:768px){.conversejs .m-md-0{margin:0!important}.conversejs .mt-md-0,.conversejs .my-md-0{margin-top:0!important}.conversejs .mr-md-0,.conversejs .mx-md-0{margin-right:0!important}.conversejs .mb-md-0,.conversejs .my-md-0{margin-bottom:0!important}.conversejs .ml-md-0,.conversejs .mx-md-0{margin-left:0!important}.conversejs .m-md-1{margin:.25rem!important}.conversejs .mt-md-1,.conversejs .my-md-1{margin-top:.25rem!important}.conversejs .mr-md-1,.conversejs .mx-md-1{margin-right:.25rem!important}.conversejs .mb-md-1,.conversejs .my-md-1{margin-bottom:.25rem!important}.conversejs .ml-md-1,.conversejs .mx-md-1{margin-left:.25rem!important}.conversejs .m-md-2{margin:.5rem!important}.conversejs .mt-md-2,.conversejs .my-md-2{margin-top:.5rem!important}.conversejs .mr-md-2,.conversejs .mx-md-2{margin-right:.5rem!important}.conversejs .mb-md-2,.conversejs .my-md-2{margin-bottom:.5rem!important}.conversejs .ml-md-2,.conversejs .mx-md-2{margin-left:.5rem!important}.conversejs .m-md-3{margin:1rem!important}.conversejs .mt-md-3,.conversejs .my-md-3{margin-top:1rem!important}.conversejs .mr-md-3,.conversejs .mx-md-3{margin-right:1rem!important}.conversejs .mb-md-3,.conversejs .my-md-3{margin-bottom:1rem!important}.conversejs .ml-md-3,.conversejs .mx-md-3{margin-left:1rem!important}.conversejs .m-md-4{margin:1.5rem!important}.conversejs .mt-md-4,.conversejs .my-md-4{margin-top:1.5rem!important}.conversejs .mr-md-4,.conversejs .mx-md-4{margin-right:1.5rem!important}.conversejs .mb-md-4,.conversejs .my-md-4{margin-bottom:1.5rem!important}.conversejs .ml-md-4,.conversejs .mx-md-4{margin-left:1.5rem!important}.conversejs .m-md-5{margin:3rem!important}.conversejs .mt-md-5,.conversejs .my-md-5{margin-top:3rem!important}.conversejs .mr-md-5,.conversejs .mx-md-5{margin-right:3rem!important}.conversejs .mb-md-5,.conversejs .my-md-5{margin-bottom:3rem!important}.conversejs .ml-md-5,.conversejs .mx-md-5{margin-left:3rem!important}.conversejs .p-md-0{padding:0!important}.conversejs .pt-md-0,.conversejs .py-md-0{padding-top:0!important}.conversejs .pr-md-0,.conversejs .px-md-0{padding-right:0!important}.conversejs .pb-md-0,.conversejs .py-md-0{padding-bottom:0!important}.conversejs .pl-md-0,.conversejs .px-md-0{padding-left:0!important}.conversejs .p-md-1{padding:.25rem!important}.conversejs .pt-md-1,.conversejs .py-md-1{padding-top:.25rem!important}.conversejs .pr-md-1,.conversejs .px-md-1{padding-right:.25rem!important}.conversejs .pb-md-1,.conversejs .py-md-1{padding-bottom:.25rem!important}.conversejs .pl-md-1,.conversejs .px-md-1{padding-left:.25rem!important}.conversejs .p-md-2{padding:.5rem!important}.conversejs .pt-md-2,.conversejs .py-md-2{padding-top:.5rem!important}.conversejs .pr-md-2,.conversejs .px-md-2{padding-right:.5rem!important}.conversejs .pb-md-2,.conversejs .py-md-2{padding-bottom:.5rem!important}.conversejs .pl-md-2,.conversejs .px-md-2{padding-left:.5rem!important}.conversejs .p-md-3{padding:1rem!important}.conversejs .pt-md-3,.conversejs .py-md-3{padding-top:1rem!important}.conversejs .pr-md-3,.conversejs .px-md-3{padding-right:1rem!important}.conversejs .pb-md-3,.conversejs .py-md-3{padding-bottom:1rem!important}.conversejs .pl-md-3,.conversejs .px-md-3{padding-left:1rem!important}.conversejs .p-md-4{padding:1.5rem!important}.conversejs .pt-md-4,.conversejs .py-md-4{padding-top:1.5rem!important}.conversejs .pr-md-4,.conversejs .px-md-4{padding-right:1.5rem!important}.conversejs .pb-md-4,.conversejs .py-md-4{padding-bottom:1.5rem!important}.conversejs .pl-md-4,.conversejs .px-md-4{padding-left:1.5rem!important}.conversejs .p-md-5{padding:3rem!important}.conversejs .pt-md-5,.conversejs .py-md-5{padding-top:3rem!important}.conversejs .pr-md-5,.conversejs .px-md-5{padding-right:3rem!important}.conversejs .pb-md-5,.conversejs .py-md-5{padding-bottom:3rem!important}.conversejs .pl-md-5,.conversejs .px-md-5{padding-left:3rem!important}.conversejs .m-md-n1{margin:-.25rem!important}.conversejs .mt-md-n1,.conversejs .my-md-n1{margin-top:-.25rem!important}.conversejs .mr-md-n1,.conversejs .mx-md-n1{margin-right:-.25rem!important}.conversejs .mb-md-n1,.conversejs .my-md-n1{margin-bottom:-.25rem!important}.conversejs .ml-md-n1,.conversejs .mx-md-n1{margin-left:-.25rem!important}.conversejs .m-md-n2{margin:-.5rem!important}.conversejs .mt-md-n2,.conversejs .my-md-n2{margin-top:-.5rem!important}.conversejs .mr-md-n2,.conversejs .mx-md-n2{margin-right:-.5rem!important}.conversejs .mb-md-n2,.conversejs .my-md-n2{margin-bottom:-.5rem!important}.conversejs .ml-md-n2,.conversejs .mx-md-n2{margin-left:-.5rem!important}.conversejs .m-md-n3{margin:-1rem!important}.conversejs .mt-md-n3,.conversejs .my-md-n3{margin-top:-1rem!important}.conversejs .mr-md-n3,.conversejs .mx-md-n3{margin-right:-1rem!important}.conversejs .mb-md-n3,.conversejs .my-md-n3{margin-bottom:-1rem!important}.conversejs .ml-md-n3,.conversejs .mx-md-n3{margin-left:-1rem!important}.conversejs .m-md-n4{margin:-1.5rem!important}.conversejs .mt-md-n4,.conversejs .my-md-n4{margin-top:-1.5rem!important}.conversejs .mr-md-n4,.conversejs .mx-md-n4{margin-right:-1.5rem!important}.conversejs .mb-md-n4,.conversejs .my-md-n4{margin-bottom:-1.5rem!important}.conversejs .ml-md-n4,.conversejs .mx-md-n4{margin-left:-1.5rem!important}.conversejs .m-md-n5{margin:-3rem!important}.conversejs .mt-md-n5,.conversejs .my-md-n5{margin-top:-3rem!important}.conversejs .mr-md-n5,.conversejs .mx-md-n5{margin-right:-3rem!important}.conversejs .mb-md-n5,.conversejs .my-md-n5{margin-bottom:-3rem!important}.conversejs .ml-md-n5,.conversejs .mx-md-n5{margin-left:-3rem!important}.conversejs .m-md-auto{margin:auto!important}.conversejs .mt-md-auto,.conversejs .my-md-auto{margin-top:auto!important}.conversejs .mr-md-auto,.conversejs .mx-md-auto{margin-right:auto!important}.conversejs .mb-md-auto,.conversejs .my-md-auto{margin-bottom:auto!important}.conversejs .ml-md-auto,.conversejs .mx-md-auto{margin-left:auto!important}}@media(min-width:992px){.conversejs .m-lg-0{margin:0!important}.conversejs .mt-lg-0,.conversejs .my-lg-0{margin-top:0!important}.conversejs .mr-lg-0,.conversejs .mx-lg-0{margin-right:0!important}.conversejs .mb-lg-0,.conversejs .my-lg-0{margin-bottom:0!important}.conversejs .ml-lg-0,.conversejs .mx-lg-0{margin-left:0!important}.conversejs .m-lg-1{margin:.25rem!important}.conversejs .mt-lg-1,.conversejs .my-lg-1{margin-top:.25rem!important}.conversejs .mr-lg-1,.conversejs .mx-lg-1{margin-right:.25rem!important}.conversejs .mb-lg-1,.conversejs .my-lg-1{margin-bottom:.25rem!important}.conversejs .ml-lg-1,.conversejs .mx-lg-1{margin-left:.25rem!important}.conversejs .m-lg-2{margin:.5rem!important}.conversejs .mt-lg-2,.conversejs .my-lg-2{margin-top:.5rem!important}.conversejs .mr-lg-2,.conversejs .mx-lg-2{margin-right:.5rem!important}.conversejs .mb-lg-2,.conversejs .my-lg-2{margin-bottom:.5rem!important}.conversejs .ml-lg-2,.conversejs .mx-lg-2{margin-left:.5rem!important}.conversejs .m-lg-3{margin:1rem!important}.conversejs .mt-lg-3,.conversejs .my-lg-3{margin-top:1rem!important}.conversejs .mr-lg-3,.conversejs .mx-lg-3{margin-right:1rem!important}.conversejs .mb-lg-3,.conversejs .my-lg-3{margin-bottom:1rem!important}.conversejs .ml-lg-3,.conversejs .mx-lg-3{margin-left:1rem!important}.conversejs .m-lg-4{margin:1.5rem!important}.conversejs .mt-lg-4,.conversejs .my-lg-4{margin-top:1.5rem!important}.conversejs .mr-lg-4,.conversejs .mx-lg-4{margin-right:1.5rem!important}.conversejs .mb-lg-4,.conversejs .my-lg-4{margin-bottom:1.5rem!important}.conversejs .ml-lg-4,.conversejs .mx-lg-4{margin-left:1.5rem!important}.conversejs .m-lg-5{margin:3rem!important}.conversejs .mt-lg-5,.conversejs .my-lg-5{margin-top:3rem!important}.conversejs .mr-lg-5,.conversejs .mx-lg-5{margin-right:3rem!important}.conversejs .mb-lg-5,.conversejs .my-lg-5{margin-bottom:3rem!important}.conversejs .ml-lg-5,.conversejs .mx-lg-5{margin-left:3rem!important}.conversejs .p-lg-0{padding:0!important}.conversejs .pt-lg-0,.conversejs .py-lg-0{padding-top:0!important}.conversejs .pr-lg-0,.conversejs .px-lg-0{padding-right:0!important}.conversejs .pb-lg-0,.conversejs .py-lg-0{padding-bottom:0!important}.conversejs .pl-lg-0,.conversejs .px-lg-0{padding-left:0!important}.conversejs .p-lg-1{padding:.25rem!important}.conversejs .pt-lg-1,.conversejs .py-lg-1{padding-top:.25rem!important}.conversejs .pr-lg-1,.conversejs .px-lg-1{padding-right:.25rem!important}.conversejs .pb-lg-1,.conversejs .py-lg-1{padding-bottom:.25rem!important}.conversejs .pl-lg-1,.conversejs .px-lg-1{padding-left:.25rem!important}.conversejs .p-lg-2{padding:.5rem!important}.conversejs .pt-lg-2,.conversejs .py-lg-2{padding-top:.5rem!important}.conversejs .pr-lg-2,.conversejs .px-lg-2{padding-right:.5rem!important}.conversejs .pb-lg-2,.conversejs .py-lg-2{padding-bottom:.5rem!important}.conversejs .pl-lg-2,.conversejs .px-lg-2{padding-left:.5rem!important}.conversejs .p-lg-3{padding:1rem!important}.conversejs .pt-lg-3,.conversejs .py-lg-3{padding-top:1rem!important}.conversejs .pr-lg-3,.conversejs .px-lg-3{padding-right:1rem!important}.conversejs .pb-lg-3,.conversejs .py-lg-3{padding-bottom:1rem!important}.conversejs .pl-lg-3,.conversejs .px-lg-3{padding-left:1rem!important}.conversejs .p-lg-4{padding:1.5rem!important}.conversejs .pt-lg-4,.conversejs .py-lg-4{padding-top:1.5rem!important}.conversejs .pr-lg-4,.conversejs .px-lg-4{padding-right:1.5rem!important}.conversejs .pb-lg-4,.conversejs .py-lg-4{padding-bottom:1.5rem!important}.conversejs .pl-lg-4,.conversejs .px-lg-4{padding-left:1.5rem!important}.conversejs .p-lg-5{padding:3rem!important}.conversejs .pt-lg-5,.conversejs .py-lg-5{padding-top:3rem!important}.conversejs .pr-lg-5,.conversejs .px-lg-5{padding-right:3rem!important}.conversejs .pb-lg-5,.conversejs .py-lg-5{padding-bottom:3rem!important}.conversejs .pl-lg-5,.conversejs .px-lg-5{padding-left:3rem!important}.conversejs .m-lg-n1{margin:-.25rem!important}.conversejs .mt-lg-n1,.conversejs .my-lg-n1{margin-top:-.25rem!important}.conversejs .mr-lg-n1,.conversejs .mx-lg-n1{margin-right:-.25rem!important}.conversejs .mb-lg-n1,.conversejs .my-lg-n1{margin-bottom:-.25rem!important}.conversejs .ml-lg-n1,.conversejs .mx-lg-n1{margin-left:-.25rem!important}.conversejs .m-lg-n2{margin:-.5rem!important}.conversejs .mt-lg-n2,.conversejs .my-lg-n2{margin-top:-.5rem!important}.conversejs .mr-lg-n2,.conversejs .mx-lg-n2{margin-right:-.5rem!important}.conversejs .mb-lg-n2,.conversejs .my-lg-n2{margin-bottom:-.5rem!important}.conversejs .ml-lg-n2,.conversejs .mx-lg-n2{margin-left:-.5rem!important}.conversejs .m-lg-n3{margin:-1rem!important}.conversejs .mt-lg-n3,.conversejs .my-lg-n3{margin-top:-1rem!important}.conversejs .mr-lg-n3,.conversejs .mx-lg-n3{margin-right:-1rem!important}.conversejs .mb-lg-n3,.conversejs .my-lg-n3{margin-bottom:-1rem!important}.conversejs .ml-lg-n3,.conversejs .mx-lg-n3{margin-left:-1rem!important}.conversejs .m-lg-n4{margin:-1.5rem!important}.conversejs .mt-lg-n4,.conversejs .my-lg-n4{margin-top:-1.5rem!important}.conversejs .mr-lg-n4,.conversejs .mx-lg-n4{margin-right:-1.5rem!important}.conversejs .mb-lg-n4,.conversejs .my-lg-n4{margin-bottom:-1.5rem!important}.conversejs .ml-lg-n4,.conversejs .mx-lg-n4{margin-left:-1.5rem!important}.conversejs .m-lg-n5{margin:-3rem!important}.conversejs .mt-lg-n5,.conversejs .my-lg-n5{margin-top:-3rem!important}.conversejs .mr-lg-n5,.conversejs .mx-lg-n5{margin-right:-3rem!important}.conversejs .mb-lg-n5,.conversejs .my-lg-n5{margin-bottom:-3rem!important}.conversejs .ml-lg-n5,.conversejs .mx-lg-n5{margin-left:-3rem!important}.conversejs .m-lg-auto{margin:auto!important}.conversejs .mt-lg-auto,.conversejs .my-lg-auto{margin-top:auto!important}.conversejs .mr-lg-auto,.conversejs .mx-lg-auto{margin-right:auto!important}.conversejs .mb-lg-auto,.conversejs .my-lg-auto{margin-bottom:auto!important}.conversejs .ml-lg-auto,.conversejs .mx-lg-auto{margin-left:auto!important}}@media(min-width:1200px){.conversejs .m-xl-0{margin:0!important}.conversejs .mt-xl-0,.conversejs .my-xl-0{margin-top:0!important}.conversejs .mr-xl-0,.conversejs .mx-xl-0{margin-right:0!important}.conversejs .mb-xl-0,.conversejs .my-xl-0{margin-bottom:0!important}.conversejs .ml-xl-0,.conversejs .mx-xl-0{margin-left:0!important}.conversejs .m-xl-1{margin:.25rem!important}.conversejs .mt-xl-1,.conversejs .my-xl-1{margin-top:.25rem!important}.conversejs .mr-xl-1,.conversejs .mx-xl-1{margin-right:.25rem!important}.conversejs .mb-xl-1,.conversejs .my-xl-1{margin-bottom:.25rem!important}.conversejs .ml-xl-1,.conversejs .mx-xl-1{margin-left:.25rem!important}.conversejs .m-xl-2{margin:.5rem!important}.conversejs .mt-xl-2,.conversejs .my-xl-2{margin-top:.5rem!important}.conversejs .mr-xl-2,.conversejs .mx-xl-2{margin-right:.5rem!important}.conversejs .mb-xl-2,.conversejs .my-xl-2{margin-bottom:.5rem!important}.conversejs .ml-xl-2,.conversejs .mx-xl-2{margin-left:.5rem!important}.conversejs .m-xl-3{margin:1rem!important}.conversejs .mt-xl-3,.conversejs .my-xl-3{margin-top:1rem!important}.conversejs .mr-xl-3,.conversejs .mx-xl-3{margin-right:1rem!important}.conversejs .mb-xl-3,.conversejs .my-xl-3{margin-bottom:1rem!important}.conversejs .ml-xl-3,.conversejs .mx-xl-3{margin-left:1rem!important}.conversejs .m-xl-4{margin:1.5rem!important}.conversejs .mt-xl-4,.conversejs .my-xl-4{margin-top:1.5rem!important}.conversejs .mr-xl-4,.conversejs .mx-xl-4{margin-right:1.5rem!important}.conversejs .mb-xl-4,.conversejs .my-xl-4{margin-bottom:1.5rem!important}.conversejs .ml-xl-4,.conversejs .mx-xl-4{margin-left:1.5rem!important}.conversejs .m-xl-5{margin:3rem!important}.conversejs .mt-xl-5,.conversejs .my-xl-5{margin-top:3rem!important}.conversejs .mr-xl-5,.conversejs .mx-xl-5{margin-right:3rem!important}.conversejs .mb-xl-5,.conversejs .my-xl-5{margin-bottom:3rem!important}.conversejs .ml-xl-5,.conversejs .mx-xl-5{margin-left:3rem!important}.conversejs .p-xl-0{padding:0!important}.conversejs .pt-xl-0,.conversejs .py-xl-0{padding-top:0!important}.conversejs .pr-xl-0,.conversejs .px-xl-0{padding-right:0!important}.conversejs .pb-xl-0,.conversejs .py-xl-0{padding-bottom:0!important}.conversejs .pl-xl-0,.conversejs .px-xl-0{padding-left:0!important}.conversejs .p-xl-1{padding:.25rem!important}.conversejs .pt-xl-1,.conversejs .py-xl-1{padding-top:.25rem!important}.conversejs .pr-xl-1,.conversejs .px-xl-1{padding-right:.25rem!important}.conversejs .pb-xl-1,.conversejs .py-xl-1{padding-bottom:.25rem!important}.conversejs .pl-xl-1,.conversejs .px-xl-1{padding-left:.25rem!important}.conversejs .p-xl-2{padding:.5rem!important}.conversejs .pt-xl-2,.conversejs .py-xl-2{padding-top:.5rem!important}.conversejs .pr-xl-2,.conversejs .px-xl-2{padding-right:.5rem!important}.conversejs .pb-xl-2,.conversejs .py-xl-2{padding-bottom:.5rem!important}.conversejs .pl-xl-2,.conversejs .px-xl-2{padding-left:.5rem!important}.conversejs .p-xl-3{padding:1rem!important}.conversejs .pt-xl-3,.conversejs .py-xl-3{padding-top:1rem!important}.conversejs .pr-xl-3,.conversejs .px-xl-3{padding-right:1rem!important}.conversejs .pb-xl-3,.conversejs .py-xl-3{padding-bottom:1rem!important}.conversejs .pl-xl-3,.conversejs .px-xl-3{padding-left:1rem!important}.conversejs .p-xl-4{padding:1.5rem!important}.conversejs .pt-xl-4,.conversejs .py-xl-4{padding-top:1.5rem!important}.conversejs .pr-xl-4,.conversejs .px-xl-4{padding-right:1.5rem!important}.conversejs .pb-xl-4,.conversejs .py-xl-4{padding-bottom:1.5rem!important}.conversejs .pl-xl-4,.conversejs .px-xl-4{padding-left:1.5rem!important}.conversejs .p-xl-5{padding:3rem!important}.conversejs .pt-xl-5,.conversejs .py-xl-5{padding-top:3rem!important}.conversejs .pr-xl-5,.conversejs .px-xl-5{padding-right:3rem!important}.conversejs .pb-xl-5,.conversejs .py-xl-5{padding-bottom:3rem!important}.conversejs .pl-xl-5,.conversejs .px-xl-5{padding-left:3rem!important}.conversejs .m-xl-n1{margin:-.25rem!important}.conversejs .mt-xl-n1,.conversejs .my-xl-n1{margin-top:-.25rem!important}.conversejs .mr-xl-n1,.conversejs .mx-xl-n1{margin-right:-.25rem!important}.conversejs .mb-xl-n1,.conversejs .my-xl-n1{margin-bottom:-.25rem!important}.conversejs .ml-xl-n1,.conversejs .mx-xl-n1{margin-left:-.25rem!important}.conversejs .m-xl-n2{margin:-.5rem!important}.conversejs .mt-xl-n2,.conversejs .my-xl-n2{margin-top:-.5rem!important}.conversejs .mr-xl-n2,.conversejs .mx-xl-n2{margin-right:-.5rem!important}.conversejs .mb-xl-n2,.conversejs .my-xl-n2{margin-bottom:-.5rem!important}.conversejs .ml-xl-n2,.conversejs .mx-xl-n2{margin-left:-.5rem!important}.conversejs .m-xl-n3{margin:-1rem!important}.conversejs .mt-xl-n3,.conversejs .my-xl-n3{margin-top:-1rem!important}.conversejs .mr-xl-n3,.conversejs .mx-xl-n3{margin-right:-1rem!important}.conversejs .mb-xl-n3,.conversejs .my-xl-n3{margin-bottom:-1rem!important}.conversejs .ml-xl-n3,.conversejs .mx-xl-n3{margin-left:-1rem!important}.conversejs .m-xl-n4{margin:-1.5rem!important}.conversejs .mt-xl-n4,.conversejs .my-xl-n4{margin-top:-1.5rem!important}.conversejs .mr-xl-n4,.conversejs .mx-xl-n4{margin-right:-1.5rem!important}.conversejs .mb-xl-n4,.conversejs .my-xl-n4{margin-bottom:-1.5rem!important}.conversejs .ml-xl-n4,.conversejs .mx-xl-n4{margin-left:-1.5rem!important}.conversejs .m-xl-n5{margin:-3rem!important}.conversejs .mt-xl-n5,.conversejs .my-xl-n5{margin-top:-3rem!important}.conversejs .mr-xl-n5,.conversejs .mx-xl-n5{margin-right:-3rem!important}.conversejs .mb-xl-n5,.conversejs .my-xl-n5{margin-bottom:-3rem!important}.conversejs .ml-xl-n5,.conversejs .mx-xl-n5{margin-left:-3rem!important}.conversejs .m-xl-auto{margin:auto!important}.conversejs .mt-xl-auto,.conversejs .my-xl-auto{margin-top:auto!important}.conversejs .mr-xl-auto,.conversejs .mx-xl-auto{margin-right:auto!important}.conversejs .mb-xl-auto,.conversejs .my-xl-auto{margin-bottom:auto!important}.conversejs .ml-xl-auto,.conversejs .mx-xl-auto{margin-left:auto!important}}.conversejs .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.conversejs .text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.conversejs .text-justify{text-align:justify!important}.conversejs .text-wrap{white-space:normal!important}.conversejs .text-nowrap{white-space:nowrap!important}.conversejs .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .text-left{text-align:left!important}.conversejs .text-right{text-align:right!important}.conversejs .text-center{text-align:center!important}@media(min-width:576px){.conversejs .text-sm-left{text-align:left!important}.conversejs .text-sm-right{text-align:right!important}.conversejs .text-sm-center{text-align:center!important}}@media(min-width:768px){.conversejs .text-md-left{text-align:left!important}.conversejs .text-md-right{text-align:right!important}.conversejs .text-md-center{text-align:center!important}}@media(min-width:992px){.conversejs .text-lg-left{text-align:left!important}.conversejs .text-lg-right{text-align:right!important}.conversejs .text-lg-center{text-align:center!important}}@media(min-width:1200px){.conversejs .text-xl-left{text-align:left!important}.conversejs .text-xl-right{text-align:right!important}.conversejs .text-xl-center{text-align:center!important}}.conversejs .text-lowercase{text-transform:lowercase!important}.conversejs .text-uppercase{text-transform:uppercase!important}.conversejs .text-capitalize{text-transform:capitalize!important}.conversejs .font-weight-light{font-weight:300!important}.conversejs .font-weight-lighter{font-weight:lighter!important}.conversejs .font-weight-normal{font-weight:400!important}.conversejs .font-weight-bold{font-weight:700!important}.conversejs .font-weight-bolder{font-weight:bolder!important}.conversejs .font-italic{font-style:italic!important}.conversejs .text-white{color:#fff!important}.conversejs .text-primary{color:#007bff!important}.conversejs a.text-primary:focus,.conversejs a.text-primary:hover{color:#0056b3!important}.conversejs .text-secondary{color:#6c757d!important}.conversejs a.text-secondary:focus,.conversejs a.text-secondary:hover{color:#494f54!important}.conversejs .text-success{color:#28a745!important}.conversejs a.text-success:focus,.conversejs a.text-success:hover{color:#19692c!important}.conversejs .text-info{color:#17a2b8!important}.conversejs a.text-info:focus,.conversejs a.text-info:hover{color:#0f6674!important}.conversejs .text-warning{color:#ffc107!important}.conversejs a.text-warning:focus,.conversejs a.text-warning:hover{color:#ba8b00!important}.conversejs .text-danger{color:#dc3545!important}.conversejs a.text-danger:focus,.conversejs a.text-danger:hover{color:#a71d2a!important}.conversejs .text-light{color:#f8f9fa!important}.conversejs a.text-light:focus,.conversejs a.text-light:hover{color:#cbd3da!important}.conversejs .text-dark{color:#343a40!important}.conversejs a.text-dark:focus,.conversejs a.text-dark:hover{color:#121416!important}.conversejs .text-body{color:#212529!important}.conversejs .text-muted{color:#6c757d!important}.conversejs .text-black-50{color:rgba(0,0,0,.5)!important}.conversejs .text-white-50{color:rgba(255,255,255,.5)!important}.conversejs .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.conversejs .text-decoration-none{text-decoration:none!important}.conversejs .text-break{word-break:break-word!important;word-wrap:break-word!important}.conversejs .text-reset{color:inherit!important}.conversejs .visible{visibility:visible!important}.conversejs .invisible{visibility:hidden!important}.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs{bottom:0;height:100%;position:fixed;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);color:var(--text-color);font-family:var(--normal-font);font-size:var(--font-size);direction:ltr;z-index:1031}.conversejs textarea:disabled{background-color:#eee!important}.conversejs .subdued{opacity:.35}.conversejs .fit-content{width:-webkit-fit-content!important;width:-moz-fit-content!important;width:fit-content!important;max-width:-webkit-fit-content!important;max-width:-moz-fit-content!important;max-width:fit-content!important}.conversejs .nopadding{padding:0!important}.conversejs .no-scrolling{overflow-x:none;overflow-y:none}.conversejs converse-brand-heading{text-align:center}.conversejs .brand-heading{display:inline-flex;flex-direction:row;align-items:flex-start;font-family:var(--branding-font);color:var(--link-color);margin-bottom:.75em}.conversejs .brand-heading .brand-name-wrapper{display:flex;white-space:nowrap;margin:auto}.conversejs .brand-heading .brand-name{color:var(--link-color);display:flex;flex-direction:column;align-items:center;margin-top:-.25em}.conversejs .brand-heading .brand-name .byline{font-family:var(--heading-font);font-size:.3em;margin-bottom:.75em;margin-left:-2.7em;opacity:.55;word-spacing:5px}.conversejs .brand-heading .brand-subtitle{color:var(--text-color)}.conversejs .brand-heading .brand-name__text{font-size:120%;vertical-align:text-bottom}.conversejs .brand-heading .converse-svg-logo{color:var(--link-color);height:1.5em;margin-right:.25em;margin-bottom:-.25em}.conversejs .brand-heading .converse-svg-logo .cls-1{isolation:isolate}.conversejs .brand-heading .converse-svg-logo .cls-2{opacity:.5;mix-blend-mode:multiply}.conversejs .brand-heading .converse-svg-logo .cls-3{fill:var(--link-color)}.conversejs .brand-heading .converse-svg-logo .cls-4{fill:var(--link-color)}.conversejs .brand-heading--inverse .converse-svg-logo{margin-bottom:0;margin-top:-.2em}.conversejs .brand-heading--inverse .byline{margin:0;font-family:var(--heading-font);font-size:.25em;opacity:.55;margin-left:-7em;word-spacing:5px}.conversejs .dropdown-item{padding:.5rem 1rem}.conversejs .dropdown-item .fa{width:1.25em;margin-right:.75rem}.conversejs .dropdown-item.selected,.conversejs .dropdown-item:active{color:#fff!important;background-color:var(--list-item-open-color)}.conversejs .dropdown-item.selected .fa,.conversejs .dropdown-item:active .fa{color:#fff!important}.conversejs .popover{position:fixed}.conversejs ::-moz-placeholder{color:var(--subdued-color)}.conversejs :-ms-input-placeholder{color:var(--subdued-color)}.conversejs ::placeholder{color:var(--subdued-color)}.conversejs ::-moz-selection{background-color:var(--highlight-color)}.conversejs ::selection{background-color:var(--highlight-color)}.conversejs ::-moz-selection{background-color:var(--highlight-color)}@media screen and (max-width:480px){.conversejs{margin:0;right:10px;left:10px;bottom:5px}}@media screen and (max-height:450px){.conversejs{margin:0;right:10px;left:10px;bottom:5px}}.conversejs ul li{height:auto}.conversejs a,.conversejs article,.conversejs aside,.conversejs audio,.conversejs blockquote,.conversejs caption,.conversejs dd,.conversejs details,.conversejs div,.conversejs dl,.conversejs dt,.conversejs em,.conversejs embed,.conversejs fieldset,.conversejs figcaption,.conversejs figure,.conversejs footer,.conversejs form,.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6,.conversejs header,.conversejs hgroup,.conversejs img,.conversejs legend,.conversejs li,.conversejs mark,.conversejs menu,.conversejs nav,.conversejs ol,.conversejs output,.conversejs p,.conversejs pre,.conversejs ruby,.conversejs section,.conversejs span,.conversejs strong,.conversejs summary,.conversejs table,.conversejs tbody,.conversejs td,.conversejs tfoot,.conversejs th,.conversejs thead,.conversejs time,.conversejs tr,.conversejs ul,.conversejs video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}.conversejs button,.conversejs input[type=button],.conversejs input[type=password],.conversejs input[type=submit],.conversejs input[type=text],.conversejs textarea{font-size:var(--font-size);min-height:0}.conversejs strong{font-weight:700}.conversejs em{font-style:italic}.conversejs ol,.conversejs ul{list-style:none}.conversejs li{height:10px}.conversejs dl,.conversejs ol,.conversejs ul{font:inherit;margin:0}.conversejs a{cursor:pointer}.conversejs a,.conversejs a:not([href]):not([tabindex]),.conversejs a:visited{text-decoration:none;color:var(--link-color);text-shadow:none;cursor:pointer}.conversejs a:hover,.conversejs a:not([href]):not([tabindex]):hover,.conversejs a:visited:hover{color:var(--link-hover-color);text-decoration:none;text-shadow:none}.conversejs a.fa,.conversejs a.far,.conversejs a.fas,.conversejs a:not([href]):not([tabindex]).fa,.conversejs a:not([href]):not([tabindex]).far,.conversejs a:not([href]):not([tabindex]).fas,.conversejs a:visited.fa,.conversejs a:visited.far,.conversejs a:visited.fas{color:var(--subdued-color)}.conversejs a.fa:hover,.conversejs a.far:hover,.conversejs a.fas:hover,.conversejs a:not([href]):not([tabindex]).fa:hover,.conversejs a:not([href]):not([tabindex]).far:hover,.conversejs a:not([href]):not([tabindex]).fas:hover,.conversejs a:visited.fa:hover,.conversejs a:visited.far:hover,.conversejs a:visited.fas:hover{color:var(--gray-color)}.conversejs svg{border-radius:var(--chatbox-border-radius)}.conversejs .fa,.conversejs .far,.conversejs .fas{color:var(--subdued-color)}.conversejs .fa:hover,.conversejs .far:hover,.conversejs .fas:hover{color:var(--gray-color)}.conversejs q{quotes:"“" "”" "‘" "’"}.conversejs q.reason{display:inline}.conversejs q:before{content:open-quote}.conversejs q:after{content:close-quote}.conversejs .helptext{font-size:var(--font-size-tiny);color:var(--text-color-lighten-15-percent)}.conversejs .selected{color:var(--link-color)!important}.conversejs .circle{border-radius:50%}.conversejs .no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}.conversejs .fade-in{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs .visible{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs .hidden{opacity:0!important;display:none!important}.conversejs .fade-out{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.conversejs .collapsed{height:0!important;overflow:hidden!important;padding:0!important}.conversejs .locked{padding-right:22px}@-webkit-keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}.conversejs .spinner{-webkit-animation:spin 2s infinite,linear;animation:spin 2s infinite,linear;width:1em;display:block;text-align:center;padding:.5em 0;font-size:24px}.conversejs .left{float:left}.conversejs .right{float:right}.conversejs .centered{text-align:center;display:block;margin:auto}.conversejs .hor_centered{width:100%;text-align:center;display:block;margin:0 auto;clear:both}.conversejs .error{color:var(--error-color)!important}.conversejs .info{color:var(--info-color)}.conversejs .reg-feedback{font-size:85%;margin-bottom:1em}.conversejs #converse-login .conn-feedback,.conversejs .reg-feedback{display:block;text-align:center;width:100%}.conversejs .avatar{border-radius:var(--avatar-border-radius);border:var(--avatar-border);background-color:var(--avatar-background-color)}.conversejs .avatar-autocomplete{margin-right:.5em;vertical-align:middle}.conversejs .activated{display:block!important}.conversejs .form-help{color:var(--subdued-color);font-size:90%}.conversejs .form-control--labeled{margin-top:.5em}.conversejs .nav-pills .nav-link.active,.conversejs .nav-pills .show>.nav-link{background-color:var(--primary-color)}@media screen and (max-width:575px){body .converse-brand{font-size:3.75em}.conversejs:not(.converse-embedded) .chatbox .chat-body{border-radius:var(--chatbox-border-radius)}.conversejs:not(.converse-embedded) .flyout{border-radius:var(--chatbox-border-radius)}}@media screen and (min-width:576px){.conversejs .offset-sm-2{margin-left:16.666667%}}@media screen and (min-width:768px){.conversejs .offset-md-2{margin-left:16.666667%}.conversejs .offset-md-3{margin-left:25%}}@media screen and (min-width:992px){.conversejs .offset-lg-2{margin-left:16.666667%}.conversejs .offset-lg-3{margin-left:25%}}@media screen and (min-width:1200px){.conversejs .offset-xl-2{margin-left:16.666667%}}@media screen and (max-height:450px){.conversejs{left:0}}.conversejs .btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .btn{transition:none}}.conversejs .btn:hover{color:#212529;text-decoration:none}.conversejs .btn.focus,.conversejs .btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .btn.disabled,.conversejs .btn:disabled{opacity:.65}.conversejs .btn:not(:disabled):not(.disabled){cursor:pointer}.conversejs a.btn.disabled,.conversejs fieldset:disabled a.btn{pointer-events:none}.conversejs .btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.conversejs .btn-primary.focus,.conversejs .btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.conversejs .btn-primary.disabled,.conversejs .btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-primary:not(:disabled):not(.disabled).active,.conversejs .btn-primary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.conversejs .btn-primary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.conversejs .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.conversejs .btn-secondary.focus,.conversejs .btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.conversejs .btn-secondary.disabled,.conversejs .btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-secondary:not(:disabled):not(.disabled).active,.conversejs .btn-secondary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.conversejs .btn-secondary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.conversejs .btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.conversejs .btn-success.focus,.conversejs .btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.conversejs .btn-success.disabled,.conversejs .btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-success:not(:disabled):not(.disabled).active,.conversejs .btn-success:not(:disabled):not(.disabled):active,.show>.conversejs .btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.conversejs .btn-success:not(:disabled):not(.disabled).active:focus,.conversejs .btn-success:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.conversejs .btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.conversejs .btn-info.focus,.conversejs .btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.conversejs .btn-info.disabled,.conversejs .btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-info:not(:disabled):not(.disabled).active,.conversejs .btn-info:not(:disabled):not(.disabled):active,.show>.conversejs .btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.conversejs .btn-info:not(:disabled):not(.disabled).active:focus,.conversejs .btn-info:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.conversejs .btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.conversejs .btn-warning.focus,.conversejs .btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.conversejs .btn-warning.disabled,.conversejs .btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-warning:not(:disabled):not(.disabled).active,.conversejs .btn-warning:not(:disabled):not(.disabled):active,.show>.conversejs .btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.conversejs .btn-warning:not(:disabled):not(.disabled).active:focus,.conversejs .btn-warning:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.conversejs .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.conversejs .btn-danger.focus,.conversejs .btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.conversejs .btn-danger.disabled,.conversejs .btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-danger:not(:disabled):not(.disabled).active,.conversejs .btn-danger:not(:disabled):not(.disabled):active,.show>.conversejs .btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.conversejs .btn-danger:not(:disabled):not(.disabled).active:focus,.conversejs .btn-danger:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.conversejs .btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.conversejs .btn-light.focus,.conversejs .btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.conversejs .btn-light.disabled,.conversejs .btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-light:not(:disabled):not(.disabled).active,.conversejs .btn-light:not(:disabled):not(.disabled):active,.show>.conversejs .btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.conversejs .btn-light:not(:disabled):not(.disabled).active:focus,.conversejs .btn-light:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.conversejs .btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.conversejs .btn-dark.focus,.conversejs .btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.conversejs .btn-dark.disabled,.conversejs .btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-dark:not(:disabled):not(.disabled).active,.conversejs .btn-dark:not(:disabled):not(.disabled):active,.show>.conversejs .btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.conversejs .btn-dark:not(:disabled):not(.disabled).active:focus,.conversejs .btn-dark:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.conversejs .btn-outline-primary{color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary.focus,.conversejs .btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .btn-outline-primary.disabled,.conversejs .btn-outline-primary:disabled{color:#007bff;background-color:transparent}.conversejs .btn-outline-primary:not(:disabled):not(.disabled).active,.conversejs .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .btn-outline-secondary{color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary.focus,.conversejs .btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .btn-outline-secondary.disabled,.conversejs .btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active,.conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .btn-outline-success{color:#28a745;border-color:#28a745}.conversejs .btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-outline-success.focus,.conversejs .btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .btn-outline-success.disabled,.conversejs .btn-outline-success:disabled{color:#28a745;background-color:transparent}.conversejs .btn-outline-success:not(:disabled):not(.disabled).active,.conversejs .btn-outline-success:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-outline-success:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .btn-outline-info{color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info.focus,.conversejs .btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .btn-outline-info.disabled,.conversejs .btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.conversejs .btn-outline-info:not(:disabled):not(.disabled).active,.conversejs .btn-outline-info:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .btn-outline-warning{color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning.focus,.conversejs .btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .btn-outline-warning.disabled,.conversejs .btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.conversejs .btn-outline-warning:not(:disabled):not(.disabled).active,.conversejs .btn-outline-warning:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .btn-outline-danger{color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger.focus,.conversejs .btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .btn-outline-danger.disabled,.conversejs .btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.conversejs .btn-outline-danger:not(:disabled):not(.disabled).active,.conversejs .btn-outline-danger:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light.focus,.conversejs .btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .btn-outline-light.disabled,.conversejs .btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.conversejs .btn-outline-light:not(:disabled):not(.disabled).active,.conversejs .btn-outline-light:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .btn-outline-dark{color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark.focus,.conversejs .btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .btn-outline-dark.disabled,.conversejs .btn-outline-dark:disabled{color:#343a40;background-color:transparent}.conversejs .btn-outline-dark:not(:disabled):not(.disabled).active,.conversejs .btn-outline-dark:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .btn-link{font-weight:400;color:#007bff;text-decoration:none}.conversejs .btn-link:hover{color:#0056b3;text-decoration:underline}.conversejs .btn-link.focus,.conversejs .btn-link:focus{text-decoration:underline}.conversejs .btn-link.disabled,.conversejs .btn-link:disabled{color:#6c757d;pointer-events:none}.conversejs .btn-group-lg>.btn,.conversejs .btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs .btn-group-sm>.btn,.conversejs .btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .btn-block{display:block;width:100%}.conversejs .btn-block+.btn-block{margin-top:.5rem}.conversejs input[type=button].btn-block,.conversejs input[type=reset].btn-block,.conversejs input[type=submit].btn-block{width:100%}.conversejs .btn-group,.conversejs .btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.conversejs .btn-group-vertical>.btn,.conversejs .btn-group>.btn{position:relative;flex:1 1 auto}.conversejs .btn-group-vertical>.btn:hover,.conversejs .btn-group>.btn:hover{z-index:1}.conversejs .btn-group-vertical>.btn.active,.conversejs .btn-group-vertical>.btn:active,.conversejs .btn-group-vertical>.btn:focus,.conversejs .btn-group>.btn.active,.conversejs .btn-group>.btn:active,.conversejs .btn-group>.btn:focus{z-index:1}.conversejs .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.conversejs .btn-toolbar .input-group{width:auto}.conversejs .btn-group>.btn-group:not(:first-child),.conversejs .btn-group>.btn:not(:first-child){margin-left:-1px}.conversejs .btn-group>.btn-group:not(:last-child)>.btn,.conversejs .btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .btn-group>.btn-group:not(:first-child)>.btn,.conversejs .btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.conversejs .dropdown-toggle-split::after,.dropright .conversejs .dropdown-toggle-split::after,.dropup .conversejs .dropdown-toggle-split::after{margin-left:0}.dropleft .conversejs .dropdown-toggle-split::before{margin-right:0}.conversejs .btn-group-sm>.btn+.dropdown-toggle-split,.conversejs .btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.conversejs .btn-group-lg>.btn+.dropdown-toggle-split,.conversejs .btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.conversejs .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.conversejs .btn-group-vertical>.btn,.conversejs .btn-group-vertical>.btn-group{width:100%}.conversejs .btn-group-vertical>.btn-group:not(:first-child),.conversejs .btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.conversejs .btn-group-vertical>.btn-group:not(:last-child)>.btn,.conversejs .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.conversejs .btn-group-vertical>.btn-group:not(:first-child)>.btn,.conversejs .btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.conversejs .btn-group-toggle>.btn,.conversejs .btn-group-toggle>.btn-group>.btn{margin-bottom:0}.conversejs .btn-group-toggle>.btn input[type=checkbox],.conversejs .btn-group-toggle>.btn input[type=radio],.conversejs .btn-group-toggle>.btn-group>.btn input[type=checkbox],.conversejs .btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.conversejs .btn{font-weight:400;color:#fff}.conversejs .btn .fa,.conversejs .btn .far,.conversejs .btn .fas{color:#fff;margin-right:.5em}.conversejs .btn .fa.only-icon,.conversejs .btn .far.only-icon,.conversejs .btn .fas.only-icon{margin-right:0}.conversejs .btn-primary{background-color:var(--primary-color);border-color:transparent}.conversejs .btn-primary:active,.conversejs .btn-primary:focus,.conversejs .btn-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}.conversejs .btn--transparent{background:0 0;border:none}.conversejs .btn-circle{width:30px;height:30px;text-align:center;padding:.5em 0;font-size:var(--font-size-small);line-height:1.428571429;border-radius:50%}.conversejs .btn.fa{color:#fff!important}.conversejs .badge-info,.conversejs .btn-info{background-color:var(--primary-color);border-color:var(--primary-color)}.conversejs .badge-info:hover,.conversejs .btn-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}.conversejs .badge-secondary,.conversejs .btn-secondary,.conversejs .button-cancel{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.conversejs .badge-secondary:hover,.conversejs .btn-secondary:hover,.conversejs .button-cancel:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}.conversejs .btn-warning{color:#fff;background-color:var(--warning-color);border-color:var(--warning-color)}.conversejs .btn-warning:hover{color:#fff;background-color:var(--warning-color-dark);border-color:var(--warning-color-dark)}.conversejs .btn-danger{color:#fff;background-color:var(--danger-color);border-color:var(--danger-color)!important}.conversejs .btn-danger:hover{background-color:var(--danger-color-dark);border-color:var(--danger-color-dark)}.conversejs .badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .badge{transition:none}}a.conversejs .badge:focus,a.conversejs .badge:hover{text-decoration:none}.conversejs .badge:empty{display:none}.conversejs .btn .badge{position:relative;top:-1px}.conversejs .badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.conversejs .badge-primary{color:#fff;background-color:#007bff}a.conversejs .badge-primary:focus,a.conversejs .badge-primary:hover{color:#fff;background-color:#0062cc}a.conversejs .badge-primary.focus,a.conversejs .badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .badge-secondary{color:#fff;background-color:#6c757d}a.conversejs .badge-secondary:focus,a.conversejs .badge-secondary:hover{color:#fff;background-color:#545b62}a.conversejs .badge-secondary.focus,a.conversejs .badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .badge-success{color:#fff;background-color:#28a745}a.conversejs .badge-success:focus,a.conversejs .badge-success:hover{color:#fff;background-color:#1e7e34}a.conversejs .badge-success.focus,a.conversejs .badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .badge-info{color:#fff;background-color:#17a2b8}a.conversejs .badge-info:focus,a.conversejs .badge-info:hover{color:#fff;background-color:#117a8b}a.conversejs .badge-info.focus,a.conversejs .badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .badge-warning{color:#212529;background-color:#ffc107}a.conversejs .badge-warning:focus,a.conversejs .badge-warning:hover{color:#212529;background-color:#d39e00}a.conversejs .badge-warning.focus,a.conversejs .badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .badge-danger{color:#fff;background-color:#dc3545}a.conversejs .badge-danger:focus,a.conversejs .badge-danger:hover{color:#fff;background-color:#bd2130}a.conversejs .badge-danger.focus,a.conversejs .badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .badge-light{color:#212529;background-color:#f8f9fa}a.conversejs .badge-light:focus,a.conversejs .badge-light:hover{color:#212529;background-color:#dae0e5}a.conversejs .badge-light.focus,a.conversejs .badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .badge-dark{color:#fff;background-color:#343a40}a.conversejs .badge-dark:focus,a.conversejs .badge-dark:hover{color:#fff;background-color:#1d2124}a.conversejs .badge-dark.focus,a.conversejs .badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .badge{color:#fff;font-size:90%;font-weight:400;line-height:1;text-shadow:none}.conversejs .badge-light{color:var(--text-color)}.conversejs .badge-primary{background-color:var(--primary-color);border-color:transparent}.conversejs .badge-primary:active,.conversejs .badge-primary:focus,.conversejs .badge-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}.conversejs .badge-info{background-color:var(--primary-color);border-color:var(--primary-color)}.conversejs .badge-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}.conversejs .badge-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.conversejs .badge-secondary:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}.conversejs .form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .form-control{transition:none}}.conversejs .form-control::-ms-expand{background-color:transparent;border:0}.conversejs .form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.conversejs .form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .form-control::-moz-placeholder{color:#6c757d;opacity:1}.conversejs .form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.conversejs .form-control::placeholder{color:#6c757d;opacity:1}.conversejs .form-control:disabled,.conversejs .form-control[readonly]{background-color:#e9ecef;opacity:1}.conversejs input[type=date].form-control,.conversejs input[type=datetime-local].form-control,.conversejs input[type=month].form-control,.conversejs input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.conversejs .form-control-file,.conversejs .form-control-range{display:block;width:100%}.conversejs .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.conversejs .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.conversejs .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.conversejs .form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.conversejs .form-control-plaintext.form-control-lg,.conversejs .form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.conversejs .form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs select.form-control[multiple],.conversejs select.form-control[size]{height:auto}.conversejs textarea.form-control{height:auto}.conversejs .form-group{margin-bottom:1rem}.conversejs .form-text{display:block;margin-top:.25rem}.conversejs .form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.conversejs .form-row>.col,.conversejs .form-row>[class*=col-]{padding-right:5px;padding-left:5px}.conversejs .form-check{position:relative;display:block;padding-left:1.25rem}.conversejs .form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.conversejs .form-check-input:disabled~.form-check-label,.conversejs .form-check-input[disabled]~.form-check-label{color:#6c757d}.conversejs .form-check-label{margin-bottom:0}.conversejs .form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.conversejs .form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.conversejs .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.conversejs .valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.conversejs .valid-tooltip,.form-row>[class*=col-]>.conversejs .valid-tooltip{left:5px}.conversejs.is-valid~.valid-feedback,.conversejs.is-valid~.valid-tooltip,.was-validated .conversejs:valid~.valid-feedback,.was-validated .conversejs:valid~.valid-tooltip{display:block}.conversejs .form-control.is-valid,.was-validated .conversejs .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.conversejs .form-control.is-valid:focus,.was-validated .conversejs .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs textarea.form-control.is-valid,.was-validated .conversejs textarea.form-control:valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.conversejs .custom-select.is-valid,.was-validated .conversejs .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.conversejs .custom-select.is-valid:focus,.was-validated .conversejs .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .form-check-input.is-valid~.form-check-label,.was-validated .conversejs .form-check-input:valid~.form-check-label{color:#28a745}.conversejs .form-check-input.is-valid~.valid-feedback,.conversejs .form-check-input.is-valid~.valid-tooltip,.was-validated .conversejs .form-check-input:valid~.valid-feedback,.was-validated .conversejs .form-check-input:valid~.valid-tooltip{display:block}.conversejs .custom-control-input.is-valid~.custom-control-label,.was-validated .conversejs .custom-control-input:valid~.custom-control-label{color:#28a745}.conversejs .custom-control-input.is-valid~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.conversejs .custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.conversejs .custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.conversejs .custom-file-input.is-valid~.custom-file-label,.was-validated .conversejs .custom-file-input:valid~.custom-file-label{border-color:#28a745}.conversejs .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .conversejs .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.conversejs .invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.conversejs .invalid-tooltip,.form-row>[class*=col-]>.conversejs .invalid-tooltip{left:5px}.conversejs.is-invalid~.invalid-feedback,.conversejs.is-invalid~.invalid-tooltip,.was-validated .conversejs:invalid~.invalid-feedback,.was-validated .conversejs:invalid~.invalid-tooltip{display:block}.conversejs .form-control.is-invalid,.was-validated .conversejs .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.conversejs .form-control.is-invalid:focus,.was-validated .conversejs .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs textarea.form-control.is-invalid,.was-validated .conversejs textarea.form-control:invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.conversejs .custom-select.is-invalid,.was-validated .conversejs .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.conversejs .custom-select.is-invalid:focus,.was-validated .conversejs .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .form-check-input.is-invalid~.form-check-label,.was-validated .conversejs .form-check-input:invalid~.form-check-label{color:#dc3545}.conversejs .form-check-input.is-invalid~.invalid-feedback,.conversejs .form-check-input.is-invalid~.invalid-tooltip,.was-validated .conversejs .form-check-input:invalid~.invalid-feedback,.was-validated .conversejs .form-check-input:invalid~.invalid-tooltip{display:block}.conversejs .custom-control-input.is-invalid~.custom-control-label,.was-validated .conversejs .custom-control-input:invalid~.custom-control-label{color:#dc3545}.conversejs .custom-control-input.is-invalid~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.conversejs .custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.conversejs .custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.conversejs .custom-file-input.is-invalid~.custom-file-label,.was-validated .conversejs .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.conversejs .custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .conversejs .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .form-inline{display:flex;flex-flow:row wrap;align-items:center}.conversejs .form-inline .form-check{width:100%}@media(min-width:576px){.conversejs .form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.conversejs .form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.conversejs .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.conversejs .form-inline .form-control-plaintext{display:inline-block}.conversejs .form-inline .custom-select,.conversejs .form-inline .input-group{width:auto}.conversejs .form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.conversejs .form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.conversejs .form-inline .custom-control{align-items:center;justify-content:center}.conversejs .form-inline .custom-control-label{margin-bottom:0}}.conversejs .input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.conversejs .input-group>.custom-file,.conversejs .input-group>.custom-select,.conversejs .input-group>.form-control,.conversejs .input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.conversejs .input-group>.custom-file+.custom-file,.conversejs .input-group>.custom-file+.custom-select,.conversejs .input-group>.custom-file+.form-control,.conversejs .input-group>.custom-select+.custom-file,.conversejs .input-group>.custom-select+.custom-select,.conversejs .input-group>.custom-select+.form-control,.conversejs .input-group>.form-control+.custom-file,.conversejs .input-group>.form-control+.custom-select,.conversejs .input-group>.form-control+.form-control,.conversejs .input-group>.form-control-plaintext+.custom-file,.conversejs .input-group>.form-control-plaintext+.custom-select,.conversejs .input-group>.form-control-plaintext+.form-control{margin-left:-1px}.conversejs .input-group>.custom-file .custom-file-input:focus~.custom-file-label,.conversejs .input-group>.custom-select:focus,.conversejs .input-group>.form-control:focus{z-index:3}.conversejs .input-group>.custom-file .custom-file-input:focus{z-index:4}.conversejs .input-group>.custom-select:not(:first-child),.conversejs .input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .input-group>.custom-file{display:flex;align-items:center}.conversejs .input-group>.custom-file:not(:first-child) .custom-file-label,.conversejs .input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.conversejs .input-group:not(.has-validation)>.custom-select:not(:last-child),.conversejs .input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.conversejs .input-group.has-validation>.custom-select:nth-last-child(n+3),.conversejs .input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group-append,.conversejs .input-group-prepend{display:flex}.conversejs .input-group-append .btn,.conversejs .input-group-prepend .btn{position:relative;z-index:2}.conversejs .input-group-append .btn:focus,.conversejs .input-group-prepend .btn:focus{z-index:3}.conversejs .input-group-append .btn+.btn,.conversejs .input-group-append .btn+.input-group-text,.conversejs .input-group-append .input-group-text+.btn,.conversejs .input-group-append .input-group-text+.input-group-text,.conversejs .input-group-prepend .btn+.btn,.conversejs .input-group-prepend .btn+.input-group-text,.conversejs .input-group-prepend .input-group-text+.btn,.conversejs .input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.conversejs .input-group-prepend{margin-right:-1px}.conversejs .input-group-append{margin-left:-1px}.conversejs .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.conversejs .input-group-text input[type=checkbox],.conversejs .input-group-text input[type=radio]{margin-top:0}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-lg>.form-control,.conversejs .input-group-lg>.input-group-append>.btn,.conversejs .input-group-lg>.input-group-append>.input-group-text,.conversejs .input-group-lg>.input-group-prepend>.btn,.conversejs .input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs .input-group-sm>.custom-select,.conversejs .input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.conversejs .input-group-sm>.custom-select,.conversejs .input-group-sm>.form-control,.conversejs .input-group-sm>.input-group-append>.btn,.conversejs .input-group-sm>.input-group-append>.input-group-text,.conversejs .input-group-sm>.input-group-prepend>.btn,.conversejs .input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-sm>.custom-select{padding-right:1.75rem}.conversejs .input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.conversejs .input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.conversejs .input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.conversejs .input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.conversejs .input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.conversejs .input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.conversejs .input-group>.input-group-prepend>.btn,.conversejs .input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group>.input-group-append>.btn,.conversejs .input-group>.input-group-append>.input-group-text,.conversejs .input-group>.input-group-prepend:first-child>.btn:not(:first-child),.conversejs .input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.conversejs .input-group>.input-group-prepend:not(:first-child)>.btn,.conversejs .input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.conversejs .custom-control-inline{display:inline-flex;margin-right:1rem}.conversejs .custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.conversejs .custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.conversejs .custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.conversejs .custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.conversejs .custom-control-input:disabled~.custom-control-label,.conversejs .custom-control-input[disabled]~.custom-control-label{color:#6c757d}.conversejs .custom-control-input:disabled~.custom-control-label::before,.conversejs .custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.conversejs .custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.conversejs .custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.conversejs .custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.conversejs .custom-checkbox .custom-control-label::before{border-radius:.25rem}.conversejs .custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.conversejs .custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-radio .custom-control-label::before{border-radius:50%}.conversejs .custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.conversejs .custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-switch{padding-left:2.25rem}.conversejs .custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.conversejs .custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .custom-switch .custom-control-label::after{transition:none}}.conversejs .custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.conversejs .custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs .custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-select:focus::-ms-value{color:#495057;background-color:#fff}.conversejs .custom-select[multiple],.conversejs .custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.conversejs .custom-select:disabled{color:#6c757d;background-color:#e9ecef}.conversejs .custom-select::-ms-expand{display:none}.conversejs .custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.conversejs .custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.conversejs .custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.conversejs .custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.conversejs .custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.conversejs .custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-file-input:disabled~.custom-file-label,.conversejs .custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.conversejs .custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.conversejs .custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.conversejs .custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.conversejs .custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.conversejs .custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs .custom-range:focus{outline:0}.conversejs .custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range::-moz-focus-outer{border:0}.conversejs .custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.conversejs .custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.conversejs .custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.conversejs .custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.conversejs .custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-ms-thumb{-ms-transition:none;transition:none}}.conversejs .custom-range::-ms-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.conversejs .custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.conversejs .custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.conversejs .custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.conversejs .custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.conversejs .custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.conversejs .custom-range:disabled::-moz-range-track{cursor:default}.conversejs .custom-range:disabled::-ms-thumb{background-color:#adb5bd}.conversejs .custom-control-label::before,.conversejs .custom-file-label,.conversejs .custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .custom-control-label::before,.conversejs .custom-file-label,.conversejs .custom-select{transition:none}}.conversejs .btn--small{font-size:80%;font-weight:400}.conversejs form .hidden-username{opacity:0!important;height:0!important;padding:0!important}.conversejs form .error-feedback{margin-bottom:.5em}.conversejs form .form-check-label{margin-top:.3rem}.conversejs form .form-control::-moz-placeholder{color:var(--subdued-color)}.conversejs form .form-control:-ms-input-placeholder{color:var(--subdued-color)}.conversejs form .form-control::placeholder{color:var(--subdued-color)}.conversejs form .clear-input{margin-top:.5em;margin-bottom:.5em;position:absolute;right:.2em;cursor:pointer;font-size:var(--font-size)}.conversejs form#converse-login,.conversejs form#converse-register{background:var(--controlbox-pane-background-color)}.conversejs form#converse-login legend,.conversejs form#converse-register legend{width:100%;text-align:center;margin:0 auto .5em auto}.conversejs form#converse-login fieldset.buttons,.conversejs form#converse-register fieldset.buttons{text-align:center}.conversejs form#converse-login .login-anon,.conversejs form#converse-register .login-anon{height:auto;white-space:normal}.conversejs form#converse-login .save-submit,.conversejs form#converse-register .save-submit{color:var(--save-button-color)}.conversejs form#converse-login .form-url,.conversejs form#converse-register .form-url{display:block;font-weight:400;margin:1em 0}.conversejs form.converse-form{padding:1.2rem}.conversejs form.converse-form legend{color:var(--text-color);font-size:125%;margin-bottom:1.5em}.conversejs form.converse-form input[type=number],.conversejs form.converse-form input[type=password],.conversejs form.converse-form input[type=text],.conversejs form.converse-form select{min-width:50%}.conversejs form.converse-form input[type=button],.conversejs form.converse-form input[type=number],.conversejs form.converse-form input[type=password],.conversejs form.converse-form input[type=submit],.conversejs form.converse-form input[type=text]{padding:.5em}.conversejs form.converse-form input[type=button],.conversejs form.converse-form input[type=submit]{padding-left:1em;padding-right:1em;border:none}.conversejs form.converse-form input.error{border:1px solid var(--error-color);color:var(--text-color)}.conversejs form.converse-form .text-muted{color:var(--subdued-color)!important;font-size:85%;padding-top:.5em}.conversejs form.converse-form .text-muted a{color:var(--link-color-lighten-10-percent)}.conversejs form.converse-form .text-muted.error{color:var(--error-color)}.conversejs form.converse-form--modal{padding-bottom:0}.conversejs form.converse-form--spinner{height:100%}.conversejs form.converse-centered-form{min-height:66%;text-align:center}.conversejs form.converse-centered-form input{max-width:30em;margin:auto}.conversejs .list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.conversejs .list-group-item-action{width:100%;color:#495057;text-align:inherit}.conversejs .list-group-item-action:focus,.conversejs .list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.conversejs .list-group-item-action:active{color:#212529;background-color:#e9ecef}.conversejs .list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.conversejs .list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.conversejs .list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.conversejs .list-group-item.disabled,.conversejs .list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.conversejs .list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .list-group-item+.conversejs .list-group-item{border-top-width:0}.conversejs .list-group-item+.conversejs .list-group-item.active{margin-top:-1px;border-top-width:1px}.conversejs .list-group-horizontal{flex-direction:row}.conversejs .list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width:576px){.conversejs .list-group-horizontal-sm{flex-direction:row}.conversejs .list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-sm>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:768px){.conversejs .list-group-horizontal-md{flex-direction:row}.conversejs .list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-md>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:992px){.conversejs .list-group-horizontal-lg{flex-direction:row}.conversejs .list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-lg>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:1200px){.conversejs .list-group-horizontal-xl{flex-direction:row}.conversejs .list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-xl>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.conversejs .list-group-flush{border-radius:0}.conversejs .list-group-flush>.list-group-item{border-width:0 0 1px}.conversejs .list-group-flush>.list-group-item:last-child{border-bottom-width:0}.conversejs .list-group-item-primary{color:#004085;background-color:#b8daff}.conversejs .list-group-item-primary.list-group-item-action:focus,.conversejs .list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.conversejs .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.conversejs .list-group-item-secondary{color:#383d41;background-color:#d6d8db}.conversejs .list-group-item-secondary.list-group-item-action:focus,.conversejs .list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.conversejs .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.conversejs .list-group-item-success{color:#155724;background-color:#c3e6cb}.conversejs .list-group-item-success.list-group-item-action:focus,.conversejs .list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.conversejs .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.conversejs .list-group-item-info{color:#0c5460;background-color:#bee5eb}.conversejs .list-group-item-info.list-group-item-action:focus,.conversejs .list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.conversejs .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.conversejs .list-group-item-warning{color:#856404;background-color:#ffeeba}.conversejs .list-group-item-warning.list-group-item-action:focus,.conversejs .list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.conversejs .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.conversejs .list-group-item-danger{color:#721c24;background-color:#f5c6cb}.conversejs .list-group-item-danger.list-group-item-action:focus,.conversejs .list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.conversejs .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.conversejs .list-group-item-light{color:#818182;background-color:#fdfdfe}.conversejs .list-group-item-light.list-group-item-action:focus,.conversejs .list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.conversejs .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.conversejs .list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.conversejs .list-group-item-dark.list-group-item-action:focus,.conversejs .list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.conversejs .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.conversejs .list-group-item.active{background-color:var(--primary-color);border-color:var(--primary-color-dark)}.conversejs .list-container{text-align:left;padding:.3em 0}.conversejs .list-container .list-toggle{font-family:var(--heading-font);font-weight:var(--list-toggle-font-weight);display:block;color:var(--list-toggle-color);padding:0 0 .5rem 0}.conversejs .list-container .list-toggle:hover{color:var(--list-toggle-hover-color)}.conversejs .items-list{text-align:left}.conversejs .items-list .list-item{border:none;clear:both;color:var(--text-color);overflow:hidden;padding:.5em 0;text-shadow:0 1px 0 var(--text-shadow-color);word-wrap:break-word;height:2.5em}.conversejs .items-list .list-item.unread-msgs{font-weight:700}.conversejs .items-list .list-item .list-item-link{color:var(--list-item-link-color);margin:auto;font-size:var(--font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;vertical-align:baseline}.conversejs .items-list .list-item .list-item-link:hover{color:var(--list-item-link-hover-color)}.conversejs .items-list .list-item .list-item-badge{opacity:1;border-radius:25%;color:#fff;font-size:var(--font-size-small);line-height:var(--font-size-small)}.conversejs .items-list .list-item .list-item-action{opacity:0;font-size:var(--font-size-tiny);padding:.3em 0 0 0;margin:0 0 0 var(--inline-action-margin);width:2em;height:2em;color:var(--subdued-color)}.conversejs .items-list .list-item .list-item-action:before{font-size:var(--font-size)}.conversejs .items-list .list-item .list-item-action.button-on{color:var(--list-item-link-color)}.conversejs .items-list .list-item .list-item-action.button-on:hover{color:var(--list-item-link-hover-color)}.conversejs .items-list .list-item .list-item-action:hover{color:var(--list-toggle-hover-color);opacity:1}.conversejs .items-list .list-item .list-item-action--visible{opacity:1!important}.conversejs .items-list .list-item.open{background-color:var(--list-item-open-color)}.conversejs .items-list .list-item.open:hover{background-color:var(--list-item-open-hover-color)!important}.conversejs .items-list .list-item.open a{color:#fff}.conversejs .items-list .list-item.open .list-item-link:hover{color:#fff}.conversejs .items-list .list-item.open .list-item-action{color:var(--list-item-action-color)}.conversejs .items-list .list-item.open .list-item-action:hover{color:#fff}.conversejs .items-list .list-item:hover{background-color:var(--controlbox-pane-bg-hover-color)}.conversejs .items-list .list-item:hover .fa,.conversejs .items-list .list-item:hover .far,.conversejs .items-list .list-item:hover .fas{opacity:1}.conversejs .styling-directive{color:var(--subdued-color)}.conversejs .older-msg time{font-weight:700}.conversejs .message .show-msg-author-modal{color:var(--text-color)!important}.conversejs .message blockquote{margin-left:.5em;margin-bottom:.25em;padding-right:1em;color:var(--subdued-color);border-left:.3em solid var(--subdued-color);padding-left:.5em;display:inline-block}.conversejs .message code{font-family:monospace}.conversejs .message .mention{font-weight:700}.conversejs .message .mention--self{font-weight:400}.conversejs .message.date-separator,.conversejs .message.separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}.conversejs .message.date-separator .separator,.conversejs .message.separator .separator{border-top:0;border-bottom:var(--chat-separator-border-bottom);margin:0 1em;position:relative;top:1em;z-index:5}.conversejs .message.date-separator .separator-text,.conversejs .message.separator .separator-text{background:#fff;bottom:1px;color:var(--separator-text-color);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5}.conversejs .message.chat-msg--retracted .chat-msg__message{color:var(--subdued-color)}.conversejs .message.chat-info{color:var(--chat-head-color);font-size:var(--message-font-size);line-height:var(--line-height-small);font-size:90%;padding:.17rem 1rem}.conversejs .message.chat-info.badge{color:var(--chat-head-text-color)}.conversejs .message.chat-info.chat-state-notification{font-style:italic}.conversejs .message.chat-info.chat-event{clear:left;font-style:italic}.conversejs .message.chat-info.chat-error{color:var(--error-color);font-weight:700}.conversejs .message.chat-info .q{font-style:italic}.conversejs .message .chat-image{height:auto;width:auto;max-height:15em;max-width:100%}.conversejs .message.chat-msg--action{font-style:italic}.conversejs .message.chat-msg--action .chat-msg__author{padding-right:.2em}.conversejs .message.chat-msg{display:inline-flex;width:100%;flex-direction:row;padding:.125rem 1rem}.conversejs .message.chat-msg.onload{animation:colorchange-chatmessage 1s;-webkit-animation:colorchange-chatmessage 1s}.conversejs .message.chat-msg:hover{background-color:var(--list-item-hover-color)}.conversejs .message.chat-msg.correcting.groupchat{background-color:var(--chatroom-correcting-color)}.conversejs .message.chat-msg.correcting:not(.groupchat){background-color:var(--chat-correcting-color)}.conversejs .message.chat-msg .spoiler{margin-top:.5em}.conversejs .message.chat-msg .spoiler-hint{margin-bottom:.5em}.conversejs .message.chat-msg .spoiler-toggle{color:#fff}.conversejs .message.chat-msg .spoiler-toggle i{color:#fff;padding-right:.5em}.conversejs .message.chat-msg .spoiler-toggle:before{padding-right:.25em;whitespace:nowrap}.conversejs .message.chat-msg .chat-msg__content{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-left:.5rem;width:calc(100% - var(--message-avatar-width))}.conversejs .message.chat-msg .chat-msg__content:hover .btn--standalone{opacity:1}.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat .chat-msg__text{color:var(--subdued-color)}.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--delayed .chat-msg__text,.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--received .chat-msg__text{color:var(--message-text-color)}.conversejs .message.chat-msg .chat-msg__content--action{width:100%;margin-left:0}.conversejs .message.chat-msg .chat-msg__body{display:flex;flex-direction:row;justify-content:space-between}.conversejs .message.chat-msg converse-chat-message-body{display:inline}.conversejs .message.chat-msg .chat-msg__message{line-height:1.5em;display:inline-flex;flex-direction:column;width:100%;overflow-wrap:break-word}.conversejs .message.chat-msg .chat-msg__edit-modal{cursor:pointer;padding-right:.5em}.conversejs .message.chat-msg .chat-msg__subject{font-weight:700;clear:right}.conversejs .message.chat-msg .chat-msg__text{color:var(--message-text-color);padding:0;white-space:pre-wrap;word-wrap:break-word;word-break:break-word}.conversejs .message.chat-msg .chat-msg__text a{word-wrap:break-word;word-break:break-all;display:inline}.conversejs .message.chat-msg .chat-msg__text a.chat-image__link{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:block}.conversejs .message.chat-msg .chat-msg__text img.emoji{height:1.5em;width:1.5em;margin:0 .05em 0 .1em;vertical-align:-.1em}.conversejs .message.chat-msg .chat-msg__text .emojione{margin-bottom:-6px}.conversejs .message.chat-msg .chat-msg__text--larger{font-size:1.6em;padding-top:.25em;padding-bottom:.25em}.conversejs .message.chat-msg .chat-msg__error{color:var(--error-color)}.conversejs .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}.conversejs .message.chat-msg .chat-msg__media a{word-wrap:break-word}.conversejs .message.chat-msg .chat-msg__media audio{width:100%}.conversejs .message.chat-msg converse-message-actions{margin-left:.5em}.conversejs .message.chat-msg .chat-msg__actions .dropdown-menu{min-width:5rem}.conversejs .message.chat-msg .chat-msg__actions i{color:var(--text-color-lighten-15-percent);font-size:70%}.conversejs .message.chat-msg .chat-msg__actions button{border:none;background:0 0;color:var(--text-color-lighten-15-percent);padding:0 .25em}.conversejs .message.chat-msg .chat-msg__actions .btn--standalone{opacity:0;margin-top:-.2em}.conversejs .message.chat-msg .chat-msg__actions .chat-msg__action{width:100%;padding:.5em 1em;text-align:left;white-space:nowrap}.conversejs .message.chat-msg .chat-msg__actions .chat-msg__action converse-icon{margin-right:.25em}.conversejs .message.chat-msg .chat-msg__actions .chat-msg__action:hover{color:var(--text-color);background-color:var(--list-item-hover-color)}.conversejs .message.chat-msg .chat-msg__avatar{margin-top:.5em;vertical-align:middle;height:var(--message-avatar-height);width:var(--message-avatar-width);min-height:var(--message-avatar-height);min-width:var(--message-avatar-width)}.conversejs .message.chat-msg .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}.conversejs .message.chat-msg .chat-msg__heading{width:100%;margin-top:.5em;padding-right:.25rem;padding-bottom:.25rem}.conversejs .message.chat-msg .chat-msg__heading .badge{margin-left:.5em;font-family:var(--normal_font)}.conversejs .message.chat-msg .chat-msg__heading .chat-msg__time{padding-left:.25em;padding-right:.25em;color:var(--text-color-lighten-15-percent)}.conversejs .message.chat-msg.chat-msg--action .chat-msg__message{flex-direction:row}.conversejs .message.chat-msg.chat-msg--action .chat-msg__text{width:auto}.conversejs .message.chat-msg.chat-msg--action .chat-msg__heading{margin-top:0;padding-bottom:0;width:auto}.conversejs .message.chat-msg.chat-msg--action .chat-msg__heading .fa{margin-left:.5em}.conversejs .message.chat-msg.chat-msg--action .chat-msg__author{font-size:var(--message-font-size)}.conversejs .message.chat-msg.chat-msg--action .chat-msg__time{margin-left:0}.conversejs .message.chat-msg.chat-msg--followup .chat-msg__avatar,.conversejs .message.chat-msg.chat-msg--followup .chat-msg__heading{display:none}.conversejs .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content{margin-left:2.75rem;width:100%}.conversejs .message.chat-msg .chat-msg__receipt{margin-left:.5em;margin-right:.5em;color:var(--message-receipt-color)}.conversejs .chatroom-body .message.onload{animation:colorchange-chatmessage-muc 1s;-webkit-animation:colorchange-chatmessage-muc 1s}.conversejs .chatroom-body .message .separator{border-top:0;border-bottom:var(--chatroom-separator-border-bottom)}.conversejs converse-chats.converse-overlayed .message.chat-msg.chat-msg--followup .chat-msg__content{margin-left:0}@media screen and (max-width:767px){converse-chats:not(.converse-embedded) .message.chat-msg .chat-msg__author{white-space:normal}}#conversejs.theme-darkbeet{--green:#25DB77;--orange:#E19823;--light-blue:#4E9CFE;--pink:#BD23E1;--beet:#360101;--beet-green:rgb(25, 68, 71);--beet-light-green:#8EB726;--beet-orig:#50162D;--blue:#4E9CFE;--darkest-grey:#232323;--red:#d33b2b;--dark-link-color:#3a3a3a;--occupants-background-color:#333;--form-background:#3b3b3b;--global-background-color:var(--darkest-grey);--redder-orange:var(--beet);--primary-color:var(--beet-orig);--primary-color-dark:var(--beet);--highlight-color-darker:var(--beet-light-green);--highlight-color:var(--beet);--headline-head-color:var(--beet-green);--text-color:#c5c5c5;--text-color-lighten-15-percent:#e9e9e9;--message-text-color:var(--text-color);--text-controlbox-color:#d9d9d9;--message-receipt-color:var(--darkest-grey);--link-color:var(--beet-light-green);--error-color:var(--danger-color-dark);--chat-textarea-color:var(--font-hover-head-color);--chat-textarea-background-color:#2c2c2c;--chat-content-background-color:#2c2c2c;--controlbox-heading-top-margin:0.75em;--inline-action-margin:0.75em;--chat-head-color:var(--beet-green);--chat-head-color-dark:#b9b9ac;--chat-head-color-darker:#e8e8e3;--chat-correcting-color:var(--beet);--chatbox-border-radius:0px;--controlbox-head-color-lighten-45-percent:#0e0e0e;--controlbox-pane-background-color:var(--darkest-grey);--font-head-color:#777;--font-hover-head-color:#c5c5c5;--chatroom-width:100%;--chatroom-correcting-color:var(--beet);--font-size-tiny:10px;--font-size-small:12px;--font-size-occupants:100%;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--chat-separator-border-bottom:2px solid var(--beet);--chatroom-separator-border-bottom:2px solid var(--beet);--message-background-color:#303030;--message-input-border-top:4px solid var(--beet);--message-mention-color:#404040;--message-mention-self-color:#AB3131;--message-separator-background-color:#2E1520;--embedded-emoji-picker-height:200px;--avatar-border-radius:50%;--fullpage-emoji-picker-height:200px;--overlayed-emoji-picker-height:100px;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--list-item-action-color);--list-item-open-color:var(--chat-content-background-color);--list-item-open-hover-color:var(--beet);--list-dot-circle-color:#f6dec1;scrollbar-color:var(--list-item-action-color) var(--beet);scrollbar-width:thin}#conversejs.theme-darkbeet ::-webkit-scrollbar{width:5px;height:5px;background-color:var(--beet)}#conversejs.theme-darkbeet ::-webkit-scrollbar-track-piece{background-color:var(--beet)}#conversejs.theme-darkbeet ::-webkit-scrollbar-thumb:vertical{height:15px;background-color:var(--list-item-action-color)}#conversejs.theme-darkbeet .scroller{width:300px;height:100px;overflow-y:scroll;scrollbar-color:var(--list-item-action-color) var(--beet)}#conversejs.theme-darkbeet #controlbox .bookmarks-toggle,#conversejs.theme-darkbeet #controlbox .bookmarks-toggle .fa{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.theme-darkbeet #controlbox .bookmarks-toggle .fa:hover,#conversejs.theme-darkbeet #controlbox .bookmarks-toggle:hover{color:var(--orange)!important}#conversejs.theme-darkbeet .chatbox .chatroom .sendXMPPMessage{background-color:var(--message-background-color)}#conversejs.theme-darkbeet .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);resize:none;margin-top:1px;padding-left:7px}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea:active,#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea:focus{outline-color:unset!important;outline:unset!important}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea.spoiler{height:42px}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea.correcting{background-color:var(--chat-textarea-background-color)}#conversejs.theme-darkbeet .chatroom .sendXMPPMessage{background-color:var(--message-background-color)}#conversejs.theme-darkbeet .chatroom .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);resize:none;margin-top:1px;padding-left:7px}#conversejs.theme-darkbeet .chatroom .chat-textarea.correcting{background-color:var(--chat-textarea-background-color);margin-bottom:-3px;border-width:2px;border-style:dotted;border-color:var(--red)}#conversejs.theme-darkbeet .chatroom .chat-textarea .chat-textarea:active,#conversejs.theme-darkbeet .chatroom .chat-textarea .chat-textarea:focus{outline-color:red!important}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chat-info{color:var(--red)}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .occupants{border-left:unset}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chatroom-form-container{background-color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chatroom-form{background-color:var(--dark-link-color)}#conversejs.theme-darkbeet #controlbox .open-rooms-toggle,#conversejs.theme-darkbeet #controlbox .open-rooms-toggle .fa{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.theme-darkbeet #controlbox .open-rooms-toggle .fa:hover,#conversejs.theme-darkbeet #controlbox .open-rooms-toggle:hover{color:var(--orange)!important}#conversejs.theme-darkbeet #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--orange)}#conversejs.theme-darkbeet #controlbox .controlbox-pane dd{background-color:var(--beet)}#conversejs.theme-darkbeet #controlbox .controlbox-panes{border-right:unset}#conversejs.theme-darkbeet .avatar{border-radius:var(--avatar-border-radius);border:none;background-color:unset}#conversejs.theme-darkbeet .dropdown-menu{color:var(--text-color);background-color:var(--darkest-grey)}#conversejs.theme-darkbeet .dropdown-menu.selected,#conversejs.theme-darkbeet .dropdown-menu:active{color:var(--text-color-lighten-15-percent)!important;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .dropdown-item{color:var(--text-color)}#conversejs.theme-darkbeet .dropdown-item.selected,#conversejs.theme-darkbeet .dropdown-item:active{color:var(--text-color-lighten-15-percent)!important;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .dropdown-item:hover{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet ::-webkit-scrollbar-thumb{background:var(--list-item-action-color);border-radius:10px}#conversejs.theme-darkbeet ::-webkit-scrollbar-track{background:var(--beet)}#conversejs.theme-darkbeet .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}#conversejs.theme-darkbeet .chatbox converse-emoji-dropdown{display:inline-block}#conversejs.theme-darkbeet .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}#conversejs.theme-darkbeet .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--occupants-background-color);overflow-y:hidden;background:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--occupants-background-color);width:auto;font-size:var(--font-size)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker{background-color:var(--occupants-background-color);padding:.5em 0 0 .5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header{display:flex;flex-direction:column;padding:.1em 0;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:var(--occupants-background-color);border:1px var(--chat-head-color) solid;border-bottom:none}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker{background-color:var(--occupants-background-color);background:#fff}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}#conversejs.theme-darkbeet .items-list .list-item:hover{color:var(--text-color);background-color:var(--beet)}#conversejs.theme-darkbeet .items-list .list-item:hover .fa,#conversejs.theme-darkbeet .items-list .list-item:hover .far,#conversejs.theme-darkbeet .items-list .list-item:hover .fas{opacity:1}#conversejs.theme-darkbeet .items-list .list-item.open{border-left:4px solid var(--red);background-color:var(--list-item-open-color)}#conversejs.theme-darkbeet .items-list .list-item.open:hover{color:var(--text-color);background-color:var(--list-item-open-hover-color)!important}#conversejs.theme-darkbeet .items-list .list-item-badge{color:var(--text-color);float:right;text-align:center;width:22px;background-color:var(--red);border-radius:50%;padding:.5em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet .message .mention{font-weight:700;border-width:0;border-radius:.25rem;background-color:var(--message-mention-color);color:var(--text-color-lighten-15-percent);padding:.25em}#conversejs.theme-darkbeet .message .mention--self{background:var(--message-mention-self-color)}#conversejs.theme-darkbeet .message.correcting.groupchat{background-color:unset;border-style:dotted;border-radius:1em;border-color:var(--red);border-width:.2em}#conversejs.theme-darkbeet .message.correcting:not(.groupchat){background-color:unset;border-style:solid;border-radius:1em;border-color:var(--red)}#conversejs.theme-darkbeet .message .chat-msg__heading .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--orange);font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}#conversejs.theme-darkbeet .chat-msg__text{display:inline;color:var(--message-text-color);padding:10px;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;line-height:1.7em}#conversejs.theme-darkbeet .chat-msg__message{display:inline-flex;flex-direction:column;width:unset;overflow-wrap:break-word}#conversejs.theme-darkbeet .chat-msg__avatar{height:var(--message-avatar-height);width:var(--message-avatar-width);display:block;margin-left:auto;margin-right:auto;background-size:cover}#conversejs.theme-darkbeet .message .mention{font-weight:700}#conversejs.theme-darkbeet .message .mention--self{font-weight:400}#conversejs.theme-darkbeet .message.date-separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}#conversejs.theme-darkbeet .message.date-separator .separator{border-top:0;border-bottom:var(--global-background-color);border-style:solid}#conversejs.theme-darkbeet .message.date-separator .separator-text{background:var(--global-background-color);bottom:1px;color:var(--chatbox-separator-text);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5;border-style:solid;border-radius:2em;border-width:0}#conversejs.theme-darkbeet .message.separator .separator-text{background:var(--beet);color:var(--chatroom-head-color);border-radius:2em}#conversejs.theme-darkbeet .chat-image{border-radius:2em;max-height:25em;transition:.5s;border:0;margin-left:5em;margin-top:2em}#conversejs.theme-darkbeet .chat-image:hover{filter:grayscale(1)}#conversejs.theme-darkbeet .img-thumbnail{background-color:unset}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media a{word-wrap:break-word}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media audio{width:50%;background-color:unset;color:var(--beet)}#conversejs.theme-darkbeet #converse-modals .modal-header{background-color:var(--beet);border-bottom:none}#conversejs.theme-darkbeet #converse-modals .modal-header .close{color:#fff;background-color:var(--red)}#conversejs.theme-darkbeet #converse-modals .modal-body{background-color:var(--chat-content-background-color)}#conversejs.theme-darkbeet #converse-modals .form-control{color:#fff;background-color:var(--darkest-grey);border:1px solid var(--darkest-grey)}#conversejs.theme-darkbeet #converse-modals .modal-content{background-color:var(--darkest-grey)}#conversejs.theme-darkbeet #converse-modals .modal-footer{border-top:none}#conversejs.theme-darkbeet #converse-modals .list-group-item{background-color:var(--darkest-grey)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .current-xmpp-contact .chat-status{vertical-align:middle;font-size:1em;margin-right:0;margin-left:-.8em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle,#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle .fa{color:var(--beet-light-green)!important}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle .fa:hover,#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle:hover{color:var(--beet-green)!important}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group li .open-chat .msgs-indicator{float:right;color:#fff;text-align:center;width:22px;background-color:var(--red);border-radius:50%;padding:.5em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group li .open-chat:hover{background-color:var(--beet)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar{background-color:var(--chat-content-background-color);box-sizing:border-box;color:var(--text-color);display:flex;justify-content:space-between;margin:0;width:100%}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas:hover{color:var(--font-head-color);font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa:hover svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far:hover svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas:hover svg{fill:var(--text-color)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted a{color:var(--text-color)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted .toolbar-menu a,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}#conversejs.theme-darkbeet .chat-toolbar .toolbar-buttons{width:100%;display:inline-block}#conversejs.theme-darkbeet .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}#conversejs.theme-darkbeet .chat-toolbar button{margin:.2em;padding-bottom:.25em;border:1px transparent solid;background-color:transparent}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa{color:gray}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa:hover{color:gray}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa svg,#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa svg:hover{fill:gray}#conversejs.theme-darkbeet .chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}#conversejs.theme-darkbeet .chat-toolbar .unverified,#conversejs.theme-darkbeet .chat-toolbar .unverified a{color:#cf5300}#conversejs.theme-darkbeet .chat-toolbar .private,#conversejs.theme-darkbeet .chat-toolbar .private a{color:#4b7003}#conversejs.theme-darkbeet .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}#conversejs.theme-darkbeet .chat-toolbar li:hover{cursor:pointer}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu{background-color:var(--chat-content-background-color);bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu a{color:var(--link-color)}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul{z-index:99}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li a{display:block}#conversejs.theme-darkbeet .chatbox .new-msgs-indicator{color:var(--chatroom-head-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar{border-top:var(chatbox-message-input-border-top);color:var(--text-color);background-color:var(--chat-content-background-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .far,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fas:hover{color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar button:focus{outline-color:unset!important;color:var(--red)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--text-color)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas:hover{color:var(--dark-link-color);font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa:hover svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far:hover svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--text-color)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar button:focus{outline-color:unset!important}#conversejs.theme-darkbeet .suggestion-box{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results,#conversejs.theme-darkbeet .suggestion-box>ul{position:absolute;left:0;right:0;z-index:2;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:rgba(37,36,36,.9);border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);text-shadow:none}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results:before,#conversejs.theme-darkbeet .suggestion-box>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:var(--red);border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results>li,#conversejs.theme-darkbeet .suggestion-box>ul>li{text-overflow:ellipsis;overflow-x:hidden;position:relative;cursor:pointer;padding:1em} + */@font-face{font-family:Baumans;font-style:normal;font-weight:400;src:local("Baumans Regular"),local("Baumans-Regular"),url(webfonts/baumans.ttf) format("truetype")}@font-face{font-family:Muli;font-style:normal;font-weight:400;src:local("Muli Regular"),local("Muli-Regular"),url(webfonts/muli.ttf) format("truetype")}@font-face{font-family:ConverseFontAwesomeBrands;font-style:normal;font-weight:400;src:url(webfonts/fa-brands-400.eot);src:url(webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-brands-400.woff2) format("woff2"),url(webfonts/fa-brands-400.woff) format("woff"),url(webfonts/fa-brands-400.ttf) format("truetype"),url(webfonts/fa-brands-400.svg#fontawesome) format("svg")}@font-face{font-family:ConverseFontAwesomeRegular;font-style:normal;font-weight:400;src:url(webfonts/fa-regular-400.eot);src:url(webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-regular-400.woff2) format("woff2"),url(webfonts/fa-regular-400.woff) format("woff"),url(webfonts/fa-regular-400.ttf) format("truetype"),url(webfonts/fa-regular-400.svg#fontawesome) format("svg");font-weight:400;font-style:normal}@font-face{font-family:ConverseFontAwesomeSolid;font-style:normal;font-weight:900;src:url(webfonts/fa-solid-900.eot);src:url(webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-solid-900.svg#fontawesome) format("svg"),url(webfonts/fa-solid-900.woff2) format("woff2"),url(webfonts/fa-solid-900.woff) format("woff"),url(webfonts/fa-solid-900.ttf) format("truetype")}.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scale(-1,1)}.fa-flip-vertical{transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:""}.fa-accessible-icon:before{content:""}.fa-accusoft:before{content:""}.fa-acquisitions-incorporated:before{content:""}.fa-ad:before{content:""}.fa-address-book:before{content:""}.fa-address-card:before{content:""}.fa-adjust:before{content:""}.fa-adn:before{content:""}.fa-adobe:before{content:""}.fa-adversal:before{content:""}.fa-affiliatetheme:before{content:""}.fa-air-freshener:before{content:""}.fa-airbnb:before{content:""}.fa-algolia:before{content:""}.fa-align-center:before{content:""}.fa-align-justify:before{content:""}.fa-align-left:before{content:""}.fa-align-right:before{content:""}.fa-alipay:before{content:""}.fa-allergies:before{content:""}.fa-amazon:before{content:""}.fa-amazon-pay:before{content:""}.fa-ambulance:before{content:""}.fa-american-sign-language-interpreting:before{content:""}.fa-amilia:before{content:""}.fa-anchor:before{content:""}.fa-android:before{content:""}.fa-angellist:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angry:before{content:""}.fa-angrycreative:before{content:""}.fa-angular:before{content:""}.fa-ankh:before{content:""}.fa-app-store:before{content:""}.fa-app-store-ios:before{content:""}.fa-apper:before{content:""}.fa-apple:before{content:""}.fa-apple-alt:before{content:""}.fa-apple-pay:before{content:""}.fa-archive:before{content:""}.fa-archway:before{content:""}.fa-arrow-alt-circle-down:before{content:""}.fa-arrow-alt-circle-left:before{content:""}.fa-arrow-alt-circle-right:before{content:""}.fa-arrow-alt-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-down:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrows-alt:before{content:""}.fa-arrows-alt-h:before{content:""}.fa-arrows-alt-v:before{content:""}.fa-artstation:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asterisk:before{content:""}.fa-asymmetrik:before{content:""}.fa-at:before{content:""}.fa-atlas:before{content:""}.fa-atlassian:before{content:""}.fa-atom:before{content:""}.fa-audible:before{content:""}.fa-audio-description:before{content:""}.fa-autoprefixer:before{content:""}.fa-avianex:before{content:""}.fa-aviato:before{content:""}.fa-award:before{content:""}.fa-aws:before{content:""}.fa-baby:before{content:""}.fa-baby-carriage:before{content:""}.fa-backspace:before{content:""}.fa-backward:before{content:""}.fa-bacon:before{content:""}.fa-bacteria:before{content:""}.fa-bacterium:before{content:""}.fa-bahai:before{content:""}.fa-balance-scale:before{content:""}.fa-balance-scale-left:before{content:""}.fa-balance-scale-right:before{content:""}.fa-ban:before{content:""}.fa-band-aid:before{content:""}.fa-bandcamp:before{content:""}.fa-barcode:before{content:""}.fa-bars:before{content:""}.fa-baseball-ball:before{content:""}.fa-basketball-ball:before{content:""}.fa-bath:before{content:""}.fa-battery-empty:before{content:""}.fa-battery-full:before{content:""}.fa-battery-half:before{content:""}.fa-battery-quarter:before{content:""}.fa-battery-three-quarters:before{content:""}.fa-battle-net:before{content:""}.fa-bed:before{content:""}.fa-beer:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-bell:before{content:""}.fa-bell-slash:before{content:""}.fa-bezier-curve:before{content:""}.fa-bible:before{content:""}.fa-bicycle:before{content:""}.fa-biking:before{content:""}.fa-bimobject:before{content:""}.fa-binoculars:before{content:""}.fa-biohazard:before{content:""}.fa-birthday-cake:before{content:""}.fa-bitbucket:before{content:""}.fa-bitcoin:before{content:""}.fa-bity:before{content:""}.fa-black-tie:before{content:""}.fa-blackberry:before{content:""}.fa-blender:before{content:""}.fa-blender-phone:before{content:""}.fa-blind:before{content:""}.fa-blog:before{content:""}.fa-blogger:before{content:""}.fa-blogger-b:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-bold:before{content:""}.fa-bolt:before{content:""}.fa-bomb:before{content:""}.fa-bone:before{content:""}.fa-bong:before{content:""}.fa-book:before{content:""}.fa-book-dead:before{content:""}.fa-book-medical:before{content:""}.fa-book-open:before{content:""}.fa-book-reader:before{content:""}.fa-bookmark:before{content:""}.fa-bootstrap:before{content:""}.fa-border-all:before{content:""}.fa-border-none:before{content:""}.fa-border-style:before{content:""}.fa-bowling-ball:before{content:""}.fa-box:before{content:""}.fa-box-open:before{content:""}.fa-box-tissue:before{content:""}.fa-boxes:before{content:""}.fa-braille:before{content:""}.fa-brain:before{content:""}.fa-bread-slice:before{content:""}.fa-briefcase:before{content:""}.fa-briefcase-medical:before{content:""}.fa-broadcast-tower:before{content:""}.fa-broom:before{content:""}.fa-brush:before{content:""}.fa-btc:before{content:""}.fa-buffer:before{content:""}.fa-bug:before{content:""}.fa-building:before{content:""}.fa-bullhorn:before{content:""}.fa-bullseye:before{content:""}.fa-burn:before{content:""}.fa-buromobelexperte:before{content:""}.fa-bus:before{content:""}.fa-bus-alt:before{content:""}.fa-business-time:before{content:""}.fa-buy-n-large:before{content:""}.fa-buysellads:before{content:""}.fa-calculator:before{content:""}.fa-calendar:before{content:""}.fa-calendar-alt:before{content:""}.fa-calendar-check:before{content:""}.fa-calendar-day:before{content:""}.fa-calendar-minus:before{content:""}.fa-calendar-plus:before{content:""}.fa-calendar-times:before{content:""}.fa-calendar-week:before{content:""}.fa-camera:before{content:""}.fa-camera-retro:before{content:""}.fa-campground:before{content:""}.fa-canadian-maple-leaf:before{content:""}.fa-candy-cane:before{content:""}.fa-cannabis:before{content:""}.fa-capsules:before{content:""}.fa-car:before{content:""}.fa-car-alt:before{content:""}.fa-car-battery:before{content:""}.fa-car-crash:before{content:""}.fa-car-side:before{content:""}.fa-caravan:before{content:""}.fa-caret-down:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-caret-square-down:before{content:""}.fa-caret-square-left:before{content:""}.fa-caret-square-right:before{content:""}.fa-caret-square-up:before{content:""}.fa-caret-up:before{content:""}.fa-carrot:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-cart-plus:before{content:""}.fa-cash-register:before{content:""}.fa-cat:before{content:""}.fa-cc-amazon-pay:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-apple-pay:before{content:""}.fa-cc-diners-club:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-cc-visa:before{content:""}.fa-centercode:before{content:""}.fa-centos:before{content:""}.fa-certificate:before{content:""}.fa-chair:before{content:""}.fa-chalkboard:before{content:""}.fa-chalkboard-teacher:before{content:""}.fa-charging-station:before{content:""}.fa-chart-area:before{content:""}.fa-chart-bar:before{content:""}.fa-chart-line:before{content:""}.fa-chart-pie:before{content:""}.fa-check:before{content:""}.fa-check-circle:before{content:""}.fa-check-double:before{content:""}.fa-check-square:before{content:""}.fa-cheese:before{content:""}.fa-chess:before{content:""}.fa-chess-bishop:before{content:""}.fa-chess-board:before{content:""}.fa-chess-king:before{content:""}.fa-chess-knight:before{content:""}.fa-chess-pawn:before{content:""}.fa-chess-queen:before{content:""}.fa-chess-rook:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-down:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-chevron-up:before{content:""}.fa-child:before{content:""}.fa-chrome:before{content:""}.fa-chromecast:before{content:""}.fa-church:before{content:""}.fa-circle:before{content:""}.fa-circle-notch:before{content:""}.fa-city:before{content:""}.fa-clinic-medical:before{content:""}.fa-clipboard:before{content:""}.fa-clipboard-check:before{content:""}.fa-clipboard-list:before{content:""}.fa-clock:before{content:""}.fa-clone:before{content:""}.fa-closed-captioning:before{content:""}.fa-cloud:before{content:""}.fa-cloud-download-alt:before{content:""}.fa-cloud-meatball:before{content:""}.fa-cloud-moon:before{content:""}.fa-cloud-moon-rain:before{content:""}.fa-cloud-rain:before{content:""}.fa-cloud-showers-heavy:before{content:""}.fa-cloud-sun:before{content:""}.fa-cloud-sun-rain:before{content:""}.fa-cloud-upload-alt:before{content:""}.fa-cloudscale:before{content:""}.fa-cloudsmith:before{content:""}.fa-cloudversify:before{content:""}.fa-cocktail:before{content:""}.fa-code:before{content:""}.fa-code-branch:before{content:""}.fa-codepen:before{content:""}.fa-codiepie:before{content:""}.fa-coffee:before{content:""}.fa-cog:before{content:""}.fa-cogs:before{content:""}.fa-coins:before{content:""}.fa-columns:before{content:""}.fa-comment:before{content:""}.fa-comment-alt:before{content:""}.fa-comment-dollar:before{content:""}.fa-comment-dots:before{content:""}.fa-comment-medical:before{content:""}.fa-comment-slash:before{content:""}.fa-comments:before{content:""}.fa-comments-dollar:before{content:""}.fa-compact-disc:before{content:""}.fa-compass:before{content:""}.fa-compress:before{content:""}.fa-compress-alt:before{content:""}.fa-compress-arrows-alt:before{content:""}.fa-concierge-bell:before{content:""}.fa-confluence:before{content:""}.fa-connectdevelop:before{content:""}.fa-contao:before{content:""}.fa-cookie:before{content:""}.fa-cookie-bite:before{content:""}.fa-copy:before{content:""}.fa-copyright:before{content:""}.fa-cotton-bureau:before{content:""}.fa-couch:before{content:""}.fa-cpanel:before{content:""}.fa-creative-commons:before{content:""}.fa-creative-commons-by:before{content:""}.fa-creative-commons-nc:before{content:""}.fa-creative-commons-nc-eu:before{content:""}.fa-creative-commons-nc-jp:before{content:""}.fa-creative-commons-nd:before{content:""}.fa-creative-commons-pd:before{content:""}.fa-creative-commons-pd-alt:before{content:""}.fa-creative-commons-remix:before{content:""}.fa-creative-commons-sa:before{content:""}.fa-creative-commons-sampling:before{content:""}.fa-creative-commons-sampling-plus:before{content:""}.fa-creative-commons-share:before{content:""}.fa-creative-commons-zero:before{content:""}.fa-credit-card:before{content:""}.fa-critical-role:before{content:""}.fa-crop:before{content:""}.fa-crop-alt:before{content:""}.fa-cross:before{content:""}.fa-crosshairs:before{content:""}.fa-crow:before{content:""}.fa-crown:before{content:""}.fa-crutch:before{content:""}.fa-css3:before{content:""}.fa-css3-alt:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-cut:before{content:""}.fa-cuttlefish:before{content:""}.fa-d-and-d:before{content:""}.fa-d-and-d-beyond:before{content:""}.fa-dailymotion:before{content:""}.fa-dashcube:before{content:""}.fa-database:before{content:""}.fa-deaf:before{content:""}.fa-deezer:before{content:""}.fa-delicious:before{content:""}.fa-democrat:before{content:""}.fa-deploydog:before{content:""}.fa-deskpro:before{content:""}.fa-desktop:before{content:""}.fa-dev:before{content:""}.fa-deviantart:before{content:""}.fa-dharmachakra:before{content:""}.fa-dhl:before{content:""}.fa-diagnoses:before{content:""}.fa-diaspora:before{content:""}.fa-dice:before{content:""}.fa-dice-d20:before{content:""}.fa-dice-d6:before{content:""}.fa-dice-five:before{content:""}.fa-dice-four:before{content:""}.fa-dice-one:before{content:""}.fa-dice-six:before{content:""}.fa-dice-three:before{content:""}.fa-dice-two:before{content:""}.fa-digg:before{content:""}.fa-digital-ocean:before{content:""}.fa-digital-tachograph:before{content:""}.fa-directions:before{content:""}.fa-discord:before{content:""}.fa-discourse:before{content:""}.fa-disease:before{content:""}.fa-divide:before{content:""}.fa-dizzy:before{content:""}.fa-dna:before{content:""}.fa-dochub:before{content:""}.fa-docker:before{content:""}.fa-dog:before{content:""}.fa-dollar-sign:before{content:""}.fa-dolly:before{content:""}.fa-dolly-flatbed:before{content:""}.fa-donate:before{content:""}.fa-door-closed:before{content:""}.fa-door-open:before{content:""}.fa-dot-circle:before{content:""}.fa-dove:before{content:""}.fa-download:before{content:""}.fa-draft2digital:before{content:""}.fa-drafting-compass:before{content:""}.fa-dragon:before{content:""}.fa-draw-polygon:before{content:""}.fa-dribbble:before{content:""}.fa-dribbble-square:before{content:""}.fa-dropbox:before{content:""}.fa-drum:before{content:""}.fa-drum-steelpan:before{content:""}.fa-drumstick-bite:before{content:""}.fa-drupal:before{content:""}.fa-dumbbell:before{content:""}.fa-dumpster:before{content:""}.fa-dumpster-fire:before{content:""}.fa-dungeon:before{content:""}.fa-dyalog:before{content:""}.fa-earlybirds:before{content:""}.fa-ebay:before{content:""}.fa-edge:before{content:""}.fa-edge-legacy:before{content:""}.fa-edit:before{content:""}.fa-egg:before{content:""}.fa-eject:before{content:""}.fa-elementor:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-ello:before{content:""}.fa-ember:before{content:""}.fa-empire:before{content:""}.fa-envelope:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-text:before{content:""}.fa-envelope-square:before{content:""}.fa-envira:before{content:""}.fa-equals:before{content:""}.fa-eraser:before{content:""}.fa-erlang:before{content:""}.fa-ethereum:before{content:""}.fa-ethernet:before{content:""}.fa-etsy:before{content:""}.fa-euro-sign:before{content:""}.fa-evernote:before{content:""}.fa-exchange-alt:before{content:""}.fa-exclamation:before{content:""}.fa-exclamation-circle:before{content:""}.fa-exclamation-triangle:before{content:""}.fa-expand:before{content:""}.fa-expand-alt:before{content:""}.fa-expand-arrows-alt:before{content:""}.fa-expeditedssl:before{content:""}.fa-external-link-alt:before{content:""}.fa-external-link-square-alt:before{content:""}.fa-eye:before{content:""}.fa-eye-dropper:before{content:""}.fa-eye-slash:before{content:""}.fa-facebook:before{content:""}.fa-facebook-f:before{content:""}.fa-facebook-messenger:before{content:""}.fa-facebook-square:before{content:""}.fa-fan:before{content:""}.fa-fantasy-flight-games:before{content:""}.fa-fast-backward:before{content:""}.fa-fast-forward:before{content:""}.fa-faucet:before{content:""}.fa-fax:before{content:""}.fa-feather:before{content:""}.fa-feather-alt:before{content:""}.fa-fedex:before{content:""}.fa-fedora:before{content:""}.fa-female:before{content:""}.fa-fighter-jet:before{content:""}.fa-figma:before{content:""}.fa-file:before{content:""}.fa-file-alt:before{content:""}.fa-file-archive:before{content:""}.fa-file-audio:before{content:""}.fa-file-code:before{content:""}.fa-file-contract:before{content:""}.fa-file-csv:before{content:""}.fa-file-download:before{content:""}.fa-file-excel:before{content:""}.fa-file-export:before{content:""}.fa-file-image:before{content:""}.fa-file-import:before{content:""}.fa-file-invoice:before{content:""}.fa-file-invoice-dollar:before{content:""}.fa-file-medical:before{content:""}.fa-file-medical-alt:before{content:""}.fa-file-pdf:before{content:""}.fa-file-powerpoint:before{content:""}.fa-file-prescription:before{content:""}.fa-file-signature:before{content:""}.fa-file-upload:before{content:""}.fa-file-video:before{content:""}.fa-file-word:before{content:""}.fa-fill:before{content:""}.fa-fill-drip:before{content:""}.fa-film:before{content:""}.fa-filter:before{content:""}.fa-fingerprint:before{content:""}.fa-fire:before{content:""}.fa-fire-alt:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-firefox:before{content:""}.fa-firefox-browser:before{content:""}.fa-first-aid:before{content:""}.fa-first-order:before{content:""}.fa-first-order-alt:before{content:""}.fa-firstdraft:before{content:""}.fa-fish:before{content:""}.fa-fist-raised:before{content:""}.fa-flag:before{content:""}.fa-flag-checkered:before{content:""}.fa-flag-usa:before{content:""}.fa-flask:before{content:""}.fa-flickr:before{content:""}.fa-flipboard:before{content:""}.fa-flushed:before{content:""}.fa-fly:before{content:""}.fa-folder:before{content:""}.fa-folder-minus:before{content:""}.fa-folder-open:before{content:""}.fa-folder-plus:before{content:""}.fa-font:before{content:""}.fa-font-awesome:before{content:""}.fa-font-awesome-alt:before{content:""}.fa-font-awesome-flag:before{content:""}.fa-font-awesome-logo-full:before{content:""}.fa-fonticons:before{content:""}.fa-fonticons-fi:before{content:""}.fa-football-ball:before{content:""}.fa-fort-awesome:before{content:""}.fa-fort-awesome-alt:before{content:""}.fa-forumbee:before{content:""}.fa-forward:before{content:""}.fa-foursquare:before{content:""}.fa-free-code-camp:before{content:""}.fa-freebsd:before{content:""}.fa-frog:before{content:""}.fa-frown:before{content:""}.fa-frown-open:before{content:""}.fa-fulcrum:before{content:""}.fa-funnel-dollar:before{content:""}.fa-futbol:before{content:""}.fa-galactic-republic:before{content:""}.fa-galactic-senate:before{content:""}.fa-gamepad:before{content:""}.fa-gas-pump:before{content:""}.fa-gavel:before{content:""}.fa-gem:before{content:""}.fa-genderless:before{content:""}.fa-get-pocket:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-ghost:before{content:""}.fa-gift:before{content:""}.fa-gifts:before{content:""}.fa-git:before{content:""}.fa-git-alt:before{content:""}.fa-git-square:before{content:""}.fa-github:before{content:""}.fa-github-alt:before{content:""}.fa-github-square:before{content:""}.fa-gitkraken:before{content:""}.fa-gitlab:before{content:""}.fa-gitter:before{content:""}.fa-glass-cheers:before{content:""}.fa-glass-martini:before{content:""}.fa-glass-martini-alt:before{content:""}.fa-glass-whiskey:before{content:""}.fa-glasses:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-globe:before{content:""}.fa-globe-africa:before{content:""}.fa-globe-americas:before{content:""}.fa-globe-asia:before{content:""}.fa-globe-europe:before{content:""}.fa-gofore:before{content:""}.fa-golf-ball:before{content:""}.fa-goodreads:before{content:""}.fa-goodreads-g:before{content:""}.fa-google:before{content:""}.fa-google-drive:before{content:""}.fa-google-pay:before{content:""}.fa-google-play:before{content:""}.fa-google-plus:before{content:""}.fa-google-plus-g:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-wallet:before{content:""}.fa-gopuram:before{content:""}.fa-graduation-cap:before{content:""}.fa-gratipay:before{content:""}.fa-grav:before{content:""}.fa-greater-than:before{content:""}.fa-greater-than-equal:before{content:""}.fa-grimace:before{content:""}.fa-grin:before{content:""}.fa-grin-alt:before{content:""}.fa-grin-beam:before{content:""}.fa-grin-beam-sweat:before{content:""}.fa-grin-hearts:before{content:""}.fa-grin-squint:before{content:""}.fa-grin-squint-tears:before{content:""}.fa-grin-stars:before{content:""}.fa-grin-tears:before{content:""}.fa-grin-tongue:before{content:""}.fa-grin-tongue-squint:before{content:""}.fa-grin-tongue-wink:before{content:""}.fa-grin-wink:before{content:""}.fa-grip-horizontal:before{content:""}.fa-grip-lines:before{content:""}.fa-grip-lines-vertical:before{content:""}.fa-grip-vertical:before{content:""}.fa-gripfire:before{content:""}.fa-grunt:before{content:""}.fa-guitar:before{content:""}.fa-gulp:before{content:""}.fa-h-square:before{content:""}.fa-hacker-news:before{content:""}.fa-hacker-news-square:before{content:""}.fa-hackerrank:before{content:""}.fa-hamburger:before{content:""}.fa-hammer:before{content:""}.fa-hamsa:before{content:""}.fa-hand-holding:before{content:""}.fa-hand-holding-heart:before{content:""}.fa-hand-holding-medical:before{content:""}.fa-hand-holding-usd:before{content:""}.fa-hand-holding-water:before{content:""}.fa-hand-lizard:before{content:""}.fa-hand-middle-finger:before{content:""}.fa-hand-paper:before{content:""}.fa-hand-peace:before{content:""}.fa-hand-point-down:before{content:""}.fa-hand-point-left:before{content:""}.fa-hand-point-right:before{content:""}.fa-hand-point-up:before{content:""}.fa-hand-pointer:before{content:""}.fa-hand-rock:before{content:""}.fa-hand-scissors:before{content:""}.fa-hand-sparkles:before{content:""}.fa-hand-spock:before{content:""}.fa-hands:before{content:""}.fa-hands-helping:before{content:""}.fa-hands-wash:before{content:""}.fa-handshake:before{content:""}.fa-handshake-alt-slash:before{content:""}.fa-handshake-slash:before{content:""}.fa-hanukiah:before{content:""}.fa-hard-hat:before{content:""}.fa-hashtag:before{content:""}.fa-hat-cowboy:before{content:""}.fa-hat-cowboy-side:before{content:""}.fa-hat-wizard:before{content:""}.fa-hdd:before{content:""}.fa-head-side-cough:before{content:""}.fa-head-side-cough-slash:before{content:""}.fa-head-side-mask:before{content:""}.fa-head-side-virus:before{content:""}.fa-heading:before{content:""}.fa-headphones:before{content:""}.fa-headphones-alt:before{content:""}.fa-headset:before{content:""}.fa-heart:before{content:""}.fa-heart-broken:before{content:""}.fa-heartbeat:before{content:""}.fa-helicopter:before{content:""}.fa-highlighter:before{content:""}.fa-hiking:before{content:""}.fa-hippo:before{content:""}.fa-hips:before{content:""}.fa-hire-a-helper:before{content:""}.fa-history:before{content:""}.fa-hockey-puck:before{content:""}.fa-holly-berry:before{content:""}.fa-home:before{content:""}.fa-hooli:before{content:""}.fa-hornbill:before{content:""}.fa-horse:before{content:""}.fa-horse-head:before{content:""}.fa-hospital:before{content:""}.fa-hospital-alt:before{content:""}.fa-hospital-symbol:before{content:""}.fa-hospital-user:before{content:""}.fa-hot-tub:before{content:""}.fa-hotdog:before{content:""}.fa-hotel:before{content:""}.fa-hotjar:before{content:""}.fa-hourglass:before{content:""}.fa-hourglass-end:before{content:""}.fa-hourglass-half:before{content:""}.fa-hourglass-start:before{content:""}.fa-house-damage:before{content:""}.fa-house-user:before{content:""}.fa-houzz:before{content:""}.fa-hryvnia:before{content:""}.fa-html5:before{content:""}.fa-hubspot:before{content:""}.fa-i-cursor:before{content:""}.fa-ice-cream:before{content:""}.fa-icicles:before{content:""}.fa-icons:before{content:""}.fa-id-badge:before{content:""}.fa-id-card:before{content:""}.fa-id-card-alt:before{content:""}.fa-ideal:before{content:""}.fa-igloo:before{content:""}.fa-image:before{content:""}.fa-images:before{content:""}.fa-imdb:before{content:""}.fa-inbox:before{content:""}.fa-indent:before{content:""}.fa-industry:before{content:""}.fa-infinity:before{content:""}.fa-info:before{content:""}.fa-info-circle:before{content:""}.fa-instagram:before{content:""}.fa-instagram-square:before{content:""}.fa-intercom:before{content:""}.fa-internet-explorer:before{content:""}.fa-invision:before{content:""}.fa-ioxhost:before{content:""}.fa-italic:before{content:""}.fa-itch-io:before{content:""}.fa-itunes:before{content:""}.fa-itunes-note:before{content:""}.fa-java:before{content:""}.fa-jedi:before{content:""}.fa-jedi-order:before{content:""}.fa-jenkins:before{content:""}.fa-jira:before{content:""}.fa-joget:before{content:""}.fa-joint:before{content:""}.fa-joomla:before{content:""}.fa-journal-whills:before{content:""}.fa-js:before{content:""}.fa-js-square:before{content:""}.fa-jsfiddle:before{content:""}.fa-kaaba:before{content:""}.fa-kaggle:before{content:""}.fa-key:before{content:""}.fa-keybase:before{content:""}.fa-keyboard:before{content:""}.fa-keycdn:before{content:""}.fa-khanda:before{content:""}.fa-kickstarter:before{content:""}.fa-kickstarter-k:before{content:""}.fa-kiss:before{content:""}.fa-kiss-beam:before{content:""}.fa-kiss-wink-heart:before{content:""}.fa-kiwi-bird:before{content:""}.fa-korvue:before{content:""}.fa-landmark:before{content:""}.fa-language:before{content:""}.fa-laptop:before{content:""}.fa-laptop-code:before{content:""}.fa-laptop-house:before{content:""}.fa-laptop-medical:before{content:""}.fa-laravel:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-laugh:before{content:""}.fa-laugh-beam:before{content:""}.fa-laugh-squint:before{content:""}.fa-laugh-wink:before{content:""}.fa-layer-group:before{content:""}.fa-leaf:before{content:""}.fa-leanpub:before{content:""}.fa-lemon:before{content:""}.fa-less:before{content:""}.fa-less-than:before{content:""}.fa-less-than-equal:before{content:""}.fa-level-down-alt:before{content:""}.fa-level-up-alt:before{content:""}.fa-life-ring:before{content:""}.fa-lightbulb:before{content:""}.fa-line:before{content:""}.fa-link:before{content:""}.fa-linkedin:before{content:""}.fa-linkedin-in:before{content:""}.fa-linode:before{content:""}.fa-linux:before{content:""}.fa-lira-sign:before{content:""}.fa-list:before{content:""}.fa-list-alt:before{content:""}.fa-list-ol:before{content:""}.fa-list-ul:before{content:""}.fa-location-arrow:before{content:""}.fa-lock:before{content:""}.fa-lock-open:before{content:""}.fa-long-arrow-alt-down:before{content:""}.fa-long-arrow-alt-left:before{content:""}.fa-long-arrow-alt-right:before{content:""}.fa-long-arrow-alt-up:before{content:""}.fa-low-vision:before{content:""}.fa-luggage-cart:before{content:""}.fa-lungs:before{content:""}.fa-lungs-virus:before{content:""}.fa-lyft:before{content:""}.fa-magento:before{content:""}.fa-magic:before{content:""}.fa-magnet:before{content:""}.fa-mail-bulk:before{content:""}.fa-mailchimp:before{content:""}.fa-male:before{content:""}.fa-mandalorian:before{content:""}.fa-map:before{content:""}.fa-map-marked:before{content:""}.fa-map-marked-alt:before{content:""}.fa-map-marker:before{content:""}.fa-map-marker-alt:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-markdown:before{content:""}.fa-marker:before{content:""}.fa-mars:before{content:""}.fa-mars-double:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mask:before{content:""}.fa-mastodon:before{content:""}.fa-maxcdn:before{content:""}.fa-mdb:before{content:""}.fa-medal:before{content:""}.fa-medapps:before{content:""}.fa-medium:before{content:""}.fa-medium-m:before{content:""}.fa-medkit:before{content:""}.fa-medrt:before{content:""}.fa-meetup:before{content:""}.fa-megaport:before{content:""}.fa-meh:before{content:""}.fa-meh-blank:before{content:""}.fa-meh-rolling-eyes:before{content:""}.fa-memory:before{content:""}.fa-mendeley:before{content:""}.fa-menorah:before{content:""}.fa-mercury:before{content:""}.fa-meteor:before{content:""}.fa-microblog:before{content:""}.fa-microchip:before{content:""}.fa-microphone:before{content:""}.fa-microphone-alt:before{content:""}.fa-microphone-alt-slash:before{content:""}.fa-microphone-slash:before{content:""}.fa-microscope:before{content:""}.fa-microsoft:before{content:""}.fa-minus:before{content:""}.fa-minus-circle:before{content:""}.fa-minus-square:before{content:""}.fa-mitten:before{content:""}.fa-mix:before{content:""}.fa-mixcloud:before{content:""}.fa-mixer:before{content:""}.fa-mizuni:before{content:""}.fa-mobile:before{content:""}.fa-mobile-alt:before{content:""}.fa-modx:before{content:""}.fa-monero:before{content:""}.fa-money-bill:before{content:""}.fa-money-bill-alt:before{content:""}.fa-money-bill-wave:before{content:""}.fa-money-bill-wave-alt:before{content:""}.fa-money-check:before{content:""}.fa-money-check-alt:before{content:""}.fa-monument:before{content:""}.fa-moon:before{content:""}.fa-mortar-pestle:before{content:""}.fa-mosque:before{content:""}.fa-motorcycle:before{content:""}.fa-mountain:before{content:""}.fa-mouse:before{content:""}.fa-mouse-pointer:before{content:""}.fa-mug-hot:before{content:""}.fa-music:before{content:""}.fa-napster:before{content:""}.fa-neos:before{content:""}.fa-network-wired:before{content:""}.fa-neuter:before{content:""}.fa-newspaper:before{content:""}.fa-nimblr:before{content:""}.fa-node:before{content:""}.fa-node-js:before{content:""}.fa-not-equal:before{content:""}.fa-notes-medical:before{content:""}.fa-npm:before{content:""}.fa-ns8:before{content:""}.fa-nutritionix:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-oil-can:before{content:""}.fa-old-republic:before{content:""}.fa-om:before{content:""}.fa-opencart:before{content:""}.fa-openid:before{content:""}.fa-opera:before{content:""}.fa-optin-monster:before{content:""}.fa-orcid:before{content:""}.fa-osi:before{content:""}.fa-otter:before{content:""}.fa-outdent:before{content:""}.fa-page4:before{content:""}.fa-pagelines:before{content:""}.fa-pager:before{content:""}.fa-paint-brush:before{content:""}.fa-paint-roller:before{content:""}.fa-palette:before{content:""}.fa-palfed:before{content:""}.fa-pallet:before{content:""}.fa-paper-plane:before{content:""}.fa-paperclip:before{content:""}.fa-parachute-box:before{content:""}.fa-paragraph:before{content:""}.fa-parking:before{content:""}.fa-passport:before{content:""}.fa-pastafarianism:before{content:""}.fa-paste:before{content:""}.fa-patreon:before{content:""}.fa-pause:before{content:""}.fa-pause-circle:before{content:""}.fa-paw:before{content:""}.fa-paypal:before{content:""}.fa-peace:before{content:""}.fa-pen:before{content:""}.fa-pen-alt:before{content:""}.fa-pen-fancy:before{content:""}.fa-pen-nib:before{content:""}.fa-pen-square:before{content:""}.fa-pencil-alt:before{content:""}.fa-pencil-ruler:before{content:""}.fa-penny-arcade:before{content:""}.fa-people-arrows:before{content:""}.fa-people-carry:before{content:""}.fa-pepper-hot:before{content:""}.fa-percent:before{content:""}.fa-percentage:before{content:""}.fa-periscope:before{content:""}.fa-person-booth:before{content:""}.fa-phabricator:before{content:""}.fa-phoenix-framework:before{content:""}.fa-phoenix-squadron:before{content:""}.fa-phone:before{content:""}.fa-phone-alt:before{content:""}.fa-phone-slash:before{content:""}.fa-phone-square:before{content:""}.fa-phone-square-alt:before{content:""}.fa-phone-volume:before{content:""}.fa-photo-video:before{content:""}.fa-php:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-pied-piper-hat:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-square:before{content:""}.fa-piggy-bank:before{content:""}.fa-pills:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-p:before{content:""}.fa-pinterest-square:before{content:""}.fa-pizza-slice:before{content:""}.fa-place-of-worship:before{content:""}.fa-plane:before{content:""}.fa-plane-arrival:before{content:""}.fa-plane-departure:before{content:""}.fa-plane-slash:before{content:""}.fa-play:before{content:""}.fa-play-circle:before{content:""}.fa-playstation:before{content:""}.fa-plug:before{content:""}.fa-plus:before{content:""}.fa-plus-circle:before{content:""}.fa-plus-square:before{content:""}.fa-podcast:before{content:""}.fa-poll:before{content:""}.fa-poll-h:before{content:""}.fa-poo:before{content:""}.fa-poo-storm:before{content:""}.fa-poop:before{content:""}.fa-portrait:before{content:""}.fa-pound-sign:before{content:""}.fa-power-off:before{content:""}.fa-pray:before{content:""}.fa-praying-hands:before{content:""}.fa-prescription:before{content:""}.fa-prescription-bottle:before{content:""}.fa-prescription-bottle-alt:before{content:""}.fa-print:before{content:""}.fa-procedures:before{content:""}.fa-product-hunt:before{content:""}.fa-project-diagram:before{content:""}.fa-pump-medical:before{content:""}.fa-pump-soap:before{content:""}.fa-pushed:before{content:""}.fa-puzzle-piece:before{content:""}.fa-python:before{content:""}.fa-qq:before{content:""}.fa-qrcode:before{content:""}.fa-question:before{content:""}.fa-question-circle:before{content:""}.fa-quidditch:before{content:""}.fa-quinscape:before{content:""}.fa-quora:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-quran:before{content:""}.fa-r-project:before{content:""}.fa-radiation:before{content:""}.fa-radiation-alt:before{content:""}.fa-rainbow:before{content:""}.fa-random:before{content:""}.fa-raspberry-pi:before{content:""}.fa-ravelry:before{content:""}.fa-react:before{content:""}.fa-reacteurope:before{content:""}.fa-readme:before{content:""}.fa-rebel:before{content:""}.fa-receipt:before{content:""}.fa-record-vinyl:before{content:""}.fa-recycle:before{content:""}.fa-red-river:before{content:""}.fa-reddit:before{content:""}.fa-reddit-alien:before{content:""}.fa-reddit-square:before{content:""}.fa-redhat:before{content:""}.fa-redo:before{content:""}.fa-redo-alt:before{content:""}.fa-registered:before{content:""}.fa-remove-format:before{content:""}.fa-renren:before{content:""}.fa-reply:before{content:""}.fa-reply-all:before{content:""}.fa-replyd:before{content:""}.fa-republican:before{content:""}.fa-researchgate:before{content:""}.fa-resolving:before{content:""}.fa-restroom:before{content:""}.fa-retweet:before{content:""}.fa-rev:before{content:""}.fa-ribbon:before{content:""}.fa-ring:before{content:""}.fa-road:before{content:""}.fa-robot:before{content:""}.fa-rocket:before{content:""}.fa-rocketchat:before{content:""}.fa-rockrms:before{content:""}.fa-route:before{content:""}.fa-rss:before{content:""}.fa-rss-square:before{content:""}.fa-ruble-sign:before{content:""}.fa-ruler:before{content:""}.fa-ruler-combined:before{content:""}.fa-ruler-horizontal:before{content:""}.fa-ruler-vertical:before{content:""}.fa-running:before{content:""}.fa-rupee-sign:before{content:""}.fa-rust:before{content:""}.fa-sad-cry:before{content:""}.fa-sad-tear:before{content:""}.fa-safari:before{content:""}.fa-salesforce:before{content:""}.fa-sass:before{content:""}.fa-satellite:before{content:""}.fa-satellite-dish:before{content:""}.fa-save:before{content:""}.fa-schlix:before{content:""}.fa-school:before{content:""}.fa-screwdriver:before{content:""}.fa-scribd:before{content:""}.fa-scroll:before{content:""}.fa-sd-card:before{content:""}.fa-search:before{content:""}.fa-search-dollar:before{content:""}.fa-search-location:before{content:""}.fa-search-minus:before{content:""}.fa-search-plus:before{content:""}.fa-searchengin:before{content:""}.fa-seedling:before{content:""}.fa-sellcast:before{content:""}.fa-sellsy:before{content:""}.fa-server:before{content:""}.fa-servicestack:before{content:""}.fa-shapes:before{content:""}.fa-share:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-share-square:before{content:""}.fa-shekel-sign:before{content:""}.fa-shield-alt:before{content:""}.fa-shield-virus:before{content:""}.fa-ship:before{content:""}.fa-shipping-fast:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-shoe-prints:before{content:""}.fa-shopify:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-shopping-cart:before{content:""}.fa-shopware:before{content:""}.fa-shower:before{content:""}.fa-shuttle-van:before{content:""}.fa-sign:before{content:""}.fa-sign-in-alt:before{content:""}.fa-sign-language:before{content:""}.fa-sign-out-alt:before{content:""}.fa-signal:before{content:""}.fa-signature:before{content:""}.fa-sim-card:before{content:""}.fa-simplybuilt:before{content:""}.fa-sink:before{content:""}.fa-sistrix:before{content:""}.fa-sitemap:before{content:""}.fa-sith:before{content:""}.fa-skating:before{content:""}.fa-sketch:before{content:""}.fa-skiing:before{content:""}.fa-skiing-nordic:before{content:""}.fa-skull:before{content:""}.fa-skull-crossbones:before{content:""}.fa-skyatlas:before{content:""}.fa-skype:before{content:""}.fa-slack:before{content:""}.fa-slack-hash:before{content:""}.fa-slash:before{content:""}.fa-sleigh:before{content:""}.fa-sliders-h:before{content:""}.fa-slideshare:before{content:""}.fa-smile:before{content:""}.fa-smile-beam:before{content:""}.fa-smile-wink:before{content:""}.fa-smog:before{content:""}.fa-smoking:before{content:""}.fa-smoking-ban:before{content:""}.fa-sms:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-snowboarding:before{content:""}.fa-snowflake:before{content:""}.fa-snowman:before{content:""}.fa-snowplow:before{content:""}.fa-soap:before{content:""}.fa-socks:before{content:""}.fa-solar-panel:before{content:""}.fa-sort:before{content:""}.fa-sort-alpha-down:before{content:""}.fa-sort-alpha-down-alt:before{content:""}.fa-sort-alpha-up:before{content:""}.fa-sort-alpha-up-alt:before{content:""}.fa-sort-amount-down:before{content:""}.fa-sort-amount-down-alt:before{content:""}.fa-sort-amount-up:before{content:""}.fa-sort-amount-up-alt:before{content:""}.fa-sort-down:before{content:""}.fa-sort-numeric-down:before{content:""}.fa-sort-numeric-down-alt:before{content:""}.fa-sort-numeric-up:before{content:""}.fa-sort-numeric-up-alt:before{content:""}.fa-sort-up:before{content:""}.fa-soundcloud:before{content:""}.fa-sourcetree:before{content:""}.fa-spa:before{content:""}.fa-space-shuttle:before{content:""}.fa-speakap:before{content:""}.fa-speaker-deck:before{content:""}.fa-spell-check:before{content:""}.fa-spider:before{content:""}.fa-spinner:before{content:""}.fa-splotch:before{content:""}.fa-spotify:before{content:""}.fa-spray-can:before{content:""}.fa-square:before{content:""}.fa-square-full:before{content:""}.fa-square-root-alt:before{content:""}.fa-squarespace:before{content:""}.fa-stack-exchange:before{content:""}.fa-stack-overflow:before{content:""}.fa-stackpath:before{content:""}.fa-stamp:before{content:""}.fa-star:before{content:""}.fa-star-and-crescent:before{content:""}.fa-star-half:before{content:""}.fa-star-half-alt:before{content:""}.fa-star-of-david:before{content:""}.fa-star-of-life:before{content:""}.fa-staylinked:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-steam-symbol:before{content:""}.fa-step-backward:before{content:""}.fa-step-forward:before{content:""}.fa-stethoscope:before{content:""}.fa-sticker-mule:before{content:""}.fa-sticky-note:before{content:""}.fa-stop:before{content:""}.fa-stop-circle:before{content:""}.fa-stopwatch:before{content:""}.fa-stopwatch-20:before{content:""}.fa-store:before{content:""}.fa-store-alt:before{content:""}.fa-store-alt-slash:before{content:""}.fa-store-slash:before{content:""}.fa-strava:before{content:""}.fa-stream:before{content:""}.fa-street-view:before{content:""}.fa-strikethrough:before{content:""}.fa-stripe:before{content:""}.fa-stripe-s:before{content:""}.fa-stroopwafel:before{content:""}.fa-studiovinari:before{content:""}.fa-stumbleupon:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-subscript:before{content:""}.fa-subway:before{content:""}.fa-suitcase:before{content:""}.fa-suitcase-rolling:before{content:""}.fa-sun:before{content:""}.fa-superpowers:before{content:""}.fa-superscript:before{content:""}.fa-supple:before{content:""}.fa-surprise:before{content:""}.fa-suse:before{content:""}.fa-swatchbook:before{content:""}.fa-swift:before{content:""}.fa-swimmer:before{content:""}.fa-swimming-pool:before{content:""}.fa-symfony:before{content:""}.fa-synagogue:before{content:""}.fa-sync:before{content:""}.fa-sync-alt:before{content:""}.fa-syringe:before{content:""}.fa-table:before{content:""}.fa-table-tennis:before{content:""}.fa-tablet:before{content:""}.fa-tablet-alt:before{content:""}.fa-tablets:before{content:""}.fa-tachometer-alt:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-tape:before{content:""}.fa-tasks:before{content:""}.fa-taxi:before{content:""}.fa-teamspeak:before{content:""}.fa-teeth:before{content:""}.fa-teeth-open:before{content:""}.fa-telegram:before{content:""}.fa-telegram-plane:before{content:""}.fa-temperature-high:before{content:""}.fa-temperature-low:before{content:""}.fa-tencent-weibo:before{content:""}.fa-tenge:before{content:""}.fa-terminal:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-th:before{content:""}.fa-th-large:before{content:""}.fa-th-list:before{content:""}.fa-the-red-yeti:before{content:""}.fa-theater-masks:before{content:""}.fa-themeco:before{content:""}.fa-themeisle:before{content:""}.fa-thermometer:before{content:""}.fa-thermometer-empty:before{content:""}.fa-thermometer-full:before{content:""}.fa-thermometer-half:before{content:""}.fa-thermometer-quarter:before{content:""}.fa-thermometer-three-quarters:before{content:""}.fa-think-peaks:before{content:""}.fa-thumbs-down:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbtack:before{content:""}.fa-ticket-alt:before{content:""}.fa-tiktok:before{content:""}.fa-times:before{content:""}.fa-times-circle:before{content:""}.fa-tint:before{content:""}.fa-tint-slash:before{content:""}.fa-tired:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-toilet:before{content:""}.fa-toilet-paper:before{content:""}.fa-toilet-paper-slash:before{content:""}.fa-toolbox:before{content:""}.fa-tools:before{content:""}.fa-tooth:before{content:""}.fa-torah:before{content:""}.fa-torii-gate:before{content:""}.fa-tractor:before{content:""}.fa-trade-federation:before{content:""}.fa-trademark:before{content:""}.fa-traffic-light:before{content:""}.fa-trailer:before{content:""}.fa-train:before{content:""}.fa-tram:before{content:""}.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-trash:before{content:""}.fa-trash-alt:before{content:""}.fa-trash-restore:before{content:""}.fa-trash-restore-alt:before{content:""}.fa-tree:before{content:""}.fa-trello:before{content:""}.fa-tripadvisor:before{content:""}.fa-trophy:before{content:""}.fa-truck:before{content:""}.fa-truck-loading:before{content:""}.fa-truck-monster:before{content:""}.fa-truck-moving:before{content:""}.fa-truck-pickup:before{content:""}.fa-tshirt:before{content:""}.fa-tty:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-tv:before{content:""}.fa-twitch:before{content:""}.fa-twitter:before{content:""}.fa-twitter-square:before{content:""}.fa-typo3:before{content:""}.fa-uber:before{content:""}.fa-ubuntu:before{content:""}.fa-uikit:before{content:""}.fa-umbraco:before{content:""}.fa-umbrella:before{content:""}.fa-umbrella-beach:before{content:""}.fa-underline:before{content:""}.fa-undo:before{content:""}.fa-undo-alt:before{content:""}.fa-uniregistry:before{content:""}.fa-unity:before{content:""}.fa-universal-access:before{content:""}.fa-university:before{content:""}.fa-unlink:before{content:""}.fa-unlock:before{content:""}.fa-unlock-alt:before{content:""}.fa-unsplash:before{content:""}.fa-untappd:before{content:""}.fa-upload:before{content:""}.fa-ups:before{content:""}.fa-usb:before{content:""}.fa-user:before{content:""}.fa-user-alt:before{content:""}.fa-user-alt-slash:before{content:""}.fa-user-astronaut:before{content:""}.fa-user-check:before{content:""}.fa-user-circle:before{content:""}.fa-user-clock:before{content:""}.fa-user-cog:before{content:""}.fa-user-edit:before{content:""}.fa-user-friends:before{content:""}.fa-user-graduate:before{content:""}.fa-user-injured:before{content:""}.fa-user-lock:before{content:""}.fa-user-md:before{content:""}.fa-user-minus:before{content:""}.fa-user-ninja:before{content:""}.fa-user-nurse:before{content:""}.fa-user-plus:before{content:""}.fa-user-secret:before{content:""}.fa-user-shield:before{content:""}.fa-user-slash:before{content:""}.fa-user-tag:before{content:""}.fa-user-tie:before{content:""}.fa-user-times:before{content:""}.fa-users:before{content:""}.fa-users-cog:before{content:""}.fa-users-slash:before{content:""}.fa-usps:before{content:""}.fa-ussunnah:before{content:""}.fa-utensil-spoon:before{content:""}.fa-utensils:before{content:""}.fa-vaadin:before{content:""}.fa-vector-square:before{content:""}.fa-venus:before{content:""}.fa-venus-double:before{content:""}.fa-venus-mars:before{content:""}.fa-viacoin:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-vial:before{content:""}.fa-vials:before{content:""}.fa-viber:before{content:""}.fa-video:before{content:""}.fa-video-slash:before{content:""}.fa-vihara:before{content:""}.fa-vimeo:before{content:""}.fa-vimeo-square:before{content:""}.fa-vimeo-v:before{content:""}.fa-vine:before{content:""}.fa-virus:before{content:""}.fa-virus-slash:before{content:""}.fa-viruses:before{content:""}.fa-vk:before{content:""}.fa-vnv:before{content:""}.fa-voicemail:before{content:""}.fa-volleyball-ball:before{content:""}.fa-volume-down:before{content:""}.fa-volume-mute:before{content:""}.fa-volume-off:before{content:""}.fa-volume-up:before{content:""}.fa-vote-yea:before{content:""}.fa-vr-cardboard:before{content:""}.fa-vuejs:before{content:""}.fa-walking:before{content:""}.fa-wallet:before{content:""}.fa-warehouse:before{content:""}.fa-water:before{content:""}.fa-wave-square:before{content:""}.fa-waze:before{content:""}.fa-weebly:before{content:""}.fa-weibo:before{content:""}.fa-weight:before{content:""}.fa-weight-hanging:before{content:""}.fa-weixin:before{content:""}.fa-whatsapp:before{content:""}.fa-whatsapp-square:before{content:""}.fa-wheelchair:before{content:""}.fa-whmcs:before{content:""}.fa-wifi:before{content:""}.fa-wikipedia-w:before{content:""}.fa-wind:before{content:""}.fa-window-close:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-windows:before{content:""}.fa-wine-bottle:before{content:""}.fa-wine-glass:before{content:""}.fa-wine-glass-alt:before{content:""}.fa-wix:before{content:""}.fa-wizards-of-the-coast:before{content:""}.fa-wolf-pack-battalion:before{content:""}.fa-won-sign:before{content:""}.fa-wordpress:before{content:""}.fa-wordpress-simple:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpexplorer:before{content:""}.fa-wpforms:before{content:""}.fa-wpressr:before{content:""}.fa-wrench:before{content:""}.fa-x-ray:before{content:""}.fa-xbox:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-y-combinator:before{content:""}.fa-yahoo:before{content:""}.fa-yammer:before{content:""}.fa-yandex:before{content:""}.fa-yandex-international:before{content:""}.fa-yarn:before{content:""}.fa-yelp:before{content:""}.fa-yen-sign:before{content:""}.fa-yin-yang:before{content:""}.fa-yoast:before{content:""}.fa-youtube:before{content:""}.fa-youtube-square:before{content:""}.fa-zhihu:before{content:""}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.converse-website converse-icon:before,.conversejs converse-icon:before{content:none!important}.converse-website .far:not(converse-icon),.conversejs .far:not(converse-icon){font-family:ConverseFontAwesomeRegular!important;font-weight:400}.converse-website .fa:not(converse-icon),.converse-website .fas:not(converse-icon),.conversejs .fa:not(converse-icon),.conversejs .fas:not(converse-icon){font-family:ConverseFontAwesomeSolid!important;font-weight:900}.converse-website .fab:not(converse-icon),.conversejs .fab:not(converse-icon){font-family:ConverseFontAwesomeBrands}.converse-website .fa:not(converse-icon),.converse-website .fab:not(converse-icon),.converse-website .far:not(converse-icon),.converse-website .fas:not(converse-icon),.conversejs .fa:not(converse-icon),.conversejs .fab:not(converse-icon),.conversejs .far:not(converse-icon),.conversejs .fas:not(converse-icon){display:inline-block;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.converse-website .fa-info-circle,.conversejs .fa-info-circle{height:1em}.conversejs :root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.conversejs *,.conversejs ::after,.conversejs ::before{box-sizing:border-box}.conversejs html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}.conversejs article,.conversejs aside,.conversejs figcaption,.conversejs figure,.conversejs footer,.conversejs header,.conversejs hgroup,.conversejs main,.conversejs nav,.conversejs section{display:block}.conversejs body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}.conversejs [tabindex="-1"]:focus:not(:focus-visible){outline:0!important}.conversejs hr{box-sizing:content-box;height:0;overflow:visible}.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6{margin-top:0;margin-bottom:.5rem}.conversejs p{margin-top:0;margin-bottom:1rem}.conversejs abbr[data-original-title],.conversejs abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}.conversejs address{margin-bottom:1rem;font-style:normal;line-height:inherit}.conversejs dl,.conversejs ol,.conversejs ul{margin-top:0;margin-bottom:1rem}.conversejs ol ol,.conversejs ol ul,.conversejs ul ol,.conversejs ul ul{margin-bottom:0}.conversejs dt{font-weight:700}.conversejs dd{margin-bottom:.5rem;margin-left:0}.conversejs blockquote{margin:0 0 1rem}.conversejs b,.conversejs strong{font-weight:bolder}.conversejs small{font-size:80%}.conversejs sub,.conversejs sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.conversejs sub{bottom:-.25em}.conversejs sup{top:-.5em}.conversejs a{color:#007bff;text-decoration:none;background-color:transparent}.conversejs a:hover{color:#0056b3;text-decoration:underline}.conversejs a:not([href]):not([class]){color:inherit;text-decoration:none}.conversejs a:not([href]):not([class]):hover{color:inherit;text-decoration:none}.conversejs code,.conversejs kbd,.conversejs pre,.conversejs samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}.conversejs pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}.conversejs figure{margin:0 0 1rem}.conversejs img{vertical-align:middle;border-style:none}.conversejs svg{overflow:hidden;vertical-align:middle}.conversejs table{border-collapse:collapse}.conversejs caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}.conversejs th{text-align:inherit;text-align:-webkit-match-parent}.conversejs label{display:inline-block;margin-bottom:.5rem}.conversejs button{border-radius:0}.conversejs button:focus:not(:focus-visible){outline:0}.conversejs button,.conversejs input,.conversejs optgroup,.conversejs select,.conversejs textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.conversejs button,.conversejs input{overflow:visible}.conversejs button,.conversejs select{text-transform:none}.conversejs [role=button]{cursor:pointer}.conversejs select{word-wrap:normal}.conversejs [type=button],.conversejs [type=reset],.conversejs [type=submit],.conversejs button{-webkit-appearance:button}.conversejs [type=button]:not(:disabled),.conversejs [type=reset]:not(:disabled),.conversejs [type=submit]:not(:disabled),.conversejs button:not(:disabled){cursor:pointer}.conversejs [type=button]::-moz-focus-inner,.conversejs [type=reset]::-moz-focus-inner,.conversejs [type=submit]::-moz-focus-inner,.conversejs button::-moz-focus-inner{padding:0;border-style:none}.conversejs input[type=checkbox],.conversejs input[type=radio]{box-sizing:border-box;padding:0}.conversejs textarea{overflow:auto;resize:vertical}.conversejs fieldset{min-width:0;padding:0;margin:0;border:0}.conversejs legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}.conversejs progress{vertical-align:baseline}.conversejs [type=number]::-webkit-inner-spin-button,.conversejs [type=number]::-webkit-outer-spin-button{height:auto}.conversejs [type=search]{outline-offset:-2px;-webkit-appearance:none}.conversejs [type=search]::-webkit-search-decoration{-webkit-appearance:none}.conversejs ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}.conversejs output{display:inline-block}.conversejs summary{display:list-item;cursor:pointer}.conversejs template{display:none}.conversejs [hidden]{display:none!important}.conversejs .h1,.conversejs .h2,.conversejs .h3,.conversejs .h4,.conversejs .h5,.conversejs .h6,.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.conversejs .h1,.conversejs h1{font-size:2.5rem}.conversejs .h2,.conversejs h2{font-size:2rem}.conversejs .h3,.conversejs h3{font-size:1.75rem}.conversejs .h4,.conversejs h4{font-size:1.5rem}.conversejs .h5,.conversejs h5{font-size:1.25rem}.conversejs .h6,.conversejs h6{font-size:1rem}.conversejs .lead{font-size:1.25rem;font-weight:300}.conversejs .display-1{font-size:6rem;font-weight:300;line-height:1.2}.conversejs .display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.conversejs .display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.conversejs .display-4{font-size:3.5rem;font-weight:300;line-height:1.2}.conversejs hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.conversejs .small,.conversejs small{font-size:80%;font-weight:400}.conversejs .mark,.conversejs mark{padding:.2em;background-color:#fcf8e3}.conversejs .list-unstyled{padding-left:0;list-style:none}.conversejs .list-inline{padding-left:0;list-style:none}.conversejs .list-inline-item{display:inline-block}.conversejs .list-inline-item:not(:last-child){margin-right:.5rem}.conversejs .initialism{font-size:90%;text-transform:uppercase}.conversejs .blockquote{margin-bottom:1rem;font-size:1.25rem}.conversejs .blockquote-footer{display:block;font-size:80%;color:#6c757d}.conversejs .blockquote-footer::before{content:"— "}.conversejs .img-fluid{max-width:100%;height:auto}.conversejs .img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.conversejs .figure{display:inline-block}.conversejs .figure-img{margin-bottom:.5rem;line-height:1}.conversejs .figure-caption{font-size:90%;color:#6c757d}.conversejs .container,.conversejs .container-fluid,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm,.conversejs .container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width:576px){.conversejs .container,.conversejs .container-sm{max-width:540px}}@media(min-width:768px){.conversejs .container,.conversejs .container-md,.conversejs .container-sm{max-width:720px}}@media(min-width:992px){.conversejs .container,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm{max-width:960px}}@media(min-width:1200px){.conversejs .container,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm,.conversejs .container-xl{max-width:1140px}}.conversejs .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.conversejs .no-gutters{margin-right:0;margin-left:0}.conversejs .no-gutters>.col,.conversejs .no-gutters>[class*=col-]{padding-right:0;padding-left:0}.conversejs .col,.conversejs .col-1,.conversejs .col-10,.conversejs .col-11,.conversejs .col-12,.conversejs .col-2,.conversejs .col-3,.conversejs .col-4,.conversejs .col-5,.conversejs .col-6,.conversejs .col-7,.conversejs .col-8,.conversejs .col-9,.conversejs .col-auto,.conversejs .col-lg,.conversejs .col-lg-1,.conversejs .col-lg-10,.conversejs .col-lg-11,.conversejs .col-lg-12,.conversejs .col-lg-2,.conversejs .col-lg-3,.conversejs .col-lg-4,.conversejs .col-lg-5,.conversejs .col-lg-6,.conversejs .col-lg-7,.conversejs .col-lg-8,.conversejs .col-lg-9,.conversejs .col-lg-auto,.conversejs .col-md,.conversejs .col-md-1,.conversejs .col-md-10,.conversejs .col-md-11,.conversejs .col-md-12,.conversejs .col-md-2,.conversejs .col-md-3,.conversejs .col-md-4,.conversejs .col-md-5,.conversejs .col-md-6,.conversejs .col-md-7,.conversejs .col-md-8,.conversejs .col-md-9,.conversejs .col-md-auto,.conversejs .col-sm,.conversejs .col-sm-1,.conversejs .col-sm-10,.conversejs .col-sm-11,.conversejs .col-sm-12,.conversejs .col-sm-2,.conversejs .col-sm-3,.conversejs .col-sm-4,.conversejs .col-sm-5,.conversejs .col-sm-6,.conversejs .col-sm-7,.conversejs .col-sm-8,.conversejs .col-sm-9,.conversejs .col-sm-auto,.conversejs .col-xl,.conversejs .col-xl-1,.conversejs .col-xl-10,.conversejs .col-xl-11,.conversejs .col-xl-12,.conversejs .col-xl-2,.conversejs .col-xl-3,.conversejs .col-xl-4,.conversejs .col-xl-5,.conversejs .col-xl-6,.conversejs .col-xl-7,.conversejs .col-xl-8,.conversejs .col-xl-9,.conversejs .col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.conversejs .col{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-3{flex:0 0 25%;max-width:25%}.conversejs .col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-6{flex:0 0 50%;max-width:50%}.conversejs .col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-9{flex:0 0 75%;max-width:75%}.conversejs .col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-12{flex:0 0 100%;max-width:100%}.conversejs .order-first{order:-1}.conversejs .order-last{order:13}.conversejs .order-0{order:0}.conversejs .order-1{order:1}.conversejs .order-2{order:2}.conversejs .order-3{order:3}.conversejs .order-4{order:4}.conversejs .order-5{order:5}.conversejs .order-6{order:6}.conversejs .order-7{order:7}.conversejs .order-8{order:8}.conversejs .order-9{order:9}.conversejs .order-10{order:10}.conversejs .order-11{order:11}.conversejs .order-12{order:12}.conversejs .offset-1{margin-left:8.3333333333%}.conversejs .offset-2{margin-left:16.6666666667%}.conversejs .offset-3{margin-left:25%}.conversejs .offset-4{margin-left:33.3333333333%}.conversejs .offset-5{margin-left:41.6666666667%}.conversejs .offset-6{margin-left:50%}.conversejs .offset-7{margin-left:58.3333333333%}.conversejs .offset-8{margin-left:66.6666666667%}.conversejs .offset-9{margin-left:75%}.conversejs .offset-10{margin-left:83.3333333333%}.conversejs .offset-11{margin-left:91.6666666667%}@media(min-width:576px){.conversejs .col-sm{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-sm-3{flex:0 0 25%;max-width:25%}.conversejs .col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-sm-6{flex:0 0 50%;max-width:50%}.conversejs .col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-sm-9{flex:0 0 75%;max-width:75%}.conversejs .col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-sm-12{flex:0 0 100%;max-width:100%}.conversejs .order-sm-first{order:-1}.conversejs .order-sm-last{order:13}.conversejs .order-sm-0{order:0}.conversejs .order-sm-1{order:1}.conversejs .order-sm-2{order:2}.conversejs .order-sm-3{order:3}.conversejs .order-sm-4{order:4}.conversejs .order-sm-5{order:5}.conversejs .order-sm-6{order:6}.conversejs .order-sm-7{order:7}.conversejs .order-sm-8{order:8}.conversejs .order-sm-9{order:9}.conversejs .order-sm-10{order:10}.conversejs .order-sm-11{order:11}.conversejs .order-sm-12{order:12}.conversejs .offset-sm-0{margin-left:0}.conversejs .offset-sm-1{margin-left:8.3333333333%}.conversejs .offset-sm-2{margin-left:16.6666666667%}.conversejs .offset-sm-3{margin-left:25%}.conversejs .offset-sm-4{margin-left:33.3333333333%}.conversejs .offset-sm-5{margin-left:41.6666666667%}.conversejs .offset-sm-6{margin-left:50%}.conversejs .offset-sm-7{margin-left:58.3333333333%}.conversejs .offset-sm-8{margin-left:66.6666666667%}.conversejs .offset-sm-9{margin-left:75%}.conversejs .offset-sm-10{margin-left:83.3333333333%}.conversejs .offset-sm-11{margin-left:91.6666666667%}}@media(min-width:768px){.conversejs .col-md{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-md-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-md-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-md-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-md-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-md-3{flex:0 0 25%;max-width:25%}.conversejs .col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-md-6{flex:0 0 50%;max-width:50%}.conversejs .col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-md-9{flex:0 0 75%;max-width:75%}.conversejs .col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-md-12{flex:0 0 100%;max-width:100%}.conversejs .order-md-first{order:-1}.conversejs .order-md-last{order:13}.conversejs .order-md-0{order:0}.conversejs .order-md-1{order:1}.conversejs .order-md-2{order:2}.conversejs .order-md-3{order:3}.conversejs .order-md-4{order:4}.conversejs .order-md-5{order:5}.conversejs .order-md-6{order:6}.conversejs .order-md-7{order:7}.conversejs .order-md-8{order:8}.conversejs .order-md-9{order:9}.conversejs .order-md-10{order:10}.conversejs .order-md-11{order:11}.conversejs .order-md-12{order:12}.conversejs .offset-md-0{margin-left:0}.conversejs .offset-md-1{margin-left:8.3333333333%}.conversejs .offset-md-2{margin-left:16.6666666667%}.conversejs .offset-md-3{margin-left:25%}.conversejs .offset-md-4{margin-left:33.3333333333%}.conversejs .offset-md-5{margin-left:41.6666666667%}.conversejs .offset-md-6{margin-left:50%}.conversejs .offset-md-7{margin-left:58.3333333333%}.conversejs .offset-md-8{margin-left:66.6666666667%}.conversejs .offset-md-9{margin-left:75%}.conversejs .offset-md-10{margin-left:83.3333333333%}.conversejs .offset-md-11{margin-left:91.6666666667%}}@media(min-width:992px){.conversejs .col-lg{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-lg-3{flex:0 0 25%;max-width:25%}.conversejs .col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-lg-6{flex:0 0 50%;max-width:50%}.conversejs .col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-lg-9{flex:0 0 75%;max-width:75%}.conversejs .col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-lg-12{flex:0 0 100%;max-width:100%}.conversejs .order-lg-first{order:-1}.conversejs .order-lg-last{order:13}.conversejs .order-lg-0{order:0}.conversejs .order-lg-1{order:1}.conversejs .order-lg-2{order:2}.conversejs .order-lg-3{order:3}.conversejs .order-lg-4{order:4}.conversejs .order-lg-5{order:5}.conversejs .order-lg-6{order:6}.conversejs .order-lg-7{order:7}.conversejs .order-lg-8{order:8}.conversejs .order-lg-9{order:9}.conversejs .order-lg-10{order:10}.conversejs .order-lg-11{order:11}.conversejs .order-lg-12{order:12}.conversejs .offset-lg-0{margin-left:0}.conversejs .offset-lg-1{margin-left:8.3333333333%}.conversejs .offset-lg-2{margin-left:16.6666666667%}.conversejs .offset-lg-3{margin-left:25%}.conversejs .offset-lg-4{margin-left:33.3333333333%}.conversejs .offset-lg-5{margin-left:41.6666666667%}.conversejs .offset-lg-6{margin-left:50%}.conversejs .offset-lg-7{margin-left:58.3333333333%}.conversejs .offset-lg-8{margin-left:66.6666666667%}.conversejs .offset-lg-9{margin-left:75%}.conversejs .offset-lg-10{margin-left:83.3333333333%}.conversejs .offset-lg-11{margin-left:91.6666666667%}}@media(min-width:1200px){.conversejs .col-xl{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-xl-3{flex:0 0 25%;max-width:25%}.conversejs .col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-xl-6{flex:0 0 50%;max-width:50%}.conversejs .col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-xl-9{flex:0 0 75%;max-width:75%}.conversejs .col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-xl-12{flex:0 0 100%;max-width:100%}.conversejs .order-xl-first{order:-1}.conversejs .order-xl-last{order:13}.conversejs .order-xl-0{order:0}.conversejs .order-xl-1{order:1}.conversejs .order-xl-2{order:2}.conversejs .order-xl-3{order:3}.conversejs .order-xl-4{order:4}.conversejs .order-xl-5{order:5}.conversejs .order-xl-6{order:6}.conversejs .order-xl-7{order:7}.conversejs .order-xl-8{order:8}.conversejs .order-xl-9{order:9}.conversejs .order-xl-10{order:10}.conversejs .order-xl-11{order:11}.conversejs .order-xl-12{order:12}.conversejs .offset-xl-0{margin-left:0}.conversejs .offset-xl-1{margin-left:8.3333333333%}.conversejs .offset-xl-2{margin-left:16.6666666667%}.conversejs .offset-xl-3{margin-left:25%}.conversejs .offset-xl-4{margin-left:33.3333333333%}.conversejs .offset-xl-5{margin-left:41.6666666667%}.conversejs .offset-xl-6{margin-left:50%}.conversejs .offset-xl-7{margin-left:58.3333333333%}.conversejs .offset-xl-8{margin-left:66.6666666667%}.conversejs .offset-xl-9{margin-left:75%}.conversejs .offset-xl-10{margin-left:83.3333333333%}.conversejs .offset-xl-11{margin-left:91.6666666667%}}.conversejs .fade{transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.conversejs .fade{transition:none}}.conversejs .fade:not(.show){opacity:0}.conversejs .collapse:not(.show){display:none}.conversejs .collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion:reduce){.conversejs .collapsing{transition:none}}.conversejs .dropdown,.conversejs .dropleft,.conversejs .dropright,.conversejs .dropup{position:relative}.conversejs .dropdown-toggle{white-space:nowrap}.conversejs .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.conversejs .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.conversejs .dropdown-menu-left{right:auto;left:0}.conversejs .dropdown-menu-right{right:0;left:auto}@media(min-width:576px){.conversejs .dropdown-menu-sm-left{right:auto;left:0}.conversejs .dropdown-menu-sm-right{right:0;left:auto}}@media(min-width:768px){.conversejs .dropdown-menu-md-left{right:auto;left:0}.conversejs .dropdown-menu-md-right{right:0;left:auto}}@media(min-width:992px){.conversejs .dropdown-menu-lg-left{right:auto;left:0}.conversejs .dropdown-menu-lg-right{right:0;left:auto}}@media(min-width:1200px){.conversejs .dropdown-menu-xl-left{right:auto;left:0}.conversejs .dropdown-menu-xl-right{right:0;left:auto}}.conversejs .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.conversejs .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.conversejs .dropup .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.conversejs .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.conversejs .dropright .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-toggle::after{vertical-align:0}.conversejs .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.conversejs .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.conversejs .dropleft .dropdown-toggle::after{display:none}.conversejs .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.conversejs .dropleft .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropleft .dropdown-toggle::before{vertical-align:0}.conversejs .dropdown-menu[x-placement^=bottom],.conversejs .dropdown-menu[x-placement^=left],.conversejs .dropdown-menu[x-placement^=right],.conversejs .dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.conversejs .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.conversejs .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.conversejs .dropdown-item:focus,.conversejs .dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.conversejs .dropdown-item.active,.conversejs .dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.conversejs .dropdown-item.disabled,.conversejs .dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.conversejs .dropdown-menu.show{display:block}.conversejs .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.conversejs .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.conversejs .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.conversejs .nav-link{display:block;padding:.5rem 1rem}.conversejs .nav-link:focus,.conversejs .nav-link:hover{text-decoration:none}.conversejs .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.conversejs .nav-tabs{border-bottom:1px solid #dee2e6}.conversejs .nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.conversejs .nav-tabs .nav-link:focus,.conversejs .nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.conversejs .nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.conversejs .nav-tabs .nav-item.show .nav-link,.conversejs .nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.conversejs .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.conversejs .nav-pills .nav-link{border-radius:.25rem}.conversejs .nav-pills .nav-link.active,.conversejs .nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.conversejs .nav-fill .nav-item,.conversejs .nav-fill>.nav-link{flex:1 1 auto;text-align:center}.conversejs .nav-justified .nav-item,.conversejs .nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.conversejs .tab-content>.tab-pane{display:none}.conversejs .tab-content>.active{display:block}.conversejs .alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.conversejs .alert-heading{color:inherit}.conversejs .alert-link{font-weight:700}.conversejs .alert-dismissible{padding-right:4rem}.conversejs .alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.conversejs .alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.conversejs .alert-primary hr{border-top-color:#9fcdff}.conversejs .alert-primary .alert-link{color:#002752}.conversejs .alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.conversejs .alert-secondary hr{border-top-color:#c8cbcf}.conversejs .alert-secondary .alert-link{color:#202326}.conversejs .alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.conversejs .alert-success hr{border-top-color:#b1dfbb}.conversejs .alert-success .alert-link{color:#0b2e13}.conversejs .alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.conversejs .alert-info hr{border-top-color:#abdde5}.conversejs .alert-info .alert-link{color:#062c33}.conversejs .alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.conversejs .alert-warning hr{border-top-color:#ffe8a1}.conversejs .alert-warning .alert-link{color:#533f03}.conversejs .alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.conversejs .alert-danger hr{border-top-color:#f1b0b7}.conversejs .alert-danger .alert-link{color:#491217}.conversejs .alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.conversejs .alert-light hr{border-top-color:#ececf6}.conversejs .alert-light .alert-link{color:#686868}.conversejs .alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.conversejs .alert-dark hr{border-top-color:#b9bbbe}.conversejs .alert-dark .alert-link{color:#040505}.conversejs .media{display:flex;align-items:flex-start}.conversejs .media-body{flex:1}.conversejs .close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.conversejs .close:hover{color:#000;text-decoration:none}.conversejs .close:not(:disabled):not(.disabled):focus,.conversejs .close:not(:disabled):not(.disabled):hover{opacity:.75}.conversejs button.close{padding:0;background-color:transparent;border:0}.conversejs a.close.disabled{pointer-events:none}.conversejs .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.conversejs .popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.conversejs .popover .arrow::after,.conversejs .popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.conversejs .bs-popover-auto[x-placement^=top],.conversejs .bs-popover-top{margin-bottom:.5rem}.conversejs .bs-popover-auto[x-placement^=top]>.arrow,.conversejs .bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.conversejs .bs-popover-auto[x-placement^=top]>.arrow::before,.conversejs .bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=top]>.arrow::after,.conversejs .bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.conversejs .bs-popover-auto[x-placement^=right],.conversejs .bs-popover-right{margin-left:.5rem}.conversejs .bs-popover-auto[x-placement^=right]>.arrow,.conversejs .bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.conversejs .bs-popover-auto[x-placement^=right]>.arrow::before,.conversejs .bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=right]>.arrow::after,.conversejs .bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.conversejs .bs-popover-auto[x-placement^=bottom],.conversejs .bs-popover-bottom{margin-top:.5rem}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow,.conversejs .bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::before,.conversejs .bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::after,.conversejs .bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.conversejs .bs-popover-auto[x-placement^=bottom] .popover-header::before,.conversejs .bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.conversejs .bs-popover-auto[x-placement^=left],.conversejs .bs-popover-left{margin-right:.5rem}.conversejs .bs-popover-auto[x-placement^=left]>.arrow,.conversejs .bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.conversejs .bs-popover-auto[x-placement^=left]>.arrow::before,.conversejs .bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=left]>.arrow::after,.conversejs .bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.conversejs .popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.conversejs .popover-header:empty{display:none}.conversejs .popover-body{padding:.5rem .75rem;color:#212529}.conversejs .align-baseline{vertical-align:baseline!important}.conversejs .align-top{vertical-align:top!important}.conversejs .align-middle{vertical-align:middle!important}.conversejs .align-bottom{vertical-align:bottom!important}.conversejs .align-text-bottom{vertical-align:text-bottom!important}.conversejs .align-text-top{vertical-align:text-top!important}.conversejs .bg-primary{background-color:#007bff!important}.conversejs a.bg-primary:focus,.conversejs a.bg-primary:hover,.conversejs button.bg-primary:focus,.conversejs button.bg-primary:hover{background-color:#0062cc!important}.conversejs .bg-secondary{background-color:#6c757d!important}.conversejs a.bg-secondary:focus,.conversejs a.bg-secondary:hover,.conversejs button.bg-secondary:focus,.conversejs button.bg-secondary:hover{background-color:#545b62!important}.conversejs .bg-success{background-color:#28a745!important}.conversejs a.bg-success:focus,.conversejs a.bg-success:hover,.conversejs button.bg-success:focus,.conversejs button.bg-success:hover{background-color:#1e7e34!important}.conversejs .bg-info{background-color:#17a2b8!important}.conversejs a.bg-info:focus,.conversejs a.bg-info:hover,.conversejs button.bg-info:focus,.conversejs button.bg-info:hover{background-color:#117a8b!important}.conversejs .bg-warning{background-color:#ffc107!important}.conversejs a.bg-warning:focus,.conversejs a.bg-warning:hover,.conversejs button.bg-warning:focus,.conversejs button.bg-warning:hover{background-color:#d39e00!important}.conversejs .bg-danger{background-color:#dc3545!important}.conversejs a.bg-danger:focus,.conversejs a.bg-danger:hover,.conversejs button.bg-danger:focus,.conversejs button.bg-danger:hover{background-color:#bd2130!important}.conversejs .bg-light{background-color:#f8f9fa!important}.conversejs a.bg-light:focus,.conversejs a.bg-light:hover,.conversejs button.bg-light:focus,.conversejs button.bg-light:hover{background-color:#dae0e5!important}.conversejs .bg-dark{background-color:#343a40!important}.conversejs a.bg-dark:focus,.conversejs a.bg-dark:hover,.conversejs button.bg-dark:focus,.conversejs button.bg-dark:hover{background-color:#1d2124!important}.conversejs .bg-white{background-color:#fff!important}.conversejs .bg-transparent{background-color:transparent!important}.conversejs .border{border:1px solid #dee2e6!important}.conversejs .border-top{border-top:1px solid #dee2e6!important}.conversejs .border-right{border-right:1px solid #dee2e6!important}.conversejs .border-bottom{border-bottom:1px solid #dee2e6!important}.conversejs .border-left{border-left:1px solid #dee2e6!important}.conversejs .border-0{border:0!important}.conversejs .border-top-0{border-top:0!important}.conversejs .border-right-0{border-right:0!important}.conversejs .border-bottom-0{border-bottom:0!important}.conversejs .border-left-0{border-left:0!important}.conversejs .border-primary{border-color:#007bff!important}.conversejs .border-secondary{border-color:#6c757d!important}.conversejs .border-success{border-color:#28a745!important}.conversejs .border-info{border-color:#17a2b8!important}.conversejs .border-warning{border-color:#ffc107!important}.conversejs .border-danger{border-color:#dc3545!important}.conversejs .border-light{border-color:#f8f9fa!important}.conversejs .border-dark{border-color:#343a40!important}.conversejs .border-white{border-color:#fff!important}.conversejs .rounded-sm{border-radius:.2rem!important}.conversejs .rounded{border-radius:.25rem!important}.conversejs .rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.conversejs .rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.conversejs .rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.conversejs .rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.conversejs .rounded-lg{border-radius:.3rem!important}.conversejs .rounded-circle{border-radius:50%!important}.conversejs .rounded-pill{border-radius:50rem!important}.conversejs .rounded-0{border-radius:0!important}.conversejs .clearfix::after{display:block;clear:both;content:""}.conversejs .d-none{display:none!important}.conversejs .d-inline{display:inline!important}.conversejs .d-inline-block{display:inline-block!important}.conversejs .d-block{display:block!important}.conversejs .d-table{display:table!important}.conversejs .d-table-row{display:table-row!important}.conversejs .d-table-cell{display:table-cell!important}.conversejs .d-flex{display:flex!important}.conversejs .d-inline-flex{display:inline-flex!important}@media(min-width:576px){.conversejs .d-sm-none{display:none!important}.conversejs .d-sm-inline{display:inline!important}.conversejs .d-sm-inline-block{display:inline-block!important}.conversejs .d-sm-block{display:block!important}.conversejs .d-sm-table{display:table!important}.conversejs .d-sm-table-row{display:table-row!important}.conversejs .d-sm-table-cell{display:table-cell!important}.conversejs .d-sm-flex{display:flex!important}.conversejs .d-sm-inline-flex{display:inline-flex!important}}@media(min-width:768px){.conversejs .d-md-none{display:none!important}.conversejs .d-md-inline{display:inline!important}.conversejs .d-md-inline-block{display:inline-block!important}.conversejs .d-md-block{display:block!important}.conversejs .d-md-table{display:table!important}.conversejs .d-md-table-row{display:table-row!important}.conversejs .d-md-table-cell{display:table-cell!important}.conversejs .d-md-flex{display:flex!important}.conversejs .d-md-inline-flex{display:inline-flex!important}}@media(min-width:992px){.conversejs .d-lg-none{display:none!important}.conversejs .d-lg-inline{display:inline!important}.conversejs .d-lg-inline-block{display:inline-block!important}.conversejs .d-lg-block{display:block!important}.conversejs .d-lg-table{display:table!important}.conversejs .d-lg-table-row{display:table-row!important}.conversejs .d-lg-table-cell{display:table-cell!important}.conversejs .d-lg-flex{display:flex!important}.conversejs .d-lg-inline-flex{display:inline-flex!important}}@media(min-width:1200px){.conversejs .d-xl-none{display:none!important}.conversejs .d-xl-inline{display:inline!important}.conversejs .d-xl-inline-block{display:inline-block!important}.conversejs .d-xl-block{display:block!important}.conversejs .d-xl-table{display:table!important}.conversejs .d-xl-table-row{display:table-row!important}.conversejs .d-xl-table-cell{display:table-cell!important}.conversejs .d-xl-flex{display:flex!important}.conversejs .d-xl-inline-flex{display:inline-flex!important}}@media print{.conversejs .d-print-none{display:none!important}.conversejs .d-print-inline{display:inline!important}.conversejs .d-print-inline-block{display:inline-block!important}.conversejs .d-print-block{display:block!important}.conversejs .d-print-table{display:table!important}.conversejs .d-print-table-row{display:table-row!important}.conversejs .d-print-table-cell{display:table-cell!important}.conversejs .d-print-flex{display:flex!important}.conversejs .d-print-inline-flex{display:inline-flex!important}}.conversejs .embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.conversejs .embed-responsive::before{display:block;content:""}.conversejs .embed-responsive .embed-responsive-item,.conversejs .embed-responsive embed,.conversejs .embed-responsive iframe,.conversejs .embed-responsive object,.conversejs .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.conversejs .embed-responsive-21by9::before{padding-top:42.8571428571%}.conversejs .embed-responsive-16by9::before{padding-top:56.25%}.conversejs .embed-responsive-4by3::before{padding-top:75%}.conversejs .embed-responsive-1by1::before{padding-top:100%}.conversejs .flex-row{flex-direction:row!important}.conversejs .flex-column{flex-direction:column!important}.conversejs .flex-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-wrap{flex-wrap:wrap!important}.conversejs .flex-nowrap{flex-wrap:nowrap!important}.conversejs .flex-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-fill{flex:1 1 auto!important}.conversejs .flex-grow-0{flex-grow:0!important}.conversejs .flex-grow-1{flex-grow:1!important}.conversejs .flex-shrink-0{flex-shrink:0!important}.conversejs .flex-shrink-1{flex-shrink:1!important}.conversejs .justify-content-start{justify-content:flex-start!important}.conversejs .justify-content-end{justify-content:flex-end!important}.conversejs .justify-content-center{justify-content:center!important}.conversejs .justify-content-between{justify-content:space-between!important}.conversejs .justify-content-around{justify-content:space-around!important}.conversejs .align-items-start{align-items:flex-start!important}.conversejs .align-items-end{align-items:flex-end!important}.conversejs .align-items-center{align-items:center!important}.conversejs .align-items-baseline{align-items:baseline!important}.conversejs .align-items-stretch{align-items:stretch!important}.conversejs .align-content-start{align-content:flex-start!important}.conversejs .align-content-end{align-content:flex-end!important}.conversejs .align-content-center{align-content:center!important}.conversejs .align-content-between{align-content:space-between!important}.conversejs .align-content-around{align-content:space-around!important}.conversejs .align-content-stretch{align-content:stretch!important}.conversejs .align-self-auto{align-self:auto!important}.conversejs .align-self-start{align-self:flex-start!important}.conversejs .align-self-end{align-self:flex-end!important}.conversejs .align-self-center{align-self:center!important}.conversejs .align-self-baseline{align-self:baseline!important}.conversejs .align-self-stretch{align-self:stretch!important}@media(min-width:576px){.conversejs .flex-sm-row{flex-direction:row!important}.conversejs .flex-sm-column{flex-direction:column!important}.conversejs .flex-sm-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-sm-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-sm-wrap{flex-wrap:wrap!important}.conversejs .flex-sm-nowrap{flex-wrap:nowrap!important}.conversejs .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-sm-fill{flex:1 1 auto!important}.conversejs .flex-sm-grow-0{flex-grow:0!important}.conversejs .flex-sm-grow-1{flex-grow:1!important}.conversejs .flex-sm-shrink-0{flex-shrink:0!important}.conversejs .flex-sm-shrink-1{flex-shrink:1!important}.conversejs .justify-content-sm-start{justify-content:flex-start!important}.conversejs .justify-content-sm-end{justify-content:flex-end!important}.conversejs .justify-content-sm-center{justify-content:center!important}.conversejs .justify-content-sm-between{justify-content:space-between!important}.conversejs .justify-content-sm-around{justify-content:space-around!important}.conversejs .align-items-sm-start{align-items:flex-start!important}.conversejs .align-items-sm-end{align-items:flex-end!important}.conversejs .align-items-sm-center{align-items:center!important}.conversejs .align-items-sm-baseline{align-items:baseline!important}.conversejs .align-items-sm-stretch{align-items:stretch!important}.conversejs .align-content-sm-start{align-content:flex-start!important}.conversejs .align-content-sm-end{align-content:flex-end!important}.conversejs .align-content-sm-center{align-content:center!important}.conversejs .align-content-sm-between{align-content:space-between!important}.conversejs .align-content-sm-around{align-content:space-around!important}.conversejs .align-content-sm-stretch{align-content:stretch!important}.conversejs .align-self-sm-auto{align-self:auto!important}.conversejs .align-self-sm-start{align-self:flex-start!important}.conversejs .align-self-sm-end{align-self:flex-end!important}.conversejs .align-self-sm-center{align-self:center!important}.conversejs .align-self-sm-baseline{align-self:baseline!important}.conversejs .align-self-sm-stretch{align-self:stretch!important}}@media(min-width:768px){.conversejs .flex-md-row{flex-direction:row!important}.conversejs .flex-md-column{flex-direction:column!important}.conversejs .flex-md-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-md-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-md-wrap{flex-wrap:wrap!important}.conversejs .flex-md-nowrap{flex-wrap:nowrap!important}.conversejs .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-md-fill{flex:1 1 auto!important}.conversejs .flex-md-grow-0{flex-grow:0!important}.conversejs .flex-md-grow-1{flex-grow:1!important}.conversejs .flex-md-shrink-0{flex-shrink:0!important}.conversejs .flex-md-shrink-1{flex-shrink:1!important}.conversejs .justify-content-md-start{justify-content:flex-start!important}.conversejs .justify-content-md-end{justify-content:flex-end!important}.conversejs .justify-content-md-center{justify-content:center!important}.conversejs .justify-content-md-between{justify-content:space-between!important}.conversejs .justify-content-md-around{justify-content:space-around!important}.conversejs .align-items-md-start{align-items:flex-start!important}.conversejs .align-items-md-end{align-items:flex-end!important}.conversejs .align-items-md-center{align-items:center!important}.conversejs .align-items-md-baseline{align-items:baseline!important}.conversejs .align-items-md-stretch{align-items:stretch!important}.conversejs .align-content-md-start{align-content:flex-start!important}.conversejs .align-content-md-end{align-content:flex-end!important}.conversejs .align-content-md-center{align-content:center!important}.conversejs .align-content-md-between{align-content:space-between!important}.conversejs .align-content-md-around{align-content:space-around!important}.conversejs .align-content-md-stretch{align-content:stretch!important}.conversejs .align-self-md-auto{align-self:auto!important}.conversejs .align-self-md-start{align-self:flex-start!important}.conversejs .align-self-md-end{align-self:flex-end!important}.conversejs .align-self-md-center{align-self:center!important}.conversejs .align-self-md-baseline{align-self:baseline!important}.conversejs .align-self-md-stretch{align-self:stretch!important}}@media(min-width:992px){.conversejs .flex-lg-row{flex-direction:row!important}.conversejs .flex-lg-column{flex-direction:column!important}.conversejs .flex-lg-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-lg-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-lg-wrap{flex-wrap:wrap!important}.conversejs .flex-lg-nowrap{flex-wrap:nowrap!important}.conversejs .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-lg-fill{flex:1 1 auto!important}.conversejs .flex-lg-grow-0{flex-grow:0!important}.conversejs .flex-lg-grow-1{flex-grow:1!important}.conversejs .flex-lg-shrink-0{flex-shrink:0!important}.conversejs .flex-lg-shrink-1{flex-shrink:1!important}.conversejs .justify-content-lg-start{justify-content:flex-start!important}.conversejs .justify-content-lg-end{justify-content:flex-end!important}.conversejs .justify-content-lg-center{justify-content:center!important}.conversejs .justify-content-lg-between{justify-content:space-between!important}.conversejs .justify-content-lg-around{justify-content:space-around!important}.conversejs .align-items-lg-start{align-items:flex-start!important}.conversejs .align-items-lg-end{align-items:flex-end!important}.conversejs .align-items-lg-center{align-items:center!important}.conversejs .align-items-lg-baseline{align-items:baseline!important}.conversejs .align-items-lg-stretch{align-items:stretch!important}.conversejs .align-content-lg-start{align-content:flex-start!important}.conversejs .align-content-lg-end{align-content:flex-end!important}.conversejs .align-content-lg-center{align-content:center!important}.conversejs .align-content-lg-between{align-content:space-between!important}.conversejs .align-content-lg-around{align-content:space-around!important}.conversejs .align-content-lg-stretch{align-content:stretch!important}.conversejs .align-self-lg-auto{align-self:auto!important}.conversejs .align-self-lg-start{align-self:flex-start!important}.conversejs .align-self-lg-end{align-self:flex-end!important}.conversejs .align-self-lg-center{align-self:center!important}.conversejs .align-self-lg-baseline{align-self:baseline!important}.conversejs .align-self-lg-stretch{align-self:stretch!important}}@media(min-width:1200px){.conversejs .flex-xl-row{flex-direction:row!important}.conversejs .flex-xl-column{flex-direction:column!important}.conversejs .flex-xl-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-xl-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-xl-wrap{flex-wrap:wrap!important}.conversejs .flex-xl-nowrap{flex-wrap:nowrap!important}.conversejs .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-xl-fill{flex:1 1 auto!important}.conversejs .flex-xl-grow-0{flex-grow:0!important}.conversejs .flex-xl-grow-1{flex-grow:1!important}.conversejs .flex-xl-shrink-0{flex-shrink:0!important}.conversejs .flex-xl-shrink-1{flex-shrink:1!important}.conversejs .justify-content-xl-start{justify-content:flex-start!important}.conversejs .justify-content-xl-end{justify-content:flex-end!important}.conversejs .justify-content-xl-center{justify-content:center!important}.conversejs .justify-content-xl-between{justify-content:space-between!important}.conversejs .justify-content-xl-around{justify-content:space-around!important}.conversejs .align-items-xl-start{align-items:flex-start!important}.conversejs .align-items-xl-end{align-items:flex-end!important}.conversejs .align-items-xl-center{align-items:center!important}.conversejs .align-items-xl-baseline{align-items:baseline!important}.conversejs .align-items-xl-stretch{align-items:stretch!important}.conversejs .align-content-xl-start{align-content:flex-start!important}.conversejs .align-content-xl-end{align-content:flex-end!important}.conversejs .align-content-xl-center{align-content:center!important}.conversejs .align-content-xl-between{align-content:space-between!important}.conversejs .align-content-xl-around{align-content:space-around!important}.conversejs .align-content-xl-stretch{align-content:stretch!important}.conversejs .align-self-xl-auto{align-self:auto!important}.conversejs .align-self-xl-start{align-self:flex-start!important}.conversejs .align-self-xl-end{align-self:flex-end!important}.conversejs .align-self-xl-center{align-self:center!important}.conversejs .align-self-xl-baseline{align-self:baseline!important}.conversejs .align-self-xl-stretch{align-self:stretch!important}}.conversejs .float-left{float:left!important}.conversejs .float-right{float:right!important}.conversejs .float-none{float:none!important}@media(min-width:576px){.conversejs .float-sm-left{float:left!important}.conversejs .float-sm-right{float:right!important}.conversejs .float-sm-none{float:none!important}}@media(min-width:768px){.conversejs .float-md-left{float:left!important}.conversejs .float-md-right{float:right!important}.conversejs .float-md-none{float:none!important}}@media(min-width:992px){.conversejs .float-lg-left{float:left!important}.conversejs .float-lg-right{float:right!important}.conversejs .float-lg-none{float:none!important}}@media(min-width:1200px){.conversejs .float-xl-left{float:left!important}.conversejs .float-xl-right{float:right!important}.conversejs .float-xl-none{float:none!important}}.conversejs .user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.conversejs .user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.conversejs .user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.conversejs .overflow-auto{overflow:auto!important}.conversejs .overflow-hidden{overflow:hidden!important}.conversejs .position-static{position:static!important}.conversejs .position-relative{position:relative!important}.conversejs .position-absolute{position:absolute!important}.conversejs .position-fixed{position:fixed!important}.conversejs .position-sticky{position:sticky!important}.conversejs .fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.conversejs .fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports(position:sticky){.conversejs .sticky-top{position:sticky;top:0;z-index:1020}}.conversejs .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.conversejs .sr-only-focusable:active,.conversejs .sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.conversejs .shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.conversejs .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.conversejs .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.conversejs .shadow-none{box-shadow:none!important}.conversejs .w-25{width:25%!important}.conversejs .w-50{width:50%!important}.conversejs .w-75{width:75%!important}.conversejs .w-100{width:100%!important}.conversejs .w-auto{width:auto!important}.conversejs .h-25{height:25%!important}.conversejs .h-50{height:50%!important}.conversejs .h-75{height:75%!important}.conversejs .h-100{height:100%!important}.conversejs .h-auto{height:auto!important}.conversejs .mw-100{max-width:100%!important}.conversejs .mh-100{max-height:100%!important}.conversejs .min-vw-100{min-width:100vw!important}.conversejs .min-vh-100{min-height:100vh!important}.conversejs .vw-100{width:100vw!important}.conversejs .vh-100{height:100vh!important}.conversejs .m-0{margin:0!important}.conversejs .mt-0,.conversejs .my-0{margin-top:0!important}.conversejs .mr-0,.conversejs .mx-0{margin-right:0!important}.conversejs .mb-0,.conversejs .my-0{margin-bottom:0!important}.conversejs .ml-0,.conversejs .mx-0{margin-left:0!important}.conversejs .m-1{margin:.25rem!important}.conversejs .mt-1,.conversejs .my-1{margin-top:.25rem!important}.conversejs .mr-1,.conversejs .mx-1{margin-right:.25rem!important}.conversejs .mb-1,.conversejs .my-1{margin-bottom:.25rem!important}.conversejs .ml-1,.conversejs .mx-1{margin-left:.25rem!important}.conversejs .m-2{margin:.5rem!important}.conversejs .mt-2,.conversejs .my-2{margin-top:.5rem!important}.conversejs .mr-2,.conversejs .mx-2{margin-right:.5rem!important}.conversejs .mb-2,.conversejs .my-2{margin-bottom:.5rem!important}.conversejs .ml-2,.conversejs .mx-2{margin-left:.5rem!important}.conversejs .m-3{margin:1rem!important}.conversejs .mt-3,.conversejs .my-3{margin-top:1rem!important}.conversejs .mr-3,.conversejs .mx-3{margin-right:1rem!important}.conversejs .mb-3,.conversejs .my-3{margin-bottom:1rem!important}.conversejs .ml-3,.conversejs .mx-3{margin-left:1rem!important}.conversejs .m-4{margin:1.5rem!important}.conversejs .mt-4,.conversejs .my-4{margin-top:1.5rem!important}.conversejs .mr-4,.conversejs .mx-4{margin-right:1.5rem!important}.conversejs .mb-4,.conversejs .my-4{margin-bottom:1.5rem!important}.conversejs .ml-4,.conversejs .mx-4{margin-left:1.5rem!important}.conversejs .m-5{margin:3rem!important}.conversejs .mt-5,.conversejs .my-5{margin-top:3rem!important}.conversejs .mr-5,.conversejs .mx-5{margin-right:3rem!important}.conversejs .mb-5,.conversejs .my-5{margin-bottom:3rem!important}.conversejs .ml-5,.conversejs .mx-5{margin-left:3rem!important}.conversejs .p-0{padding:0!important}.conversejs .pt-0,.conversejs .py-0{padding-top:0!important}.conversejs .pr-0,.conversejs .px-0{padding-right:0!important}.conversejs .pb-0,.conversejs .py-0{padding-bottom:0!important}.conversejs .pl-0,.conversejs .px-0{padding-left:0!important}.conversejs .p-1{padding:.25rem!important}.conversejs .pt-1,.conversejs .py-1{padding-top:.25rem!important}.conversejs .pr-1,.conversejs .px-1{padding-right:.25rem!important}.conversejs .pb-1,.conversejs .py-1{padding-bottom:.25rem!important}.conversejs .pl-1,.conversejs .px-1{padding-left:.25rem!important}.conversejs .p-2{padding:.5rem!important}.conversejs .pt-2,.conversejs .py-2{padding-top:.5rem!important}.conversejs .pr-2,.conversejs .px-2{padding-right:.5rem!important}.conversejs .pb-2,.conversejs .py-2{padding-bottom:.5rem!important}.conversejs .pl-2,.conversejs .px-2{padding-left:.5rem!important}.conversejs .p-3{padding:1rem!important}.conversejs .pt-3,.conversejs .py-3{padding-top:1rem!important}.conversejs .pr-3,.conversejs .px-3{padding-right:1rem!important}.conversejs .pb-3,.conversejs .py-3{padding-bottom:1rem!important}.conversejs .pl-3,.conversejs .px-3{padding-left:1rem!important}.conversejs .p-4{padding:1.5rem!important}.conversejs .pt-4,.conversejs .py-4{padding-top:1.5rem!important}.conversejs .pr-4,.conversejs .px-4{padding-right:1.5rem!important}.conversejs .pb-4,.conversejs .py-4{padding-bottom:1.5rem!important}.conversejs .pl-4,.conversejs .px-4{padding-left:1.5rem!important}.conversejs .p-5{padding:3rem!important}.conversejs .pt-5,.conversejs .py-5{padding-top:3rem!important}.conversejs .pr-5,.conversejs .px-5{padding-right:3rem!important}.conversejs .pb-5,.conversejs .py-5{padding-bottom:3rem!important}.conversejs .pl-5,.conversejs .px-5{padding-left:3rem!important}.conversejs .m-n1{margin:-.25rem!important}.conversejs .mt-n1,.conversejs .my-n1{margin-top:-.25rem!important}.conversejs .mr-n1,.conversejs .mx-n1{margin-right:-.25rem!important}.conversejs .mb-n1,.conversejs .my-n1{margin-bottom:-.25rem!important}.conversejs .ml-n1,.conversejs .mx-n1{margin-left:-.25rem!important}.conversejs .m-n2{margin:-.5rem!important}.conversejs .mt-n2,.conversejs .my-n2{margin-top:-.5rem!important}.conversejs .mr-n2,.conversejs .mx-n2{margin-right:-.5rem!important}.conversejs .mb-n2,.conversejs .my-n2{margin-bottom:-.5rem!important}.conversejs .ml-n2,.conversejs .mx-n2{margin-left:-.5rem!important}.conversejs .m-n3{margin:-1rem!important}.conversejs .mt-n3,.conversejs .my-n3{margin-top:-1rem!important}.conversejs .mr-n3,.conversejs .mx-n3{margin-right:-1rem!important}.conversejs .mb-n3,.conversejs .my-n3{margin-bottom:-1rem!important}.conversejs .ml-n3,.conversejs .mx-n3{margin-left:-1rem!important}.conversejs .m-n4{margin:-1.5rem!important}.conversejs .mt-n4,.conversejs .my-n4{margin-top:-1.5rem!important}.conversejs .mr-n4,.conversejs .mx-n4{margin-right:-1.5rem!important}.conversejs .mb-n4,.conversejs .my-n4{margin-bottom:-1.5rem!important}.conversejs .ml-n4,.conversejs .mx-n4{margin-left:-1.5rem!important}.conversejs .m-n5{margin:-3rem!important}.conversejs .mt-n5,.conversejs .my-n5{margin-top:-3rem!important}.conversejs .mr-n5,.conversejs .mx-n5{margin-right:-3rem!important}.conversejs .mb-n5,.conversejs .my-n5{margin-bottom:-3rem!important}.conversejs .ml-n5,.conversejs .mx-n5{margin-left:-3rem!important}.conversejs .m-auto{margin:auto!important}.conversejs .mt-auto,.conversejs .my-auto{margin-top:auto!important}.conversejs .mr-auto,.conversejs .mx-auto{margin-right:auto!important}.conversejs .mb-auto,.conversejs .my-auto{margin-bottom:auto!important}.conversejs .ml-auto,.conversejs .mx-auto{margin-left:auto!important}@media(min-width:576px){.conversejs .m-sm-0{margin:0!important}.conversejs .mt-sm-0,.conversejs .my-sm-0{margin-top:0!important}.conversejs .mr-sm-0,.conversejs .mx-sm-0{margin-right:0!important}.conversejs .mb-sm-0,.conversejs .my-sm-0{margin-bottom:0!important}.conversejs .ml-sm-0,.conversejs .mx-sm-0{margin-left:0!important}.conversejs .m-sm-1{margin:.25rem!important}.conversejs .mt-sm-1,.conversejs .my-sm-1{margin-top:.25rem!important}.conversejs .mr-sm-1,.conversejs .mx-sm-1{margin-right:.25rem!important}.conversejs .mb-sm-1,.conversejs .my-sm-1{margin-bottom:.25rem!important}.conversejs .ml-sm-1,.conversejs .mx-sm-1{margin-left:.25rem!important}.conversejs .m-sm-2{margin:.5rem!important}.conversejs .mt-sm-2,.conversejs .my-sm-2{margin-top:.5rem!important}.conversejs .mr-sm-2,.conversejs .mx-sm-2{margin-right:.5rem!important}.conversejs .mb-sm-2,.conversejs .my-sm-2{margin-bottom:.5rem!important}.conversejs .ml-sm-2,.conversejs .mx-sm-2{margin-left:.5rem!important}.conversejs .m-sm-3{margin:1rem!important}.conversejs .mt-sm-3,.conversejs .my-sm-3{margin-top:1rem!important}.conversejs .mr-sm-3,.conversejs .mx-sm-3{margin-right:1rem!important}.conversejs .mb-sm-3,.conversejs .my-sm-3{margin-bottom:1rem!important}.conversejs .ml-sm-3,.conversejs .mx-sm-3{margin-left:1rem!important}.conversejs .m-sm-4{margin:1.5rem!important}.conversejs .mt-sm-4,.conversejs .my-sm-4{margin-top:1.5rem!important}.conversejs .mr-sm-4,.conversejs .mx-sm-4{margin-right:1.5rem!important}.conversejs .mb-sm-4,.conversejs .my-sm-4{margin-bottom:1.5rem!important}.conversejs .ml-sm-4,.conversejs .mx-sm-4{margin-left:1.5rem!important}.conversejs .m-sm-5{margin:3rem!important}.conversejs .mt-sm-5,.conversejs .my-sm-5{margin-top:3rem!important}.conversejs .mr-sm-5,.conversejs .mx-sm-5{margin-right:3rem!important}.conversejs .mb-sm-5,.conversejs .my-sm-5{margin-bottom:3rem!important}.conversejs .ml-sm-5,.conversejs .mx-sm-5{margin-left:3rem!important}.conversejs .p-sm-0{padding:0!important}.conversejs .pt-sm-0,.conversejs .py-sm-0{padding-top:0!important}.conversejs .pr-sm-0,.conversejs .px-sm-0{padding-right:0!important}.conversejs .pb-sm-0,.conversejs .py-sm-0{padding-bottom:0!important}.conversejs .pl-sm-0,.conversejs .px-sm-0{padding-left:0!important}.conversejs .p-sm-1{padding:.25rem!important}.conversejs .pt-sm-1,.conversejs .py-sm-1{padding-top:.25rem!important}.conversejs .pr-sm-1,.conversejs .px-sm-1{padding-right:.25rem!important}.conversejs .pb-sm-1,.conversejs .py-sm-1{padding-bottom:.25rem!important}.conversejs .pl-sm-1,.conversejs .px-sm-1{padding-left:.25rem!important}.conversejs .p-sm-2{padding:.5rem!important}.conversejs .pt-sm-2,.conversejs .py-sm-2{padding-top:.5rem!important}.conversejs .pr-sm-2,.conversejs .px-sm-2{padding-right:.5rem!important}.conversejs .pb-sm-2,.conversejs .py-sm-2{padding-bottom:.5rem!important}.conversejs .pl-sm-2,.conversejs .px-sm-2{padding-left:.5rem!important}.conversejs .p-sm-3{padding:1rem!important}.conversejs .pt-sm-3,.conversejs .py-sm-3{padding-top:1rem!important}.conversejs .pr-sm-3,.conversejs .px-sm-3{padding-right:1rem!important}.conversejs .pb-sm-3,.conversejs .py-sm-3{padding-bottom:1rem!important}.conversejs .pl-sm-3,.conversejs .px-sm-3{padding-left:1rem!important}.conversejs .p-sm-4{padding:1.5rem!important}.conversejs .pt-sm-4,.conversejs .py-sm-4{padding-top:1.5rem!important}.conversejs .pr-sm-4,.conversejs .px-sm-4{padding-right:1.5rem!important}.conversejs .pb-sm-4,.conversejs .py-sm-4{padding-bottom:1.5rem!important}.conversejs .pl-sm-4,.conversejs .px-sm-4{padding-left:1.5rem!important}.conversejs .p-sm-5{padding:3rem!important}.conversejs .pt-sm-5,.conversejs .py-sm-5{padding-top:3rem!important}.conversejs .pr-sm-5,.conversejs .px-sm-5{padding-right:3rem!important}.conversejs .pb-sm-5,.conversejs .py-sm-5{padding-bottom:3rem!important}.conversejs .pl-sm-5,.conversejs .px-sm-5{padding-left:3rem!important}.conversejs .m-sm-n1{margin:-.25rem!important}.conversejs .mt-sm-n1,.conversejs .my-sm-n1{margin-top:-.25rem!important}.conversejs .mr-sm-n1,.conversejs .mx-sm-n1{margin-right:-.25rem!important}.conversejs .mb-sm-n1,.conversejs .my-sm-n1{margin-bottom:-.25rem!important}.conversejs .ml-sm-n1,.conversejs .mx-sm-n1{margin-left:-.25rem!important}.conversejs .m-sm-n2{margin:-.5rem!important}.conversejs .mt-sm-n2,.conversejs .my-sm-n2{margin-top:-.5rem!important}.conversejs .mr-sm-n2,.conversejs .mx-sm-n2{margin-right:-.5rem!important}.conversejs .mb-sm-n2,.conversejs .my-sm-n2{margin-bottom:-.5rem!important}.conversejs .ml-sm-n2,.conversejs .mx-sm-n2{margin-left:-.5rem!important}.conversejs .m-sm-n3{margin:-1rem!important}.conversejs .mt-sm-n3,.conversejs .my-sm-n3{margin-top:-1rem!important}.conversejs .mr-sm-n3,.conversejs .mx-sm-n3{margin-right:-1rem!important}.conversejs .mb-sm-n3,.conversejs .my-sm-n3{margin-bottom:-1rem!important}.conversejs .ml-sm-n3,.conversejs .mx-sm-n3{margin-left:-1rem!important}.conversejs .m-sm-n4{margin:-1.5rem!important}.conversejs .mt-sm-n4,.conversejs .my-sm-n4{margin-top:-1.5rem!important}.conversejs .mr-sm-n4,.conversejs .mx-sm-n4{margin-right:-1.5rem!important}.conversejs .mb-sm-n4,.conversejs .my-sm-n4{margin-bottom:-1.5rem!important}.conversejs .ml-sm-n4,.conversejs .mx-sm-n4{margin-left:-1.5rem!important}.conversejs .m-sm-n5{margin:-3rem!important}.conversejs .mt-sm-n5,.conversejs .my-sm-n5{margin-top:-3rem!important}.conversejs .mr-sm-n5,.conversejs .mx-sm-n5{margin-right:-3rem!important}.conversejs .mb-sm-n5,.conversejs .my-sm-n5{margin-bottom:-3rem!important}.conversejs .ml-sm-n5,.conversejs .mx-sm-n5{margin-left:-3rem!important}.conversejs .m-sm-auto{margin:auto!important}.conversejs .mt-sm-auto,.conversejs .my-sm-auto{margin-top:auto!important}.conversejs .mr-sm-auto,.conversejs .mx-sm-auto{margin-right:auto!important}.conversejs .mb-sm-auto,.conversejs .my-sm-auto{margin-bottom:auto!important}.conversejs .ml-sm-auto,.conversejs .mx-sm-auto{margin-left:auto!important}}@media(min-width:768px){.conversejs .m-md-0{margin:0!important}.conversejs .mt-md-0,.conversejs .my-md-0{margin-top:0!important}.conversejs .mr-md-0,.conversejs .mx-md-0{margin-right:0!important}.conversejs .mb-md-0,.conversejs .my-md-0{margin-bottom:0!important}.conversejs .ml-md-0,.conversejs .mx-md-0{margin-left:0!important}.conversejs .m-md-1{margin:.25rem!important}.conversejs .mt-md-1,.conversejs .my-md-1{margin-top:.25rem!important}.conversejs .mr-md-1,.conversejs .mx-md-1{margin-right:.25rem!important}.conversejs .mb-md-1,.conversejs .my-md-1{margin-bottom:.25rem!important}.conversejs .ml-md-1,.conversejs .mx-md-1{margin-left:.25rem!important}.conversejs .m-md-2{margin:.5rem!important}.conversejs .mt-md-2,.conversejs .my-md-2{margin-top:.5rem!important}.conversejs .mr-md-2,.conversejs .mx-md-2{margin-right:.5rem!important}.conversejs .mb-md-2,.conversejs .my-md-2{margin-bottom:.5rem!important}.conversejs .ml-md-2,.conversejs .mx-md-2{margin-left:.5rem!important}.conversejs .m-md-3{margin:1rem!important}.conversejs .mt-md-3,.conversejs .my-md-3{margin-top:1rem!important}.conversejs .mr-md-3,.conversejs .mx-md-3{margin-right:1rem!important}.conversejs .mb-md-3,.conversejs .my-md-3{margin-bottom:1rem!important}.conversejs .ml-md-3,.conversejs .mx-md-3{margin-left:1rem!important}.conversejs .m-md-4{margin:1.5rem!important}.conversejs .mt-md-4,.conversejs .my-md-4{margin-top:1.5rem!important}.conversejs .mr-md-4,.conversejs .mx-md-4{margin-right:1.5rem!important}.conversejs .mb-md-4,.conversejs .my-md-4{margin-bottom:1.5rem!important}.conversejs .ml-md-4,.conversejs .mx-md-4{margin-left:1.5rem!important}.conversejs .m-md-5{margin:3rem!important}.conversejs .mt-md-5,.conversejs .my-md-5{margin-top:3rem!important}.conversejs .mr-md-5,.conversejs .mx-md-5{margin-right:3rem!important}.conversejs .mb-md-5,.conversejs .my-md-5{margin-bottom:3rem!important}.conversejs .ml-md-5,.conversejs .mx-md-5{margin-left:3rem!important}.conversejs .p-md-0{padding:0!important}.conversejs .pt-md-0,.conversejs .py-md-0{padding-top:0!important}.conversejs .pr-md-0,.conversejs .px-md-0{padding-right:0!important}.conversejs .pb-md-0,.conversejs .py-md-0{padding-bottom:0!important}.conversejs .pl-md-0,.conversejs .px-md-0{padding-left:0!important}.conversejs .p-md-1{padding:.25rem!important}.conversejs .pt-md-1,.conversejs .py-md-1{padding-top:.25rem!important}.conversejs .pr-md-1,.conversejs .px-md-1{padding-right:.25rem!important}.conversejs .pb-md-1,.conversejs .py-md-1{padding-bottom:.25rem!important}.conversejs .pl-md-1,.conversejs .px-md-1{padding-left:.25rem!important}.conversejs .p-md-2{padding:.5rem!important}.conversejs .pt-md-2,.conversejs .py-md-2{padding-top:.5rem!important}.conversejs .pr-md-2,.conversejs .px-md-2{padding-right:.5rem!important}.conversejs .pb-md-2,.conversejs .py-md-2{padding-bottom:.5rem!important}.conversejs .pl-md-2,.conversejs .px-md-2{padding-left:.5rem!important}.conversejs .p-md-3{padding:1rem!important}.conversejs .pt-md-3,.conversejs .py-md-3{padding-top:1rem!important}.conversejs .pr-md-3,.conversejs .px-md-3{padding-right:1rem!important}.conversejs .pb-md-3,.conversejs .py-md-3{padding-bottom:1rem!important}.conversejs .pl-md-3,.conversejs .px-md-3{padding-left:1rem!important}.conversejs .p-md-4{padding:1.5rem!important}.conversejs .pt-md-4,.conversejs .py-md-4{padding-top:1.5rem!important}.conversejs .pr-md-4,.conversejs .px-md-4{padding-right:1.5rem!important}.conversejs .pb-md-4,.conversejs .py-md-4{padding-bottom:1.5rem!important}.conversejs .pl-md-4,.conversejs .px-md-4{padding-left:1.5rem!important}.conversejs .p-md-5{padding:3rem!important}.conversejs .pt-md-5,.conversejs .py-md-5{padding-top:3rem!important}.conversejs .pr-md-5,.conversejs .px-md-5{padding-right:3rem!important}.conversejs .pb-md-5,.conversejs .py-md-5{padding-bottom:3rem!important}.conversejs .pl-md-5,.conversejs .px-md-5{padding-left:3rem!important}.conversejs .m-md-n1{margin:-.25rem!important}.conversejs .mt-md-n1,.conversejs .my-md-n1{margin-top:-.25rem!important}.conversejs .mr-md-n1,.conversejs .mx-md-n1{margin-right:-.25rem!important}.conversejs .mb-md-n1,.conversejs .my-md-n1{margin-bottom:-.25rem!important}.conversejs .ml-md-n1,.conversejs .mx-md-n1{margin-left:-.25rem!important}.conversejs .m-md-n2{margin:-.5rem!important}.conversejs .mt-md-n2,.conversejs .my-md-n2{margin-top:-.5rem!important}.conversejs .mr-md-n2,.conversejs .mx-md-n2{margin-right:-.5rem!important}.conversejs .mb-md-n2,.conversejs .my-md-n2{margin-bottom:-.5rem!important}.conversejs .ml-md-n2,.conversejs .mx-md-n2{margin-left:-.5rem!important}.conversejs .m-md-n3{margin:-1rem!important}.conversejs .mt-md-n3,.conversejs .my-md-n3{margin-top:-1rem!important}.conversejs .mr-md-n3,.conversejs .mx-md-n3{margin-right:-1rem!important}.conversejs .mb-md-n3,.conversejs .my-md-n3{margin-bottom:-1rem!important}.conversejs .ml-md-n3,.conversejs .mx-md-n3{margin-left:-1rem!important}.conversejs .m-md-n4{margin:-1.5rem!important}.conversejs .mt-md-n4,.conversejs .my-md-n4{margin-top:-1.5rem!important}.conversejs .mr-md-n4,.conversejs .mx-md-n4{margin-right:-1.5rem!important}.conversejs .mb-md-n4,.conversejs .my-md-n4{margin-bottom:-1.5rem!important}.conversejs .ml-md-n4,.conversejs .mx-md-n4{margin-left:-1.5rem!important}.conversejs .m-md-n5{margin:-3rem!important}.conversejs .mt-md-n5,.conversejs .my-md-n5{margin-top:-3rem!important}.conversejs .mr-md-n5,.conversejs .mx-md-n5{margin-right:-3rem!important}.conversejs .mb-md-n5,.conversejs .my-md-n5{margin-bottom:-3rem!important}.conversejs .ml-md-n5,.conversejs .mx-md-n5{margin-left:-3rem!important}.conversejs .m-md-auto{margin:auto!important}.conversejs .mt-md-auto,.conversejs .my-md-auto{margin-top:auto!important}.conversejs .mr-md-auto,.conversejs .mx-md-auto{margin-right:auto!important}.conversejs .mb-md-auto,.conversejs .my-md-auto{margin-bottom:auto!important}.conversejs .ml-md-auto,.conversejs .mx-md-auto{margin-left:auto!important}}@media(min-width:992px){.conversejs .m-lg-0{margin:0!important}.conversejs .mt-lg-0,.conversejs .my-lg-0{margin-top:0!important}.conversejs .mr-lg-0,.conversejs .mx-lg-0{margin-right:0!important}.conversejs .mb-lg-0,.conversejs .my-lg-0{margin-bottom:0!important}.conversejs .ml-lg-0,.conversejs .mx-lg-0{margin-left:0!important}.conversejs .m-lg-1{margin:.25rem!important}.conversejs .mt-lg-1,.conversejs .my-lg-1{margin-top:.25rem!important}.conversejs .mr-lg-1,.conversejs .mx-lg-1{margin-right:.25rem!important}.conversejs .mb-lg-1,.conversejs .my-lg-1{margin-bottom:.25rem!important}.conversejs .ml-lg-1,.conversejs .mx-lg-1{margin-left:.25rem!important}.conversejs .m-lg-2{margin:.5rem!important}.conversejs .mt-lg-2,.conversejs .my-lg-2{margin-top:.5rem!important}.conversejs .mr-lg-2,.conversejs .mx-lg-2{margin-right:.5rem!important}.conversejs .mb-lg-2,.conversejs .my-lg-2{margin-bottom:.5rem!important}.conversejs .ml-lg-2,.conversejs .mx-lg-2{margin-left:.5rem!important}.conversejs .m-lg-3{margin:1rem!important}.conversejs .mt-lg-3,.conversejs .my-lg-3{margin-top:1rem!important}.conversejs .mr-lg-3,.conversejs .mx-lg-3{margin-right:1rem!important}.conversejs .mb-lg-3,.conversejs .my-lg-3{margin-bottom:1rem!important}.conversejs .ml-lg-3,.conversejs .mx-lg-3{margin-left:1rem!important}.conversejs .m-lg-4{margin:1.5rem!important}.conversejs .mt-lg-4,.conversejs .my-lg-4{margin-top:1.5rem!important}.conversejs .mr-lg-4,.conversejs .mx-lg-4{margin-right:1.5rem!important}.conversejs .mb-lg-4,.conversejs .my-lg-4{margin-bottom:1.5rem!important}.conversejs .ml-lg-4,.conversejs .mx-lg-4{margin-left:1.5rem!important}.conversejs .m-lg-5{margin:3rem!important}.conversejs .mt-lg-5,.conversejs .my-lg-5{margin-top:3rem!important}.conversejs .mr-lg-5,.conversejs .mx-lg-5{margin-right:3rem!important}.conversejs .mb-lg-5,.conversejs .my-lg-5{margin-bottom:3rem!important}.conversejs .ml-lg-5,.conversejs .mx-lg-5{margin-left:3rem!important}.conversejs .p-lg-0{padding:0!important}.conversejs .pt-lg-0,.conversejs .py-lg-0{padding-top:0!important}.conversejs .pr-lg-0,.conversejs .px-lg-0{padding-right:0!important}.conversejs .pb-lg-0,.conversejs .py-lg-0{padding-bottom:0!important}.conversejs .pl-lg-0,.conversejs .px-lg-0{padding-left:0!important}.conversejs .p-lg-1{padding:.25rem!important}.conversejs .pt-lg-1,.conversejs .py-lg-1{padding-top:.25rem!important}.conversejs .pr-lg-1,.conversejs .px-lg-1{padding-right:.25rem!important}.conversejs .pb-lg-1,.conversejs .py-lg-1{padding-bottom:.25rem!important}.conversejs .pl-lg-1,.conversejs .px-lg-1{padding-left:.25rem!important}.conversejs .p-lg-2{padding:.5rem!important}.conversejs .pt-lg-2,.conversejs .py-lg-2{padding-top:.5rem!important}.conversejs .pr-lg-2,.conversejs .px-lg-2{padding-right:.5rem!important}.conversejs .pb-lg-2,.conversejs .py-lg-2{padding-bottom:.5rem!important}.conversejs .pl-lg-2,.conversejs .px-lg-2{padding-left:.5rem!important}.conversejs .p-lg-3{padding:1rem!important}.conversejs .pt-lg-3,.conversejs .py-lg-3{padding-top:1rem!important}.conversejs .pr-lg-3,.conversejs .px-lg-3{padding-right:1rem!important}.conversejs .pb-lg-3,.conversejs .py-lg-3{padding-bottom:1rem!important}.conversejs .pl-lg-3,.conversejs .px-lg-3{padding-left:1rem!important}.conversejs .p-lg-4{padding:1.5rem!important}.conversejs .pt-lg-4,.conversejs .py-lg-4{padding-top:1.5rem!important}.conversejs .pr-lg-4,.conversejs .px-lg-4{padding-right:1.5rem!important}.conversejs .pb-lg-4,.conversejs .py-lg-4{padding-bottom:1.5rem!important}.conversejs .pl-lg-4,.conversejs .px-lg-4{padding-left:1.5rem!important}.conversejs .p-lg-5{padding:3rem!important}.conversejs .pt-lg-5,.conversejs .py-lg-5{padding-top:3rem!important}.conversejs .pr-lg-5,.conversejs .px-lg-5{padding-right:3rem!important}.conversejs .pb-lg-5,.conversejs .py-lg-5{padding-bottom:3rem!important}.conversejs .pl-lg-5,.conversejs .px-lg-5{padding-left:3rem!important}.conversejs .m-lg-n1{margin:-.25rem!important}.conversejs .mt-lg-n1,.conversejs .my-lg-n1{margin-top:-.25rem!important}.conversejs .mr-lg-n1,.conversejs .mx-lg-n1{margin-right:-.25rem!important}.conversejs .mb-lg-n1,.conversejs .my-lg-n1{margin-bottom:-.25rem!important}.conversejs .ml-lg-n1,.conversejs .mx-lg-n1{margin-left:-.25rem!important}.conversejs .m-lg-n2{margin:-.5rem!important}.conversejs .mt-lg-n2,.conversejs .my-lg-n2{margin-top:-.5rem!important}.conversejs .mr-lg-n2,.conversejs .mx-lg-n2{margin-right:-.5rem!important}.conversejs .mb-lg-n2,.conversejs .my-lg-n2{margin-bottom:-.5rem!important}.conversejs .ml-lg-n2,.conversejs .mx-lg-n2{margin-left:-.5rem!important}.conversejs .m-lg-n3{margin:-1rem!important}.conversejs .mt-lg-n3,.conversejs .my-lg-n3{margin-top:-1rem!important}.conversejs .mr-lg-n3,.conversejs .mx-lg-n3{margin-right:-1rem!important}.conversejs .mb-lg-n3,.conversejs .my-lg-n3{margin-bottom:-1rem!important}.conversejs .ml-lg-n3,.conversejs .mx-lg-n3{margin-left:-1rem!important}.conversejs .m-lg-n4{margin:-1.5rem!important}.conversejs .mt-lg-n4,.conversejs .my-lg-n4{margin-top:-1.5rem!important}.conversejs .mr-lg-n4,.conversejs .mx-lg-n4{margin-right:-1.5rem!important}.conversejs .mb-lg-n4,.conversejs .my-lg-n4{margin-bottom:-1.5rem!important}.conversejs .ml-lg-n4,.conversejs .mx-lg-n4{margin-left:-1.5rem!important}.conversejs .m-lg-n5{margin:-3rem!important}.conversejs .mt-lg-n5,.conversejs .my-lg-n5{margin-top:-3rem!important}.conversejs .mr-lg-n5,.conversejs .mx-lg-n5{margin-right:-3rem!important}.conversejs .mb-lg-n5,.conversejs .my-lg-n5{margin-bottom:-3rem!important}.conversejs .ml-lg-n5,.conversejs .mx-lg-n5{margin-left:-3rem!important}.conversejs .m-lg-auto{margin:auto!important}.conversejs .mt-lg-auto,.conversejs .my-lg-auto{margin-top:auto!important}.conversejs .mr-lg-auto,.conversejs .mx-lg-auto{margin-right:auto!important}.conversejs .mb-lg-auto,.conversejs .my-lg-auto{margin-bottom:auto!important}.conversejs .ml-lg-auto,.conversejs .mx-lg-auto{margin-left:auto!important}}@media(min-width:1200px){.conversejs .m-xl-0{margin:0!important}.conversejs .mt-xl-0,.conversejs .my-xl-0{margin-top:0!important}.conversejs .mr-xl-0,.conversejs .mx-xl-0{margin-right:0!important}.conversejs .mb-xl-0,.conversejs .my-xl-0{margin-bottom:0!important}.conversejs .ml-xl-0,.conversejs .mx-xl-0{margin-left:0!important}.conversejs .m-xl-1{margin:.25rem!important}.conversejs .mt-xl-1,.conversejs .my-xl-1{margin-top:.25rem!important}.conversejs .mr-xl-1,.conversejs .mx-xl-1{margin-right:.25rem!important}.conversejs .mb-xl-1,.conversejs .my-xl-1{margin-bottom:.25rem!important}.conversejs .ml-xl-1,.conversejs .mx-xl-1{margin-left:.25rem!important}.conversejs .m-xl-2{margin:.5rem!important}.conversejs .mt-xl-2,.conversejs .my-xl-2{margin-top:.5rem!important}.conversejs .mr-xl-2,.conversejs .mx-xl-2{margin-right:.5rem!important}.conversejs .mb-xl-2,.conversejs .my-xl-2{margin-bottom:.5rem!important}.conversejs .ml-xl-2,.conversejs .mx-xl-2{margin-left:.5rem!important}.conversejs .m-xl-3{margin:1rem!important}.conversejs .mt-xl-3,.conversejs .my-xl-3{margin-top:1rem!important}.conversejs .mr-xl-3,.conversejs .mx-xl-3{margin-right:1rem!important}.conversejs .mb-xl-3,.conversejs .my-xl-3{margin-bottom:1rem!important}.conversejs .ml-xl-3,.conversejs .mx-xl-3{margin-left:1rem!important}.conversejs .m-xl-4{margin:1.5rem!important}.conversejs .mt-xl-4,.conversejs .my-xl-4{margin-top:1.5rem!important}.conversejs .mr-xl-4,.conversejs .mx-xl-4{margin-right:1.5rem!important}.conversejs .mb-xl-4,.conversejs .my-xl-4{margin-bottom:1.5rem!important}.conversejs .ml-xl-4,.conversejs .mx-xl-4{margin-left:1.5rem!important}.conversejs .m-xl-5{margin:3rem!important}.conversejs .mt-xl-5,.conversejs .my-xl-5{margin-top:3rem!important}.conversejs .mr-xl-5,.conversejs .mx-xl-5{margin-right:3rem!important}.conversejs .mb-xl-5,.conversejs .my-xl-5{margin-bottom:3rem!important}.conversejs .ml-xl-5,.conversejs .mx-xl-5{margin-left:3rem!important}.conversejs .p-xl-0{padding:0!important}.conversejs .pt-xl-0,.conversejs .py-xl-0{padding-top:0!important}.conversejs .pr-xl-0,.conversejs .px-xl-0{padding-right:0!important}.conversejs .pb-xl-0,.conversejs .py-xl-0{padding-bottom:0!important}.conversejs .pl-xl-0,.conversejs .px-xl-0{padding-left:0!important}.conversejs .p-xl-1{padding:.25rem!important}.conversejs .pt-xl-1,.conversejs .py-xl-1{padding-top:.25rem!important}.conversejs .pr-xl-1,.conversejs .px-xl-1{padding-right:.25rem!important}.conversejs .pb-xl-1,.conversejs .py-xl-1{padding-bottom:.25rem!important}.conversejs .pl-xl-1,.conversejs .px-xl-1{padding-left:.25rem!important}.conversejs .p-xl-2{padding:.5rem!important}.conversejs .pt-xl-2,.conversejs .py-xl-2{padding-top:.5rem!important}.conversejs .pr-xl-2,.conversejs .px-xl-2{padding-right:.5rem!important}.conversejs .pb-xl-2,.conversejs .py-xl-2{padding-bottom:.5rem!important}.conversejs .pl-xl-2,.conversejs .px-xl-2{padding-left:.5rem!important}.conversejs .p-xl-3{padding:1rem!important}.conversejs .pt-xl-3,.conversejs .py-xl-3{padding-top:1rem!important}.conversejs .pr-xl-3,.conversejs .px-xl-3{padding-right:1rem!important}.conversejs .pb-xl-3,.conversejs .py-xl-3{padding-bottom:1rem!important}.conversejs .pl-xl-3,.conversejs .px-xl-3{padding-left:1rem!important}.conversejs .p-xl-4{padding:1.5rem!important}.conversejs .pt-xl-4,.conversejs .py-xl-4{padding-top:1.5rem!important}.conversejs .pr-xl-4,.conversejs .px-xl-4{padding-right:1.5rem!important}.conversejs .pb-xl-4,.conversejs .py-xl-4{padding-bottom:1.5rem!important}.conversejs .pl-xl-4,.conversejs .px-xl-4{padding-left:1.5rem!important}.conversejs .p-xl-5{padding:3rem!important}.conversejs .pt-xl-5,.conversejs .py-xl-5{padding-top:3rem!important}.conversejs .pr-xl-5,.conversejs .px-xl-5{padding-right:3rem!important}.conversejs .pb-xl-5,.conversejs .py-xl-5{padding-bottom:3rem!important}.conversejs .pl-xl-5,.conversejs .px-xl-5{padding-left:3rem!important}.conversejs .m-xl-n1{margin:-.25rem!important}.conversejs .mt-xl-n1,.conversejs .my-xl-n1{margin-top:-.25rem!important}.conversejs .mr-xl-n1,.conversejs .mx-xl-n1{margin-right:-.25rem!important}.conversejs .mb-xl-n1,.conversejs .my-xl-n1{margin-bottom:-.25rem!important}.conversejs .ml-xl-n1,.conversejs .mx-xl-n1{margin-left:-.25rem!important}.conversejs .m-xl-n2{margin:-.5rem!important}.conversejs .mt-xl-n2,.conversejs .my-xl-n2{margin-top:-.5rem!important}.conversejs .mr-xl-n2,.conversejs .mx-xl-n2{margin-right:-.5rem!important}.conversejs .mb-xl-n2,.conversejs .my-xl-n2{margin-bottom:-.5rem!important}.conversejs .ml-xl-n2,.conversejs .mx-xl-n2{margin-left:-.5rem!important}.conversejs .m-xl-n3{margin:-1rem!important}.conversejs .mt-xl-n3,.conversejs .my-xl-n3{margin-top:-1rem!important}.conversejs .mr-xl-n3,.conversejs .mx-xl-n3{margin-right:-1rem!important}.conversejs .mb-xl-n3,.conversejs .my-xl-n3{margin-bottom:-1rem!important}.conversejs .ml-xl-n3,.conversejs .mx-xl-n3{margin-left:-1rem!important}.conversejs .m-xl-n4{margin:-1.5rem!important}.conversejs .mt-xl-n4,.conversejs .my-xl-n4{margin-top:-1.5rem!important}.conversejs .mr-xl-n4,.conversejs .mx-xl-n4{margin-right:-1.5rem!important}.conversejs .mb-xl-n4,.conversejs .my-xl-n4{margin-bottom:-1.5rem!important}.conversejs .ml-xl-n4,.conversejs .mx-xl-n4{margin-left:-1.5rem!important}.conversejs .m-xl-n5{margin:-3rem!important}.conversejs .mt-xl-n5,.conversejs .my-xl-n5{margin-top:-3rem!important}.conversejs .mr-xl-n5,.conversejs .mx-xl-n5{margin-right:-3rem!important}.conversejs .mb-xl-n5,.conversejs .my-xl-n5{margin-bottom:-3rem!important}.conversejs .ml-xl-n5,.conversejs .mx-xl-n5{margin-left:-3rem!important}.conversejs .m-xl-auto{margin:auto!important}.conversejs .mt-xl-auto,.conversejs .my-xl-auto{margin-top:auto!important}.conversejs .mr-xl-auto,.conversejs .mx-xl-auto{margin-right:auto!important}.conversejs .mb-xl-auto,.conversejs .my-xl-auto{margin-bottom:auto!important}.conversejs .ml-xl-auto,.conversejs .mx-xl-auto{margin-left:auto!important}}.conversejs .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.conversejs .text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.conversejs .text-justify{text-align:justify!important}.conversejs .text-wrap{white-space:normal!important}.conversejs .text-nowrap{white-space:nowrap!important}.conversejs .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .text-left{text-align:left!important}.conversejs .text-right{text-align:right!important}.conversejs .text-center{text-align:center!important}@media(min-width:576px){.conversejs .text-sm-left{text-align:left!important}.conversejs .text-sm-right{text-align:right!important}.conversejs .text-sm-center{text-align:center!important}}@media(min-width:768px){.conversejs .text-md-left{text-align:left!important}.conversejs .text-md-right{text-align:right!important}.conversejs .text-md-center{text-align:center!important}}@media(min-width:992px){.conversejs .text-lg-left{text-align:left!important}.conversejs .text-lg-right{text-align:right!important}.conversejs .text-lg-center{text-align:center!important}}@media(min-width:1200px){.conversejs .text-xl-left{text-align:left!important}.conversejs .text-xl-right{text-align:right!important}.conversejs .text-xl-center{text-align:center!important}}.conversejs .text-lowercase{text-transform:lowercase!important}.conversejs .text-uppercase{text-transform:uppercase!important}.conversejs .text-capitalize{text-transform:capitalize!important}.conversejs .font-weight-light{font-weight:300!important}.conversejs .font-weight-lighter{font-weight:lighter!important}.conversejs .font-weight-normal{font-weight:400!important}.conversejs .font-weight-bold{font-weight:700!important}.conversejs .font-weight-bolder{font-weight:bolder!important}.conversejs .font-italic{font-style:italic!important}.conversejs .text-white{color:#fff!important}.conversejs .text-primary{color:#007bff!important}.conversejs a.text-primary:focus,.conversejs a.text-primary:hover{color:#0056b3!important}.conversejs .text-secondary{color:#6c757d!important}.conversejs a.text-secondary:focus,.conversejs a.text-secondary:hover{color:#494f54!important}.conversejs .text-success{color:#28a745!important}.conversejs a.text-success:focus,.conversejs a.text-success:hover{color:#19692c!important}.conversejs .text-info{color:#17a2b8!important}.conversejs a.text-info:focus,.conversejs a.text-info:hover{color:#0f6674!important}.conversejs .text-warning{color:#ffc107!important}.conversejs a.text-warning:focus,.conversejs a.text-warning:hover{color:#ba8b00!important}.conversejs .text-danger{color:#dc3545!important}.conversejs a.text-danger:focus,.conversejs a.text-danger:hover{color:#a71d2a!important}.conversejs .text-light{color:#f8f9fa!important}.conversejs a.text-light:focus,.conversejs a.text-light:hover{color:#cbd3da!important}.conversejs .text-dark{color:#343a40!important}.conversejs a.text-dark:focus,.conversejs a.text-dark:hover{color:#121416!important}.conversejs .text-body{color:#212529!important}.conversejs .text-muted{color:#6c757d!important}.conversejs .text-black-50{color:rgba(0,0,0,.5)!important}.conversejs .text-white-50{color:rgba(255,255,255,.5)!important}.conversejs .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.conversejs .text-decoration-none{text-decoration:none!important}.conversejs .text-break{word-break:break-word!important;word-wrap:break-word!important}.conversejs .text-reset{color:inherit!important}.conversejs .visible{visibility:visible!important}.conversejs .invisible{visibility:hidden!important}#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs{color:var(--text-color);font-family:var(--normal-font);font-size:var(--font-size);direction:ltr}.conversejs .flyout{position:absolute}.conversejs textarea:disabled{background-color:#eee!important}.conversejs .subdued{opacity:.35}.conversejs .fit-content{width:-webkit-fit-content!important;width:-moz-fit-content!important;width:fit-content!important;max-width:-webkit-fit-content!important;max-width:-moz-fit-content!important;max-width:fit-content!important}.conversejs .nopadding{padding:0!important}.conversejs .no-scrolling{overflow-x:none;overflow-y:none}.conversejs converse-brand-heading{text-align:center}.conversejs .brand-heading{display:inline-flex;flex-direction:row;align-items:flex-start;font-family:var(--branding-font);color:var(--link-color);margin-bottom:.75em}.conversejs .brand-heading .brand-name-wrapper{display:flex;white-space:nowrap;margin:auto}.conversejs .brand-heading .brand-name{color:var(--link-color);display:flex;flex-direction:column;align-items:center;margin-top:-.25em}.conversejs .brand-heading .brand-name .byline{font-family:var(--heading-font);font-size:.3em;margin-bottom:.75em;margin-left:-2.7em;opacity:.55;word-spacing:5px}.conversejs .brand-heading .brand-subtitle{color:var(--text-color)}.conversejs .brand-heading .brand-name__text{font-size:120%;vertical-align:text-bottom}.conversejs .brand-heading .converse-svg-logo{color:var(--link-color);height:1.5em;margin-right:.25em;margin-bottom:-.25em}.conversejs .brand-heading .converse-svg-logo .cls-1{isolation:isolate}.conversejs .brand-heading .converse-svg-logo .cls-2{opacity:.5;mix-blend-mode:multiply}.conversejs .brand-heading .converse-svg-logo .cls-3{fill:var(--link-color)}.conversejs .brand-heading .converse-svg-logo .cls-4{fill:var(--link-color)}.conversejs .brand-heading--inverse .converse-svg-logo{margin-bottom:0;margin-top:-.2em}.conversejs .brand-heading--inverse .byline{margin:0;font-family:var(--heading-font);font-size:.25em;opacity:.55;margin-left:-7em;word-spacing:5px}.conversejs .popover{position:fixed}.conversejs ::-moz-placeholder{color:var(--subdued-color)}.conversejs :-ms-input-placeholder{color:var(--subdued-color)}.conversejs ::placeholder{color:var(--subdued-color)}.conversejs ::-moz-selection{background-color:var(--highlight-color)}.conversejs ::selection{background-color:var(--highlight-color)}.conversejs ::-moz-selection{background-color:var(--highlight-color)}@media screen and (max-width:480px){.conversejs{margin:0;right:10px;left:10px;bottom:5px}}@media screen and (max-height:450px){.conversejs{margin:0;right:10px;left:10px;bottom:5px}}.conversejs ul li{height:auto}.conversejs a,.conversejs article,.conversejs aside,.conversejs audio,.conversejs blockquote,.conversejs caption,.conversejs dd,.conversejs details,.conversejs div,.conversejs dl,.conversejs dt,.conversejs em,.conversejs embed,.conversejs fieldset,.conversejs figcaption,.conversejs figure,.conversejs footer,.conversejs form,.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6,.conversejs header,.conversejs hgroup,.conversejs img,.conversejs legend,.conversejs li,.conversejs mark,.conversejs menu,.conversejs nav,.conversejs ol,.conversejs output,.conversejs p,.conversejs pre,.conversejs ruby,.conversejs section,.conversejs span,.conversejs strong,.conversejs summary,.conversejs table,.conversejs tbody,.conversejs td,.conversejs tfoot,.conversejs th,.conversejs thead,.conversejs time,.conversejs tr,.conversejs ul,.conversejs video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}.conversejs button,.conversejs input[type=button],.conversejs input[type=password],.conversejs input[type=submit],.conversejs input[type=text],.conversejs textarea{font-size:var(--font-size);min-height:0}.conversejs strong{font-weight:700}.conversejs em{font-style:italic}.conversejs ol,.conversejs ul{list-style:none}.conversejs li{height:10px}.conversejs dl,.conversejs ol,.conversejs ul{font:inherit;margin:0}.conversejs a{cursor:pointer}.conversejs a,.conversejs a:not([href]):not([tabindex]),.conversejs a:visited{text-decoration:none;color:var(--link-color);text-shadow:none;cursor:pointer}.conversejs a:hover,.conversejs a:not([href]):not([tabindex]):hover,.conversejs a:visited:hover{color:var(--link-hover-color);text-decoration:none;text-shadow:none}.conversejs a.fa,.conversejs a.far,.conversejs a.fas,.conversejs a:not([href]):not([tabindex]).fa,.conversejs a:not([href]):not([tabindex]).far,.conversejs a:not([href]):not([tabindex]).fas,.conversejs a:visited.fa,.conversejs a:visited.far,.conversejs a:visited.fas{color:var(--subdued-color)}.conversejs a.fa:hover,.conversejs a.far:hover,.conversejs a.fas:hover,.conversejs a:not([href]):not([tabindex]).fa:hover,.conversejs a:not([href]):not([tabindex]).far:hover,.conversejs a:not([href]):not([tabindex]).fas:hover,.conversejs a:visited.fa:hover,.conversejs a:visited.far:hover,.conversejs a:visited.fas:hover{color:var(--gray-color)}.conversejs svg{border-radius:var(--chatbox-border-radius)}.conversejs .fa,.conversejs .far,.conversejs .fas{color:var(--subdued-color)}.conversejs .fa:hover,.conversejs .far:hover,.conversejs .fas:hover{color:var(--gray-color)}.conversejs q{quotes:"“" "”" "‘" "’"}.conversejs q.reason{display:inline}.conversejs q:before{content:open-quote}.conversejs q:after{content:close-quote}.conversejs .helptext{font-size:var(--font-size-tiny);color:var(--text-color-lighten-15-percent)}.conversejs .selected{color:var(--link-color)!important}.conversejs .circle{border-radius:50%}.conversejs .no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}.conversejs .fade-in{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs .visible{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs .hidden{opacity:0!important;display:none!important}.conversejs .fade-out{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.conversejs .collapsed{height:0!important;overflow:hidden!important;padding:0!important}.conversejs .locked{padding-right:22px}@-webkit-keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}.conversejs .spinner__container{width:100%}.conversejs .spinner{-webkit-animation:spin 2s infinite,linear;animation:spin 2s infinite,linear;width:1em;display:block;text-align:center;padding:.5em 0;font-size:24px}.conversejs .left{float:left}.conversejs .right{float:right}.conversejs .centered{text-align:center;display:block;margin:auto}.conversejs .hor_centered{text-align:center;display:block!important;margin:0 auto;clear:both}.conversejs .error{color:var(--error-color)!important}.conversejs .info{color:var(--info-color)}.conversejs .reg-feedback{font-size:85%;margin-bottom:1em}.conversejs #converse-login .conn-feedback,.conversejs .reg-feedback{display:block;text-align:center;width:100%}.conversejs .avatar{border-radius:var(--avatar-border-radius);border:var(--avatar-border);background-color:var(--avatar-background-color)}.conversejs .avatar-autocomplete{margin-right:.5em;vertical-align:middle}.conversejs .activated{display:block!important}.conversejs .form-help{color:var(--subdued-color);font-size:90%}.conversejs .form-control--labeled{margin-top:.5em}.conversejs .nav-pills .nav-link.active,.conversejs .nav-pills .show>.nav-link{background-color:var(--primary-color)}@media screen and (max-width:575px){body .converse-brand{font-size:3.75em}.conversejs:not(.converse-embedded) .chatbox .chat-body{border-radius:var(--chatbox-border-radius)}.conversejs:not(.converse-embedded) .flyout{border-radius:var(--chatbox-border-radius)}}@media screen and (min-width:576px){.conversejs .offset-sm-2{margin-left:16.666667%}}@media screen and (min-width:768px){.conversejs .offset-md-2{margin-left:16.666667%}.conversejs .offset-md-3{margin-left:25%}}@media screen and (min-width:992px){.conversejs .offset-lg-2{margin-left:16.666667%}.conversejs .offset-lg-3{margin-left:25%}}@media screen and (min-width:1200px){.conversejs .offset-xl-2{margin-left:16.666667%}}@media screen and (max-height:450px){.conversejs{left:0}}.conversejs .btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .btn{transition:none}}.conversejs .btn:hover{color:#212529;text-decoration:none}.conversejs .btn.focus,.conversejs .btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .btn.disabled,.conversejs .btn:disabled{opacity:.65}.conversejs .btn:not(:disabled):not(.disabled){cursor:pointer}.conversejs a.btn.disabled,.conversejs fieldset:disabled a.btn{pointer-events:none}.conversejs .btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.conversejs .btn-primary.focus,.conversejs .btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.conversejs .btn-primary.disabled,.conversejs .btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-primary:not(:disabled):not(.disabled).active,.conversejs .btn-primary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.conversejs .btn-primary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.conversejs .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.conversejs .btn-secondary.focus,.conversejs .btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.conversejs .btn-secondary.disabled,.conversejs .btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-secondary:not(:disabled):not(.disabled).active,.conversejs .btn-secondary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.conversejs .btn-secondary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.conversejs .btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.conversejs .btn-success.focus,.conversejs .btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.conversejs .btn-success.disabled,.conversejs .btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-success:not(:disabled):not(.disabled).active,.conversejs .btn-success:not(:disabled):not(.disabled):active,.show>.conversejs .btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.conversejs .btn-success:not(:disabled):not(.disabled).active:focus,.conversejs .btn-success:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.conversejs .btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.conversejs .btn-info.focus,.conversejs .btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.conversejs .btn-info.disabled,.conversejs .btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-info:not(:disabled):not(.disabled).active,.conversejs .btn-info:not(:disabled):not(.disabled):active,.show>.conversejs .btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.conversejs .btn-info:not(:disabled):not(.disabled).active:focus,.conversejs .btn-info:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.conversejs .btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.conversejs .btn-warning.focus,.conversejs .btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.conversejs .btn-warning.disabled,.conversejs .btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-warning:not(:disabled):not(.disabled).active,.conversejs .btn-warning:not(:disabled):not(.disabled):active,.show>.conversejs .btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.conversejs .btn-warning:not(:disabled):not(.disabled).active:focus,.conversejs .btn-warning:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.conversejs .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.conversejs .btn-danger.focus,.conversejs .btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.conversejs .btn-danger.disabled,.conversejs .btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-danger:not(:disabled):not(.disabled).active,.conversejs .btn-danger:not(:disabled):not(.disabled):active,.show>.conversejs .btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.conversejs .btn-danger:not(:disabled):not(.disabled).active:focus,.conversejs .btn-danger:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.conversejs .btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.conversejs .btn-light.focus,.conversejs .btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.conversejs .btn-light.disabled,.conversejs .btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-light:not(:disabled):not(.disabled).active,.conversejs .btn-light:not(:disabled):not(.disabled):active,.show>.conversejs .btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.conversejs .btn-light:not(:disabled):not(.disabled).active:focus,.conversejs .btn-light:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.conversejs .btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.conversejs .btn-dark.focus,.conversejs .btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.conversejs .btn-dark.disabled,.conversejs .btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-dark:not(:disabled):not(.disabled).active,.conversejs .btn-dark:not(:disabled):not(.disabled):active,.show>.conversejs .btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.conversejs .btn-dark:not(:disabled):not(.disabled).active:focus,.conversejs .btn-dark:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.conversejs .btn-outline-primary{color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary.focus,.conversejs .btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .btn-outline-primary.disabled,.conversejs .btn-outline-primary:disabled{color:#007bff;background-color:transparent}.conversejs .btn-outline-primary:not(:disabled):not(.disabled).active,.conversejs .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .btn-outline-secondary{color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary.focus,.conversejs .btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .btn-outline-secondary.disabled,.conversejs .btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active,.conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .btn-outline-success{color:#28a745;border-color:#28a745}.conversejs .btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-outline-success.focus,.conversejs .btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .btn-outline-success.disabled,.conversejs .btn-outline-success:disabled{color:#28a745;background-color:transparent}.conversejs .btn-outline-success:not(:disabled):not(.disabled).active,.conversejs .btn-outline-success:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-outline-success:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .btn-outline-info{color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info.focus,.conversejs .btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .btn-outline-info.disabled,.conversejs .btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.conversejs .btn-outline-info:not(:disabled):not(.disabled).active,.conversejs .btn-outline-info:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .btn-outline-warning{color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning.focus,.conversejs .btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .btn-outline-warning.disabled,.conversejs .btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.conversejs .btn-outline-warning:not(:disabled):not(.disabled).active,.conversejs .btn-outline-warning:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .btn-outline-danger{color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger.focus,.conversejs .btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .btn-outline-danger.disabled,.conversejs .btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.conversejs .btn-outline-danger:not(:disabled):not(.disabled).active,.conversejs .btn-outline-danger:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light.focus,.conversejs .btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .btn-outline-light.disabled,.conversejs .btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.conversejs .btn-outline-light:not(:disabled):not(.disabled).active,.conversejs .btn-outline-light:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .btn-outline-dark{color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark.focus,.conversejs .btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .btn-outline-dark.disabled,.conversejs .btn-outline-dark:disabled{color:#343a40;background-color:transparent}.conversejs .btn-outline-dark:not(:disabled):not(.disabled).active,.conversejs .btn-outline-dark:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .btn-link{font-weight:400;color:#007bff;text-decoration:none}.conversejs .btn-link:hover{color:#0056b3;text-decoration:underline}.conversejs .btn-link.focus,.conversejs .btn-link:focus{text-decoration:underline}.conversejs .btn-link.disabled,.conversejs .btn-link:disabled{color:#6c757d;pointer-events:none}.conversejs .btn-group-lg>.btn,.conversejs .btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs .btn-group-sm>.btn,.conversejs .btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .btn-block{display:block;width:100%}.conversejs .btn-block+.btn-block{margin-top:.5rem}.conversejs input[type=button].btn-block,.conversejs input[type=reset].btn-block,.conversejs input[type=submit].btn-block{width:100%}.conversejs .btn-group,.conversejs .btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.conversejs .btn-group-vertical>.btn,.conversejs .btn-group>.btn{position:relative;flex:1 1 auto}.conversejs .btn-group-vertical>.btn:hover,.conversejs .btn-group>.btn:hover{z-index:1}.conversejs .btn-group-vertical>.btn.active,.conversejs .btn-group-vertical>.btn:active,.conversejs .btn-group-vertical>.btn:focus,.conversejs .btn-group>.btn.active,.conversejs .btn-group>.btn:active,.conversejs .btn-group>.btn:focus{z-index:1}.conversejs .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.conversejs .btn-toolbar .input-group{width:auto}.conversejs .btn-group>.btn-group:not(:first-child),.conversejs .btn-group>.btn:not(:first-child){margin-left:-1px}.conversejs .btn-group>.btn-group:not(:last-child)>.btn,.conversejs .btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .btn-group>.btn-group:not(:first-child)>.btn,.conversejs .btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.conversejs .dropdown-toggle-split::after,.dropright .conversejs .dropdown-toggle-split::after,.dropup .conversejs .dropdown-toggle-split::after{margin-left:0}.dropleft .conversejs .dropdown-toggle-split::before{margin-right:0}.conversejs .btn-group-sm>.btn+.dropdown-toggle-split,.conversejs .btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.conversejs .btn-group-lg>.btn+.dropdown-toggle-split,.conversejs .btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.conversejs .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.conversejs .btn-group-vertical>.btn,.conversejs .btn-group-vertical>.btn-group{width:100%}.conversejs .btn-group-vertical>.btn-group:not(:first-child),.conversejs .btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.conversejs .btn-group-vertical>.btn-group:not(:last-child)>.btn,.conversejs .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.conversejs .btn-group-vertical>.btn-group:not(:first-child)>.btn,.conversejs .btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.conversejs .btn-group-toggle>.btn,.conversejs .btn-group-toggle>.btn-group>.btn{margin-bottom:0}.conversejs .btn-group-toggle>.btn input[type=checkbox],.conversejs .btn-group-toggle>.btn input[type=radio],.conversejs .btn-group-toggle>.btn-group>.btn input[type=checkbox],.conversejs .btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.conversejs .btn{font-weight:400;color:var(--button-text-color)}.conversejs .btn.fa{color:var(--button-text-color)!important}.conversejs .btn i.fa,.conversejs .btn i.far,.conversejs .btn i.fas{color:var(--button-text-color);margin-right:.5em}.conversejs .btn i.fa.only-icon,.conversejs .btn i.far.only-icon,.conversejs .btn i.fas.only-icon{margin-right:0}.conversejs .btn converse-icon{display:inline-block;margin-right:0}.conversejs .btn-primary{background-color:var(--primary-color);border-color:transparent}.conversejs .btn-primary:active,.conversejs .btn-primary:focus,.conversejs .btn-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}.conversejs .btn--transparent{background:0 0;border:none}.conversejs .btn-circle{width:30px;height:30px;text-align:center;padding:.5em 0;font-size:var(--font-size-small);line-height:1.428571429;border-radius:50%}.conversejs .badge-info,.conversejs .btn-info{background-color:var(--primary-color);border-color:var(--primary-color)}.conversejs .badge-info:hover,.conversejs .btn-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}.conversejs .badge-secondary,.conversejs .btn-secondary,.conversejs .button-cancel{color:var(--button-text-color);background-color:var(--secondary-color);border-color:var(--secondary-color)}.conversejs .badge-secondary:hover,.conversejs .btn-secondary:hover,.conversejs .button-cancel:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}.conversejs .btn-warning{color:var(--button-text-color);background-color:var(--warning-color);border-color:var(--warning-color)}.conversejs .btn-warning:hover{color:var(--button-text-color);background-color:var(--warning-color-dark);border-color:var(--warning-color-dark)}.conversejs .btn-danger{color:var(--button-text-color);background-color:var(--danger-color);border-color:var(--danger-color)!important}.conversejs .btn-danger:hover{background-color:var(--danger-color-dark);border-color:var(--danger-color-dark)}.conversejs .badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .badge{transition:none}}a.conversejs .badge:focus,a.conversejs .badge:hover{text-decoration:none}.conversejs .badge:empty{display:none}.conversejs .btn .badge{position:relative;top:-1px}.conversejs .badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.conversejs .badge-primary{color:#fff;background-color:#007bff}a.conversejs .badge-primary:focus,a.conversejs .badge-primary:hover{color:#fff;background-color:#0062cc}a.conversejs .badge-primary.focus,a.conversejs .badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .badge-secondary{color:#fff;background-color:#6c757d}a.conversejs .badge-secondary:focus,a.conversejs .badge-secondary:hover{color:#fff;background-color:#545b62}a.conversejs .badge-secondary.focus,a.conversejs .badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .badge-success{color:#fff;background-color:#28a745}a.conversejs .badge-success:focus,a.conversejs .badge-success:hover{color:#fff;background-color:#1e7e34}a.conversejs .badge-success.focus,a.conversejs .badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .badge-info{color:#fff;background-color:#17a2b8}a.conversejs .badge-info:focus,a.conversejs .badge-info:hover{color:#fff;background-color:#117a8b}a.conversejs .badge-info.focus,a.conversejs .badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .badge-warning{color:#212529;background-color:#ffc107}a.conversejs .badge-warning:focus,a.conversejs .badge-warning:hover{color:#212529;background-color:#d39e00}a.conversejs .badge-warning.focus,a.conversejs .badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .badge-danger{color:#fff;background-color:#dc3545}a.conversejs .badge-danger:focus,a.conversejs .badge-danger:hover{color:#fff;background-color:#bd2130}a.conversejs .badge-danger.focus,a.conversejs .badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .badge-light{color:#212529;background-color:#f8f9fa}a.conversejs .badge-light:focus,a.conversejs .badge-light:hover{color:#212529;background-color:#dae0e5}a.conversejs .badge-light.focus,a.conversejs .badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .badge-dark{color:#fff;background-color:#343a40}a.conversejs .badge-dark:focus,a.conversejs .badge-dark:hover{color:#fff;background-color:#1d2124}a.conversejs .badge-dark.focus,a.conversejs .badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .badge{color:#fff;font-size:90%;font-weight:400;line-height:1;text-shadow:none}.conversejs .badge-light{color:var(--text-color)}.conversejs .badge-primary{background-color:var(--primary-color);border-color:transparent}.conversejs .badge-primary:active,.conversejs .badge-primary:focus,.conversejs .badge-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}.conversejs .badge-info{background-color:var(--primary-color);border-color:var(--primary-color)}.conversejs .badge-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}.conversejs .badge-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.conversejs .badge-secondary:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}.conversejs .form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .form-control{transition:none}}.conversejs .form-control::-ms-expand{background-color:transparent;border:0}.conversejs .form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.conversejs .form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .form-control::-moz-placeholder{color:#6c757d;opacity:1}.conversejs .form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.conversejs .form-control::placeholder{color:#6c757d;opacity:1}.conversejs .form-control:disabled,.conversejs .form-control[readonly]{background-color:#e9ecef;opacity:1}.conversejs input[type=date].form-control,.conversejs input[type=datetime-local].form-control,.conversejs input[type=month].form-control,.conversejs input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.conversejs .form-control-file,.conversejs .form-control-range{display:block;width:100%}.conversejs .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.conversejs .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.conversejs .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.conversejs .form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.conversejs .form-control-plaintext.form-control-lg,.conversejs .form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.conversejs .form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs select.form-control[multiple],.conversejs select.form-control[size]{height:auto}.conversejs textarea.form-control{height:auto}.conversejs .form-group{margin-bottom:1rem}.conversejs .form-text{display:block;margin-top:.25rem}.conversejs .form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.conversejs .form-row>.col,.conversejs .form-row>[class*=col-]{padding-right:5px;padding-left:5px}.conversejs .form-check{position:relative;display:block;padding-left:1.25rem}.conversejs .form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.conversejs .form-check-input:disabled~.form-check-label,.conversejs .form-check-input[disabled]~.form-check-label{color:#6c757d}.conversejs .form-check-label{margin-bottom:0}.conversejs .form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.conversejs .form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.conversejs .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.conversejs .valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.conversejs .valid-tooltip,.form-row>[class*=col-]>.conversejs .valid-tooltip{left:5px}.conversejs.is-valid~.valid-feedback,.conversejs.is-valid~.valid-tooltip,.was-validated .conversejs:valid~.valid-feedback,.was-validated .conversejs:valid~.valid-tooltip{display:block}.conversejs .form-control.is-valid,.was-validated .conversejs .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.conversejs .form-control.is-valid:focus,.was-validated .conversejs .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs textarea.form-control.is-valid,.was-validated .conversejs textarea.form-control:valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.conversejs .custom-select.is-valid,.was-validated .conversejs .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.conversejs .custom-select.is-valid:focus,.was-validated .conversejs .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .form-check-input.is-valid~.form-check-label,.was-validated .conversejs .form-check-input:valid~.form-check-label{color:#28a745}.conversejs .form-check-input.is-valid~.valid-feedback,.conversejs .form-check-input.is-valid~.valid-tooltip,.was-validated .conversejs .form-check-input:valid~.valid-feedback,.was-validated .conversejs .form-check-input:valid~.valid-tooltip{display:block}.conversejs .custom-control-input.is-valid~.custom-control-label,.was-validated .conversejs .custom-control-input:valid~.custom-control-label{color:#28a745}.conversejs .custom-control-input.is-valid~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.conversejs .custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.conversejs .custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.conversejs .custom-file-input.is-valid~.custom-file-label,.was-validated .conversejs .custom-file-input:valid~.custom-file-label{border-color:#28a745}.conversejs .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .conversejs .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.conversejs .invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.conversejs .invalid-tooltip,.form-row>[class*=col-]>.conversejs .invalid-tooltip{left:5px}.conversejs.is-invalid~.invalid-feedback,.conversejs.is-invalid~.invalid-tooltip,.was-validated .conversejs:invalid~.invalid-feedback,.was-validated .conversejs:invalid~.invalid-tooltip{display:block}.conversejs .form-control.is-invalid,.was-validated .conversejs .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.conversejs .form-control.is-invalid:focus,.was-validated .conversejs .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs textarea.form-control.is-invalid,.was-validated .conversejs textarea.form-control:invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.conversejs .custom-select.is-invalid,.was-validated .conversejs .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.conversejs .custom-select.is-invalid:focus,.was-validated .conversejs .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .form-check-input.is-invalid~.form-check-label,.was-validated .conversejs .form-check-input:invalid~.form-check-label{color:#dc3545}.conversejs .form-check-input.is-invalid~.invalid-feedback,.conversejs .form-check-input.is-invalid~.invalid-tooltip,.was-validated .conversejs .form-check-input:invalid~.invalid-feedback,.was-validated .conversejs .form-check-input:invalid~.invalid-tooltip{display:block}.conversejs .custom-control-input.is-invalid~.custom-control-label,.was-validated .conversejs .custom-control-input:invalid~.custom-control-label{color:#dc3545}.conversejs .custom-control-input.is-invalid~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.conversejs .custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.conversejs .custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.conversejs .custom-file-input.is-invalid~.custom-file-label,.was-validated .conversejs .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.conversejs .custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .conversejs .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .form-inline{display:flex;flex-flow:row wrap;align-items:center}.conversejs .form-inline .form-check{width:100%}@media(min-width:576px){.conversejs .form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.conversejs .form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.conversejs .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.conversejs .form-inline .form-control-plaintext{display:inline-block}.conversejs .form-inline .custom-select,.conversejs .form-inline .input-group{width:auto}.conversejs .form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.conversejs .form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.conversejs .form-inline .custom-control{align-items:center;justify-content:center}.conversejs .form-inline .custom-control-label{margin-bottom:0}}.conversejs .input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.conversejs .input-group>.custom-file,.conversejs .input-group>.custom-select,.conversejs .input-group>.form-control,.conversejs .input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.conversejs .input-group>.custom-file+.custom-file,.conversejs .input-group>.custom-file+.custom-select,.conversejs .input-group>.custom-file+.form-control,.conversejs .input-group>.custom-select+.custom-file,.conversejs .input-group>.custom-select+.custom-select,.conversejs .input-group>.custom-select+.form-control,.conversejs .input-group>.form-control+.custom-file,.conversejs .input-group>.form-control+.custom-select,.conversejs .input-group>.form-control+.form-control,.conversejs .input-group>.form-control-plaintext+.custom-file,.conversejs .input-group>.form-control-plaintext+.custom-select,.conversejs .input-group>.form-control-plaintext+.form-control{margin-left:-1px}.conversejs .input-group>.custom-file .custom-file-input:focus~.custom-file-label,.conversejs .input-group>.custom-select:focus,.conversejs .input-group>.form-control:focus{z-index:3}.conversejs .input-group>.custom-file .custom-file-input:focus{z-index:4}.conversejs .input-group>.custom-select:not(:first-child),.conversejs .input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .input-group>.custom-file{display:flex;align-items:center}.conversejs .input-group>.custom-file:not(:first-child) .custom-file-label,.conversejs .input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.conversejs .input-group:not(.has-validation)>.custom-select:not(:last-child),.conversejs .input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.conversejs .input-group.has-validation>.custom-select:nth-last-child(n+3),.conversejs .input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group-append,.conversejs .input-group-prepend{display:flex}.conversejs .input-group-append .btn,.conversejs .input-group-prepend .btn{position:relative;z-index:2}.conversejs .input-group-append .btn:focus,.conversejs .input-group-prepend .btn:focus{z-index:3}.conversejs .input-group-append .btn+.btn,.conversejs .input-group-append .btn+.input-group-text,.conversejs .input-group-append .input-group-text+.btn,.conversejs .input-group-append .input-group-text+.input-group-text,.conversejs .input-group-prepend .btn+.btn,.conversejs .input-group-prepend .btn+.input-group-text,.conversejs .input-group-prepend .input-group-text+.btn,.conversejs .input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.conversejs .input-group-prepend{margin-right:-1px}.conversejs .input-group-append{margin-left:-1px}.conversejs .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.conversejs .input-group-text input[type=checkbox],.conversejs .input-group-text input[type=radio]{margin-top:0}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-lg>.form-control,.conversejs .input-group-lg>.input-group-append>.btn,.conversejs .input-group-lg>.input-group-append>.input-group-text,.conversejs .input-group-lg>.input-group-prepend>.btn,.conversejs .input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs .input-group-sm>.custom-select,.conversejs .input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.conversejs .input-group-sm>.custom-select,.conversejs .input-group-sm>.form-control,.conversejs .input-group-sm>.input-group-append>.btn,.conversejs .input-group-sm>.input-group-append>.input-group-text,.conversejs .input-group-sm>.input-group-prepend>.btn,.conversejs .input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-sm>.custom-select{padding-right:1.75rem}.conversejs .input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.conversejs .input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.conversejs .input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.conversejs .input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.conversejs .input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.conversejs .input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.conversejs .input-group>.input-group-prepend>.btn,.conversejs .input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group>.input-group-append>.btn,.conversejs .input-group>.input-group-append>.input-group-text,.conversejs .input-group>.input-group-prepend:first-child>.btn:not(:first-child),.conversejs .input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.conversejs .input-group>.input-group-prepend:not(:first-child)>.btn,.conversejs .input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.conversejs .custom-control-inline{display:inline-flex;margin-right:1rem}.conversejs .custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.conversejs .custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.conversejs .custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.conversejs .custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.conversejs .custom-control-input:disabled~.custom-control-label,.conversejs .custom-control-input[disabled]~.custom-control-label{color:#6c757d}.conversejs .custom-control-input:disabled~.custom-control-label::before,.conversejs .custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.conversejs .custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.conversejs .custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.conversejs .custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.conversejs .custom-checkbox .custom-control-label::before{border-radius:.25rem}.conversejs .custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.conversejs .custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-radio .custom-control-label::before{border-radius:50%}.conversejs .custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.conversejs .custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-switch{padding-left:2.25rem}.conversejs .custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.conversejs .custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .custom-switch .custom-control-label::after{transition:none}}.conversejs .custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.conversejs .custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs .custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-select:focus::-ms-value{color:#495057;background-color:#fff}.conversejs .custom-select[multiple],.conversejs .custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.conversejs .custom-select:disabled{color:#6c757d;background-color:#e9ecef}.conversejs .custom-select::-ms-expand{display:none}.conversejs .custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.conversejs .custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.conversejs .custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.conversejs .custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.conversejs .custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.conversejs .custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-file-input:disabled~.custom-file-label,.conversejs .custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.conversejs .custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.conversejs .custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.conversejs .custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.conversejs .custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.conversejs .custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs .custom-range:focus{outline:0}.conversejs .custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range::-moz-focus-outer{border:0}.conversejs .custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.conversejs .custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.conversejs .custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.conversejs .custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.conversejs .custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-ms-thumb{-ms-transition:none;transition:none}}.conversejs .custom-range::-ms-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.conversejs .custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.conversejs .custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.conversejs .custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.conversejs .custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.conversejs .custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.conversejs .custom-range:disabled::-moz-range-track{cursor:default}.conversejs .custom-range:disabled::-ms-thumb{background-color:#adb5bd}.conversejs .custom-control-label::before,.conversejs .custom-file-label,.conversejs .custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .custom-control-label::before,.conversejs .custom-file-label,.conversejs .custom-select{transition:none}}.conversejs .btn--small{font-size:80%;font-weight:400}.conversejs form .hidden-username{opacity:0!important;height:0!important;padding:0!important}.conversejs form .error-feedback{margin-bottom:.5em}.conversejs form .form-check-label{margin-top:.3rem}.conversejs form .form-control::-moz-placeholder{color:var(--subdued-color)}.conversejs form .form-control:-ms-input-placeholder{color:var(--subdued-color)}.conversejs form .form-control::placeholder{color:var(--subdued-color)}.conversejs form .clear-input{margin-top:.5em;margin-bottom:.5em;position:absolute;right:.2em;cursor:pointer;font-size:var(--font-size)}.conversejs form#converse-login,.conversejs form#converse-register{background:var(--controlbox-pane-background-color)}.conversejs form#converse-login legend,.conversejs form#converse-register legend{width:100%;text-align:center;margin:0 auto .5em auto}.conversejs form#converse-login fieldset.buttons,.conversejs form#converse-register fieldset.buttons{text-align:center}.conversejs form#converse-login .login-anon,.conversejs form#converse-register .login-anon{height:auto;white-space:normal}.conversejs form#converse-login .save-submit,.conversejs form#converse-register .save-submit{color:var(--save-button-color)}.conversejs form#converse-login .form-url,.conversejs form#converse-register .form-url{display:block;font-weight:400;margin:1em 0}.conversejs form.converse-form{padding:1.2rem}.conversejs form.converse-form legend{color:var(--text-color);font-size:125%;margin-bottom:1.5em}.conversejs form.converse-form input[type=number],.conversejs form.converse-form input[type=password],.conversejs form.converse-form input[type=text],.conversejs form.converse-form select{min-width:50%}.conversejs form.converse-form input[type=button],.conversejs form.converse-form input[type=number],.conversejs form.converse-form input[type=password],.conversejs form.converse-form input[type=submit],.conversejs form.converse-form input[type=text]{padding:.5em}.conversejs form.converse-form input[type=button],.conversejs form.converse-form input[type=submit]{padding-left:1em;padding-right:1em;border:none}.conversejs form.converse-form input.error{border:1px solid var(--error-color);color:var(--text-color)}.conversejs form.converse-form .text-muted{color:var(--subdued-color)!important;font-size:85%;padding-top:.5em}.conversejs form.converse-form .text-muted a{color:var(--link-color-lighten-10-percent)}.conversejs form.converse-form .text-muted.error{color:var(--error-color)}.conversejs form.converse-form--modal{padding-bottom:0}.conversejs form.converse-form--spinner{height:100%}.conversejs form.converse-centered-form{min-height:66%;text-align:center}.conversejs form.converse-centered-form input{max-width:30em;margin:auto}.conversejs .list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.conversejs .list-group-item-action{width:100%;color:#495057;text-align:inherit}.conversejs .list-group-item-action:focus,.conversejs .list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.conversejs .list-group-item-action:active{color:#212529;background-color:#e9ecef}.conversejs .list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.conversejs .list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.conversejs .list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.conversejs .list-group-item.disabled,.conversejs .list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.conversejs .list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .list-group-item+.conversejs .list-group-item{border-top-width:0}.conversejs .list-group-item+.conversejs .list-group-item.active{margin-top:-1px;border-top-width:1px}.conversejs .list-group-horizontal{flex-direction:row}.conversejs .list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width:576px){.conversejs .list-group-horizontal-sm{flex-direction:row}.conversejs .list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-sm>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:768px){.conversejs .list-group-horizontal-md{flex-direction:row}.conversejs .list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-md>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:992px){.conversejs .list-group-horizontal-lg{flex-direction:row}.conversejs .list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-lg>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:1200px){.conversejs .list-group-horizontal-xl{flex-direction:row}.conversejs .list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-xl>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.conversejs .list-group-flush{border-radius:0}.conversejs .list-group-flush>.list-group-item{border-width:0 0 1px}.conversejs .list-group-flush>.list-group-item:last-child{border-bottom-width:0}.conversejs .list-group-item-primary{color:#004085;background-color:#b8daff}.conversejs .list-group-item-primary.list-group-item-action:focus,.conversejs .list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.conversejs .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.conversejs .list-group-item-secondary{color:#383d41;background-color:#d6d8db}.conversejs .list-group-item-secondary.list-group-item-action:focus,.conversejs .list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.conversejs .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.conversejs .list-group-item-success{color:#155724;background-color:#c3e6cb}.conversejs .list-group-item-success.list-group-item-action:focus,.conversejs .list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.conversejs .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.conversejs .list-group-item-info{color:#0c5460;background-color:#bee5eb}.conversejs .list-group-item-info.list-group-item-action:focus,.conversejs .list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.conversejs .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.conversejs .list-group-item-warning{color:#856404;background-color:#ffeeba}.conversejs .list-group-item-warning.list-group-item-action:focus,.conversejs .list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.conversejs .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.conversejs .list-group-item-danger{color:#721c24;background-color:#f5c6cb}.conversejs .list-group-item-danger.list-group-item-action:focus,.conversejs .list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.conversejs .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.conversejs .list-group-item-light{color:#818182;background-color:#fdfdfe}.conversejs .list-group-item-light.list-group-item-action:focus,.conversejs .list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.conversejs .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.conversejs .list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.conversejs .list-group-item-dark.list-group-item-action:focus,.conversejs .list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.conversejs .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.conversejs .list-group-item.active{background-color:var(--primary-color);border-color:var(--primary-color-dark)}.conversejs .list-container{text-align:left;padding:.3em 0}.conversejs .list-container .list-toggle{font-family:var(--heading-font);font-weight:var(--list-toggle-font-weight);display:block;color:var(--list-toggle-color);padding:0 0 .5rem 0}.conversejs .list-container .list-toggle:hover{color:var(--list-toggle-hover-color)}.conversejs .items-list{text-align:left}.conversejs .items-list .list-item{border:none;clear:both;color:var(--text-color);overflow:hidden;padding:.5em 0;text-shadow:0 1px 0 var(--text-shadow-color);word-wrap:break-word;height:2.5em}.conversejs .items-list .list-item.unread-msgs{font-weight:700}.conversejs .items-list .list-item .list-item-link{color:var(--list-item-link-color);margin:auto;font-size:var(--font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;vertical-align:baseline}.conversejs .items-list .list-item .list-item-link:hover{color:var(--list-item-link-hover-color)}.conversejs .items-list .list-item .list-item-badge{opacity:1;border-radius:25%;color:#fff;font-size:var(--font-size-small);line-height:var(--font-size-small)}.conversejs .items-list .list-item .list-item-action{opacity:0;font-size:var(--font-size-tiny);padding:.3em 0 0 0;margin:0 0 0 var(--inline-action-margin);width:2em;height:2em;color:var(--subdued-color)}.conversejs .items-list .list-item .list-item-action:before{font-size:var(--font-size)}.conversejs .items-list .list-item .list-item-action.button-on{color:var(--list-item-link-color)}.conversejs .items-list .list-item .list-item-action.button-on:hover{color:var(--list-item-link-hover-color)}.conversejs .items-list .list-item .list-item-action:hover{color:var(--list-toggle-hover-color);opacity:1}.conversejs .items-list .list-item .list-item-action--visible{opacity:1!important}.conversejs .items-list .list-item.open{background-color:var(--list-item-open-color)}.conversejs .items-list .list-item.open:hover{background-color:var(--list-item-open-hover-color)!important}.conversejs .items-list .list-item.open a{color:#fff}.conversejs .items-list .list-item.open .list-item-link:hover{color:#fff}.conversejs .items-list .list-item.open .list-item-action{color:var(--list-item-action-color)}.conversejs .items-list .list-item.open .list-item-action:hover{color:#fff}.conversejs .items-list .list-item:hover{background-color:var(--controlbox-pane-bg-hover-color)}.conversejs .items-list .list-item:hover .fa,.conversejs .items-list .list-item:hover .far,.conversejs .items-list .list-item:hover .fas{opacity:1}.conversejs .styling-directive{color:var(--subdued-color)}.conversejs .older-msg time{font-weight:700}.conversejs .message .show-msg-author-modal{align-self:flex-start;color:var(--text-color)!important}.conversejs .message blockquote{margin-left:.5em;margin-bottom:.25em;padding-right:1em;color:var(--subdued-color);border-left:.3em solid var(--subdued-color);padding-left:.5em;display:inline-block}.conversejs .message code{font-family:monospace}.conversejs .message .mention{font-weight:700}.conversejs .message .mention--self{font-weight:400}.conversejs .message.date-separator,.conversejs .message.separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}.conversejs .message.date-separator .separator,.conversejs .message.separator .separator{border-top:0;border-bottom:var(--chat-separator-border-bottom);margin:0 1em;position:relative;top:1em;z-index:5}.conversejs .message.date-separator .separator-text,.conversejs .message.separator .separator-text{background:#fff;bottom:1px;color:var(--separator-text-color);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5}.conversejs .message.chat-info{color:var(--chat-head-color);font-size:var(--message-font-size);line-height:var(--line-height-small);font-size:90%;padding:.17rem 1rem}.conversejs .message.chat-info.badge{color:var(--chat-head-text-color)}.conversejs .message.chat-info.chat-state-notification{font-style:italic}.conversejs .message.chat-info.chat-event{clear:left;font-style:italic}.conversejs .message.chat-info.chat-error{color:var(--error-color);font-weight:700}.conversejs .message.chat-info .q{font-style:italic}.conversejs .message .chat-image{height:auto;width:auto;max-height:15em;max-width:100%}.conversejs .message.chat-msg--action{font-style:italic}.conversejs .message.chat-msg--action .chat-msg__author{padding-right:.2em}.conversejs .message.chat-msg{display:inline-flex;width:100%;flex-direction:row;padding:.125rem 1rem}.conversejs .message.chat-msg.onload{animation:colorchange-chatmessage 1s;-webkit-animation:colorchange-chatmessage 1s}.conversejs .message.chat-msg:hover{background-color:var(--list-item-hover-color)}.conversejs .message.chat-msg.correcting.groupchat{background-color:var(--chatroom-correcting-color)}.conversejs .message.chat-msg.correcting:not(.groupchat){background-color:var(--chat-correcting-color)}.conversejs .message.chat-msg .spoiler{margin-top:.5em}.conversejs .message.chat-msg .spoiler-hint{margin-bottom:.5em}.conversejs .message.chat-msg .spoiler-toggle{color:#fff}.conversejs .message.chat-msg .spoiler-toggle i{color:#fff;padding-right:.5em}.conversejs .message.chat-msg .spoiler-toggle:before{padding-right:.25em;whitespace:nowrap}.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat .chat-msg__text{color:var(--subdued-color)}.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--delayed .chat-msg__text,.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--received .chat-msg__text{color:var(--message-text-color)}.conversejs .message.chat-msg .chat-msg__content--action{width:100%;margin-left:0}.conversejs .message.chat-msg converse-chat-message-body{display:inline}.conversejs .message.chat-msg .chat-msg__message{line-height:1.5em;display:inline-flex;flex-direction:column;width:100%;overflow-wrap:break-word}.conversejs .message.chat-msg .chat-msg__edit-modal{cursor:pointer;padding-right:.5em}.conversejs .message.chat-msg .chat-msg__subject{font-weight:700;clear:right}.conversejs .message.chat-msg .chat-msg__text{color:var(--message-text-color);padding:0;white-space:pre-wrap;word-wrap:break-word;word-break:break-word}.conversejs .message.chat-msg .chat-msg__text a{word-wrap:break-word;word-break:break-all;display:inline}.conversejs .message.chat-msg .chat-msg__text a.chat-image__link{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:block}.conversejs .message.chat-msg .chat-msg__text img.emoji{height:1.5em;width:1.5em;margin:0 .05em 0 .1em;vertical-align:-.1em}.conversejs .message.chat-msg .chat-msg__text .emojione{margin-bottom:-6px}.conversejs .message.chat-msg .chat-msg__text--larger{font-size:1.6em;padding-top:.25em;padding-bottom:.25em}.conversejs .message.chat-msg .chat-msg__error{color:var(--error-color)}.conversejs .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}.conversejs .message.chat-msg .chat-msg__media a{word-wrap:break-word}.conversejs .message.chat-msg .chat-msg__media audio{width:100%}.conversejs .message.chat-msg .chat-msg__avatar{margin-top:.5em;vertical-align:middle;height:var(--message-avatar-height);width:var(--message-avatar-width);min-height:var(--message-avatar-height);min-width:var(--message-avatar-width)}.conversejs .message.chat-msg .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}.conversejs .message.chat-msg .chat-msg__heading{width:100%;margin-top:.5em;padding-right:.25rem;padding-bottom:.25rem}.conversejs .message.chat-msg .chat-msg__heading .badge{margin-left:.5em;font-family:var(--normal_font)}.conversejs .message.chat-msg .chat-msg__heading .chat-msg__time{padding-left:.25em;padding-right:.25em;color:var(--text-color-lighten-15-percent)}.conversejs .message.chat-msg.chat-msg--action .chat-msg__message{flex-direction:row}.conversejs .message.chat-msg.chat-msg--action .chat-msg__text{width:auto}.conversejs .message.chat-msg.chat-msg--action .chat-msg__heading{margin-top:0;padding-bottom:0;width:auto}.conversejs .message.chat-msg.chat-msg--action .chat-msg__heading .fa{margin-left:.5em}.conversejs .message.chat-msg.chat-msg--action .chat-msg__author{font-size:var(--message-font-size)}.conversejs .message.chat-msg.chat-msg--action .chat-msg__time{margin-left:0}.conversejs .message.chat-msg .chat-msg__content{width:calc(100% - var(--message-avatar-width))}.conversejs .message.chat-msg.chat-msg--followup .chat-msg__avatar,.conversejs .message.chat-msg.chat-msg--followup .chat-msg__heading{display:none}.conversejs .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content{margin-left:2.75rem;width:100%}.conversejs .message.chat-msg .chat-msg__receipt{margin-left:.5em;margin-right:.5em;color:var(--message-receipt-color)}.conversejs .message .chat-msg__content{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-left:.5rem}.conversejs .message .chat-msg__content:hover .btn--standalone{opacity:1}.conversejs .message .chat-msg__body{display:flex;flex-direction:row;justify-content:space-between}.conversejs .chatroom-body .message.onload{animation:colorchange-chatmessage-muc 1s;-webkit-animation:colorchange-chatmessage-muc 1s}.conversejs .chatroom-body .message .separator{border-top:0;border-bottom:var(--chatroom-separator-border-bottom)}.conversejs converse-chats.converse-overlayed .message.chat-msg.chat-msg--followup .chat-msg__content{margin-left:0}@media screen and (max-width:767px){converse-chats:not(.converse-embedded) .message.chat-msg .chat-msg__author{white-space:normal}}#conversejs-bg .subdued{opacity:.35}#conversejs-bg .converse-brand{display:flex;justify-content:space-between;margin-top:15vh;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs-bg .converse-brand__text{color:#fff;font-family:var(--branding-font);font-weight:400;text-align:center;font-size:140%;margin-left:.2em}#conversejs-bg .converse-brand__text .byline{margin:0;font-family:var(--heading-font);font-size:.3em;opacity:.55;margin-bottom:2em;margin-left:-2.7em;word-spacing:5px}.converse-fullscreen #conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media(min-width:768px){.converse-fullscreen #conversejs-bg .converse-brand__padding{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.converse-fullscreen #conversejs-bg .converse-brand__padding{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.converse-fullscreen #conversejs-bg .converse-brand__padding{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.converse-fullscreen #conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media(min-width:768px){.converse-fullscreen #conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.converse-fullscreen #conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 75%;max-width:75%}}@media(min-width:1200px){.converse-fullscreen #conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}.converse-fullscreen #conversejs-bg .converse-brand__heading svg{margin-top:.3em}.converse-overlayed #conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media(min-width:768px){.converse-overlayed #conversejs-bg .converse-brand__padding{flex:0 0 16.6666666667%;max-width:16.6666666667%}}@media(min-width:992px){.converse-overlayed #conversejs-bg .converse-brand__padding{flex:0 0 8.3333333333%;max-width:8.3333333333%}}@media(min-width:1200px){.converse-overlayed #conversejs-bg .converse-brand__padding{flex:0 0 8.3333333333%;max-width:8.3333333333%}}.converse-overlayed #conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media(min-width:768px){.converse-overlayed #conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.converse-overlayed #conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}@media(min-width:1200px){.converse-overlayed #conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}.converse-overlayed #conversejs-bg .converse-brand__heading svg{margin-top:.3em}#conversejs.theme-darkbeet{--darkbeet:#50162D;--fontcolor:#FFF;--bodybg:#252121;--postbg:#292525;--posthover:#353131;--postbright:#353131;--text-color:#DDDDDD;--text-color-lighten-15-percent:#FFF;--maincolor:#8EB726;--first-accent:var(--main-color);--second-accent:#4F8F93;--alert:#72384F;--green:#25DB77;--light-blue:#4E9CFE;--pink:#BD23E1;--darkbeet-green:rgb(25, 68, 71);--blue:#4E9CFE;--dark-link-color:#3a3a3a;--occupants-background-color:var(--bodybg);--global-background-color:var(--bodybg);--maincolorder-first-accent:var(--darkbeet);--primary-color:var(--darkbeet);--primary-color-dark:var(--darkbeet);--highlight-color-darker:var(--maincolor);--highlight-color:var(--darkbeet);--headline-head-color:var(--darkbeet-green);--message-text-color:var(--text-color);--text-controlbox-color:var(--text-color);--message-receipt-color:var(--bodybg);--link-color:var(--maincolor);--error-color:var(--danger-color-dark);--chat-textarea-color:var(--font-hover-head-color);--chat-textarea-background-color:var(--postbg);--chat-content-background-color:var(--postbg);--controlbox-heading-top-margin:0.75em;--inline-action-margin:0.75em;--chat-head-color:var(--darkbeet-green);--chat-head-color-dark:#b9b9ac;--chat-head-color-darker:#e8e8e3;--chat-correcting-color:var(--darkbeet);--chatbox-border-radius:0px;--controlbox-head-color-lighten-45-percent:#0e0e0e;--controlbox-pane-background-color:var(--bodybg);--font-head-color:#777;--font-hover-head-color:#c5c5c5;--chatroom-width:100%;--chatroom-correcting-color:var(--darkbeet);--chatroom-head-bg-color:var(--darkbeet);--chatroom-message-input-border-top:2px solid var(--second-accent);--font-size-tiny:10px;--font-size-small:12px;--font-size-occupants:100%;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--chat-separator-border-bottom:2px solid var(--darkbeet);--chatroom-separator-border-bottom:2px solid var(--darkbeet);--message-background-color:#303030;--message-input-border-top:4px solid var(--darkbeet);--message-mention-color:#404040;--message-mention-self-color:#AB3131;--message-separator-background-color:#2E1520;--embedded-emoji-picker-height:200px;--avatar-border-radius:50%;--fullpage-emoji-picker-height:200px;--overlayed-emoji-picker-height:100px;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--list-item-action-color);--list-item-open-color:var(--chat-content-background-color);--list-item-open-hover-color:var(--darkbeet);--list-dot-circle-color:#f6dec1;scrollbar-color:var(--occupants-background-color) var(--bodybg);scrollbar-width:thin}#conversejs.theme-darkbeet ::-webkit-scrollbar{width:5px;height:5px;background-color:var(--bodybg)}#conversejs.theme-darkbeet ::-webkit-scrollbar-track-piece{background-color:var(--bodybg)}#conversejs.theme-darkbeet ::-webkit-scrollbar-thumb:vertical{height:15px;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .scroller{width:300px;height:100px;overflow-y:scroll;scrollbar-color:var(--occupants-background-color) var(--bodybg)}#conversejs.theme-darkbeet #controlbox .bookmarks-toggle,#conversejs.theme-darkbeet #controlbox .bookmarks-toggle .fa{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.theme-darkbeet #controlbox .bookmarks-toggle .fa:hover,#conversejs.theme-darkbeet #controlbox .bookmarks-toggle:hover{color:var(--first-accent)!important}#conversejs.theme-darkbeet .chatbox .chatroom .sendXMPPMessage{background-color:var(--message-background-color)}#conversejs.theme-darkbeet .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);resize:none;margin-top:1px;padding-left:7px}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea:active,#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea:focus{outline-color:unset!important;outline:unset!important}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea.spoiler{height:42px}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea.correcting{background-color:var(--chat-textarea-background-color)}#conversejs.theme-darkbeet .chatroom .sendXMPPMessage{background-color:var(--message-background-color)}#conversejs.theme-darkbeet .chatroom .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);resize:none;margin-top:1px;padding-left:7px}#conversejs.theme-darkbeet .chatroom .chat-textarea.correcting{background-color:var(--chat-textarea-background-color);margin-bottom:-3px;border-width:2px;border-style:dotted;border-color:var(--maincolor)}#conversejs.theme-darkbeet .chatroom .chat-textarea .chat-textarea:active,#conversejs.theme-darkbeet .chatroom .chat-textarea .chat-textarea:focus{outline-color:maincolor!important}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chat-info{color:var(--second-accent)}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .occupants{border-left:unset}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chatroom-form-container{background-color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chatroom-form{background-color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatroom .box-flyout .occupants{flex:0 0 0}#conversejs.theme-darkbeet #controlbox .open-rooms-toggle,#conversejs.theme-darkbeet #controlbox .open-rooms-toggle .fa{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.theme-darkbeet #controlbox .open-rooms-toggle .fa:hover,#conversejs.theme-darkbeet #controlbox .open-rooms-toggle:hover{color:var(--first-accent)!important}#conversejs.theme-darkbeet #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--first-accent)}#conversejs.theme-darkbeet #controlbox .controlbox-pane dd{background-color:var(--darkbeet)}#conversejs.theme-darkbeet #controlbox .controlbox-panes{border-right:unset}#conversejs.theme-darkbeet .avatar{border-radius:var(--avatar-border-radius);border:none;background-color:unset}#conversejs.theme-darkbeet .dropdown-menu{color:var(--text-color);background-color:var(--bodybg)}#conversejs.theme-darkbeet .dropdown-menu.selected,#conversejs.theme-darkbeet .dropdown-menu:active{color:var(--text-color-lighten-15-percent)!important;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .dropdown-item{color:var(--text-color)}#conversejs.theme-darkbeet .dropdown-item.selected,#conversejs.theme-darkbeet .dropdown-item:active{color:var(--text-color-lighten-15-percent)!important;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .dropdown-item:hover{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet ::-webkit-scrollbar-thumb{background:var(--list-item-action-color);border-radius:10px}#conversejs.theme-darkbeet ::-webkit-scrollbar-track{background:var(--darkbeet)}#conversejs.theme-darkbeet .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}#conversejs.theme-darkbeet .chatbox converse-emoji-dropdown{display:inline-block}#conversejs.theme-darkbeet .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}#conversejs.theme-darkbeet .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--occupants-background-color);overflow-y:hidden;background:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--occupants-background-color);width:auto;font-size:var(--font-size)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker{background-color:var(--occupants-background-color);padding:.5em 0 0 .5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header{display:flex;flex-direction:column;padding:.1em 0;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:var(--occupants-background-color);border:1px var(--chat-head-color) solid;border-bottom:none}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker{background-color:var(--occupants-background-color);background:#fff}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}#conversejs.theme-darkbeet .items-list .list-item:hover{color:var(--text-color);background-color:var(--darkbeet)}#conversejs.theme-darkbeet .items-list .list-item:hover .fa,#conversejs.theme-darkbeet .items-list .list-item:hover .far,#conversejs.theme-darkbeet .items-list .list-item:hover .fas{opacity:1}#conversejs.theme-darkbeet .items-list .list-item.open{border-left:4px solid var(--maincolor);background-color:var(--list-item-open-color)}#conversejs.theme-darkbeet .items-list .list-item.open:hover{color:var(--text-color);background-color:var(--list-item-open-hover-color)!important}#conversejs.theme-darkbeet .items-list .list-item-badge{color:var(--text-color);float:right;text-align:center;width:22px;background-color:var(--maincolor);border-radius:50%;padding:.5em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet .message .mention{font-weight:700;border-width:0;border-radius:.25rem;background-color:var(--message-mention-color);color:var(--text-color-lighten-15-percent);padding:.25em}#conversejs.theme-darkbeet .message .mention--self{background:var(--message-mention-self-color)}#conversejs.theme-darkbeet .message.correcting.groupchat{background-color:unset;border-style:dotted;border-radius:1em;border-color:var(--maincolor);border-width:.2em}#conversejs.theme-darkbeet .message.correcting:not(.groupchat){background-color:unset;border-style:solid;border-radius:1em;border-color:var(--maincolor)}#conversejs.theme-darkbeet .message .chat-msg__heading .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--first-accent);font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}#conversejs.theme-darkbeet .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content{margin-left:1rem;margin-top:.5rem}#conversejs.theme-darkbeet .chat-msg__content{margin-left:1rem}#conversejs.theme-darkbeet .chat-msg__text{display:inline;color:var(--message-text-color);padding:unset;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;line-height:1em}#conversejs.theme-darkbeet .chat-msg__message{display:inline-flex;flex-direction:column;width:unset;overflow-wrap:break-word}#conversejs.theme-darkbeet .chat-msg__avatar{height:var(--message-avatar-height);width:var(--message-avatar-width);display:block;margin-left:auto;margin-right:auto;background-size:cover}#conversejs.theme-darkbeet .message .mention{font-weight:700}#conversejs.theme-darkbeet .message .mention--self{font-weight:400}#conversejs.theme-darkbeet .message.date-separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}#conversejs.theme-darkbeet .message.date-separator .separator{border-top:0;border-bottom:var(--global-background-color);border-style:solid}#conversejs.theme-darkbeet .message.date-separator .separator-text{background:var(--global-background-color);bottom:1px;color:var(--chatbox-separator-text);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5;border-style:solid;border-radius:2em;border-width:0}#conversejs.theme-darkbeet .message.separator .separator-text{background:var(--darkbeet);color:var(--chatroom-head-color);border-radius:2em}#conversejs.theme-darkbeet .chat-image{border-radius:2em;max-height:25em;transition:.5s;border:0;margin-left:5em;margin-top:2em}#conversejs.theme-darkbeet .chat-image:hover{filter:grayscale(1)}#conversejs.theme-darkbeet .img-thumbnail{background-color:unset}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media a{word-wrap:break-word}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media audio{width:50%;background-color:unset;color:var(--darkbeet)}#conversejs.theme-darkbeet #converse-modals .modal-header{background-color:var(--darkbeet);border-bottom:none}#conversejs.theme-darkbeet #converse-modals .modal-header .close{color:#fff;background-color:var(--maincolor)}#conversejs.theme-darkbeet #converse-modals .modal-body{background-color:var(--chat-content-background-color)}#conversejs.theme-darkbeet #converse-modals .form-control{color:#fff;background-color:var(--bodybg);border:1px solid var(--bodybg)}#conversejs.theme-darkbeet #converse-modals .modal-content{background-color:var(--bodybg)}#conversejs.theme-darkbeet #converse-modals .modal-footer{border-top:none}#conversejs.theme-darkbeet #converse-modals .list-group-item{background-color:var(--bodybg)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .current-xmpp-contact .chat-status{vertical-align:middle;font-size:1em;margin-right:0;margin-left:-.8em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle,#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle .fa{color:var(--maincolor)!important}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle .fa:hover,#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle:hover{color:var(--darkbeet-green)!important}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group li .open-chat .msgs-indicator{float:right;color:#fff;text-align:center;width:22px;background-color:var(--maincolor);border-radius:50%;padding:.5em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group li .open-chat:hover{background-color:var(--darkbeet)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar{background-color:var(--chat-content-background-color);box-sizing:border-box;color:var(--text-color);display:flex;justify-content:space-between;margin:0;width:100%}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas:hover{color:var(--font-head-color);font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa:hover svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far:hover svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas:hover svg{fill:var(--text-color)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted a{color:var(--text-color)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted .toolbar-menu a,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}#conversejs.theme-darkbeet .chat-toolbar .toolbar-buttons{width:100%;display:inline-block}#conversejs.theme-darkbeet .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}#conversejs.theme-darkbeet .chat-toolbar button{margin:.2em;padding-bottom:.25em;border:1px transparent solid;background-color:transparent}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa{color:gray}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa:hover{color:gray}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa svg,#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa svg:hover{fill:gray}#conversejs.theme-darkbeet .chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}#conversejs.theme-darkbeet .chat-toolbar .unverified,#conversejs.theme-darkbeet .chat-toolbar .unverified a{color:#cf5300}#conversejs.theme-darkbeet .chat-toolbar .private,#conversejs.theme-darkbeet .chat-toolbar .private a{color:#4b7003}#conversejs.theme-darkbeet .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}#conversejs.theme-darkbeet .chat-toolbar li:hover{cursor:pointer}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu{background-color:var(--chat-content-background-color);bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu a{color:var(--link-color)}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul{z-index:99}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li a{display:block}#conversejs.theme-darkbeet .chatbox .new-msgs-indicator{color:var(--chatroom-head-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar{border-top:var(--chatbox-message-input-border-top);color:var(--text-color);background-color:var(--chat-content-background-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .far,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fas:hover{color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar button:focus{outline-color:unset!important;color:var(--maincolor)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--text-color)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas:hover{color:var(--dark-link-color);font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa:hover svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far:hover svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--text-color)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar button:focus{outline-color:unset!important}#conversejs.theme-darkbeet .suggestion-box{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results,#conversejs.theme-darkbeet .suggestion-box>ul{position:absolute;left:0;right:0;z-index:2;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:rgba(37,36,36,.9);border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);text-shadow:none}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results:before,#conversejs.theme-darkbeet .suggestion-box>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:var(--maincolor);border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results>li,#conversejs.theme-darkbeet .suggestion-box>ul>li{text-overflow:ellipsis;overflow-x:hidden;position:relative;cursor:pointer;padding:1em} .conversejs #controlbox .bookmarks-toggle,.conversejs #controlbox .bookmarks-toggle .fa{color:var(--groupchats-header-color)!important}.conversejs #controlbox .bookmarks-toggle .fa:hover,.conversejs #controlbox .bookmarks-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}.conversejs.fullscreen #controlbox #chatrooms .bookmarks-list dl.rooms-list.bookmarks dd.available-chatroom a.open-room{width:80%} -.conversejs converse-chats.converse-chatboxes{z-index:1031;position:fixed;bottom:0;right:0}.conversejs converse-chats.converse-overlayed{height:3em}.conversejs converse-chats.converse-overlayed>.row{flex-direction:row-reverse}.conversejs converse-chats.converse-fullscreen,.conversejs converse-chats.converse-mobile{flex-wrap:nowrap;width:100vw}.conversejs converse-chats.converse-embedded{box-sizing:border-box;bottom:auto;height:100%;position:relative;right:auto;width:100%}.conversejs converse-chats.converse-embedded *,.conversejs converse-chats.converse-embedded :after,.conversejs converse-chats.converse-embedded :before{box-sizing:border-box}.conversejs converse-chats.converse-embedded.converse-chatboxes{z-index:1031;position:inherit;flex-wrap:nowrap;bottom:auto;height:100%;width:100%;margin-left:-15px} -.conversejs .modal-open{overflow:hidden}.conversejs .modal-open .modal{overflow-x:hidden;overflow-y:auto}.conversejs .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.conversejs .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .conversejs .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media(prefers-reduced-motion:reduce){.modal.fade .conversejs .modal-dialog{transition:none}}.modal.show .conversejs .modal-dialog{transform:none}.modal.modal-static .conversejs .modal-dialog{transform:scale(1.02)}.conversejs .modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.conversejs .modal-dialog-scrollable .modal-footer,.conversejs .modal-dialog-scrollable .modal-header{flex-shrink:0}.conversejs .modal-dialog-scrollable .modal-body{overflow-y:auto}.conversejs .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.conversejs .modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.conversejs .modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.conversejs .modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.conversejs .modal-dialog-centered.modal-dialog-scrollable::before{content:none}.conversejs .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.conversejs .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.conversejs .modal-backdrop.fade{opacity:0}.conversejs .modal-backdrop.show{opacity:.5}.conversejs .modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.conversejs .modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.conversejs .modal-title{margin-bottom:0;line-height:1.5}.conversejs .modal-body{position:relative;flex:1 1 auto;padding:1rem}.conversejs .modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.conversejs .modal-footer>*{margin:.25rem}.conversejs .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width:576px){.conversejs .modal-dialog{max-width:500px;margin:1.75rem auto}.conversejs .modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.conversejs .modal-dialog-centered{min-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.conversejs .modal-sm{max-width:300px}}@media(min-width:992px){.conversejs .modal-lg,.conversejs .modal-xl{max-width:800px}}@media(min-width:1200px){.conversejs .modal-xl{max-width:1140px}}.conversejs #converse-modals .modal{background-color:rgba(0,0,0,.4)}.conversejs #converse-modals .modal .modal-body{overflow-y:auto;max-height:75vh;margin-bottom:2em}.conversejs #converse-modals .modal .modal-body p{padding:.25rem 0}.conversejs #converse-modals .modal .modal-body .confirm .form-group p:first-child{font-size:110%;font-weight:700}.conversejs #converse-modals .modal .modal-body.fit-content{box-sizing:content-box}.conversejs #converse-modals .modal .modal-body.fit-content img{max-width:90vw}.conversejs #converse-modals .modal .modal-body--image .chat-image{max-height:99%;max-width:100%}.conversejs #converse-modals .modal .modal-footer{justify-content:flex-start}.conversejs #converse-modals .modal .roomid-policy-error{color:var(--error-color);font-size:var(--font-size-small);float:right}.conversejs #converse-modals .scrollable-container{max-height:45vh;overflow-y:auto}.conversejs #converse-modals .affiliation-form,.conversejs #converse-modals .role-form{padding:2em 0 1em 0}.conversejs #converse-modals .set-xmpp-status{margin:1em}.conversejs #converse-modals .set-xmpp-status .custom-control-label{padding-top:.25em}.conversejs #converse-modals #omemo-tabpanel{margin-top:1em}.conversejs #converse-modals .btn{font-weight:400}.conversejs #converse-modals #user-profile-modal .profile-form label{font-weight:700}.conversejs #converse-modals #user-profile-modal .fingerprint-removal label{display:flex;padding:.75rem 1.25rem}.conversejs #converse-modals #user-profile-modal .list-group-item{display:flex;justify-content:left;font-size:95%}.conversejs #converse-modals #user-profile-modal .list-group-item input[type=checkbox]{margin-right:1em}.conversejs #converse-modals .fingerprints{width:100%;margin-bottom:1em}.conversejs #converse-modals .fingerprint-trust{display:flex;justify-content:space-between;font-size:95%}.conversejs #converse-modals .fingerprint-trust .fingerprint{margin-left:1em} -.conversejs .card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.conversejs .card>hr{margin-right:0;margin-left:0}.conversejs .card>.list-group{border-top:inherit;border-bottom:inherit}.conversejs .card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card>.card-header+.list-group,.conversejs .card>.list-group+.card-footer{border-top:0}.conversejs .card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.conversejs .card-title{margin-bottom:.75rem}.conversejs .card-subtitle{margin-top:-.375rem;margin-bottom:0}.conversejs .card-text:last-child{margin-bottom:0}.conversejs .card-link:hover{text-decoration:none}.conversejs .card-link+.card-link{margin-left:1.25rem}.conversejs .card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.conversejs .card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.conversejs .card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.conversejs .card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.conversejs .card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.conversejs .card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.conversejs .card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom,.conversejs .card-img-top{flex-shrink:0;width:100%}.conversejs .card-img,.conversejs .card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card-deck .card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.conversejs .card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.conversejs .card-group>.card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-group{display:flex;flex-flow:row wrap}.conversejs .card-group>.card{flex:1 0 0%;margin-bottom:0}.conversejs .card-group>.card+.card{margin-left:0;border-left:0}.conversejs .card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-header,.conversejs .card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-footer,.conversejs .card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.conversejs .card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-header,.conversejs .card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-footer,.conversejs .card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.conversejs .card-columns .card{margin-bottom:.75rem}@media(min-width:576px){.conversejs .card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.conversejs .card-columns .card{display:inline-block;width:100%}}.conversejs .accordion{overflow-anchor:none}.conversejs .accordion>.card{overflow:hidden}.conversejs .accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.conversejs .accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.conversejs .accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.conversejs .message .card--unfurl{margin:1em 0}@media(max-width:767.98px){.conversejs .message .card--unfurl{max-width:95%}}@media(min-width:768px){.conversejs .message .card--unfurl{max-width:75%}}@media(min-width:992px){.conversejs .message .card--unfurl{max-width:66%}}@media(min-width:1200px){.conversejs .message .card--unfurl{max-width:50%}} +.conversejs converse-chats.converse-chatboxes{z-index:1031;position:fixed;bottom:0;right:0}.conversejs converse-chats.converse-overlayed{height:3em}.conversejs converse-chats.converse-overlayed>.row{flex-direction:row-reverse}.conversejs converse-chats.converse-fullscreen,.conversejs converse-chats.converse-mobile{flex-wrap:nowrap;width:100vw}.conversejs converse-chats.converse-embedded{box-sizing:border-box;bottom:auto;height:100%;position:relative;right:auto;width:100%}.conversejs converse-chats.converse-embedded *,.conversejs converse-chats.converse-embedded :after,.conversejs converse-chats.converse-embedded :before{box-sizing:border-box}.conversejs converse-chats.converse-embedded.converse-chatboxes{z-index:1031;position:inherit;flex-wrap:nowrap;bottom:auto;height:100%;width:100%} +.conversejs .modal-open{overflow:hidden}.conversejs .modal-open .modal{overflow-x:hidden;overflow-y:auto}.conversejs .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.conversejs .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .conversejs .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media(prefers-reduced-motion:reduce){.modal.fade .conversejs .modal-dialog{transition:none}}.modal.show .conversejs .modal-dialog{transform:none}.modal.modal-static .conversejs .modal-dialog{transform:scale(1.02)}.conversejs .modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.conversejs .modal-dialog-scrollable .modal-footer,.conversejs .modal-dialog-scrollable .modal-header{flex-shrink:0}.conversejs .modal-dialog-scrollable .modal-body{overflow-y:auto}.conversejs .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.conversejs .modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.conversejs .modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.conversejs .modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.conversejs .modal-dialog-centered.modal-dialog-scrollable::before{content:none}.conversejs .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.conversejs .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.conversejs .modal-backdrop.fade{opacity:0}.conversejs .modal-backdrop.show{opacity:.5}.conversejs .modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.conversejs .modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.conversejs .modal-title{margin-bottom:0;line-height:1.5}.conversejs .modal-body{position:relative;flex:1 1 auto;padding:1rem}.conversejs .modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.conversejs .modal-footer>*{margin:.25rem}.conversejs .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width:576px){.conversejs .modal-dialog{max-width:500px;margin:1.75rem auto}.conversejs .modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.conversejs .modal-dialog-centered{min-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.conversejs .modal-sm{max-width:300px}}@media(min-width:992px){.conversejs .modal-lg,.conversejs .modal-xl{max-width:800px}}@media(min-width:1200px){.conversejs .modal-xl{max-width:1140px}}.conversejs #converse-modals .modal .modal-body{overflow-y:auto;max-height:75vh;margin-bottom:2em}.conversejs #converse-modals .modal .modal-body p{padding:.25rem 0}.conversejs #converse-modals .modal .modal-body .confirm .form-group p:first-child{font-size:110%;font-weight:700}.conversejs #converse-modals .modal .modal-body.fit-content{box-sizing:content-box}.conversejs #converse-modals .modal .modal-body.fit-content img{max-width:90vw}.conversejs #converse-modals .modal .modal-body--image .chat-image{max-height:99%;max-width:100%}.conversejs #converse-modals .modal .modal-footer{justify-content:flex-start}.conversejs #converse-modals .modal .roomid-policy-error{color:var(--error-color);font-size:var(--font-size-small);float:right}.conversejs #converse-modals .scrollable-container{max-height:45vh;overflow-y:auto}.conversejs #converse-modals .affiliation-form,.conversejs #converse-modals .role-form{padding:2em 0 1em 0}.conversejs #converse-modals .set-xmpp-status{margin:1em}.conversejs #converse-modals .set-xmpp-status .custom-control-label{padding-top:.25em}.conversejs #converse-modals #omemo-tabpanel{margin-top:1em}.conversejs #converse-modals .btn{font-weight:400}.conversejs #converse-modals #user-profile-modal .profile-form label{font-weight:700}.conversejs #converse-modals #user-profile-modal .fingerprint-removal label{display:flex;padding:.75rem 1.25rem}.conversejs #converse-modals #user-profile-modal .list-group-item{display:flex;justify-content:left;font-size:95%}.conversejs #converse-modals #user-profile-modal .list-group-item input[type=checkbox]{margin-right:1em}.conversejs #converse-modals .fingerprints{width:100%;margin-bottom:1em}.conversejs #converse-modals .fingerprint-trust{display:flex;justify-content:space-between;font-size:95%}.conversejs #converse-modals .fingerprint-trust .fingerprint{margin-left:1em} +converse-message-actions{margin-left:.5em}converse-message-actions .chat-msg__actions .dropdown-menu{min-width:5rem}converse-message-actions .chat-msg__actions i{color:var(--text-color-lighten-15-percent);font-size:70%}converse-message-actions .chat-msg__actions button{border:none;background:0 0;color:var(--text-color-lighten-15-percent);padding:0 .25em}converse-message-actions .chat-msg__actions .btn--standalone{opacity:0;margin-top:-.2em}converse-message-actions .chat-msg__actions .chat-msg__action{width:100%;padding:.5em 1em;text-align:left;white-space:nowrap}converse-message-actions .chat-msg__actions .chat-msg__action converse-icon{margin-right:.25em}converse-message-actions .chat-msg__actions .chat-msg__action:hover{color:var(--text-color);background-color:var(--list-item-hover-color)} +converse-gif{display:block}img.gif{visibility:hidden}.gif-canvas{cursor:pointer;max-width:100%;max-height:100%;display:block}.gifcontrol{cursor:pointer;transition:background .25s ease-in-out;z-index:100;display:contents;position:relative}.gifcontrol:after{transition:background .25s ease-in-out;position:absolute;content:"";display:block;left:calc(50% - 25px);top:calc(50% - 25px)}.gifcontrol.loading{background:rgba(255,255,255,.75)}.gifcontrol.loading:after{background:#fff;width:50px;height:50px;border-radius:50px}.gifcontrol.playing:after{opacity:0;transition:opacity .25s ease-in-out;border-left:20px solid #fff;border-right:20px solid #fff;width:50px;height:50px}.gifcontrol.playing:hover:after{opacity:1}.gifcontrol.paused{background:rgba(255,255,255,.5)}.gifcontrol.paused:after{width:0;height:0;border-style:solid;border-width:25px 0 25px 50px;border-color:transparent transparent transparent #fff} +converse-chat-message-body audio{display:block}@media(max-width:767.98px){converse-chat-message-body audio{max-width:95%}}@media(min-width:768px){converse-chat-message-body audio{max-width:70%}}@media(min-width:992px){converse-chat-message-body audio{max-width:50%}}@media(min-width:1200px){converse-chat-message-body audio{max-width:40%}}converse-chat-message-body video{display:block;max-height:25em}@media(max-width:767.98px){converse-chat-message-body video{max-width:95%}}@media(min-width:768px){converse-chat-message-body video{max-width:70%}}@media(min-width:992px){converse-chat-message-body video{max-width:50%}}@media(min-width:1200px){converse-chat-message-body video{max-width:40%}}.converse-overlayed converse-chat-message-body audio{display:block;max-width:100%}.converse-overlayed converse-chat-message-body video{display:block;max-width:100%} +converse-icon{display:inline-block;padding:0;margin:0;fill:var(--subdued-color)}converse-icon:hover{fill:var(--text-color)} +.conversejs .dropdown,.conversejs .dropleft,.conversejs .dropright,.conversejs .dropup{position:relative}.conversejs .dropdown-toggle{white-space:nowrap}.conversejs .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.conversejs .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.conversejs .dropdown-menu-left{right:auto;left:0}.conversejs .dropdown-menu-right{right:0;left:auto}@media(min-width:576px){.conversejs .dropdown-menu-sm-left{right:auto;left:0}.conversejs .dropdown-menu-sm-right{right:0;left:auto}}@media(min-width:768px){.conversejs .dropdown-menu-md-left{right:auto;left:0}.conversejs .dropdown-menu-md-right{right:0;left:auto}}@media(min-width:992px){.conversejs .dropdown-menu-lg-left{right:auto;left:0}.conversejs .dropdown-menu-lg-right{right:0;left:auto}}@media(min-width:1200px){.conversejs .dropdown-menu-xl-left{right:auto;left:0}.conversejs .dropdown-menu-xl-right{right:0;left:auto}}.conversejs .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.conversejs .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.conversejs .dropup .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.conversejs .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.conversejs .dropright .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-toggle::after{vertical-align:0}.conversejs .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.conversejs .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.conversejs .dropleft .dropdown-toggle::after{display:none}.conversejs .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.conversejs .dropleft .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropleft .dropdown-toggle::before{vertical-align:0}.conversejs .dropdown-menu[x-placement^=bottom],.conversejs .dropdown-menu[x-placement^=left],.conversejs .dropdown-menu[x-placement^=right],.conversejs .dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.conversejs .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.conversejs .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.conversejs .dropdown-item:focus,.conversejs .dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.conversejs .dropdown-item.active,.conversejs .dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.conversejs .dropdown-item.disabled,.conversejs .dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.conversejs .dropdown-menu.show{display:block}.conversejs .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.conversejs .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.conversejs converse-dropdown.dropup.dropup--left .dropdown-menu{right:100%;left:auto}.conversejs converse-dropdown .btn--standalone{padding:0 .2em;margin:0}.conversejs converse-dropdown .dropdown-menu{margin-top:-.2em!important}.conversejs converse-dropdown .dropdown-item{padding:.5rem 1rem}.conversejs converse-dropdown .dropdown-item .fa{width:1.25em;margin-right:.75rem}.conversejs converse-dropdown .dropdown-item.selected,.conversejs converse-dropdown .dropdown-item:active{color:#fff!important;background-color:var(--list-item-open-color)}.conversejs converse-dropdown .dropdown-item.selected .fa,.conversejs converse-dropdown .dropdown-item:active .fa{color:#fff!important} +.conversejs .card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.conversejs .card>hr{margin-right:0;margin-left:0}.conversejs .card>.list-group{border-top:inherit;border-bottom:inherit}.conversejs .card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card>.card-header+.list-group,.conversejs .card>.list-group+.card-footer{border-top:0}.conversejs .card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.conversejs .card-title{margin-bottom:.75rem}.conversejs .card-subtitle{margin-top:-.375rem;margin-bottom:0}.conversejs .card-text:last-child{margin-bottom:0}.conversejs .card-link:hover{text-decoration:none}.conversejs .card-link+.card-link{margin-left:1.25rem}.conversejs .card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.conversejs .card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.conversejs .card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.conversejs .card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.conversejs .card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.conversejs .card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.conversejs .card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom,.conversejs .card-img-top{flex-shrink:0;width:100%}.conversejs .card-img,.conversejs .card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card-deck .card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.conversejs .card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.conversejs .card-group>.card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-group{display:flex;flex-flow:row wrap}.conversejs .card-group>.card{flex:1 0 0%;margin-bottom:0}.conversejs .card-group>.card+.card{margin-left:0;border-left:0}.conversejs .card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-header,.conversejs .card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-footer,.conversejs .card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.conversejs .card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-header,.conversejs .card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-footer,.conversejs .card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.conversejs .card-columns .card{margin-bottom:.75rem}@media(min-width:576px){.conversejs .card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.conversejs .card-columns .card{display:inline-block;width:100%}}.conversejs .accordion{overflow-anchor:none}.conversejs .accordion>.card{overflow:hidden}.conversejs .accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.conversejs .accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.conversejs .accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{margin:1em 0}@media(max-width:767.98px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:95%}}@media(min-width:768px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:75%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:66%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:50%}}.conversejs converse-chats.converse-mobile .message .card--unfurl,.conversejs converse-chats.converse-overlayed .message .card--unfurl{margin:1em 0;max-width:95%} +converse-chat-message .message.chat-msg--retracted .chat-msg__message{color:var(--subdued-color)} converse-chat-content{display:flex;flex-direction:column-reverse;height:100%;justify-content:space-between;overflow:auto} .conversejs .media{display:flex;align-items:flex-start}.conversejs .media-body{flex:1}.conversejs .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}.conversejs .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}.conversejs .chatbox converse-emoji-dropdown{display:inline-block}.conversejs .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}.conversejs .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--chat-head-color);overflow-y:hidden;background:#fff}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--chat-head-color);width:100%;font-size:var(--font-size)}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}.conversejs .chatbox converse-emoji-picker .emoji-picker{background-color:#fff;padding:.5em 0 0 .5em}.conversejs .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}.conversejs .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header{width:100%;display:flex;flex-direction:column;padding:.1em 0;background-color:var(--chat-head-color)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:#fff;border:1px var(--chat-head-color) solid;border-bottom:none}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}.conversejs .chatroom converse-emoji-picker{background-color:var(--chatroom-head-bg-color);background:#fff}.conversejs .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--chatroom-head-bg-color)}.conversejs .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--chatroom-head-bg-color)}.conversejs .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}.conversejs converse-chats.converse-overlayed converse-emoji-dropdown .dropdown-menu{min-width:18em}.conversejs converse-chats.converse-overlayed .chatbox .emoji-picker__header .emoji-category img{height:var(--font-size)!important;width:var(--font-size)!important}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji a{font-size:var(--font-size);line-height:calc(var(--font-size) * 1.5);padding:0;height:calc(var(--font-size) * 1.5);width:calc(var(--font-size) * 1.5)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji img{height:var(--font-size);width:var(--font-size)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-skintone-picker{font-size:var(--font-size-small)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__header .emoji-category{font-size:var(--font-size-small)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__lists{height:7em}.conversejs converse-chats.converse-embedded converse-emoji-dropdown .dropdown-menu{min-width:20em}.conversejs converse-chats.converse-fullscreen converse-emoji-dropdown .dropdown-menu{min-width:22em}.conversejs converse-chats.converse-fullscreen .chatbox converse-emoji-picker .emoji-picker__lists{height:12em}.conversejs .chatbox converse-emoji-picker{max-width:40em} .conversejs .send-button{border-radius:0;bottom:var(--send-button-bottom);color:var(--inverse-link-color)}.conversejs .chatbox .send-button{background-color:var(--chat-head-color)}.conversejs .chatroom .send-button{background-color:var(--muc-toolbar-btn-color)}.conversejs .chat-toolbar .toolbar-buttons{width:100%}.conversejs .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}.conversejs .chat-toolbar .toolbar-buttons *{float:left}.conversejs .chat-toolbar .toolbar-buttons .right{float:right}.conversejs .chat-toolbar .unverified,.conversejs .chat-toolbar .unverified a{color:#cf5300}.conversejs .chat-toolbar .private,.conversejs .chat-toolbar .private a{color:#4b7003}.conversejs .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}.conversejs .chat-toolbar li:hover{cursor:pointer}.conversejs .chat-toolbar li .toolbar-menu{background-color:#fff;bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}.conversejs .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}.conversejs .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}.conversejs .chat-toolbar li .toolbar-menu a{color:var(--link-color)}.conversejs .chat-toolbar li.toggle-otr ul{z-index:99}.conversejs .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}.conversejs .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}.conversejs .chat-toolbar li.toggle-otr ul li a{display:block}.conversejs converse-chat-toolbar{background-color:#fff;box-sizing:border-box;display:flex;justify-content:space-between;margin:0;width:100%}.conversejs converse-chat-toolbar .fa,.conversejs converse-chat-toolbar .fa:hover,.conversejs converse-chat-toolbar .far,.conversejs converse-chat-toolbar .far:hover,.conversejs converse-chat-toolbar .fas,.conversejs converse-chat-toolbar .fas:hover{color:var(--chat-head-color);font-size:var(--font-size-large)}.conversejs converse-chat-toolbar .fa svg,.conversejs converse-chat-toolbar .fa:hover svg,.conversejs converse-chat-toolbar .far svg,.conversejs converse-chat-toolbar .far:hover svg,.conversejs converse-chat-toolbar .fas svg,.conversejs converse-chat-toolbar .fas:hover svg{fill:var(--chat-head-color)}.conversejs converse-chat-toolbar .unencrypted,.conversejs converse-chat-toolbar .unencrypted a{color:var(--text-color)}.conversejs converse-chat-toolbar .unencrypted .toolbar-menu a,.conversejs converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}.conversejs converse-chat-toolbar button{margin-top:.4em;border:1px transparent solid;background-color:transparent}.conversejs converse-chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}.conversejs .chatbox converse-chat-toolbar{border-top:var(--chatbox-message-input-border-top);color:var(--chat-toolbar-btn-color);background-color:#fff}.conversejs .chatbox converse-chat-toolbar .fa,.conversejs .chatbox converse-chat-toolbar .fa:hover,.conversejs .chatbox converse-chat-toolbar .far,.conversejs .chatbox converse-chat-toolbar .far:hover,.conversejs .chatbox converse-chat-toolbar .fas,.conversejs .chatbox converse-chat-toolbar .fas:hover{color:var(--chat-toolbar-btn-color)}.conversejs .chatbox converse-chat-toolbar button:focus{outline-color:var(--chat-toolbar-btn-color)!important}.conversejs .chatbox converse-chat-toolbar button:disabled .fa{color:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatbox converse-chat-toolbar button:disabled .fa:hover{color:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatbox converse-chat-toolbar button:disabled .fa svg,.conversejs .chatbox converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--muc-toolbar-btn-color)}.conversejs .chatroom converse-chat-toolbar .fa,.conversejs .chatroom converse-chat-toolbar .fa:hover,.conversejs .chatroom converse-chat-toolbar .far,.conversejs .chatroom converse-chat-toolbar .far:hover,.conversejs .chatroom converse-chat-toolbar .fas,.conversejs .chatroom converse-chat-toolbar .fas:hover{color:var(--muc-toolbar-btn-color);font-size:var(--font-size-large)}.conversejs .chatroom converse-chat-toolbar .fa svg,.conversejs .chatroom converse-chat-toolbar .fa:hover svg,.conversejs .chatroom converse-chat-toolbar .far svg,.conversejs .chatroom converse-chat-toolbar .far:hover svg,.conversejs .chatroom converse-chat-toolbar .fas svg,.conversejs .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--muc-toolbar-btn-color)}.conversejs .chatroom converse-chat-toolbar button:focus{outline-color:var(--muc-toolbar-btn-color)!important}.conversejs .chatroom converse-chat-toolbar button:disabled .fa{color:var(--muc-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar button:disabled .fa:hover{color:var(--muc-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar button:disabled .fa svg,.conversejs .chatroom converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--muc-toolbar-btn-disabled-color)}.conversejs converse-chats.converse-overlayed .chat-toolbar li .toolbar-menu{min-width:235px}.conversejs converse-chats.converse-overlayed .chatroom .chat-toolbar li .toolbar-menu{min-width:280px} .conversejs .chatbox .chat-head{display:flex;flex-direction:row;color:#fff;font-size:100%;margin:0;padding:0;position:relative}.conversejs .chatbox .chat-head.chat-head-chatbox{background-color:var(--chat-head-color)}.conversejs .chatbox .chat-head .avatar{margin-right:.5em}.conversejs .chatbox .chat-head .show-msg-author-modal{color:#fff!important}.conversejs .chatbox .chat-head .chat-head__desc{color:var(--chat-head-color-lighten-50-percent);font-size:var(--font-size-small);margin:0;overflow:hidden;padding:.5rem 1rem .5rem 1rem;text-overflow:ellipsis;width:100%;max-height:5em}.conversejs .chatbox .chat-head .chatbox-title{padding:.75rem 1rem 0 1rem;display:flex;flex-direction:row;justify-content:space-between;width:100%}.conversejs .chatbox .chat-head .chatbox-title--no-desc{padding:.75rem 1rem}.conversejs .chatbox .chat-head .chatbox-title--row{display:flex;flex-direction:row;overflow:hidden}.conversejs .chatbox .chat-head .chatbox-title__text{overflow:hidden;text-overflow:ellipsis}.conversejs .chatbox .chat-head .chatbox-title__buttons{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;padding:0}.conversejs .chatbox .chat-head a.chatbox-btn.fa,.conversejs .chatbox .chat-head a.chatbox-btn.far,.conversejs .chatbox .chat-head a.chatbox-btn.fas,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fa,.conversejs .chatbox .chat-head a:hover.chatbox-btn.far,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fas,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.far,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fa,.conversejs .chatbox .chat-head a:visited.chatbox-btn.far,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fas{color:#fff}.conversejs .chatbox .chat-head a.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a.chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fas.button-on:before{padding:.2em;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}.conversejs .chatbox .chat-head .chatbox-btn{color:#fff}.conversejs .chatbox .chat-head .chatbox-btn.fa,.conversejs .chatbox .chat-head .chatbox-btn.far,.conversejs .chatbox .chat-head .chatbox-btn.fas{color:#fff}.conversejs .chatbox .chat-head .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .chat-head .chatbox-btn.button-on:before{border-radius:5%;background-color:var(--chat-head-text-color);color:var(--chat-head-color)} -.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox .bottom-panel .chat-content-sendbutton{height:calc(100% - (var(--chat-textarea-height) + var(--send-button-height) + 2 * var(--send-button-margin)))}.conversejs .chatbox .bottom-panel .sendXMPPMessage{-moz-background-clip:padding;-webkit-background-clip:padding-box;border-bottom-radius:var(--chatbox-border-radius);background-clip:padding-box;background-color:#fff;border:0;margin:0;padding:0}@media screen and (max-height:450px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}@media screen and (max-width:480px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}.conversejs .chatbox .bottom-panel .sendXMPPMessage .suggestion-box__results:after{display:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .spoiler-hint{width:100%}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:focus,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:focus{outline-color:var(--chat-head-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.correcting,.conversejs .chatbox .bottom-panel .sendXMPPMessage input.correcting{background-color:var(--chat-correcting-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);border-top-left-radius:0;border-top-right-radius:0;border-bottom-radius:var(--chatbox-border-radius);padding-left:.5em;padding-right:4.5em;padding-top:.5em;padding-bottom:.5em;width:100%;border:none;min-height:var(--chat-textarea-height);margin-bottom:-4px;resize:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.spoiler{height:42px} -.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.media{display:flex;align-items:flex-start}.media-body{flex:1}.conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}.conversejs .chatbox converse-controlbox-navback{display:none}.conversejs .chatbox .flyout{position:absolute}@media screen and (max-height:450px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-height:450px){.conversejs .chatbox .flyout{bottom:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{bottom:0}}.conversejs .chatbox .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}.conversejs .chatbox .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}.conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}.conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-textarea-background-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}.conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}.conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}.conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}.conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}.conversejs .chatbox .chat-content .chat-content__help{max-height:100%}.conversejs .chatbox .chat-content .chat-content__help converse-chat-help{border-top:1px solid var(--chat-head-color);display:block;height:100%;overflow-y:auto;padding:.5em 0}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}.conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}.conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}.conversejs .chatbox .chat-content .chat-content__notifications:before{content:" "}.conversejs .chatbox .chat-content video{width:100%}.conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}.conversejs .chatbox .dropdown{background-color:var(--light-background-color)}.conversejs .chatbox .dropdown dd{margin:0;padding:0;position:relative}.conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}.conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}.conversejs .chatbox .dragresize-left,.conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}.conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}.conversejs converse-chats.converse-embedded .controlbox-head,.conversejs converse-chats.converse-overlayed .controlbox-head{padding:.5em}.conversejs converse-chats.converse-embedded .chat-head,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-overlayed .chatbox{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-embedded .chatbox .box-flyout,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius)}@media screen and (max-height:450px){.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}@media screen and (max-width:480px){.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}.conversejs converse-chats.converse-overlayed .flyout{bottom:var(--overlayed-chatbox-hover-height)}.conversejs converse-chats.converse-overlayed .box-flyout{height:var(--overlayed-chat-height);min-height:calc(var(--overlayed-chat-height)/ 2)}.conversejs converse-chats.converse-overlayed .chat-head{min-height:var(--overlayed-chat-head-height)}.conversejs converse-chats.converse-overlayed .minimized-chats-flyout .chat-head{cursor:default}.conversejs converse-chats.converse-overlayed .chat-textarea{max-height:var(--overlayed-max-chat-textarea-height)}.conversejs converse-chats.converse-overlayed .chatbox .chat-body{height:calc(100% - var(--overlayed-chat-head-height))}.conversejs converse-chats.converse-overlayed .chatbox .chatbox-title{padding:.5rem .75rem 0 .75rem}.conversejs converse-chats.converse-overlayed .chatbox .chatbox-title--no-desc{padding:.5rem .75rem}.conversejs converse-chats.converse-overlayed .chatbox converse-dropdown .btn--standalone{padding:0 .2em;margin:0 0 0 .5em}@media(max-width:767.98px){.conversejs.converse-overlayed>.row{flex-direction:column}.conversejs.converse-overlayed>.row.no-gutters{margin:-1em}}.conversejs converse-chats.converse-embedded .flyout,.conversejs converse-chats.converse-fullscreen .flyout{border-radius:0;border:none;bottom:0}.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-fullscreen .chatbox{margin:0;margin-left:15px}.conversejs converse-chats.converse-embedded .chatbox .box-flyout,.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout{box-shadow:none;overflow:hidden}@media(min-width:768px){.conversejs converse-chats.converse-embedded .chatbox:not(#controlbox) .box-flyout,.conversejs converse-chats.converse-fullscreen .chatbox:not(#controlbox) .box-flyout{max-width:66.666667%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded .chatbox:not(#controlbox) .box-flyout,.conversejs converse-chats.converse-fullscreen .chatbox:not(#controlbox) .box-flyout{max-width:75%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded .chatbox:not(#controlbox) .box-flyout,.conversejs converse-chats.converse-fullscreen .chatbox:not(#controlbox) .box-flyout{max-width:83.333333%}}@media(min-width:768px){.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-fullscreen .chatbox{flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-fullscreen .chatbox{flex:0 0 75%;max-width:75%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-fullscreen .chatbox{flex:0 0 83.3333333333%;max-width:83.3333333333%}}.conversejs converse-chats.converse-embedded.converse-singleton .flyout,.conversejs converse-chats.converse-fullscreen.converse-singleton .flyout{border:none!important}.conversejs converse-chats.converse-embedded.converse-singleton .chat-head,.conversejs converse-chats.converse-fullscreen.converse-singleton .chat-head{padding:.5em}.conversejs converse-chats.converse-embedded.converse-singleton .chatbox,.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{margin:0;position:relative;width:100%;padding-right:15px;padding-left:15px}@media(min-width:768px){.conversejs converse-chats.converse-embedded.converse-singleton .chatbox,.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded.converse-singleton .chatbox,.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded.converse-singleton .chatbox,.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}.conversejs converse-chats.converse-embedded .chat-head{font-size:var(--font-size-huge)}.conversejs converse-chats.converse-embedded .chatbox .box-flyout{bottom:0;height:100%;min-width:auto;width:100%}.conversejs converse-chats.converse-embedded .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}.conversejs converse-chats.converse-fullscreen .chatbox-btn{font-size:var(--fullpage-chatbox-button-size);margin:0 .3em}.conversejs converse-chats.converse-fullscreen .chat-head{font-size:var(--font-size-huge)}.conversejs converse-chats.converse-fullscreen .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout{box-shadow:none;height:var(--fullpage-chat-height);min-height:calc(var(--fullpage-chat-height)/ 2);width:var(--fullpage-chat-width);overflow:hidden}.conversejs converse-chats.converse-fullscreen .chatbox .chat-body{height:inherit;overflow:hidden;background-color:var(--chat-background-color)}.conversejs converse-chats.converse-fullscreen .chatbox .chat-title{font-size:var(--font-size-huge);line-height:var(--line-height-huge)}.conversejs converse-chats.converse-fullscreen .chatbox .sendXMPPMessage ul{width:100%}@media(max-width:767.98px){.conversejs converse-chats:not(.converse-embedded)>.row{flex-direction:row-reverse}.conversejs converse-chats:not(.converse-embedded) #converse-login-panel .converse-form{padding:3em 2em 3em}.conversejs converse-chats:not(.converse-embedded) .chatbox{width:calc(100% - 50px)}.conversejs converse-chats:not(.converse-embedded) .chatbox .row .box-flyout{left:50px;bottom:0;height:var(--fullpage-chat-height);box-shadow:none}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout converse-controlbox-navback,.conversejs converse-chats.converse-mobile .chatbox .box-flyout converse-controlbox-navback,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout converse-controlbox-navback{margin:auto 0;margin-right:1em;display:flex}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before,.conversejs converse-chats.converse-mobile .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before{color:var(--chat-head-text-color)}} -.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .oauth-providers{text-align:center}.conversejs .oauth-providers .oauth-provider{margin:1em 0}.conversejs .oauth-providers .oauth-provider .oauth-login{margin-left:0;color:var(--link-color);font-size:var(--font-size-large)}.conversejs .oauth-providers .oauth-provider .oauth-login:hover{color:var(--link-hover-color)}.conversejs .oauth-providers .oauth-provider .oauth-login i{color:var(--link-color);font-size:var(--font-size-huge);margin-right:.5em}.conversejs .set-xmpp-status .chat-status--online,.conversejs .xmpp-status .chat-status--online{color:var(--chat-status-online)}.conversejs .set-xmpp-status .chat-status--busy,.conversejs .xmpp-status .chat-status--busy{color:var(--chat-status-busy)}.conversejs .set-xmpp-status .chat-status--away,.conversejs .xmpp-status .chat-status--away{color:var(--chat-status-away)}.conversejs .set-xmpp-status .fa-times-circle,.conversejs .set-xmpp-status .far.fa-circle,.conversejs .xmpp-status .fa-times-circle,.conversejs .xmpp-status .far.fa-circle{color:var(--subdued-color)}.conversejs .set-xmpp-status .chat-status{padding-right:.5em}.conversejs .room-info{font-size:var(--font-size-small);font-style:normal;font-weight:400}.conversejs .room-info li.room-info{display:block;margin-left:5px}.conversejs .room-info p.room-info{line-height:var(--line-height);margin:0;display:block;white-space:normal}.conversejs div.room-info{padding:.3em 0;clear:left;width:100%}.conversejs #controlbox{order:-1;color:var(--controlbox-text-color);margin-right:calc(3 * var(--chat-gutter))}.conversejs #controlbox converse-brand-logo{width:100%;display:block}.conversejs #controlbox converse-brand-heading{width:100%;display:block}.conversejs #controlbox .brand-name-wrapper{font-size:200%}.conversejs #controlbox .brand-name-wrapper--fullscreen{font-size:100%}.conversejs #controlbox .open-rooms-toggle,.conversejs #controlbox .open-rooms-toggle .fa{color:var(--groupchats-header-color)!important}.conversejs #controlbox .open-rooms-toggle .fa:hover,.conversejs #controlbox .open-rooms-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}.conversejs #controlbox .box-flyout{background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox.logged-out .box-flyout .controlbox-pane{overflow-y:auto}.conversejs #controlbox form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}.conversejs #controlbox form.search-xmpp-contact input{width:8em}.conversejs #controlbox .msgs-indicator{margin-right:.5em}.conversejs #controlbox a.subscribe-to-user{padding-left:2em;font-weight:700}.conversejs #controlbox #converse-register{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox #converse-register .title{font-weight:700}.conversejs #controlbox #converse-register .info{color:green;font-size:90%;margin:1.5em 0}.conversejs #controlbox #converse-register .form-errors{color:var(--error-color);margin:1em 0}.conversejs #controlbox #converse-register .provider-title{font-size:var(--font-size-huge);margin:0}.conversejs #controlbox #converse-register .provider-score{width:178px;margin-bottom:8px}.conversejs #controlbox #converse-register .form-help .url{font-weight:700;color:var(--link-color)}.conversejs #controlbox #converse-register .input-group{display:table;margin:auto;width:100%}.conversejs #controlbox #converse-register .input-group span{overflow-x:hidden;text-overflow:ellipsis;max-width:110px}.conversejs #controlbox #converse-register .input-group input[name=username],.conversejs #controlbox #converse-register .input-group span{display:table-cell;text-align:left}.conversejs #controlbox #converse-register .instructions{color:gray;font-size:85%}.conversejs #controlbox #converse-register .instructions:hover{color:var(--controlbox-text-color)}.conversejs #controlbox .conn-feedback{color:var(--controlbox-head-color)}.conversejs #controlbox .conn-feedback.error{color:var(--error-color)}.conversejs #controlbox .conn-feedback p{padding-bottom:1em}.conversejs #controlbox .conn-feedback p.feedback-subject.error{font-weight:700}.conversejs #controlbox #converse-login-panel,.conversejs #controlbox #converse-register-panel{padding-top:0;padding-bottom:0}.conversejs #controlbox #converse-login-panel{flex-direction:row}.conversejs #controlbox .toggle-register-login{font-weight:700}.conversejs #controlbox .controlbox-pane .userinfo{padding-bottom:1em}.conversejs #controlbox .controlbox-pane .userinfo .username{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.conversejs #controlbox .controlbox-pane .userinfo .profile{margin-bottom:.75em}.conversejs #controlbox #chatrooms{padding:0}.conversejs #controlbox #chatrooms .add-chatroom{margin:0;padding:0}.conversejs #controlbox #chatrooms .add-chatroom input[type=button],.conversejs #controlbox #chatrooms .add-chatroom input[type=submit],.conversejs #controlbox #chatrooms .add-chatroom input[type=text]{width:100%}.conversejs #controlbox .controlbox-section .controlbox-heading{font-family:var(--heading-font);color:var(--controlbox-heading-color);font-weight:var(--controlbox-heading-font-weight);padding:0;font-size:1.1em;line-height:1.1em;text-transform:uppercase}.conversejs #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--groupchats-header-color)}.conversejs #controlbox .controlbox-section .controlbox-heading--contacts{color:var(--chat-head-color-dark)}.conversejs #controlbox .controlbox-section .controlbox-heading--headline{color:var(--headline-head-color)}.conversejs #controlbox .controlbox-section .controlbox-heading__btn{cursor:pointer;font-size:1em;padding:0;margin:var(--controlbox-heading-top-margin) 0 var(--inline-action-margin) 0;min-width:25px;text-align:center}.conversejs #controlbox .controlbox-section .controlbox-heading__btn.fa-vcard{margin-top:1em}.conversejs #controlbox .dropdown a{width:143px;display:inline-block}.conversejs #controlbox .dropdown li{list-style:none;padding-left:0}.conversejs #controlbox .dropdown dd ul{padding:0;list-style:none;position:absolute;left:0;top:0;width:100%;z-index:21;background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dd ul li:hover{background-color:var(--highlight-color)}.conversejs #controlbox .dropdown dd.search-xmpp{height:0}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container{position:absolute;z-index:22}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container form{box-shadow:1px 4px 10px 1px rgba(0,0,0,.4);background-color:#fff}.conversejs #controlbox .dropdown dd.search-xmpp li:hover{background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dt a span{cursor:pointer;display:block;padding:4px 7px 0 5px}.conversejs #controlbox .controlbox-panes{background-color:var(--controlbox-pane-background-color);border-right:.2143rem solid var(--panel-divider-color);height:100%;overflow-y:auto}.conversejs #controlbox .controlbox-subtitle{font-size:90%;padding:.5em;text-align:right}.conversejs #controlbox .controlbox-pane{background-color:var(--controlbox-pane-background-color);border:0;font-size:var(--font-size);left:0;text-align:left;overflow-x:hidden;padding:0 0 1em 0}.conversejs #controlbox .controlbox-pane .controlbox-padded{padding-left:1em;padding-right:1em;align-items:center;line-height:normal}.conversejs #controlbox .controlbox-pane .controlbox-padded .change-status{min-width:25px;text-align:center}.conversejs #controlbox .controlbox-pane .add-converse-contact{margin:0 0 .75em 0}.conversejs #controlbox .controlbox-pane .chatbox-btn{margin:0}.conversejs #controlbox .controlbox-pane .switch-form{text-align:center;padding:2em 0}.conversejs #controlbox .controlbox-pane dd{margin-left:0;margin-bottom:0}.conversejs #controlbox .controlbox-pane dd.odd{background-color:#dceac5}.conversejs #controlbox .add-xmpp-contact{padding:1em .5em}.conversejs #controlbox .add-xmpp-contact input{margin:0 0 1rem;width:100%}.conversejs #controlbox .add-xmpp-contact button{width:100%}.conversejs converse-chats.converse-overlayed{display:flex;flex-direction:row-reverse}.conversejs converse-chats.converse-overlayed .toggle-controlbox{order:-2;text-align:center;background-color:var(--link-color);border-top-left-radius:var(--button-border-radius);border-top-right-radius:var(--button-border-radius);color:#0a0a0a;float:right;height:100%;margin:0 var(--chat-gutter);padding:1em}.conversejs converse-chats.converse-overlayed .toggle-controlbox span{color:var(--inverse-link-color)}.conversejs converse-chats.converse-overlayed #controlbox{order:-1;min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .box-flyout{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .login-trusted{white-space:nowrap;font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-trusted{margin-top:.5em}.conversejs converse-chats.converse-overlayed #controlbox:not(.logged-out) .controlbox-head{height:15px}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:space-between;min-height:0}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .brand-heading{color:var(--controlbox-text-color);font-size:2em}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .chatbox-btn{color:var(--controlbox-head-color);margin:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-login,.conversejs converse-chats.converse-overlayed #controlbox #converse-register{flex:0 0 100%;max-width:100%;padding-bottom:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-register .button-cancel{font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{border-radius:var(--chatbox-border-radius)}.conversejs converse-chats.converse-embedded .toggle-controlbox,.conversejs converse-chats.converse-fullscreen .toggle-controlbox{display:none}.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{position:relative;width:100%;padding-right:15px;padding-left:15px;margin:0}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%}.conversejs converse-chats.converse-embedded #controlbox .flyout,.conversejs converse-chats.converse-fullscreen #controlbox .flyout,.conversejs converse-chats.converse-mobile #controlbox .flyout{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel .converse-form{padding:3em 2em 3em}.conversejs converse-chats.converse-embedded #controlbox .toggle-register-login,.conversejs converse-chats.converse-fullscreen #controlbox .toggle-register-login,.conversejs converse-chats.converse-mobile #controlbox .toggle-register-login{line-height:var(--line-height-huge)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo{flex:0 0 100%;max-width:100%;margin-top:5em;margin-bottom:1em}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{width:100%;font-size:500%;padding:.7em 0 0 0;opacity:.8;color:var(--brand-heading-color)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-subtitle{font-size:90%;padding:.5em}@media screen and (max-width:480px){.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{font-size:300%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%;opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;width:100%}.conversejs converse-chats.converse-embedded #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-mobile #controlbox.logged-out .box-flyout{width:100%}.conversejs converse-chats.converse-embedded #controlbox .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout,.conversejs converse-chats.converse-mobile #controlbox .box-flyout{border:0;width:100%;z-index:1;background-color:var(--controlbox-head-color)}.conversejs converse-chats.converse-embedded #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-mobile #controlbox .box-flyout .controlbox-head{display:none}.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{position:relative;width:100%;padding-right:15px;padding-left:15px;flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}@media(min-width:576px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 50%;max-width:50%;margin-left:25%}}.conversejs converse-chats.converse-embedded #controlbox #converse-login .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-login .title,.conversejs converse-chats.converse-embedded #controlbox #converse-register .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-register .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .title,.conversejs converse-chats.converse-mobile #controlbox #converse-login .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-login .title,.conversejs converse-chats.converse-mobile #controlbox #converse-register .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-register .title{margin:1em 0}.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=submit]{width:auto}.conversejs converse-chats.converse-fullscreen #controlbox{margin-left:-15px}.conversejs converse-chats.converse-fullscreen .controlbox-panes{padding-top:2em}.conversejs converse-chats.converse-overlayed .brand-heading{padding-top:.8rem;padding-left:.8rem;width:100%}.conversejs converse-chats.converse-overlayed .converse-svg-logo{height:1em}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-panel{height:100%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{margin-top:.5em}@media(max-width:767.98px){.conversejs{left:0;right:0;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.conversejs .converse-chatboxes{margin:0!important;flex-direction:row!important;justify-content:space-between}.conversejs .converse-chatboxes .converse-chatroom{font-size:14px}.conversejs .converse-chatboxes .chatbox .box-flyout{margin-left:15px;left:0;bottom:0;border-radius:0;width:100vw!important;height:var(--fullpage-chat-height)}.conversejs .converse-chatboxes #controlbox{width:100vw!important}.conversejs .converse-chatboxes #controlbox .box-flyout{width:100vw!important;height:var(--fullpage-chat-height);margin-right:-15px}.conversejs .converse-chatboxes #controlbox .sidebar{display:block}.conversejs .converse-chatboxes.sidebar-open .chatbox:not(#controlbox){display:none}.conversejs .converse-chatboxes.sidebar-open #controlbox .controlbox-pane{display:block}} -body.converse-fullscreen{margin:0;background-color:var(--global-background-color)} -.conversejs-bg .subdued{opacity:.35}.conversejs-bg .converse-brand{display:flex;justify-content:space-between;margin-top:15vh;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media(min-width:768px){.conversejs-bg .converse-brand__padding{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.conversejs-bg .converse-brand__padding{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.conversejs-bg .converse-brand__padding{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media(min-width:768px){.conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 75%;max-width:75%}}@media(min-width:1200px){.conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}.conversejs-bg .converse-brand__heading svg{margin-top:.3em}.conversejs-bg .converse-brand__text{color:#fff;font-family:var(--branding-font);font-weight:400;text-align:center;font-size:140%;margin-left:.2em}.conversejs-bg .converse-brand__text .byline{margin:0;font-family:var(--heading-font);font-size:.3em;opacity:.55;margin-bottom:2em;margin-left:-2.7em;word-spacing:5px} +#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox .bottom-panel .chat-content-sendbutton{height:calc(100% - (var(--chat-textarea-height) + var(--send-button-height) + 2 * var(--send-button-margin)))}.conversejs .chatbox .bottom-panel .sendXMPPMessage{-moz-background-clip:padding;-webkit-background-clip:padding-box;border-bottom-radius:var(--chatbox-border-radius);background-clip:padding-box;background-color:#fff;border:0;margin:0;padding:0}@media screen and (max-height:450px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}@media screen and (max-width:480px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}.conversejs .chatbox .bottom-panel .sendXMPPMessage .suggestion-box__results:after{display:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .spoiler-hint{width:100%}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:focus,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:focus{outline-color:var(--chat-head-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.correcting,.conversejs .chatbox .bottom-panel .sendXMPPMessage input.correcting{background-color:var(--chat-correcting-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);border-top-left-radius:0;border-top-right-radius:0;border-bottom-radius:var(--chatbox-border-radius);padding-left:.5em;padding-right:4.5em;padding-top:.5em;padding-bottom:.5em;width:100%;border:none;min-height:var(--chat-textarea-height);margin-bottom:-4px;resize:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.spoiler{height:42px} +#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.media{display:flex;align-items:flex-start}.media-body{flex:1}.conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}.conversejs .chatbox converse-controlbox-navback{display:none}.conversejs .chatbox .flyout{position:absolute}@media screen and (max-height:450px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-height:450px){.conversejs .chatbox .flyout{bottom:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{bottom:0}}.conversejs .chatbox .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}.conversejs .chatbox .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}.conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}.conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-textarea-background-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}.conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}.conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}.conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}.conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}.conversejs .chatbox .chat-content .chat-content__help{max-height:100%}.conversejs .chatbox .chat-content .chat-content__help converse-chat-help{border-top:1px solid var(--chat-head-color);display:block;height:100%;overflow-y:auto;padding:.5em 0}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}.conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}.conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}.conversejs .chatbox .chat-content .chat-content__notifications:before{content:" "}.conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}.conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}.conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}.conversejs .chatbox .dragresize-left,.conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}.conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}.conversejs converse-chats.converse-embedded .controlbox-head,.conversejs converse-chats.converse-overlayed .controlbox-head{padding:.5em}.conversejs converse-chats.converse-embedded .chat-head,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-overlayed .chatbox{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-embedded .chatbox .box-flyout,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius)}@media screen and (max-height:450px){.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}@media screen and (max-width:480px){.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}.conversejs converse-chats.converse-overlayed .flyout{bottom:var(--overlayed-chatbox-hover-height)}.conversejs converse-chats.converse-overlayed .box-flyout{height:var(--overlayed-chat-height);min-height:calc(var(--overlayed-chat-height)/ 2)}.conversejs converse-chats.converse-overlayed .chat-head{min-height:var(--overlayed-chat-head-height)}.conversejs converse-chats.converse-overlayed .minimized-chats-flyout .chat-head{cursor:default}.conversejs converse-chats.converse-overlayed .chat-textarea{max-height:var(--overlayed-max-chat-textarea-height)}.conversejs converse-chats.converse-overlayed .chatbox .chat-body{height:calc(100% - var(--overlayed-chat-head-height))}.conversejs converse-chats.converse-overlayed .chatbox .chatbox-title{padding:.5rem .75rem 0 .75rem}.conversejs converse-chats.converse-overlayed .chatbox .chatbox-title--no-desc{padding:.5rem .75rem}@media(max-width:767.98px){.conversejs.converse-overlayed>.row{flex-direction:column}.conversejs.converse-overlayed>.row.no-gutters{margin:-1em}}.conversejs converse-chats.converse-embedded .flyout,.conversejs converse-chats.converse-fullscreen .flyout{border-radius:0;border:none;bottom:0}.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-fullscreen .chatbox{margin:0;margin-left:15px}.conversejs converse-chats.converse-embedded .chatbox .box-flyout,.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout{box-shadow:none;overflow:hidden}.conversejs converse-chats.converse-embedded.converse-singleton .flyout,.conversejs converse-chats.converse-fullscreen.converse-singleton .flyout{border:none!important}.conversejs converse-chats.converse-embedded.converse-singleton .chat-head,.conversejs converse-chats.converse-fullscreen.converse-singleton .chat-head{padding:.5em}.conversejs converse-chats.converse-embedded.converse-singleton .chatbox,.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{margin:0;position:relative}.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{position:relative;width:100%;padding-right:15px;padding-left:15px}@media(min-width:768px){.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:992px){.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:1200px){.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:768px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox{flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox{flex:0 0 75%;max-width:75%}}@media(min-width:1200px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox{flex:0 0 83.3333333333%;max-width:83.3333333333%}}@media(min-width:768px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout{max-width:66.666667%}}@media(min-width:992px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout{max-width:75%}}@media(min-width:1200px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout{max-width:83.333333%}}.conversejs converse-chats.converse-embedded .chat-head{font-size:var(--font-size-huge)}.conversejs converse-chats.converse-embedded .chatbox .box-flyout{bottom:0;height:100%;min-width:auto;width:100%}.conversejs converse-chats.converse-embedded .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}.conversejs converse-chats.converse-fullscreen .chatbox-btn{font-size:var(--fullpage-chatbox-button-size);margin:0 .3em}.conversejs converse-chats.converse-fullscreen .chat-head{font-size:var(--font-size-huge)}.conversejs converse-chats.converse-fullscreen .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout{box-shadow:none;height:var(--fullpage-chat-height);min-height:calc(var(--fullpage-chat-height)/ 2);width:var(--fullpage-chat-width);overflow:hidden}.conversejs converse-chats.converse-fullscreen .chatbox .chat-body{height:inherit;overflow:hidden;background-color:var(--chat-background-color)}.conversejs converse-chats.converse-fullscreen .chatbox .chat-title{font-size:var(--font-size-huge);line-height:var(--line-height-huge)}.conversejs converse-chats.converse-fullscreen .chatbox .sendXMPPMessage ul{width:100%}@media(max-width:767.98px){.conversejs converse-chats:not(.converse-embedded)>.row{flex-direction:row-reverse}.conversejs converse-chats:not(.converse-embedded) #converse-login-panel .converse-form{padding:3em 2em 3em}.conversejs converse-chats:not(.converse-embedded) .chatbox{width:calc(100% - 50px)}.conversejs converse-chats:not(.converse-embedded) .chatbox .row .box-flyout{left:50px;bottom:0;height:var(--fullpage-chat-height);box-shadow:none}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout converse-controlbox-navback,.conversejs converse-chats.converse-mobile .chatbox .box-flyout converse-controlbox-navback,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout converse-controlbox-navback{margin:auto 0;margin-right:1em;display:flex}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before,.conversejs converse-chats.converse-mobile .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before{color:var(--chat-head-text-color)}} +#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .oauth-providers{text-align:center}.conversejs .oauth-providers .oauth-provider{margin:1em 0}.conversejs .oauth-providers .oauth-provider .oauth-login{margin-left:0;color:var(--link-color);font-size:var(--font-size-large)}.conversejs .oauth-providers .oauth-provider .oauth-login:hover{color:var(--link-hover-color)}.conversejs .oauth-providers .oauth-provider .oauth-login i{color:var(--link-color);font-size:var(--font-size-huge);margin-right:.5em}.conversejs .set-xmpp-status .chat-status--online,.conversejs .xmpp-status .chat-status--online{color:var(--chat-status-online)}.conversejs .set-xmpp-status .chat-status--busy,.conversejs .xmpp-status .chat-status--busy{color:var(--chat-status-busy)}.conversejs .set-xmpp-status .chat-status--away,.conversejs .xmpp-status .chat-status--away{color:var(--chat-status-away)}.conversejs .set-xmpp-status .fa-times-circle,.conversejs .set-xmpp-status .far.fa-circle,.conversejs .xmpp-status .fa-times-circle,.conversejs .xmpp-status .far.fa-circle{color:var(--subdued-color)}.conversejs .set-xmpp-status .chat-status{padding-right:.5em}.conversejs .room-info{font-size:var(--font-size-small);font-style:normal;font-weight:400}.conversejs .room-info li.room-info{display:block;margin-left:5px}.conversejs .room-info p.room-info{line-height:var(--line-height);margin:0;display:block;white-space:normal}.conversejs div.room-info{padding:.3em 0;clear:left;width:100%}.conversejs #controlbox{order:-1;color:var(--controlbox-text-color);margin-right:calc(3 * var(--chat-gutter))}.conversejs #controlbox converse-brand-logo{width:100%;display:block}.conversejs #controlbox converse-brand-heading{width:100%;display:block}.conversejs #controlbox .brand-name-wrapper{font-size:200%}.conversejs #controlbox .brand-name-wrapper--fullscreen{font-size:100%}.conversejs #controlbox .open-rooms-toggle,.conversejs #controlbox .open-rooms-toggle .fa{color:var(--groupchats-header-color)!important}.conversejs #controlbox .open-rooms-toggle .fa:hover,.conversejs #controlbox .open-rooms-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}.conversejs #controlbox .box-flyout{background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox.logged-out .box-flyout .controlbox-pane{overflow-y:auto}.conversejs #controlbox form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}.conversejs #controlbox form.search-xmpp-contact input{width:8em}.conversejs #controlbox .msgs-indicator{margin-right:.5em}.conversejs #controlbox a.subscribe-to-user{padding-left:2em;font-weight:700}.conversejs #controlbox #converse-register{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox #converse-register .title{font-weight:700}.conversejs #controlbox #converse-register .info{color:green;font-size:90%;margin:1.5em 0}.conversejs #controlbox #converse-register .form-errors{color:var(--error-color);margin:1em 0}.conversejs #controlbox #converse-register .provider-title{font-size:var(--font-size-huge);margin:0}.conversejs #controlbox #converse-register .provider-score{width:178px;margin-bottom:8px}.conversejs #controlbox #converse-register .form-help .url{font-weight:700;color:var(--link-color)}.conversejs #controlbox #converse-register .input-group{display:table;margin:auto;width:100%}.conversejs #controlbox #converse-register .input-group span{overflow-x:hidden;text-overflow:ellipsis;max-width:110px}.conversejs #controlbox #converse-register .input-group input[name=username],.conversejs #controlbox #converse-register .input-group span{display:table-cell;text-align:left}.conversejs #controlbox #converse-register .instructions{color:gray;font-size:85%}.conversejs #controlbox #converse-register .instructions:hover{color:var(--controlbox-text-color)}.conversejs #controlbox .conn-feedback{color:var(--controlbox-head-color)}.conversejs #controlbox .conn-feedback.error{color:var(--error-color)}.conversejs #controlbox .conn-feedback p{padding-bottom:1em}.conversejs #controlbox .conn-feedback p.feedback-subject.error{font-weight:700}.conversejs #controlbox #converse-login-panel,.conversejs #controlbox #converse-register-panel{padding-top:0;padding-bottom:0}.conversejs #controlbox #converse-login-panel{flex-direction:row}.conversejs #controlbox .toggle-register-login{font-weight:700}.conversejs #controlbox .controlbox-pane .userinfo{padding-bottom:1em}.conversejs #controlbox .controlbox-pane .userinfo .username{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.conversejs #controlbox .controlbox-pane .userinfo .profile{margin-bottom:.75em}.conversejs #controlbox #chatrooms{padding:0}.conversejs #controlbox #chatrooms .add-chatroom{margin:0;padding:0}.conversejs #controlbox #chatrooms .add-chatroom input[type=button],.conversejs #controlbox #chatrooms .add-chatroom input[type=submit],.conversejs #controlbox #chatrooms .add-chatroom input[type=text]{width:100%}.conversejs #controlbox .controlbox-section .controlbox-heading{font-family:var(--heading-font);color:var(--controlbox-heading-color);font-weight:var(--controlbox-heading-font-weight);padding:0;font-size:1.1em;line-height:1.1em;text-transform:uppercase}.conversejs #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--groupchats-header-color)}.conversejs #controlbox .controlbox-section .controlbox-heading--contacts{color:var(--chat-head-color-dark)}.conversejs #controlbox .controlbox-section .controlbox-heading--headline{color:var(--headline-head-color)}.conversejs #controlbox .controlbox-section .controlbox-heading__btn{cursor:pointer;font-size:1em;padding:0;margin:var(--controlbox-heading-top-margin) 0 var(--inline-action-margin) 0;min-width:25px;text-align:center}.conversejs #controlbox .controlbox-section .controlbox-heading__btn.fa-vcard{margin-top:1em}.conversejs #controlbox .dropdown a{width:143px;display:inline-block}.conversejs #controlbox .dropdown li{list-style:none;padding-left:0}.conversejs #controlbox .dropdown dd ul{padding:0;list-style:none;position:absolute;left:0;top:0;width:100%;z-index:21;background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dd ul li:hover{background-color:var(--highlight-color)}.conversejs #controlbox .dropdown dd.search-xmpp{height:0}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container{position:absolute;z-index:22}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container form{box-shadow:1px 4px 10px 1px rgba(0,0,0,.4);background-color:#fff}.conversejs #controlbox .dropdown dd.search-xmpp li:hover{background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dt a span{cursor:pointer;display:block;padding:4px 7px 0 5px}.conversejs #controlbox .controlbox-panes{background-color:var(--controlbox-pane-background-color);border-right:.2143rem solid var(--panel-divider-color);height:100%;overflow-y:auto}.conversejs #controlbox .controlbox-subtitle{font-size:90%;padding:.5em;text-align:right}.conversejs #controlbox .controlbox-pane{background-color:var(--controlbox-pane-background-color);border:0;font-size:var(--font-size);left:0;text-align:left;overflow-x:hidden;padding:0 0 1em 0}.conversejs #controlbox .controlbox-pane .controlbox-padded{padding-left:1em;padding-right:1em;align-items:center;line-height:normal}.conversejs #controlbox .controlbox-pane .controlbox-padded .change-status{min-width:25px;text-align:center}.conversejs #controlbox .controlbox-pane .add-converse-contact{margin:0 0 .75em 0}.conversejs #controlbox .controlbox-pane .chatbox-btn{margin:0}.conversejs #controlbox .controlbox-pane .switch-form{text-align:center;padding:2em 0}.conversejs #controlbox .controlbox-pane dd{margin-left:0;margin-bottom:0}.conversejs #controlbox .controlbox-pane dd.odd{background-color:#dceac5}.conversejs #controlbox .add-xmpp-contact{padding:1em .5em}.conversejs #controlbox .add-xmpp-contact input{margin:0 0 1rem;width:100%}.conversejs #controlbox .add-xmpp-contact button{width:100%}.conversejs converse-chats.converse-overlayed{display:flex;flex-direction:row-reverse}.conversejs converse-chats.converse-overlayed .toggle-controlbox{order:-2;text-align:center;background-color:var(--link-color);border-top-left-radius:var(--button-border-radius);border-top-right-radius:var(--button-border-radius);color:#0a0a0a;float:right;height:100%;margin:0 var(--chat-gutter);padding:1em}.conversejs converse-chats.converse-overlayed .toggle-controlbox span{color:var(--inverse-link-color)}.conversejs converse-chats.converse-overlayed #controlbox{order:-1;min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .box-flyout{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .login-trusted{white-space:nowrap;font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-trusted{margin-top:.5em}.conversejs converse-chats.converse-overlayed #controlbox:not(.logged-out) .controlbox-head{height:15px}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:space-between;min-height:0}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .brand-heading{color:var(--controlbox-text-color);font-size:2em}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .chatbox-btn{color:var(--controlbox-head-color);margin:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-login,.conversejs converse-chats.converse-overlayed #controlbox #converse-register{flex:0 0 100%;max-width:100%;padding-bottom:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-register .button-cancel{font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{border-radius:var(--chatbox-border-radius)}.conversejs converse-chats.converse-embedded .toggle-controlbox,.conversejs converse-chats.converse-fullscreen .toggle-controlbox{display:none}.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{position:relative;width:100%;padding-right:15px;padding-left:15px;margin:0}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%}.conversejs converse-chats.converse-embedded #controlbox .flyout,.conversejs converse-chats.converse-fullscreen #controlbox .flyout,.conversejs converse-chats.converse-mobile #controlbox .flyout{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel .converse-form{padding:3em 2em 3em}.conversejs converse-chats.converse-embedded #controlbox .toggle-register-login,.conversejs converse-chats.converse-fullscreen #controlbox .toggle-register-login,.conversejs converse-chats.converse-mobile #controlbox .toggle-register-login{line-height:var(--line-height-huge)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo{flex:0 0 100%;max-width:100%;margin-top:5em;margin-bottom:1em}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{width:100%;font-size:500%;padding:.7em 0 0 0;opacity:.8;color:var(--brand-heading-color)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-subtitle{font-size:90%;padding:.5em}@media screen and (max-width:480px){.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{font-size:300%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%;opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;width:100%}.conversejs converse-chats.converse-embedded #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-mobile #controlbox.logged-out .box-flyout{width:100%}.conversejs converse-chats.converse-embedded #controlbox .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout,.conversejs converse-chats.converse-mobile #controlbox .box-flyout{border:0;width:100%;z-index:1;background-color:var(--controlbox-head-color)}.conversejs converse-chats.converse-embedded #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-mobile #controlbox .box-flyout .controlbox-head{display:none}.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{position:relative;width:100%;padding-right:15px;padding-left:15px;flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}@media(min-width:576px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 50%;max-width:50%;margin-left:25%}}.conversejs converse-chats.converse-embedded #controlbox #converse-login .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-login .title,.conversejs converse-chats.converse-embedded #controlbox #converse-register .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-register .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .title,.conversejs converse-chats.converse-mobile #controlbox #converse-login .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-login .title,.conversejs converse-chats.converse-mobile #controlbox #converse-register .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-register .title{margin:1em 0}.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=submit]{width:auto}.conversejs converse-chats.converse-fullscreen #controlbox{margin-left:-15px}.conversejs converse-chats.converse-fullscreen .controlbox-panes{padding-top:2em}.conversejs converse-chats.converse-overlayed .brand-heading{padding-top:.8rem;padding-left:.8rem;width:100%}.conversejs converse-chats.converse-overlayed .converse-svg-logo{height:1em}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-panel{height:100%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{margin-top:.5em}@media(max-width:767.98px){.conversejs{left:0;right:0;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.conversejs .converse-chatboxes{margin:0!important;flex-direction:row!important;justify-content:space-between}.conversejs .converse-chatboxes .converse-chatroom{font-size:14px}.conversejs .converse-chatboxes .chatbox .box-flyout{margin-left:15px;left:0;bottom:0;border-radius:0;width:100vw!important;height:var(--fullpage-chat-height)}.conversejs .converse-chatboxes #controlbox{width:100vw!important}.conversejs .converse-chatboxes #controlbox .box-flyout{width:100vw!important;height:var(--fullpage-chat-height);margin-right:-15px}.conversejs .converse-chatboxes #controlbox .sidebar{display:block}.conversejs .converse-chatboxes.sidebar-open .chatbox:not(#controlbox){display:none}.conversejs .converse-chatboxes.sidebar-open #controlbox .controlbox-pane{display:block}} +body.converse-fullscreen{margin:0;background-color:var(--global-background-color);overflow:hidden} .conversejs .chat-head-headline{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-body{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-body .chat-message{color:var(--headline-message-color)}.conversejs .chatbox.headlines .chat-content{height:100%}.conversejs .message.chat-msg.headline .chat-msg__body{margin-left:0}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .box-flyout{background-color:var(--headline-head-color)}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .flyout{border-color:var(--headline-head-color)} -.conversejs converse-chats.converse-overlayed converse-minimized-chats{order:100}.conversejs converse-chats.converse-overlayed #minimized-chats{width:var(--minimized-chats-width);margin-bottom:0;border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);color:var(--inverse-link-color);margin-right:var(--chat-gutter);padding:0}.conversejs converse-chats.converse-overlayed #minimized-chats .badge{bottom:8px;border:1px solid var(--overlayed-badge-color)}.conversejs converse-chats.converse-overlayed #minimized-chats #toggle-minimized-chats{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);background-color:var(--link-color);padding:1em 0 0 0;text-align:center;color:#fff;white-space:nowrap;overflow-y:hidden;text-overflow:ellipsis;display:block;height:45px;width:9em}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat{cursor:pointer;padding:1px 0 1px 5px;color:var(--chat-head-text-color);line-height:15px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:hover{text-decoration:none}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:visited{color:var(--chat-head-text-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout{flex-direction:column-reverse;bottom:45px;width:var(--minimized-chats-width)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head{min-height:0;padding:.3em;border-radius:var(--chatbox-border-radius);height:35px;margin-bottom:.2em;width:100%;max-width:9em;flex-wrap:nowrap}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout.minimized{height:auto}.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count{font-weight:700;background-color:#fff;border:1px solid;text-shadow:1px 1px 0 var(--text-shadow-color);color:var(--warning-color);border-radius:5px;padding:2px 4px;font-size:16px;text-align:center;position:absolute;right:116px;bottom:10px}.conversejs converse-chats.converse-overlayed #minimized-chats .chat-head-message-count-hidden,.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count-hidden{display:none} +converse-mam-placeholder .mam-placeholder{position:relative;height:2em;margin:.5em 0}converse-mam-placeholder .mam-placeholder:after,converse-mam-placeholder .mam-placeholder:before{content:"";display:block;position:absolute;left:0;right:0}converse-mam-placeholder .mam-placeholder:before{height:1em;top:1em;background:linear-gradient(-135deg,#d3d3d3 .5em,transparent 0) 0 .5em,linear-gradient(135deg,#d3d3d3 .5em,transparent 0) 0 .5em;background-position:top left;background-repeat:repeat-x;background-size:1em 1em}converse-mam-placeholder .mam-placeholder:after{height:1em;top:.75em;background:linear-gradient(-135deg,var(--chat-background-color) .5em,transparent 0) 0 .5em,linear-gradient(135deg,var(--chat-background-color) .5em,transparent 0) 0 .5em;background-position:top left;background-repeat:repeat-x;background-size:1em 1em} +.conversejs converse-chats.converse-overlayed converse-minimized-chats{order:100}.conversejs converse-chats.converse-overlayed #minimized-chats{width:var(--minimized-chats-width);margin-bottom:0;border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);color:var(--inverse-link-color);margin-right:var(--chat-gutter);padding:0}.conversejs converse-chats.converse-overlayed #minimized-chats .badge{bottom:8px;border:1px solid var(--overlayed-badge-color)}.conversejs converse-chats.converse-overlayed #minimized-chats #toggle-minimized-chats{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);background-color:var(--link-color);padding:1em 0 0 0;text-align:center;color:#fff;white-space:nowrap;overflow-y:hidden;text-overflow:ellipsis;display:block;height:45px;width:9em}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat{cursor:pointer;padding:1px 0 1px 5px;color:var(--chat-head-text-color);line-height:15px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:hover{text-decoration:none}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:visited{color:var(--chat-head-text-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout{flex-direction:column-reverse;bottom:45px;width:var(--minimized-chats-width)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head{min-height:0;padding:.3em;border-radius:var(--chatbox-border-radius);height:35px;margin-bottom:.2em;width:100%;max-width:9em;flex-wrap:nowrap;background-color:var(--chat-head-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head-chatroom{background-color:var(--chatroom-head-bg-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout.minimized{height:auto}.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count{font-weight:700;background-color:#fff;border:1px solid;text-shadow:1px 1px 0 var(--text-shadow-color);color:var(--warning-color);border-radius:5px;padding:2px 4px;font-size:16px;text-align:center;position:absolute;right:116px;bottom:10px}.conversejs converse-chats.converse-overlayed #minimized-chats .chat-head-message-count-hidden,.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count-hidden{display:none} .conversejs [hidden]{display:none}.conversejs .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.conversejs .form-group .suggestion-box{width:100%}.conversejs .suggestion-box{position:relative}.conversejs .suggestion-box mark{background:var(--completion-light-color)}.conversejs .suggestion-box>input{display:block}.conversejs .suggestion-box .suggestion-box__results,.conversejs .suggestion-box>ul{border-radius:.3em;border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);box-sizing:border-box;left:0;list-style:none;margin:.2em 0 0;min-width:100%;padding:0;position:absolute;right:0;text-shadow:none;z-index:2}.conversejs .suggestion-box .suggestion-box__results:before,.conversejs .suggestion-box>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}.conversejs .suggestion-box .suggestion-box__results>li,.conversejs .suggestion-box>ul>li{background:rgba(255,255,255,.9);background:linear-gradient(to bottom right,#fff,rgba(255,255,255,.9));color:var(--text-color);cursor:pointer;display:flex;overflow-x:hidden;padding:1em;position:relative;text-overflow:ellipsis}.conversejs .suggestion-box .suggestion-box__results--below{top:2em}.conversejs .suggestion-box .suggestion-box__results--above{bottom:4.5em}.conversejs .suggestion-box .suggestion-box__results--above:before{display:none}.conversejs .suggestion-box .suggestion-box__results--above:after{z-index:-1;content:"";position:absolute;bottom:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-left:0;border-top:0;transform:rotate(45deg)}.conversejs .suggestion-box>ul:empty,.conversejs .suggestion-box>ul[hidden]{display:none}@supports(transform:scale(0)){.conversejs .suggestion-box>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.conversejs .suggestion-box>ul:empty,.conversejs .suggestion-box>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.conversejs .suggestion-box>ul>li[aria-selected=true]{background:var(--completion-dark-color);color:var(--inverse-link-color)}.conversejs .suggestion-box li:hover mark{background:var(--completion-light-color);color:var(--inverse-link-color)}.conversejs .suggestion-box li[aria-selected=true] mark{background:var(--completion-normal-color);color:inherit}.conversejs.converse-fullscreen .suggestion-box__results--above{bottom:4.5em}.conversejs.converse-overlayed .suggestion-box__results--above{bottom:3.5em} .conversejs converse-muc.chatroom converse-muc-bottom-panel{display:contents;height:3em;padding:.5em;text-align:center;font-size:var(--font-size-small);background-color:var(--chatroom-head-bg-color);color:#fff}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--muted{height:4em;width:100%}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--nickname{padding:0;height:16em}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--nickname .muc-form-container .chatroom-form{padding-top:2em;padding-bottom:0}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .suggestion-box__results--above{bottom:4.5em}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea:active,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea:focus,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input:active,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input:focus{outline-color:var(--chatroom-head-bg-color)!important}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea.correcting,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input.correcting{background-color:var(--chatroom-correcting-color)}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea{width:100%;border:none;border-bottom-right-radius:0} .conversejs converse-muc.chatroom .box-flyout .occupants{display:flex;flex-direction:column;justify-content:space-between;overflow-x:hidden;overflow-y:hidden;vertical-align:top;background-color:var(--occupants-background-color);border-left:var(--occupants-border-left);padding:.5em;max-width:75%;min-width:20%;flex:0 0 25%}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header{display:flex;flex-direction:column}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header .hide-occupants{align-self:flex-end;cursor:pointer;font-size:var(--font-size-small)}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header--title{margin-top:.5em;margin-bottom:.5em;display:flex;flex-direction:row}.conversejs converse-muc.chatroom .box-flyout .occupants .fa-user-plus{margin-right:.25em}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-heading{font-family:var(--heading-font);color:var(--groupchats-header-color-dark);padding-left:0;margin-right:1em}.conversejs converse-muc.chatroom .box-flyout .occupants .suggestion-box ul{padding:0}.conversejs converse-muc.chatroom .box-flyout .occupants .suggestion-box ul li{padding:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul{padding:0;margin-bottom:.5em;overflow-x:hidden;overflow-y:auto;list-style:none}.conversejs converse-muc.chatroom .box-flyout .occupants ul.occupant-list{overflow-y:auto;flex-basis:0;flex-grow:1}.conversejs converse-muc.chatroom .box-flyout .occupants ul li{cursor:default;display:block;font-size:var(--font-size-small);overflow:hidden;padding:.25em .25em .25em 0;text-overflow:ellipsis}.conversejs converse-muc.chatroom .box-flyout .occupants ul li .fa{margin-right:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.feature{font-size:var(--font-size-tiny)}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant{cursor:pointer}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge{display:flex;justify-content:space-between;flex-wrap:wrap}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge .occupant-badges{display:flex;justify-content:flex-end;flex-wrap:wrap;flex-direction:row}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge .occupant-badges span{margin-right:.25rem}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant div.row.no-gutters{flex-wrap:nowrap;min-height:1.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .badge{margin-bottom:.125rem}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status{display:inline-block;margin:0 .5em .125em 0;width:.5em;height:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-chat,.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-online{background-color:#1a9707}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-dnd{background-color:red}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-away{background-color:#ff8c00}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-xa{background-color:orange}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-offline{background-color:#a9a9a9} +converse-rich-text{display:block}.reason converse-rich-text{display:inline-block} .conversejs converse-muc.chatroom .chat-head-chatroom{color:var(--chatroom-head-color);background-color:var(--chatroom-head-bg-color);border-bottom:var(--chatroom-head-border-bottom)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc{color:var(--chatroom-head-color);display:var(--chatroom-head-description-display)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc a{color:var(--chatroom-head-description-link-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc:hover button{display:inline-block}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title .btn--transparent i{color:var(--chatroom-head-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked{margin-left:.5em;color:var(--chatroom-head-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__buttons{background-color:var(--chatroom-head-bg-color)}.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:hover.chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:visited.chatbox-btn.fa{color:var(--chat-head-text-color)}.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:hover.chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:visited.chatbox-btn.fa.button-on:before{color:var(--chatroom-head-button-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-btn.button-on:before{color:var(--chatroom-head-button-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text{display:var(--heading-display);font-weight:var(--chatroom-head-title-font-weight);margin:auto 0;padding-right:var(--chatroom-head-title-padding-right);white-space:nowrap}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text .chatroom-jid{font-size:var(--font-size-small)} -.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}.conversejs .chatbox converse-controlbox-navback{display:none}.conversejs .chatbox .flyout{position:absolute}@media screen and (max-height:450px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-height:450px){.conversejs .chatbox .flyout{bottom:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{bottom:0}}.conversejs .chatbox .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}.conversejs .chatbox .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}.conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}.conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-textarea-background-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}.conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}.conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}.conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}.conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}.conversejs .chatbox .chat-content .chat-content__help{max-height:100%}.conversejs .chatbox .chat-content .chat-content__help converse-chat-help{border-top:1px solid var(--chat-head-color);display:block;height:100%;overflow-y:auto;padding:.5em 0}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}.conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}.conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}.conversejs .chatbox .chat-content .chat-content__notifications:before{content:" "}.conversejs .chatbox .chat-content video{width:100%}.conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}.conversejs .chatbox .dropdown{background-color:var(--light-background-color)}.conversejs .chatbox .dropdown dd{margin:0;padding:0;position:relative}.conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}.conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}.conversejs .chatbox .dragresize-left,.conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}.conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}converse-muc-config-form{width:100%;overflow:auto}.conversejs .chatroom .box-flyout .muc-form-container{background-color:#fff;border:0;color:var(--text-color);font-size:var(--font-size);height:100%;width:100%;overflow-y:auto}.conversejs .chatroom .box-flyout .muc-form-container .validation-message{font-size:90%;color:var(--error-color)}.conversejs .chatroom .box-flyout .muc-form-container input[type=button],.conversejs .chatroom .box-flyout .muc-form-container input[type=submit]{margin:0 .5em}.conversejs .chatroom .box-flyout .muc-form-container .button-primary{background-color:var(--chatroom-head-button-color)}.conversejs .chatroom .box-flyout .chatroom-form{display:flex;flex-direction:column;justify-content:center;padding:2em}.conversejs .chatroom{width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom{width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatroom{width:var(--mobile-chat-width)}}.conversejs .chatroom .box-flyout{background-color:var(--chatroom-head-bg-color);overflow-y:hidden;width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatroom .box-flyout .empty-history-feedback{position:relative}.conversejs .chatroom .box-flyout .empty-history-feedback span{width:100%;text-align:center;position:absolute;margin-top:50%}.conversejs .chatroom .box-flyout .chatroom-body{flex-direction:row;flex-flow:nowrap;background-color:#fff;border-top:0;height:100%;width:100%;overflow:hidden}.conversejs .chatroom .box-flyout .chatroom-body converse-muc-chatarea{width:100%;display:flex;flex-direction:row;flex-flow:nowrap}.conversejs .chatroom .box-flyout .chatroom-body .row{flex-direction:row}.conversejs .chatroom .box-flyout .chatroom-body .chat-topic{font-weight:700;color:var(--chatroom-head-bg-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info{color:var(--chat-info-color);line-height:normal}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.badge{color:var(--chat-head-text-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted{color:var(--subdued-color)}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container{margin:1em;width:100%}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg{padding-bottom:1em}.conversejs .chatroom .box-flyout .chatroom-body .chat-area{display:flex;flex-direction:column;flex:0 1 100%;justify-content:flex-end;min-width:25%;word-wrap:break-word}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator{background-color:var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content{height:100%}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help converse-chat-help{border-top:1px solid var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg{fill:var(--chatroom-color)}.conversejs .chatroom .room-invite .invited-contact{margin:-1px 0 0 -1px;width:100%;border:1px solid #999}#muc-details-modal .features-list{margin-left:1em}#muc-details-modal .chatroom-features{width:100%}#muc-details-modal .chatroom-features .features-list{padding-top:0}#muc-details-modal .chatroom-features .features-list .feature{width:100%;margin-right:.5em;padding-right:0;font-size:1em;cursor:help}#muc-details-modal .chatroom-features .features-list .feature .fa{margin-right:.5em;color:var(--text-color)}converse-muc-destroyed,converse-muc-disconnected{padding:2em;width:100%;height:100%}.conversejs .badge--muc,.conversejs.converse-embedded .badge--muc{background-color:var(--groupchats-header-color)}.conversejs .add-chatroom input[type=button],.conversejs .add-chatroom input[type=submit],.conversejs.converse-embedded .add-chatroom input[type=button],.conversejs.converse-embedded .add-chatroom input[type=submit]{margin:.3em 0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .box-flyout{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__text{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__buttons{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chat-head__desc{font-size:80%;margin-bottom:1em}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupants-heading{padding:0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupant-list{border-bottom:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-nick-badge .occupant-badges{display:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-status{margin-top:6px}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .chat-area{min-width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout,.conversejs converse-chats.converse-mobile .chatroom .box-flyout{width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator{max-width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants{padding:var(--occupants-padding)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-size:var(--font-size-large)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li{font-size:var(--font-size-small)}.conversejs converse-chats.converse-embedded .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-fullscreen .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-mobile .chatroom .room-invite span .invited-contact{margin:0 0 .5em -1px}.conversejs converse-chats.converse-embedded .chatroom{margin:0;width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants-heading{font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chat-content .chat-message{margin:.5em;font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .sendXMPPMessage .chat-textarea{padding:.5em;font-size:110%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body{height:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .muc-form-container{height:100%;position:relative}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants .occupant-list{padding-left:.3em} +converse-muc-nickname-form{width:100%} +#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:"Helvetica","Arial",sans-serif;--heading-font:"Muli",normal;--branding-font:"Baumans",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}.conversejs .chatbox converse-controlbox-navback{display:none}.conversejs .chatbox .flyout{position:absolute}@media screen and (max-height:450px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-height:450px){.conversejs .chatbox .flyout{bottom:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{bottom:0}}.conversejs .chatbox .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}.conversejs .chatbox .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}.conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}.conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-textarea-background-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}.conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}.conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}.conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}.conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}.conversejs .chatbox .chat-content .chat-content__help{max-height:100%}.conversejs .chatbox .chat-content .chat-content__help converse-chat-help{border-top:1px solid var(--chat-head-color);display:block;height:100%;overflow-y:auto;padding:.5em 0}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}.conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}.conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}.conversejs .chatbox .chat-content .chat-content__notifications:before{content:" "}.conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}.conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}.conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}.conversejs .chatbox .dragresize-left,.conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}.conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}converse-muc-config-form{width:100%;overflow:auto}.conversejs .chatroom .box-flyout .muc-form-container{background-color:#fff;border:0;color:var(--text-color);font-size:var(--font-size);height:100%;width:100%;overflow-y:auto}.conversejs .chatroom .box-flyout .muc-form-container .validation-message{font-size:90%;color:var(--error-color)}.conversejs .chatroom .box-flyout .muc-form-container input[type=button],.conversejs .chatroom .box-flyout .muc-form-container input[type=submit]{margin:0 .5em}.conversejs .chatroom .box-flyout .muc-form-container .button-primary{background-color:var(--chatroom-head-button-color)}.conversejs .chatroom .box-flyout .chatroom-form{display:flex;flex-direction:column;justify-content:center;padding:2em}.conversejs .chatroom{width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom{width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatroom{width:var(--mobile-chat-width)}}.conversejs .chatroom .box-flyout{background-color:var(--chatroom-head-bg-color);overflow-y:hidden;width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatroom .box-flyout .empty-history-feedback{position:relative}.conversejs .chatroom .box-flyout .empty-history-feedback span{width:100%;text-align:center;position:absolute;margin-top:50%}.conversejs .chatroom .box-flyout .chatroom-body{flex-direction:row;flex-flow:nowrap;background-color:#fff;border-top:0;height:100%;width:100%;overflow:hidden}.conversejs .chatroom .box-flyout .chatroom-body converse-muc-chatarea{width:100%;display:flex;flex-direction:row;flex-flow:nowrap}.conversejs .chatroom .box-flyout .chatroom-body .row{flex-direction:row}.conversejs .chatroom .box-flyout .chatroom-body .chat-topic{font-weight:700;color:var(--chatroom-head-bg-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info{color:var(--chat-info-color);line-height:normal}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.badge{color:var(--chat-head-text-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted{color:var(--subdued-color)}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container{margin:1em;width:100%}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg{padding-bottom:1em}.conversejs .chatroom .box-flyout .chatroom-body .chat-area{display:flex;flex-direction:column;flex:0 1 100%;justify-content:flex-end;min-width:25%;word-wrap:break-word}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator{background-color:var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content{height:100%}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help converse-chat-help{border-top:1px solid var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg{fill:var(--chatroom-color)}.conversejs .chatroom .room-invite .invited-contact{margin:-1px 0 0 -1px;width:100%;border:1px solid #999}#muc-details-modal .features-list{margin-left:1em}#muc-details-modal .chatroom-features{width:100%}#muc-details-modal .chatroom-features .features-list{padding-top:0}#muc-details-modal .chatroom-features .features-list .feature{width:100%;margin-right:.5em;padding-right:0;font-size:1em;cursor:help}#muc-details-modal .chatroom-features .features-list .feature .fa{margin-right:.5em;color:var(--text-color)}converse-muc-destroyed,converse-muc-disconnected{padding:2em;width:100%;height:100%}.conversejs .badge--muc,.conversejs.converse-embedded .badge--muc{background-color:var(--groupchats-header-color)}.conversejs .add-chatroom input[type=button],.conversejs .add-chatroom input[type=submit],.conversejs.converse-embedded .add-chatroom input[type=button],.conversejs.converse-embedded .add-chatroom input[type=submit]{margin:.3em 0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .box-flyout{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__text{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__buttons{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chat-head__desc{font-size:80%;margin-bottom:1em}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupants-heading{padding:0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupant-list{border-bottom:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-nick-badge .occupant-badges{display:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-status{margin-top:6px}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .chat-area{min-width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout,.conversejs converse-chats.converse-mobile .chatroom .box-flyout{width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator{max-width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants{padding:var(--occupants-padding)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-size:var(--font-size-large)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li{font-size:var(--font-size-small)}.conversejs converse-chats.converse-embedded .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-fullscreen .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-mobile .chatroom .room-invite span .invited-contact{margin:0 0 .5em -1px}.conversejs converse-chats.converse-embedded .chatroom{margin:0;width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants-heading{font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chat-content .chat-message{margin:.5em;font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .sendXMPPMessage .chat-textarea{padding:.5em;font-size:110%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body{height:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .muc-form-container{height:100%;position:relative}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants .occupant-list{padding-left:.3em} +converse-root.converse-js.converse-fullpage,converse-root.converse-js.converse-mobile,converse-root.converse-js.converse-overlayed{bottom:0;height:100%;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);position:fixed;z-index:1031}converse-root.converse-js.converse-embedded{position:relative} .conversejs #converse-roster{text-align:left;width:100%;position:relative;margin:0;height:var(--roster-height);padding:0;overflow:hidden;height:calc(100% - 70px)}.conversejs #converse-roster #online-count{display:none}.conversejs #converse-roster .search-xmpp ul li.chat-info{padding-left:10px}.conversejs #converse-roster .roster-filter-form{width:100%}.conversejs #converse-roster .roster-filter-form .button-group{padding:.2em}.conversejs #converse-roster .roster-filter-form span{padding:.3em;cursor:pointer;min-width:25px;text-align:center}.conversejs #converse-roster .roster-filter-form .roster-filter{width:100%;margin:.2em;font-size:calc(var(--font-size) - 2px)}.conversejs #converse-roster .roster-filter-form .state-type{font-size:calc(var(--font-size) - 2px);width:100%}.conversejs #converse-roster .roster-contacts{padding:0;margin:0 0 .2em 0;height:100%;overflow-x:hidden;overflow-y:auto;color:var(--text-color)}.conversejs #converse-roster .roster-contacts converse-roster-contact{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;justify-content:space-between}.conversejs #converse-roster .roster-contacts .group-toggle{font-family:var(--heading-font);display:block;width:100%;margin:.75em 0 .25em 0}.conversejs #converse-roster .roster-contacts .group-toggle,.conversejs #converse-roster .roster-contacts .group-toggle .fa{color:var(--chat-head-color-dark)!important}.conversejs #converse-roster .roster-contacts .group-toggle .fa:hover,.conversejs #converse-roster .roster-contacts .group-toggle:hover{color:var(--chat-head-color-darker)!important}.conversejs #converse-roster .roster-contacts .current-xmpp-contact{margin:.25em 0}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status{vertical-align:middle;font-size:.6em;margin-right:0;margin-left:-.7em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--offline{margin-right:.8em}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--online{color:var(--chat-status-online)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--busy{color:var(--chat-status-busy)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--away{color:var(--chat-status-away)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--offline{display:none}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .fa-times-circle,.conversejs #converse-roster .roster-contacts .current-xmpp-contact .far.fa-circle{color:var(--subdued-color)}.conversejs #converse-roster .roster-contacts li.requesting-xmpp-contact a{line-height:var(--line-height)}.conversejs #converse-roster .roster-contacts li.requesting-xmpp-contact .req-contact-name{padding:0 .2em 0 0}.conversejs #converse-roster .roster-contacts li .open-chat{margin:0;padding:0}.conversejs #converse-roster .roster-contacts li .open-chat.unread-msgs{font-weight:700}.conversejs #converse-roster .roster-contacts li .open-chat.unread-msgs .contact-name{width:70%}.conversejs #converse-roster .roster-contacts li .open-chat .msgs-indicator{color:#fff;background-color:var(--chat-head-color);opacity:1;border-radius:10%;padding:.2em .4em;font-size:var(--font-size-small);margin-right:0}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name{padding:0;margin:0;max-width:85%;float:none;height:100%}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name.unread-msgs{max-width:60%}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name.contact-name--offline{margin-left:.25em}.conversejs #converse-roster .roster-contacts li.odd{background-color:#dceac5}.conversejs #converse-roster .roster-contacts li a,.conversejs #converse-roster .roster-contacts li span{white-space:nowrap;text-overflow:ellipsis}.conversejs #converse-roster .roster-contacts li .span{display:inline-block}.conversejs #converse-roster .roster-contacts li .decline-xmpp-request{margin-left:5px}.conversejs #converse-roster .roster-contacts li:hover{background-color:var(controlbox-pane-bg-hover-color)}.conversejs #converse-roster span.pending-contact-name{line-height:var(--line-height);width:100%} /*# sourceMappingURL=converse.css.map*/ \ No newline at end of file diff --git a/dist/converse.css.map b/dist/converse.css.map index 201fc13..aee5673 100644 --- a/dist/converse.css.map +++ b/dist/converse.css.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://converse.js/index.scss","webpack://converse.js/bookmarks.scss","webpack://converse.js/chats.scss","webpack://converse.js/_modal.scss","webpack://converse.js/unfurl.scss","webpack://converse.js/chat-content.scss","webpack://converse.js/emoji.scss","webpack://converse.js/toolbar.scss","webpack://converse.js/chat-head.scss","webpack://converse.js/chat-bottom-panel.scss","webpack://converse.js/_controlbox.scss","webpack://converse.js/fullscreen.scss","webpack://converse.js/background.scss","webpack://converse.js/headlines.scss","webpack://converse.js/minimize.scss","webpack://converse.js/_autocomplete.scss","webpack://converse.js/muc-bottom-panel.scss","webpack://converse.js/muc-occupants.scss","webpack://converse.js/muc-head.scss","webpack://converse.js/roster.scss"],"names":[],"mappings":"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","file":"../dist/converse.css","sourcesContent":[".conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}.conversejs .chatbox converse-controlbox-navback{display:none}.conversejs .chatbox .flyout{position:absolute}@media screen and (max-height:450px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-height:450px){.conversejs .chatbox .flyout{bottom:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{bottom:0}}.conversejs .chatbox .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}.conversejs .chatbox .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}.conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}.conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-textarea-background-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}.conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}.conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}.conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}.conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}.conversejs .chatbox .chat-content .chat-content__help{max-height:100%}.conversejs .chatbox .chat-content .chat-content__help converse-chat-help{border-top:1px solid var(--chat-head-color);display:block;height:100%;overflow-y:auto;padding:.5em 0}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}.conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}.conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}.conversejs .chatbox .chat-content .chat-content__notifications:before{content:\" \"}.conversejs .chatbox .chat-content video{width:100%}.conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}.conversejs .chatbox .dropdown{background-color:var(--light-background-color)}.conversejs .chatbox .dropdown dd{margin:0;padding:0;position:relative}.conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}.conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}.conversejs .chatbox .dragresize-left,.conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}.conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}converse-muc-config-form{width:100%;overflow:auto}.conversejs .chatroom .box-flyout .muc-form-container{background-color:#fff;border:0;color:var(--text-color);font-size:var(--font-size);height:100%;width:100%;overflow-y:auto}.conversejs .chatroom .box-flyout .muc-form-container .validation-message{font-size:90%;color:var(--error-color)}.conversejs .chatroom .box-flyout .muc-form-container input[type=button],.conversejs .chatroom .box-flyout .muc-form-container input[type=submit]{margin:0 .5em}.conversejs .chatroom .box-flyout .muc-form-container .button-primary{background-color:var(--chatroom-head-button-color)}.conversejs .chatroom .box-flyout .chatroom-form{display:flex;flex-direction:column;justify-content:center;padding:2em}.conversejs .chatroom{width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom{width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatroom{width:var(--mobile-chat-width)}}.conversejs .chatroom .box-flyout{background-color:var(--chatroom-head-bg-color);overflow-y:hidden;width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatroom .box-flyout .empty-history-feedback{position:relative}.conversejs .chatroom .box-flyout .empty-history-feedback span{width:100%;text-align:center;position:absolute;margin-top:50%}.conversejs .chatroom .box-flyout .chatroom-body{flex-direction:row;flex-flow:nowrap;background-color:#fff;border-top:0;height:100%;width:100%;overflow:hidden}.conversejs .chatroom .box-flyout .chatroom-body converse-muc-chatarea{width:100%;display:flex;flex-direction:row;flex-flow:nowrap}.conversejs .chatroom .box-flyout .chatroom-body .row{flex-direction:row}.conversejs .chatroom .box-flyout .chatroom-body .chat-topic{font-weight:700;color:var(--chatroom-head-bg-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info{color:var(--chat-info-color);line-height:normal}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.badge{color:var(--chat-head-text-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted{color:var(--subdued-color)}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container{margin:1em;width:100%}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg{padding-bottom:1em}.conversejs .chatroom .box-flyout .chatroom-body .chat-area{display:flex;flex-direction:column;flex:0 1 100%;justify-content:flex-end;min-width:25%;word-wrap:break-word}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator{background-color:var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content{height:100%}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help converse-chat-help{border-top:1px solid var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg{fill:var(--chatroom-color)}.conversejs .chatroom .room-invite .invited-contact{margin:-1px 0 0 -1px;width:100%;border:1px solid #999}#muc-details-modal .features-list{margin-left:1em}#muc-details-modal .chatroom-features{width:100%}#muc-details-modal .chatroom-features .features-list{padding-top:0}#muc-details-modal .chatroom-features .features-list .feature{width:100%;margin-right:.5em;padding-right:0;font-size:1em;cursor:help}#muc-details-modal .chatroom-features .features-list .feature .fa{margin-right:.5em;color:var(--text-color)}converse-muc-destroyed,converse-muc-disconnected{padding:2em;width:100%;height:100%}.conversejs .badge--muc,.conversejs.converse-embedded .badge--muc{background-color:var(--groupchats-header-color)}.conversejs .add-chatroom input[type=button],.conversejs .add-chatroom input[type=submit],.conversejs.converse-embedded .add-chatroom input[type=button],.conversejs.converse-embedded .add-chatroom input[type=submit]{margin:.3em 0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .box-flyout{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__text{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__buttons{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chat-head__desc{font-size:80%;margin-bottom:1em}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupants-heading{padding:0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupant-list{border-bottom:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-nick-badge .occupant-badges{display:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-status{margin-top:6px}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .chat-area{min-width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout,.conversejs converse-chats.converse-mobile .chatroom .box-flyout{width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator{max-width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants{padding:var(--occupants-padding)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-size:var(--font-size-large)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li{font-size:var(--font-size-small)}.conversejs converse-chats.converse-embedded .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-fullscreen .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-mobile .chatroom .room-invite span .invited-contact{margin:0 0 .5em -1px}.conversejs converse-chats.converse-embedded .chatroom{margin:0;width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants-heading{font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chat-content .chat-message{margin:.5em;font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .sendXMPPMessage .chat-textarea{padding:.5em;font-size:110%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body{height:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .muc-form-container{height:100%;position:relative}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants .occupant-list{padding-left:.3em}",".conversejs #controlbox .bookmarks-toggle,.conversejs #controlbox .bookmarks-toggle .fa{color:var(--groupchats-header-color)!important}.conversejs #controlbox .bookmarks-toggle .fa:hover,.conversejs #controlbox .bookmarks-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}.conversejs.fullscreen #controlbox #chatrooms .bookmarks-list dl.rooms-list.bookmarks dd.available-chatroom a.open-room{width:80%}",".conversejs converse-chats.converse-chatboxes{z-index:1031;position:fixed;bottom:0;right:0}.conversejs converse-chats.converse-overlayed{height:3em}.conversejs converse-chats.converse-overlayed>.row{flex-direction:row-reverse}.conversejs converse-chats.converse-fullscreen,.conversejs converse-chats.converse-mobile{flex-wrap:nowrap;width:100vw}.conversejs converse-chats.converse-embedded{box-sizing:border-box;bottom:auto;height:100%;position:relative;right:auto;width:100%}.conversejs converse-chats.converse-embedded *,.conversejs converse-chats.converse-embedded :after,.conversejs converse-chats.converse-embedded :before{box-sizing:border-box}.conversejs converse-chats.converse-embedded.converse-chatboxes{z-index:1031;position:inherit;flex-wrap:nowrap;bottom:auto;height:100%;width:100%;margin-left:-15px}",".conversejs .modal-open{overflow:hidden}.conversejs .modal-open .modal{overflow-x:hidden;overflow-y:auto}.conversejs .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.conversejs .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .conversejs .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media(prefers-reduced-motion:reduce){.modal.fade .conversejs .modal-dialog{transition:none}}.modal.show .conversejs .modal-dialog{transform:none}.modal.modal-static .conversejs .modal-dialog{transform:scale(1.02)}.conversejs .modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.conversejs .modal-dialog-scrollable .modal-footer,.conversejs .modal-dialog-scrollable .modal-header{flex-shrink:0}.conversejs .modal-dialog-scrollable .modal-body{overflow-y:auto}.conversejs .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.conversejs .modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:\"\"}.conversejs .modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.conversejs .modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.conversejs .modal-dialog-centered.modal-dialog-scrollable::before{content:none}.conversejs .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.conversejs .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.conversejs .modal-backdrop.fade{opacity:0}.conversejs .modal-backdrop.show{opacity:.5}.conversejs .modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.conversejs .modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.conversejs .modal-title{margin-bottom:0;line-height:1.5}.conversejs .modal-body{position:relative;flex:1 1 auto;padding:1rem}.conversejs .modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.conversejs .modal-footer>*{margin:.25rem}.conversejs .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width:576px){.conversejs .modal-dialog{max-width:500px;margin:1.75rem auto}.conversejs .modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.conversejs .modal-dialog-centered{min-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.conversejs .modal-sm{max-width:300px}}@media(min-width:992px){.conversejs .modal-lg,.conversejs .modal-xl{max-width:800px}}@media(min-width:1200px){.conversejs .modal-xl{max-width:1140px}}.conversejs #converse-modals .modal{background-color:rgba(0,0,0,.4)}.conversejs #converse-modals .modal .modal-body{overflow-y:auto;max-height:75vh;margin-bottom:2em}.conversejs #converse-modals .modal .modal-body p{padding:.25rem 0}.conversejs #converse-modals .modal .modal-body .confirm .form-group p:first-child{font-size:110%;font-weight:700}.conversejs #converse-modals .modal .modal-body.fit-content{box-sizing:content-box}.conversejs #converse-modals .modal .modal-body.fit-content img{max-width:90vw}.conversejs #converse-modals .modal .modal-body--image .chat-image{max-height:99%;max-width:100%}.conversejs #converse-modals .modal .modal-footer{justify-content:flex-start}.conversejs #converse-modals .modal .roomid-policy-error{color:var(--error-color);font-size:var(--font-size-small);float:right}.conversejs #converse-modals .scrollable-container{max-height:45vh;overflow-y:auto}.conversejs #converse-modals .affiliation-form,.conversejs #converse-modals .role-form{padding:2em 0 1em 0}.conversejs #converse-modals .set-xmpp-status{margin:1em}.conversejs #converse-modals .set-xmpp-status .custom-control-label{padding-top:.25em}.conversejs #converse-modals #omemo-tabpanel{margin-top:1em}.conversejs #converse-modals .btn{font-weight:400}.conversejs #converse-modals #user-profile-modal .profile-form label{font-weight:700}.conversejs #converse-modals #user-profile-modal .fingerprint-removal label{display:flex;padding:.75rem 1.25rem}.conversejs #converse-modals #user-profile-modal .list-group-item{display:flex;justify-content:left;font-size:95%}.conversejs #converse-modals #user-profile-modal .list-group-item input[type=checkbox]{margin-right:1em}.conversejs #converse-modals .fingerprints{width:100%;margin-bottom:1em}.conversejs #converse-modals .fingerprint-trust{display:flex;justify-content:space-between;font-size:95%}.conversejs #converse-modals .fingerprint-trust .fingerprint{margin-left:1em}",".conversejs .card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.conversejs .card>hr{margin-right:0;margin-left:0}.conversejs .card>.list-group{border-top:inherit;border-bottom:inherit}.conversejs .card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card>.card-header+.list-group,.conversejs .card>.list-group+.card-footer{border-top:0}.conversejs .card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.conversejs .card-title{margin-bottom:.75rem}.conversejs .card-subtitle{margin-top:-.375rem;margin-bottom:0}.conversejs .card-text:last-child{margin-bottom:0}.conversejs .card-link:hover{text-decoration:none}.conversejs .card-link+.card-link{margin-left:1.25rem}.conversejs .card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.conversejs .card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.conversejs .card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.conversejs .card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.conversejs .card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.conversejs .card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.conversejs .card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom,.conversejs .card-img-top{flex-shrink:0;width:100%}.conversejs .card-img,.conversejs .card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card-deck .card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.conversejs .card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.conversejs .card-group>.card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-group{display:flex;flex-flow:row wrap}.conversejs .card-group>.card{flex:1 0 0%;margin-bottom:0}.conversejs .card-group>.card+.card{margin-left:0;border-left:0}.conversejs .card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-header,.conversejs .card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-footer,.conversejs .card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.conversejs .card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-header,.conversejs .card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-footer,.conversejs .card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.conversejs .card-columns .card{margin-bottom:.75rem}@media(min-width:576px){.conversejs .card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.conversejs .card-columns .card{display:inline-block;width:100%}}.conversejs .accordion{overflow-anchor:none}.conversejs .accordion>.card{overflow:hidden}.conversejs .accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.conversejs .accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.conversejs .accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.conversejs .message .card--unfurl{margin:1em 0}@media(max-width:767.98px){.conversejs .message .card--unfurl{max-width:95%}}@media(min-width:768px){.conversejs .message .card--unfurl{max-width:75%}}@media(min-width:992px){.conversejs .message .card--unfurl{max-width:66%}}@media(min-width:1200px){.conversejs .message .card--unfurl{max-width:50%}}","converse-chat-content{display:flex;flex-direction:column-reverse;height:100%;justify-content:space-between;overflow:auto}",".conversejs .media{display:flex;align-items:flex-start}.conversejs .media-body{flex:1}.conversejs .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}.conversejs .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}.conversejs .chatbox converse-emoji-dropdown{display:inline-block}.conversejs .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}.conversejs .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--chat-head-color);overflow-y:hidden;background:#fff}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--chat-head-color);width:100%;font-size:var(--font-size)}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}.conversejs .chatbox converse-emoji-picker .emoji-picker{background-color:#fff;padding:.5em 0 0 .5em}.conversejs .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}.conversejs .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header{width:100%;display:flex;flex-direction:column;padding:.1em 0;background-color:var(--chat-head-color)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:#fff;border:1px var(--chat-head-color) solid;border-bottom:none}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}.conversejs .chatroom converse-emoji-picker{background-color:var(--chatroom-head-bg-color);background:#fff}.conversejs .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--chatroom-head-bg-color)}.conversejs .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--chatroom-head-bg-color)}.conversejs .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}.conversejs converse-chats.converse-overlayed converse-emoji-dropdown .dropdown-menu{min-width:18em}.conversejs converse-chats.converse-overlayed .chatbox .emoji-picker__header .emoji-category img{height:var(--font-size)!important;width:var(--font-size)!important}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji a{font-size:var(--font-size);line-height:calc(var(--font-size) * 1.5);padding:0;height:calc(var(--font-size) * 1.5);width:calc(var(--font-size) * 1.5)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji img{height:var(--font-size);width:var(--font-size)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-skintone-picker{font-size:var(--font-size-small)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__header .emoji-category{font-size:var(--font-size-small)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__lists{height:7em}.conversejs converse-chats.converse-embedded converse-emoji-dropdown .dropdown-menu{min-width:20em}.conversejs converse-chats.converse-fullscreen converse-emoji-dropdown .dropdown-menu{min-width:22em}.conversejs converse-chats.converse-fullscreen .chatbox converse-emoji-picker .emoji-picker__lists{height:12em}.conversejs .chatbox converse-emoji-picker{max-width:40em}",".conversejs .send-button{border-radius:0;bottom:var(--send-button-bottom);color:var(--inverse-link-color)}.conversejs .chatbox .send-button{background-color:var(--chat-head-color)}.conversejs .chatroom .send-button{background-color:var(--muc-toolbar-btn-color)}.conversejs .chat-toolbar .toolbar-buttons{width:100%}.conversejs .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}.conversejs .chat-toolbar .toolbar-buttons *{float:left}.conversejs .chat-toolbar .toolbar-buttons .right{float:right}.conversejs .chat-toolbar .unverified,.conversejs .chat-toolbar .unverified a{color:#cf5300}.conversejs .chat-toolbar .private,.conversejs .chat-toolbar .private a{color:#4b7003}.conversejs .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}.conversejs .chat-toolbar li:hover{cursor:pointer}.conversejs .chat-toolbar li .toolbar-menu{background-color:#fff;bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}.conversejs .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}.conversejs .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}.conversejs .chat-toolbar li .toolbar-menu a{color:var(--link-color)}.conversejs .chat-toolbar li.toggle-otr ul{z-index:99}.conversejs .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}.conversejs .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}.conversejs .chat-toolbar li.toggle-otr ul li a{display:block}.conversejs converse-chat-toolbar{background-color:#fff;box-sizing:border-box;display:flex;justify-content:space-between;margin:0;width:100%}.conversejs converse-chat-toolbar .fa,.conversejs converse-chat-toolbar .fa:hover,.conversejs converse-chat-toolbar .far,.conversejs converse-chat-toolbar .far:hover,.conversejs converse-chat-toolbar .fas,.conversejs converse-chat-toolbar .fas:hover{color:var(--chat-head-color);font-size:var(--font-size-large)}.conversejs converse-chat-toolbar .fa svg,.conversejs converse-chat-toolbar .fa:hover svg,.conversejs converse-chat-toolbar .far svg,.conversejs converse-chat-toolbar .far:hover svg,.conversejs converse-chat-toolbar .fas svg,.conversejs converse-chat-toolbar .fas:hover svg{fill:var(--chat-head-color)}.conversejs converse-chat-toolbar .unencrypted,.conversejs converse-chat-toolbar .unencrypted a{color:var(--text-color)}.conversejs converse-chat-toolbar .unencrypted .toolbar-menu a,.conversejs converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}.conversejs converse-chat-toolbar button{margin-top:.4em;border:1px transparent solid;background-color:transparent}.conversejs converse-chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}.conversejs .chatbox converse-chat-toolbar{border-top:var(--chatbox-message-input-border-top);color:var(--chat-toolbar-btn-color);background-color:#fff}.conversejs .chatbox converse-chat-toolbar .fa,.conversejs .chatbox converse-chat-toolbar .fa:hover,.conversejs .chatbox converse-chat-toolbar .far,.conversejs .chatbox converse-chat-toolbar .far:hover,.conversejs .chatbox converse-chat-toolbar .fas,.conversejs .chatbox converse-chat-toolbar .fas:hover{color:var(--chat-toolbar-btn-color)}.conversejs .chatbox converse-chat-toolbar button:focus{outline-color:var(--chat-toolbar-btn-color)!important}.conversejs .chatbox converse-chat-toolbar button:disabled .fa{color:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatbox converse-chat-toolbar button:disabled .fa:hover{color:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatbox converse-chat-toolbar button:disabled .fa svg,.conversejs .chatbox converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--muc-toolbar-btn-color)}.conversejs .chatroom converse-chat-toolbar .fa,.conversejs .chatroom converse-chat-toolbar .fa:hover,.conversejs .chatroom converse-chat-toolbar .far,.conversejs .chatroom converse-chat-toolbar .far:hover,.conversejs .chatroom converse-chat-toolbar .fas,.conversejs .chatroom converse-chat-toolbar .fas:hover{color:var(--muc-toolbar-btn-color);font-size:var(--font-size-large)}.conversejs .chatroom converse-chat-toolbar .fa svg,.conversejs .chatroom converse-chat-toolbar .fa:hover svg,.conversejs .chatroom converse-chat-toolbar .far svg,.conversejs .chatroom converse-chat-toolbar .far:hover svg,.conversejs .chatroom converse-chat-toolbar .fas svg,.conversejs .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--muc-toolbar-btn-color)}.conversejs .chatroom converse-chat-toolbar button:focus{outline-color:var(--muc-toolbar-btn-color)!important}.conversejs .chatroom converse-chat-toolbar button:disabled .fa{color:var(--muc-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar button:disabled .fa:hover{color:var(--muc-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar button:disabled .fa svg,.conversejs .chatroom converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--muc-toolbar-btn-disabled-color)}.conversejs converse-chats.converse-overlayed .chat-toolbar li .toolbar-menu{min-width:235px}.conversejs converse-chats.converse-overlayed .chatroom .chat-toolbar li .toolbar-menu{min-width:280px}",".conversejs .chatbox .chat-head{display:flex;flex-direction:row;color:#fff;font-size:100%;margin:0;padding:0;position:relative}.conversejs .chatbox .chat-head.chat-head-chatbox{background-color:var(--chat-head-color)}.conversejs .chatbox .chat-head .avatar{margin-right:.5em}.conversejs .chatbox .chat-head .show-msg-author-modal{color:#fff!important}.conversejs .chatbox .chat-head .chat-head__desc{color:var(--chat-head-color-lighten-50-percent);font-size:var(--font-size-small);margin:0;overflow:hidden;padding:.5rem 1rem .5rem 1rem;text-overflow:ellipsis;width:100%;max-height:5em}.conversejs .chatbox .chat-head .chatbox-title{padding:.75rem 1rem 0 1rem;display:flex;flex-direction:row;justify-content:space-between;width:100%}.conversejs .chatbox .chat-head .chatbox-title--no-desc{padding:.75rem 1rem}.conversejs .chatbox .chat-head .chatbox-title--row{display:flex;flex-direction:row;overflow:hidden}.conversejs .chatbox .chat-head .chatbox-title__text{overflow:hidden;text-overflow:ellipsis}.conversejs .chatbox .chat-head .chatbox-title__buttons{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;padding:0}.conversejs .chatbox .chat-head a.chatbox-btn.fa,.conversejs .chatbox .chat-head a.chatbox-btn.far,.conversejs .chatbox .chat-head a.chatbox-btn.fas,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fa,.conversejs .chatbox .chat-head a:hover.chatbox-btn.far,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fas,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.far,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fa,.conversejs .chatbox .chat-head a:visited.chatbox-btn.far,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fas{color:#fff}.conversejs .chatbox .chat-head a.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a.chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fas.button-on:before{padding:.2em;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}.conversejs .chatbox .chat-head .chatbox-btn{color:#fff}.conversejs .chatbox .chat-head .chatbox-btn.fa,.conversejs .chatbox .chat-head .chatbox-btn.far,.conversejs .chatbox .chat-head .chatbox-btn.fas{color:#fff}.conversejs .chatbox .chat-head .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .chat-head .chatbox-btn.button-on:before{border-radius:5%;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}",".conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox .bottom-panel .chat-content-sendbutton{height:calc(100% - (var(--chat-textarea-height) + var(--send-button-height) + 2 * var(--send-button-margin)))}.conversejs .chatbox .bottom-panel .sendXMPPMessage{-moz-background-clip:padding;-webkit-background-clip:padding-box;border-bottom-radius:var(--chatbox-border-radius);background-clip:padding-box;background-color:#fff;border:0;margin:0;padding:0}@media screen and (max-height:450px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}@media screen and (max-width:480px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}.conversejs .chatbox .bottom-panel .sendXMPPMessage .suggestion-box__results:after{display:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .spoiler-hint{width:100%}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:focus,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:focus{outline-color:var(--chat-head-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.correcting,.conversejs .chatbox .bottom-panel .sendXMPPMessage input.correcting{background-color:var(--chat-correcting-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);border-top-left-radius:0;border-top-right-radius:0;border-bottom-radius:var(--chatbox-border-radius);padding-left:.5em;padding-right:4.5em;padding-top:.5em;padding-bottom:.5em;width:100%;border:none;min-height:var(--chat-textarea-height);margin-bottom:-4px;resize:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.spoiler{height:42px}",".conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--chat-head-text-color:#AAA;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .oauth-providers{text-align:center}.conversejs .oauth-providers .oauth-provider{margin:1em 0}.conversejs .oauth-providers .oauth-provider .oauth-login{margin-left:0;color:var(--link-color);font-size:var(--font-size-large)}.conversejs .oauth-providers .oauth-provider .oauth-login:hover{color:var(--link-hover-color)}.conversejs .oauth-providers .oauth-provider .oauth-login i{color:var(--link-color);font-size:var(--font-size-huge);margin-right:.5em}.conversejs .set-xmpp-status .chat-status--online,.conversejs .xmpp-status .chat-status--online{color:var(--chat-status-online)}.conversejs .set-xmpp-status .chat-status--busy,.conversejs .xmpp-status .chat-status--busy{color:var(--chat-status-busy)}.conversejs .set-xmpp-status .chat-status--away,.conversejs .xmpp-status .chat-status--away{color:var(--chat-status-away)}.conversejs .set-xmpp-status .fa-times-circle,.conversejs .set-xmpp-status .far.fa-circle,.conversejs .xmpp-status .fa-times-circle,.conversejs .xmpp-status .far.fa-circle{color:var(--subdued-color)}.conversejs .set-xmpp-status .chat-status{padding-right:.5em}.conversejs .room-info{font-size:var(--font-size-small);font-style:normal;font-weight:400}.conversejs .room-info li.room-info{display:block;margin-left:5px}.conversejs .room-info p.room-info{line-height:var(--line-height);margin:0;display:block;white-space:normal}.conversejs div.room-info{padding:.3em 0;clear:left;width:100%}.conversejs #controlbox{order:-1;color:var(--controlbox-text-color);margin-right:calc(3 * var(--chat-gutter))}.conversejs #controlbox converse-brand-logo{width:100%;display:block}.conversejs #controlbox converse-brand-heading{width:100%;display:block}.conversejs #controlbox .brand-name-wrapper{font-size:200%}.conversejs #controlbox .brand-name-wrapper--fullscreen{font-size:100%}.conversejs #controlbox .open-rooms-toggle,.conversejs #controlbox .open-rooms-toggle .fa{color:var(--groupchats-header-color)!important}.conversejs #controlbox .open-rooms-toggle .fa:hover,.conversejs #controlbox .open-rooms-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}.conversejs #controlbox .box-flyout{background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox.logged-out .box-flyout .controlbox-pane{overflow-y:auto}.conversejs #controlbox form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}.conversejs #controlbox form.search-xmpp-contact input{width:8em}.conversejs #controlbox .msgs-indicator{margin-right:.5em}.conversejs #controlbox a.subscribe-to-user{padding-left:2em;font-weight:700}.conversejs #controlbox #converse-register{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox #converse-register .title{font-weight:700}.conversejs #controlbox #converse-register .info{color:green;font-size:90%;margin:1.5em 0}.conversejs #controlbox #converse-register .form-errors{color:var(--error-color);margin:1em 0}.conversejs #controlbox #converse-register .provider-title{font-size:var(--font-size-huge);margin:0}.conversejs #controlbox #converse-register .provider-score{width:178px;margin-bottom:8px}.conversejs #controlbox #converse-register .form-help .url{font-weight:700;color:var(--link-color)}.conversejs #controlbox #converse-register .input-group{display:table;margin:auto;width:100%}.conversejs #controlbox #converse-register .input-group span{overflow-x:hidden;text-overflow:ellipsis;max-width:110px}.conversejs #controlbox #converse-register .input-group input[name=username],.conversejs #controlbox #converse-register .input-group span{display:table-cell;text-align:left}.conversejs #controlbox #converse-register .instructions{color:gray;font-size:85%}.conversejs #controlbox #converse-register .instructions:hover{color:var(--controlbox-text-color)}.conversejs #controlbox .conn-feedback{color:var(--controlbox-head-color)}.conversejs #controlbox .conn-feedback.error{color:var(--error-color)}.conversejs #controlbox .conn-feedback p{padding-bottom:1em}.conversejs #controlbox .conn-feedback p.feedback-subject.error{font-weight:700}.conversejs #controlbox #converse-login-panel,.conversejs #controlbox #converse-register-panel{padding-top:0;padding-bottom:0}.conversejs #controlbox #converse-login-panel{flex-direction:row}.conversejs #controlbox .toggle-register-login{font-weight:700}.conversejs #controlbox .controlbox-pane .userinfo{padding-bottom:1em}.conversejs #controlbox .controlbox-pane .userinfo .username{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.conversejs #controlbox .controlbox-pane .userinfo .profile{margin-bottom:.75em}.conversejs #controlbox #chatrooms{padding:0}.conversejs #controlbox #chatrooms .add-chatroom{margin:0;padding:0}.conversejs #controlbox #chatrooms .add-chatroom input[type=button],.conversejs #controlbox #chatrooms .add-chatroom input[type=submit],.conversejs #controlbox #chatrooms .add-chatroom input[type=text]{width:100%}.conversejs #controlbox .controlbox-section .controlbox-heading{font-family:var(--heading-font);color:var(--controlbox-heading-color);font-weight:var(--controlbox-heading-font-weight);padding:0;font-size:1.1em;line-height:1.1em;text-transform:uppercase}.conversejs #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--groupchats-header-color)}.conversejs #controlbox .controlbox-section .controlbox-heading--contacts{color:var(--chat-head-color-dark)}.conversejs #controlbox .controlbox-section .controlbox-heading--headline{color:var(--headline-head-color)}.conversejs #controlbox .controlbox-section .controlbox-heading__btn{cursor:pointer;font-size:1em;padding:0;margin:var(--controlbox-heading-top-margin) 0 var(--inline-action-margin) 0;min-width:25px;text-align:center}.conversejs #controlbox .controlbox-section .controlbox-heading__btn.fa-vcard{margin-top:1em}.conversejs #controlbox .dropdown a{width:143px;display:inline-block}.conversejs #controlbox .dropdown li{list-style:none;padding-left:0}.conversejs #controlbox .dropdown dd ul{padding:0;list-style:none;position:absolute;left:0;top:0;width:100%;z-index:21;background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dd ul li:hover{background-color:var(--highlight-color)}.conversejs #controlbox .dropdown dd.search-xmpp{height:0}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container{position:absolute;z-index:22}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container form{box-shadow:1px 4px 10px 1px rgba(0,0,0,.4);background-color:#fff}.conversejs #controlbox .dropdown dd.search-xmpp li:hover{background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dt a span{cursor:pointer;display:block;padding:4px 7px 0 5px}.conversejs #controlbox .controlbox-panes{background-color:var(--controlbox-pane-background-color);border-right:.2143rem solid var(--panel-divider-color);height:100%;overflow-y:auto}.conversejs #controlbox .controlbox-subtitle{font-size:90%;padding:.5em;text-align:right}.conversejs #controlbox .controlbox-pane{background-color:var(--controlbox-pane-background-color);border:0;font-size:var(--font-size);left:0;text-align:left;overflow-x:hidden;padding:0 0 1em 0}.conversejs #controlbox .controlbox-pane .controlbox-padded{padding-left:1em;padding-right:1em;align-items:center;line-height:normal}.conversejs #controlbox .controlbox-pane .controlbox-padded .change-status{min-width:25px;text-align:center}.conversejs #controlbox .controlbox-pane .add-converse-contact{margin:0 0 .75em 0}.conversejs #controlbox .controlbox-pane .chatbox-btn{margin:0}.conversejs #controlbox .controlbox-pane .switch-form{text-align:center;padding:2em 0}.conversejs #controlbox .controlbox-pane dd{margin-left:0;margin-bottom:0}.conversejs #controlbox .controlbox-pane dd.odd{background-color:#dceac5}.conversejs #controlbox .add-xmpp-contact{padding:1em .5em}.conversejs #controlbox .add-xmpp-contact input{margin:0 0 1rem;width:100%}.conversejs #controlbox .add-xmpp-contact button{width:100%}.conversejs converse-chats.converse-overlayed{display:flex;flex-direction:row-reverse}.conversejs converse-chats.converse-overlayed .toggle-controlbox{order:-2;text-align:center;background-color:var(--link-color);border-top-left-radius:var(--button-border-radius);border-top-right-radius:var(--button-border-radius);color:#0a0a0a;float:right;height:100%;margin:0 var(--chat-gutter);padding:1em}.conversejs converse-chats.converse-overlayed .toggle-controlbox span{color:var(--inverse-link-color)}.conversejs converse-chats.converse-overlayed #controlbox{order:-1;min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .box-flyout{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .login-trusted{white-space:nowrap;font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-trusted{margin-top:.5em}.conversejs converse-chats.converse-overlayed #controlbox:not(.logged-out) .controlbox-head{height:15px}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:space-between;min-height:0}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .brand-heading{color:var(--controlbox-text-color);font-size:2em}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .chatbox-btn{color:var(--controlbox-head-color);margin:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-login,.conversejs converse-chats.converse-overlayed #controlbox #converse-register{flex:0 0 100%;max-width:100%;padding-bottom:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-register .button-cancel{font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{border-radius:var(--chatbox-border-radius)}.conversejs converse-chats.converse-embedded .toggle-controlbox,.conversejs converse-chats.converse-fullscreen .toggle-controlbox{display:none}.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{position:relative;width:100%;padding-right:15px;padding-left:15px;margin:0}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%}.conversejs converse-chats.converse-embedded #controlbox .flyout,.conversejs converse-chats.converse-fullscreen #controlbox .flyout,.conversejs converse-chats.converse-mobile #controlbox .flyout{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel .converse-form{padding:3em 2em 3em}.conversejs converse-chats.converse-embedded #controlbox .toggle-register-login,.conversejs converse-chats.converse-fullscreen #controlbox .toggle-register-login,.conversejs converse-chats.converse-mobile #controlbox .toggle-register-login{line-height:var(--line-height-huge)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo{flex:0 0 100%;max-width:100%;margin-top:5em;margin-bottom:1em}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{width:100%;font-size:500%;padding:.7em 0 0 0;opacity:.8;color:var(--brand-heading-color)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-subtitle{font-size:90%;padding:.5em}@media screen and (max-width:480px){.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{font-size:300%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%;opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;width:100%}.conversejs converse-chats.converse-embedded #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-mobile #controlbox.logged-out .box-flyout{width:100%}.conversejs converse-chats.converse-embedded #controlbox .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout,.conversejs converse-chats.converse-mobile #controlbox .box-flyout{border:0;width:100%;z-index:1;background-color:var(--controlbox-head-color)}.conversejs converse-chats.converse-embedded #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-mobile #controlbox .box-flyout .controlbox-head{display:none}.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{position:relative;width:100%;padding-right:15px;padding-left:15px;flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}@media(min-width:576px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 50%;max-width:50%;margin-left:25%}}.conversejs converse-chats.converse-embedded #controlbox #converse-login .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-login .title,.conversejs converse-chats.converse-embedded #controlbox #converse-register .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-register .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .title,.conversejs converse-chats.converse-mobile #controlbox #converse-login .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-login .title,.conversejs converse-chats.converse-mobile #controlbox #converse-register .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-register .title{margin:1em 0}.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=submit]{width:auto}.conversejs converse-chats.converse-fullscreen #controlbox{margin-left:-15px}.conversejs converse-chats.converse-fullscreen .controlbox-panes{padding-top:2em}.conversejs converse-chats.converse-overlayed .brand-heading{padding-top:.8rem;padding-left:.8rem;width:100%}.conversejs converse-chats.converse-overlayed .converse-svg-logo{height:1em}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-panel{height:100%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{margin-top:.5em}@media(max-width:767.98px){.conversejs{left:0;right:0;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.conversejs .converse-chatboxes{margin:0!important;flex-direction:row!important;justify-content:space-between}.conversejs .converse-chatboxes .converse-chatroom{font-size:14px}.conversejs .converse-chatboxes .chatbox .box-flyout{margin-left:15px;left:0;bottom:0;border-radius:0;width:100vw!important;height:var(--fullpage-chat-height)}.conversejs .converse-chatboxes #controlbox{width:100vw!important}.conversejs .converse-chatboxes #controlbox .box-flyout{width:100vw!important;height:var(--fullpage-chat-height);margin-right:-15px}.conversejs .converse-chatboxes #controlbox .sidebar{display:block}.conversejs .converse-chatboxes.sidebar-open .chatbox:not(#controlbox){display:none}.conversejs .converse-chatboxes.sidebar-open #controlbox .controlbox-pane{display:block}}","body.converse-fullscreen{margin:0;background-color:var(--global-background-color)}",".conversejs-bg .subdued{opacity:.35}.conversejs-bg .converse-brand{display:flex;justify-content:space-between;margin-top:15vh;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media(min-width:768px){.conversejs-bg .converse-brand__padding{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.conversejs-bg .converse-brand__padding{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.conversejs-bg .converse-brand__padding{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media(min-width:768px){.conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 75%;max-width:75%}}@media(min-width:1200px){.conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}.conversejs-bg .converse-brand__heading svg{margin-top:.3em}.conversejs-bg .converse-brand__text{color:#fff;font-family:var(--branding-font);font-weight:400;text-align:center;font-size:140%;margin-left:.2em}.conversejs-bg .converse-brand__text .byline{margin:0;font-family:var(--heading-font);font-size:.3em;opacity:.55;margin-bottom:2em;margin-left:-2.7em;word-spacing:5px}",".conversejs .chat-head-headline{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-body{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-body .chat-message{color:var(--headline-message-color)}.conversejs .chatbox.headlines .chat-content{height:100%}.conversejs .message.chat-msg.headline .chat-msg__body{margin-left:0}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .box-flyout{background-color:var(--headline-head-color)}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .flyout{border-color:var(--headline-head-color)}",".conversejs converse-chats.converse-overlayed converse-minimized-chats{order:100}.conversejs converse-chats.converse-overlayed #minimized-chats{width:var(--minimized-chats-width);margin-bottom:0;border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);color:var(--inverse-link-color);margin-right:var(--chat-gutter);padding:0}.conversejs converse-chats.converse-overlayed #minimized-chats .badge{bottom:8px;border:1px solid var(--overlayed-badge-color)}.conversejs converse-chats.converse-overlayed #minimized-chats #toggle-minimized-chats{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);background-color:var(--link-color);padding:1em 0 0 0;text-align:center;color:#fff;white-space:nowrap;overflow-y:hidden;text-overflow:ellipsis;display:block;height:45px;width:9em}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat{cursor:pointer;padding:1px 0 1px 5px;color:var(--chat-head-text-color);line-height:15px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:hover{text-decoration:none}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:visited{color:var(--chat-head-text-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout{flex-direction:column-reverse;bottom:45px;width:var(--minimized-chats-width)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head{min-height:0;padding:.3em;border-radius:var(--chatbox-border-radius);height:35px;margin-bottom:.2em;width:100%;max-width:9em;flex-wrap:nowrap}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout.minimized{height:auto}.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count{font-weight:700;background-color:#fff;border:1px solid;text-shadow:1px 1px 0 var(--text-shadow-color);color:var(--warning-color);border-radius:5px;padding:2px 4px;font-size:16px;text-align:center;position:absolute;right:116px;bottom:10px}.conversejs converse-chats.converse-overlayed #minimized-chats .chat-head-message-count-hidden,.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count-hidden{display:none}",".conversejs [hidden]{display:none}.conversejs .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.conversejs .form-group .suggestion-box{width:100%}.conversejs .suggestion-box{position:relative}.conversejs .suggestion-box mark{background:var(--completion-light-color)}.conversejs .suggestion-box>input{display:block}.conversejs .suggestion-box .suggestion-box__results,.conversejs .suggestion-box>ul{border-radius:.3em;border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);box-sizing:border-box;left:0;list-style:none;margin:.2em 0 0;min-width:100%;padding:0;position:absolute;right:0;text-shadow:none;z-index:2}.conversejs .suggestion-box .suggestion-box__results:before,.conversejs .suggestion-box>ul:before{content:\"\";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}.conversejs .suggestion-box .suggestion-box__results>li,.conversejs .suggestion-box>ul>li{background:rgba(255,255,255,.9);background:linear-gradient(to bottom right,#fff,rgba(255,255,255,.9));color:var(--text-color);cursor:pointer;display:flex;overflow-x:hidden;padding:1em;position:relative;text-overflow:ellipsis}.conversejs .suggestion-box .suggestion-box__results--below{top:2em}.conversejs .suggestion-box .suggestion-box__results--above{bottom:4.5em}.conversejs .suggestion-box .suggestion-box__results--above:before{display:none}.conversejs .suggestion-box .suggestion-box__results--above:after{z-index:-1;content:\"\";position:absolute;bottom:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-left:0;border-top:0;transform:rotate(45deg)}.conversejs .suggestion-box>ul:empty,.conversejs .suggestion-box>ul[hidden]{display:none}@supports(transform:scale(0)){.conversejs .suggestion-box>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.conversejs .suggestion-box>ul:empty,.conversejs .suggestion-box>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.conversejs .suggestion-box>ul>li[aria-selected=true]{background:var(--completion-dark-color);color:var(--inverse-link-color)}.conversejs .suggestion-box li:hover mark{background:var(--completion-light-color);color:var(--inverse-link-color)}.conversejs .suggestion-box li[aria-selected=true] mark{background:var(--completion-normal-color);color:inherit}.conversejs.converse-fullscreen .suggestion-box__results--above{bottom:4.5em}.conversejs.converse-overlayed .suggestion-box__results--above{bottom:3.5em}",".conversejs converse-muc.chatroom converse-muc-bottom-panel{display:contents;height:3em;padding:.5em;text-align:center;font-size:var(--font-size-small);background-color:var(--chatroom-head-bg-color);color:#fff}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--muted{height:4em;width:100%}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--nickname{padding:0;height:16em}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--nickname .muc-form-container .chatroom-form{padding-top:2em;padding-bottom:0}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .suggestion-box__results--above{bottom:4.5em}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea:active,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea:focus,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input:active,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input:focus{outline-color:var(--chatroom-head-bg-color)!important}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea.correcting,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input.correcting{background-color:var(--chatroom-correcting-color)}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea{width:100%;border:none;border-bottom-right-radius:0}",".conversejs converse-muc.chatroom .box-flyout .occupants{display:flex;flex-direction:column;justify-content:space-between;overflow-x:hidden;overflow-y:hidden;vertical-align:top;background-color:var(--occupants-background-color);border-left:var(--occupants-border-left);padding:.5em;max-width:75%;min-width:20%;flex:0 0 25%}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header{display:flex;flex-direction:column}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header .hide-occupants{align-self:flex-end;cursor:pointer;font-size:var(--font-size-small)}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header--title{margin-top:.5em;margin-bottom:.5em;display:flex;flex-direction:row}.conversejs converse-muc.chatroom .box-flyout .occupants .fa-user-plus{margin-right:.25em}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-heading{font-family:var(--heading-font);color:var(--groupchats-header-color-dark);padding-left:0;margin-right:1em}.conversejs converse-muc.chatroom .box-flyout .occupants .suggestion-box ul{padding:0}.conversejs converse-muc.chatroom .box-flyout .occupants .suggestion-box ul li{padding:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul{padding:0;margin-bottom:.5em;overflow-x:hidden;overflow-y:auto;list-style:none}.conversejs converse-muc.chatroom .box-flyout .occupants ul.occupant-list{overflow-y:auto;flex-basis:0;flex-grow:1}.conversejs converse-muc.chatroom .box-flyout .occupants ul li{cursor:default;display:block;font-size:var(--font-size-small);overflow:hidden;padding:.25em .25em .25em 0;text-overflow:ellipsis}.conversejs converse-muc.chatroom .box-flyout .occupants ul li .fa{margin-right:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.feature{font-size:var(--font-size-tiny)}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant{cursor:pointer}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge{display:flex;justify-content:space-between;flex-wrap:wrap}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge .occupant-badges{display:flex;justify-content:flex-end;flex-wrap:wrap;flex-direction:row}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge .occupant-badges span{margin-right:.25rem}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant div.row.no-gutters{flex-wrap:nowrap;min-height:1.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .badge{margin-bottom:.125rem}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status{display:inline-block;margin:0 .5em .125em 0;width:.5em;height:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-chat,.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-online{background-color:#1a9707}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-dnd{background-color:red}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-away{background-color:#ff8c00}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-xa{background-color:orange}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-offline{background-color:#a9a9a9}",".conversejs converse-muc.chatroom .chat-head-chatroom{color:var(--chatroom-head-color);background-color:var(--chatroom-head-bg-color);border-bottom:var(--chatroom-head-border-bottom)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc{color:var(--chatroom-head-color);display:var(--chatroom-head-description-display)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc a{color:var(--chatroom-head-description-link-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc:hover button{display:inline-block}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title .btn--transparent i{color:var(--chatroom-head-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked{margin-left:.5em;color:var(--chatroom-head-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__buttons{background-color:var(--chatroom-head-bg-color)}.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:hover.chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:visited.chatbox-btn.fa{color:var(--chat-head-text-color)}.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:hover.chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:visited.chatbox-btn.fa.button-on:before{color:var(--chatroom-head-button-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-btn.button-on:before{color:var(--chatroom-head-button-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text{display:var(--heading-display);font-weight:var(--chatroom-head-title-font-weight);margin:auto 0;padding-right:var(--chatroom-head-title-padding-right);white-space:nowrap}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text .chatroom-jid{font-size:var(--font-size-small)}",".conversejs #converse-roster{text-align:left;width:100%;position:relative;margin:0;height:var(--roster-height);padding:0;overflow:hidden;height:calc(100% - 70px)}.conversejs #converse-roster #online-count{display:none}.conversejs #converse-roster .search-xmpp ul li.chat-info{padding-left:10px}.conversejs #converse-roster .roster-filter-form{width:100%}.conversejs #converse-roster .roster-filter-form .button-group{padding:.2em}.conversejs #converse-roster .roster-filter-form span{padding:.3em;cursor:pointer;min-width:25px;text-align:center}.conversejs #converse-roster .roster-filter-form .roster-filter{width:100%;margin:.2em;font-size:calc(var(--font-size) - 2px)}.conversejs #converse-roster .roster-filter-form .state-type{font-size:calc(var(--font-size) - 2px);width:100%}.conversejs #converse-roster .roster-contacts{padding:0;margin:0 0 .2em 0;height:100%;overflow-x:hidden;overflow-y:auto;color:var(--text-color)}.conversejs #converse-roster .roster-contacts converse-roster-contact{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;justify-content:space-between}.conversejs #converse-roster .roster-contacts .group-toggle{font-family:var(--heading-font);display:block;width:100%;margin:.75em 0 .25em 0}.conversejs #converse-roster .roster-contacts .group-toggle,.conversejs #converse-roster .roster-contacts .group-toggle .fa{color:var(--chat-head-color-dark)!important}.conversejs #converse-roster .roster-contacts .group-toggle .fa:hover,.conversejs #converse-roster .roster-contacts .group-toggle:hover{color:var(--chat-head-color-darker)!important}.conversejs #converse-roster .roster-contacts .current-xmpp-contact{margin:.25em 0}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status{vertical-align:middle;font-size:.6em;margin-right:0;margin-left:-.7em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--offline{margin-right:.8em}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--online{color:var(--chat-status-online)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--busy{color:var(--chat-status-busy)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--away{color:var(--chat-status-away)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--offline{display:none}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .fa-times-circle,.conversejs #converse-roster .roster-contacts .current-xmpp-contact .far.fa-circle{color:var(--subdued-color)}.conversejs #converse-roster .roster-contacts li.requesting-xmpp-contact a{line-height:var(--line-height)}.conversejs #converse-roster .roster-contacts li.requesting-xmpp-contact .req-contact-name{padding:0 .2em 0 0}.conversejs #converse-roster .roster-contacts li .open-chat{margin:0;padding:0}.conversejs #converse-roster .roster-contacts li .open-chat.unread-msgs{font-weight:700}.conversejs #converse-roster .roster-contacts li .open-chat.unread-msgs .contact-name{width:70%}.conversejs #converse-roster .roster-contacts li .open-chat .msgs-indicator{color:#fff;background-color:var(--chat-head-color);opacity:1;border-radius:10%;padding:.2em .4em;font-size:var(--font-size-small);margin-right:0}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name{padding:0;margin:0;max-width:85%;float:none;height:100%}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name.unread-msgs{max-width:60%}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name.contact-name--offline{margin-left:.25em}.conversejs #converse-roster .roster-contacts li.odd{background-color:#dceac5}.conversejs #converse-roster .roster-contacts li a,.conversejs #converse-roster .roster-contacts li span{white-space:nowrap;text-overflow:ellipsis}.conversejs #converse-roster .roster-contacts li .span{display:inline-block}.conversejs #converse-roster .roster-contacts li .decline-xmpp-request{margin-left:5px}.conversejs #converse-roster .roster-contacts li:hover{background-color:var(controlbox-pane-bg-hover-color)}.conversejs #converse-roster span.pending-contact-name{line-height:var(--line-height);width:100%}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/","webpack://converse.js/"],"names":[],"mappings":"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","file":"../dist/converse.css","sourcesContent":["/*!\n * Converse.js (Web-based XMPP instant messaging client)\n * https://conversejs.org\n *\n * Copyright (c) 2013-2021, JC Brand \n * Licensed under the Mozilla Public License\n */@font-face{font-family:Baumans;font-style:normal;font-weight:400;src:local(\"Baumans Regular\"),local(\"Baumans-Regular\"),url(webfonts/baumans.ttf) format(\"truetype\")}@font-face{font-family:Muli;font-style:normal;font-weight:400;src:local(\"Muli Regular\"),local(\"Muli-Regular\"),url(webfonts/muli.ttf) format(\"truetype\")}@font-face{font-family:ConverseFontAwesomeBrands;font-style:normal;font-weight:400;src:url(webfonts/fa-brands-400.eot);src:url(webfonts/fa-brands-400.eot?#iefix) format(\"embedded-opentype\"),url(webfonts/fa-brands-400.woff2) format(\"woff2\"),url(webfonts/fa-brands-400.woff) format(\"woff\"),url(webfonts/fa-brands-400.ttf) format(\"truetype\"),url(webfonts/fa-brands-400.svg#fontawesome) format(\"svg\")}@font-face{font-family:ConverseFontAwesomeRegular;font-style:normal;font-weight:400;src:url(webfonts/fa-regular-400.eot);src:url(webfonts/fa-regular-400.eot?#iefix) format(\"embedded-opentype\"),url(webfonts/fa-regular-400.woff2) format(\"woff2\"),url(webfonts/fa-regular-400.woff) format(\"woff\"),url(webfonts/fa-regular-400.ttf) format(\"truetype\"),url(webfonts/fa-regular-400.svg#fontawesome) format(\"svg\");font-weight:400;font-style:normal}@font-face{font-family:ConverseFontAwesomeSolid;font-style:normal;font-weight:900;src:url(webfonts/fa-solid-900.eot);src:url(webfonts/fa-solid-900.eot?#iefix) format(\"embedded-opentype\"),url(webfonts/fa-solid-900.svg#fontawesome) format(\"svg\"),url(webfonts/fa-solid-900.woff2) format(\"woff2\"),url(webfonts/fa-solid-900.woff) format(\"woff\"),url(webfonts/fa-solid-900.ttf) format(\"truetype\")}.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scale(-1,1)}.fa-flip-vertical{transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:\"\"}.fa-accessible-icon:before{content:\"\"}.fa-accusoft:before{content:\"\"}.fa-acquisitions-incorporated:before{content:\"\"}.fa-ad:before{content:\"\"}.fa-address-book:before{content:\"\"}.fa-address-card:before{content:\"\"}.fa-adjust:before{content:\"\"}.fa-adn:before{content:\"\"}.fa-adobe:before{content:\"\"}.fa-adversal:before{content:\"\"}.fa-affiliatetheme:before{content:\"\"}.fa-air-freshener:before{content:\"\"}.fa-airbnb:before{content:\"\"}.fa-algolia:before{content:\"\"}.fa-align-center:before{content:\"\"}.fa-align-justify:before{content:\"\"}.fa-align-left:before{content:\"\"}.fa-align-right:before{content:\"\"}.fa-alipay:before{content:\"\"}.fa-allergies:before{content:\"\"}.fa-amazon:before{content:\"\"}.fa-amazon-pay:before{content:\"\"}.fa-ambulance:before{content:\"\"}.fa-american-sign-language-interpreting:before{content:\"\"}.fa-amilia:before{content:\"\"}.fa-anchor:before{content:\"\"}.fa-android:before{content:\"\"}.fa-angellist:before{content:\"\"}.fa-angle-double-down:before{content:\"\"}.fa-angle-double-left:before{content:\"\"}.fa-angle-double-right:before{content:\"\"}.fa-angle-double-up:before{content:\"\"}.fa-angle-down:before{content:\"\"}.fa-angle-left:before{content:\"\"}.fa-angle-right:before{content:\"\"}.fa-angle-up:before{content:\"\"}.fa-angry:before{content:\"\"}.fa-angrycreative:before{content:\"\"}.fa-angular:before{content:\"\"}.fa-ankh:before{content:\"\"}.fa-app-store:before{content:\"\"}.fa-app-store-ios:before{content:\"\"}.fa-apper:before{content:\"\"}.fa-apple:before{content:\"\"}.fa-apple-alt:before{content:\"\"}.fa-apple-pay:before{content:\"\"}.fa-archive:before{content:\"\"}.fa-archway:before{content:\"\"}.fa-arrow-alt-circle-down:before{content:\"\"}.fa-arrow-alt-circle-left:before{content:\"\"}.fa-arrow-alt-circle-right:before{content:\"\"}.fa-arrow-alt-circle-up:before{content:\"\"}.fa-arrow-circle-down:before{content:\"\"}.fa-arrow-circle-left:before{content:\"\"}.fa-arrow-circle-right:before{content:\"\"}.fa-arrow-circle-up:before{content:\"\"}.fa-arrow-down:before{content:\"\"}.fa-arrow-left:before{content:\"\"}.fa-arrow-right:before{content:\"\"}.fa-arrow-up:before{content:\"\"}.fa-arrows-alt:before{content:\"\"}.fa-arrows-alt-h:before{content:\"\"}.fa-arrows-alt-v:before{content:\"\"}.fa-artstation:before{content:\"\"}.fa-assistive-listening-systems:before{content:\"\"}.fa-asterisk:before{content:\"\"}.fa-asymmetrik:before{content:\"\"}.fa-at:before{content:\"\"}.fa-atlas:before{content:\"\"}.fa-atlassian:before{content:\"\"}.fa-atom:before{content:\"\"}.fa-audible:before{content:\"\"}.fa-audio-description:before{content:\"\"}.fa-autoprefixer:before{content:\"\"}.fa-avianex:before{content:\"\"}.fa-aviato:before{content:\"\"}.fa-award:before{content:\"\"}.fa-aws:before{content:\"\"}.fa-baby:before{content:\"\"}.fa-baby-carriage:before{content:\"\"}.fa-backspace:before{content:\"\"}.fa-backward:before{content:\"\"}.fa-bacon:before{content:\"\"}.fa-bacteria:before{content:\"\"}.fa-bacterium:before{content:\"\"}.fa-bahai:before{content:\"\"}.fa-balance-scale:before{content:\"\"}.fa-balance-scale-left:before{content:\"\"}.fa-balance-scale-right:before{content:\"\"}.fa-ban:before{content:\"\"}.fa-band-aid:before{content:\"\"}.fa-bandcamp:before{content:\"\"}.fa-barcode:before{content:\"\"}.fa-bars:before{content:\"\"}.fa-baseball-ball:before{content:\"\"}.fa-basketball-ball:before{content:\"\"}.fa-bath:before{content:\"\"}.fa-battery-empty:before{content:\"\"}.fa-battery-full:before{content:\"\"}.fa-battery-half:before{content:\"\"}.fa-battery-quarter:before{content:\"\"}.fa-battery-three-quarters:before{content:\"\"}.fa-battle-net:before{content:\"\"}.fa-bed:before{content:\"\"}.fa-beer:before{content:\"\"}.fa-behance:before{content:\"\"}.fa-behance-square:before{content:\"\"}.fa-bell:before{content:\"\"}.fa-bell-slash:before{content:\"\"}.fa-bezier-curve:before{content:\"\"}.fa-bible:before{content:\"\"}.fa-bicycle:before{content:\"\"}.fa-biking:before{content:\"\"}.fa-bimobject:before{content:\"\"}.fa-binoculars:before{content:\"\"}.fa-biohazard:before{content:\"\"}.fa-birthday-cake:before{content:\"\"}.fa-bitbucket:before{content:\"\"}.fa-bitcoin:before{content:\"\"}.fa-bity:before{content:\"\"}.fa-black-tie:before{content:\"\"}.fa-blackberry:before{content:\"\"}.fa-blender:before{content:\"\"}.fa-blender-phone:before{content:\"\"}.fa-blind:before{content:\"\"}.fa-blog:before{content:\"\"}.fa-blogger:before{content:\"\"}.fa-blogger-b:before{content:\"\"}.fa-bluetooth:before{content:\"\"}.fa-bluetooth-b:before{content:\"\"}.fa-bold:before{content:\"\"}.fa-bolt:before{content:\"\"}.fa-bomb:before{content:\"\"}.fa-bone:before{content:\"\"}.fa-bong:before{content:\"\"}.fa-book:before{content:\"\"}.fa-book-dead:before{content:\"\"}.fa-book-medical:before{content:\"\"}.fa-book-open:before{content:\"\"}.fa-book-reader:before{content:\"\"}.fa-bookmark:before{content:\"\"}.fa-bootstrap:before{content:\"\"}.fa-border-all:before{content:\"\"}.fa-border-none:before{content:\"\"}.fa-border-style:before{content:\"\"}.fa-bowling-ball:before{content:\"\"}.fa-box:before{content:\"\"}.fa-box-open:before{content:\"\"}.fa-box-tissue:before{content:\"\"}.fa-boxes:before{content:\"\"}.fa-braille:before{content:\"\"}.fa-brain:before{content:\"\"}.fa-bread-slice:before{content:\"\"}.fa-briefcase:before{content:\"\"}.fa-briefcase-medical:before{content:\"\"}.fa-broadcast-tower:before{content:\"\"}.fa-broom:before{content:\"\"}.fa-brush:before{content:\"\"}.fa-btc:before{content:\"\"}.fa-buffer:before{content:\"\"}.fa-bug:before{content:\"\"}.fa-building:before{content:\"\"}.fa-bullhorn:before{content:\"\"}.fa-bullseye:before{content:\"\"}.fa-burn:before{content:\"\"}.fa-buromobelexperte:before{content:\"\"}.fa-bus:before{content:\"\"}.fa-bus-alt:before{content:\"\"}.fa-business-time:before{content:\"\"}.fa-buy-n-large:before{content:\"\"}.fa-buysellads:before{content:\"\"}.fa-calculator:before{content:\"\"}.fa-calendar:before{content:\"\"}.fa-calendar-alt:before{content:\"\"}.fa-calendar-check:before{content:\"\"}.fa-calendar-day:before{content:\"\"}.fa-calendar-minus:before{content:\"\"}.fa-calendar-plus:before{content:\"\"}.fa-calendar-times:before{content:\"\"}.fa-calendar-week:before{content:\"\"}.fa-camera:before{content:\"\"}.fa-camera-retro:before{content:\"\"}.fa-campground:before{content:\"\"}.fa-canadian-maple-leaf:before{content:\"\"}.fa-candy-cane:before{content:\"\"}.fa-cannabis:before{content:\"\"}.fa-capsules:before{content:\"\"}.fa-car:before{content:\"\"}.fa-car-alt:before{content:\"\"}.fa-car-battery:before{content:\"\"}.fa-car-crash:before{content:\"\"}.fa-car-side:before{content:\"\"}.fa-caravan:before{content:\"\"}.fa-caret-down:before{content:\"\"}.fa-caret-left:before{content:\"\"}.fa-caret-right:before{content:\"\"}.fa-caret-square-down:before{content:\"\"}.fa-caret-square-left:before{content:\"\"}.fa-caret-square-right:before{content:\"\"}.fa-caret-square-up:before{content:\"\"}.fa-caret-up:before{content:\"\"}.fa-carrot:before{content:\"\"}.fa-cart-arrow-down:before{content:\"\"}.fa-cart-plus:before{content:\"\"}.fa-cash-register:before{content:\"\"}.fa-cat:before{content:\"\"}.fa-cc-amazon-pay:before{content:\"\"}.fa-cc-amex:before{content:\"\"}.fa-cc-apple-pay:before{content:\"\"}.fa-cc-diners-club:before{content:\"\"}.fa-cc-discover:before{content:\"\"}.fa-cc-jcb:before{content:\"\"}.fa-cc-mastercard:before{content:\"\"}.fa-cc-paypal:before{content:\"\"}.fa-cc-stripe:before{content:\"\"}.fa-cc-visa:before{content:\"\"}.fa-centercode:before{content:\"\"}.fa-centos:before{content:\"\"}.fa-certificate:before{content:\"\"}.fa-chair:before{content:\"\"}.fa-chalkboard:before{content:\"\"}.fa-chalkboard-teacher:before{content:\"\"}.fa-charging-station:before{content:\"\"}.fa-chart-area:before{content:\"\"}.fa-chart-bar:before{content:\"\"}.fa-chart-line:before{content:\"\"}.fa-chart-pie:before{content:\"\"}.fa-check:before{content:\"\"}.fa-check-circle:before{content:\"\"}.fa-check-double:before{content:\"\"}.fa-check-square:before{content:\"\"}.fa-cheese:before{content:\"\"}.fa-chess:before{content:\"\"}.fa-chess-bishop:before{content:\"\"}.fa-chess-board:before{content:\"\"}.fa-chess-king:before{content:\"\"}.fa-chess-knight:before{content:\"\"}.fa-chess-pawn:before{content:\"\"}.fa-chess-queen:before{content:\"\"}.fa-chess-rook:before{content:\"\"}.fa-chevron-circle-down:before{content:\"\"}.fa-chevron-circle-left:before{content:\"\"}.fa-chevron-circle-right:before{content:\"\"}.fa-chevron-circle-up:before{content:\"\"}.fa-chevron-down:before{content:\"\"}.fa-chevron-left:before{content:\"\"}.fa-chevron-right:before{content:\"\"}.fa-chevron-up:before{content:\"\"}.fa-child:before{content:\"\"}.fa-chrome:before{content:\"\"}.fa-chromecast:before{content:\"\"}.fa-church:before{content:\"\"}.fa-circle:before{content:\"\"}.fa-circle-notch:before{content:\"\"}.fa-city:before{content:\"\"}.fa-clinic-medical:before{content:\"\"}.fa-clipboard:before{content:\"\"}.fa-clipboard-check:before{content:\"\"}.fa-clipboard-list:before{content:\"\"}.fa-clock:before{content:\"\"}.fa-clone:before{content:\"\"}.fa-closed-captioning:before{content:\"\"}.fa-cloud:before{content:\"\"}.fa-cloud-download-alt:before{content:\"\"}.fa-cloud-meatball:before{content:\"\"}.fa-cloud-moon:before{content:\"\"}.fa-cloud-moon-rain:before{content:\"\"}.fa-cloud-rain:before{content:\"\"}.fa-cloud-showers-heavy:before{content:\"\"}.fa-cloud-sun:before{content:\"\"}.fa-cloud-sun-rain:before{content:\"\"}.fa-cloud-upload-alt:before{content:\"\"}.fa-cloudscale:before{content:\"\"}.fa-cloudsmith:before{content:\"\"}.fa-cloudversify:before{content:\"\"}.fa-cocktail:before{content:\"\"}.fa-code:before{content:\"\"}.fa-code-branch:before{content:\"\"}.fa-codepen:before{content:\"\"}.fa-codiepie:before{content:\"\"}.fa-coffee:before{content:\"\"}.fa-cog:before{content:\"\"}.fa-cogs:before{content:\"\"}.fa-coins:before{content:\"\"}.fa-columns:before{content:\"\"}.fa-comment:before{content:\"\"}.fa-comment-alt:before{content:\"\"}.fa-comment-dollar:before{content:\"\"}.fa-comment-dots:before{content:\"\"}.fa-comment-medical:before{content:\"\"}.fa-comment-slash:before{content:\"\"}.fa-comments:before{content:\"\"}.fa-comments-dollar:before{content:\"\"}.fa-compact-disc:before{content:\"\"}.fa-compass:before{content:\"\"}.fa-compress:before{content:\"\"}.fa-compress-alt:before{content:\"\"}.fa-compress-arrows-alt:before{content:\"\"}.fa-concierge-bell:before{content:\"\"}.fa-confluence:before{content:\"\"}.fa-connectdevelop:before{content:\"\"}.fa-contao:before{content:\"\"}.fa-cookie:before{content:\"\"}.fa-cookie-bite:before{content:\"\"}.fa-copy:before{content:\"\"}.fa-copyright:before{content:\"\"}.fa-cotton-bureau:before{content:\"\"}.fa-couch:before{content:\"\"}.fa-cpanel:before{content:\"\"}.fa-creative-commons:before{content:\"\"}.fa-creative-commons-by:before{content:\"\"}.fa-creative-commons-nc:before{content:\"\"}.fa-creative-commons-nc-eu:before{content:\"\"}.fa-creative-commons-nc-jp:before{content:\"\"}.fa-creative-commons-nd:before{content:\"\"}.fa-creative-commons-pd:before{content:\"\"}.fa-creative-commons-pd-alt:before{content:\"\"}.fa-creative-commons-remix:before{content:\"\"}.fa-creative-commons-sa:before{content:\"\"}.fa-creative-commons-sampling:before{content:\"\"}.fa-creative-commons-sampling-plus:before{content:\"\"}.fa-creative-commons-share:before{content:\"\"}.fa-creative-commons-zero:before{content:\"\"}.fa-credit-card:before{content:\"\"}.fa-critical-role:before{content:\"\"}.fa-crop:before{content:\"\"}.fa-crop-alt:before{content:\"\"}.fa-cross:before{content:\"\"}.fa-crosshairs:before{content:\"\"}.fa-crow:before{content:\"\"}.fa-crown:before{content:\"\"}.fa-crutch:before{content:\"\"}.fa-css3:before{content:\"\"}.fa-css3-alt:before{content:\"\"}.fa-cube:before{content:\"\"}.fa-cubes:before{content:\"\"}.fa-cut:before{content:\"\"}.fa-cuttlefish:before{content:\"\"}.fa-d-and-d:before{content:\"\"}.fa-d-and-d-beyond:before{content:\"\"}.fa-dailymotion:before{content:\"\"}.fa-dashcube:before{content:\"\"}.fa-database:before{content:\"\"}.fa-deaf:before{content:\"\"}.fa-deezer:before{content:\"\"}.fa-delicious:before{content:\"\"}.fa-democrat:before{content:\"\"}.fa-deploydog:before{content:\"\"}.fa-deskpro:before{content:\"\"}.fa-desktop:before{content:\"\"}.fa-dev:before{content:\"\"}.fa-deviantart:before{content:\"\"}.fa-dharmachakra:before{content:\"\"}.fa-dhl:before{content:\"\"}.fa-diagnoses:before{content:\"\"}.fa-diaspora:before{content:\"\"}.fa-dice:before{content:\"\"}.fa-dice-d20:before{content:\"\"}.fa-dice-d6:before{content:\"\"}.fa-dice-five:before{content:\"\"}.fa-dice-four:before{content:\"\"}.fa-dice-one:before{content:\"\"}.fa-dice-six:before{content:\"\"}.fa-dice-three:before{content:\"\"}.fa-dice-two:before{content:\"\"}.fa-digg:before{content:\"\"}.fa-digital-ocean:before{content:\"\"}.fa-digital-tachograph:before{content:\"\"}.fa-directions:before{content:\"\"}.fa-discord:before{content:\"\"}.fa-discourse:before{content:\"\"}.fa-disease:before{content:\"\"}.fa-divide:before{content:\"\"}.fa-dizzy:before{content:\"\"}.fa-dna:before{content:\"\"}.fa-dochub:before{content:\"\"}.fa-docker:before{content:\"\"}.fa-dog:before{content:\"\"}.fa-dollar-sign:before{content:\"\"}.fa-dolly:before{content:\"\"}.fa-dolly-flatbed:before{content:\"\"}.fa-donate:before{content:\"\"}.fa-door-closed:before{content:\"\"}.fa-door-open:before{content:\"\"}.fa-dot-circle:before{content:\"\"}.fa-dove:before{content:\"\"}.fa-download:before{content:\"\"}.fa-draft2digital:before{content:\"\"}.fa-drafting-compass:before{content:\"\"}.fa-dragon:before{content:\"\"}.fa-draw-polygon:before{content:\"\"}.fa-dribbble:before{content:\"\"}.fa-dribbble-square:before{content:\"\"}.fa-dropbox:before{content:\"\"}.fa-drum:before{content:\"\"}.fa-drum-steelpan:before{content:\"\"}.fa-drumstick-bite:before{content:\"\"}.fa-drupal:before{content:\"\"}.fa-dumbbell:before{content:\"\"}.fa-dumpster:before{content:\"\"}.fa-dumpster-fire:before{content:\"\"}.fa-dungeon:before{content:\"\"}.fa-dyalog:before{content:\"\"}.fa-earlybirds:before{content:\"\"}.fa-ebay:before{content:\"\"}.fa-edge:before{content:\"\"}.fa-edge-legacy:before{content:\"\"}.fa-edit:before{content:\"\"}.fa-egg:before{content:\"\"}.fa-eject:before{content:\"\"}.fa-elementor:before{content:\"\"}.fa-ellipsis-h:before{content:\"\"}.fa-ellipsis-v:before{content:\"\"}.fa-ello:before{content:\"\"}.fa-ember:before{content:\"\"}.fa-empire:before{content:\"\"}.fa-envelope:before{content:\"\"}.fa-envelope-open:before{content:\"\"}.fa-envelope-open-text:before{content:\"\"}.fa-envelope-square:before{content:\"\"}.fa-envira:before{content:\"\"}.fa-equals:before{content:\"\"}.fa-eraser:before{content:\"\"}.fa-erlang:before{content:\"\"}.fa-ethereum:before{content:\"\"}.fa-ethernet:before{content:\"\"}.fa-etsy:before{content:\"\"}.fa-euro-sign:before{content:\"\"}.fa-evernote:before{content:\"\"}.fa-exchange-alt:before{content:\"\"}.fa-exclamation:before{content:\"\"}.fa-exclamation-circle:before{content:\"\"}.fa-exclamation-triangle:before{content:\"\"}.fa-expand:before{content:\"\"}.fa-expand-alt:before{content:\"\"}.fa-expand-arrows-alt:before{content:\"\"}.fa-expeditedssl:before{content:\"\"}.fa-external-link-alt:before{content:\"\"}.fa-external-link-square-alt:before{content:\"\"}.fa-eye:before{content:\"\"}.fa-eye-dropper:before{content:\"\"}.fa-eye-slash:before{content:\"\"}.fa-facebook:before{content:\"\"}.fa-facebook-f:before{content:\"\"}.fa-facebook-messenger:before{content:\"\"}.fa-facebook-square:before{content:\"\"}.fa-fan:before{content:\"\"}.fa-fantasy-flight-games:before{content:\"\"}.fa-fast-backward:before{content:\"\"}.fa-fast-forward:before{content:\"\"}.fa-faucet:before{content:\"\"}.fa-fax:before{content:\"\"}.fa-feather:before{content:\"\"}.fa-feather-alt:before{content:\"\"}.fa-fedex:before{content:\"\"}.fa-fedora:before{content:\"\"}.fa-female:before{content:\"\"}.fa-fighter-jet:before{content:\"\"}.fa-figma:before{content:\"\"}.fa-file:before{content:\"\"}.fa-file-alt:before{content:\"\"}.fa-file-archive:before{content:\"\"}.fa-file-audio:before{content:\"\"}.fa-file-code:before{content:\"\"}.fa-file-contract:before{content:\"\"}.fa-file-csv:before{content:\"\"}.fa-file-download:before{content:\"\"}.fa-file-excel:before{content:\"\"}.fa-file-export:before{content:\"\"}.fa-file-image:before{content:\"\"}.fa-file-import:before{content:\"\"}.fa-file-invoice:before{content:\"\"}.fa-file-invoice-dollar:before{content:\"\"}.fa-file-medical:before{content:\"\"}.fa-file-medical-alt:before{content:\"\"}.fa-file-pdf:before{content:\"\"}.fa-file-powerpoint:before{content:\"\"}.fa-file-prescription:before{content:\"\"}.fa-file-signature:before{content:\"\"}.fa-file-upload:before{content:\"\"}.fa-file-video:before{content:\"\"}.fa-file-word:before{content:\"\"}.fa-fill:before{content:\"\"}.fa-fill-drip:before{content:\"\"}.fa-film:before{content:\"\"}.fa-filter:before{content:\"\"}.fa-fingerprint:before{content:\"\"}.fa-fire:before{content:\"\"}.fa-fire-alt:before{content:\"\"}.fa-fire-extinguisher:before{content:\"\"}.fa-firefox:before{content:\"\"}.fa-firefox-browser:before{content:\"\"}.fa-first-aid:before{content:\"\"}.fa-first-order:before{content:\"\"}.fa-first-order-alt:before{content:\"\"}.fa-firstdraft:before{content:\"\"}.fa-fish:before{content:\"\"}.fa-fist-raised:before{content:\"\"}.fa-flag:before{content:\"\"}.fa-flag-checkered:before{content:\"\"}.fa-flag-usa:before{content:\"\"}.fa-flask:before{content:\"\"}.fa-flickr:before{content:\"\"}.fa-flipboard:before{content:\"\"}.fa-flushed:before{content:\"\"}.fa-fly:before{content:\"\"}.fa-folder:before{content:\"\"}.fa-folder-minus:before{content:\"\"}.fa-folder-open:before{content:\"\"}.fa-folder-plus:before{content:\"\"}.fa-font:before{content:\"\"}.fa-font-awesome:before{content:\"\"}.fa-font-awesome-alt:before{content:\"\"}.fa-font-awesome-flag:before{content:\"\"}.fa-font-awesome-logo-full:before{content:\"\"}.fa-fonticons:before{content:\"\"}.fa-fonticons-fi:before{content:\"\"}.fa-football-ball:before{content:\"\"}.fa-fort-awesome:before{content:\"\"}.fa-fort-awesome-alt:before{content:\"\"}.fa-forumbee:before{content:\"\"}.fa-forward:before{content:\"\"}.fa-foursquare:before{content:\"\"}.fa-free-code-camp:before{content:\"\"}.fa-freebsd:before{content:\"\"}.fa-frog:before{content:\"\"}.fa-frown:before{content:\"\"}.fa-frown-open:before{content:\"\"}.fa-fulcrum:before{content:\"\"}.fa-funnel-dollar:before{content:\"\"}.fa-futbol:before{content:\"\"}.fa-galactic-republic:before{content:\"\"}.fa-galactic-senate:before{content:\"\"}.fa-gamepad:before{content:\"\"}.fa-gas-pump:before{content:\"\"}.fa-gavel:before{content:\"\"}.fa-gem:before{content:\"\"}.fa-genderless:before{content:\"\"}.fa-get-pocket:before{content:\"\"}.fa-gg:before{content:\"\"}.fa-gg-circle:before{content:\"\"}.fa-ghost:before{content:\"\"}.fa-gift:before{content:\"\"}.fa-gifts:before{content:\"\"}.fa-git:before{content:\"\"}.fa-git-alt:before{content:\"\"}.fa-git-square:before{content:\"\"}.fa-github:before{content:\"\"}.fa-github-alt:before{content:\"\"}.fa-github-square:before{content:\"\"}.fa-gitkraken:before{content:\"\"}.fa-gitlab:before{content:\"\"}.fa-gitter:before{content:\"\"}.fa-glass-cheers:before{content:\"\"}.fa-glass-martini:before{content:\"\"}.fa-glass-martini-alt:before{content:\"\"}.fa-glass-whiskey:before{content:\"\"}.fa-glasses:before{content:\"\"}.fa-glide:before{content:\"\"}.fa-glide-g:before{content:\"\"}.fa-globe:before{content:\"\"}.fa-globe-africa:before{content:\"\"}.fa-globe-americas:before{content:\"\"}.fa-globe-asia:before{content:\"\"}.fa-globe-europe:before{content:\"\"}.fa-gofore:before{content:\"\"}.fa-golf-ball:before{content:\"\"}.fa-goodreads:before{content:\"\"}.fa-goodreads-g:before{content:\"\"}.fa-google:before{content:\"\"}.fa-google-drive:before{content:\"\"}.fa-google-pay:before{content:\"\"}.fa-google-play:before{content:\"\"}.fa-google-plus:before{content:\"\"}.fa-google-plus-g:before{content:\"\"}.fa-google-plus-square:before{content:\"\"}.fa-google-wallet:before{content:\"\"}.fa-gopuram:before{content:\"\"}.fa-graduation-cap:before{content:\"\"}.fa-gratipay:before{content:\"\"}.fa-grav:before{content:\"\"}.fa-greater-than:before{content:\"\"}.fa-greater-than-equal:before{content:\"\"}.fa-grimace:before{content:\"\"}.fa-grin:before{content:\"\"}.fa-grin-alt:before{content:\"\"}.fa-grin-beam:before{content:\"\"}.fa-grin-beam-sweat:before{content:\"\"}.fa-grin-hearts:before{content:\"\"}.fa-grin-squint:before{content:\"\"}.fa-grin-squint-tears:before{content:\"\"}.fa-grin-stars:before{content:\"\"}.fa-grin-tears:before{content:\"\"}.fa-grin-tongue:before{content:\"\"}.fa-grin-tongue-squint:before{content:\"\"}.fa-grin-tongue-wink:before{content:\"\"}.fa-grin-wink:before{content:\"\"}.fa-grip-horizontal:before{content:\"\"}.fa-grip-lines:before{content:\"\"}.fa-grip-lines-vertical:before{content:\"\"}.fa-grip-vertical:before{content:\"\"}.fa-gripfire:before{content:\"\"}.fa-grunt:before{content:\"\"}.fa-guitar:before{content:\"\"}.fa-gulp:before{content:\"\"}.fa-h-square:before{content:\"\"}.fa-hacker-news:before{content:\"\"}.fa-hacker-news-square:before{content:\"\"}.fa-hackerrank:before{content:\"\"}.fa-hamburger:before{content:\"\"}.fa-hammer:before{content:\"\"}.fa-hamsa:before{content:\"\"}.fa-hand-holding:before{content:\"\"}.fa-hand-holding-heart:before{content:\"\"}.fa-hand-holding-medical:before{content:\"\"}.fa-hand-holding-usd:before{content:\"\"}.fa-hand-holding-water:before{content:\"\"}.fa-hand-lizard:before{content:\"\"}.fa-hand-middle-finger:before{content:\"\"}.fa-hand-paper:before{content:\"\"}.fa-hand-peace:before{content:\"\"}.fa-hand-point-down:before{content:\"\"}.fa-hand-point-left:before{content:\"\"}.fa-hand-point-right:before{content:\"\"}.fa-hand-point-up:before{content:\"\"}.fa-hand-pointer:before{content:\"\"}.fa-hand-rock:before{content:\"\"}.fa-hand-scissors:before{content:\"\"}.fa-hand-sparkles:before{content:\"\"}.fa-hand-spock:before{content:\"\"}.fa-hands:before{content:\"\"}.fa-hands-helping:before{content:\"\"}.fa-hands-wash:before{content:\"\"}.fa-handshake:before{content:\"\"}.fa-handshake-alt-slash:before{content:\"\"}.fa-handshake-slash:before{content:\"\"}.fa-hanukiah:before{content:\"\"}.fa-hard-hat:before{content:\"\"}.fa-hashtag:before{content:\"\"}.fa-hat-cowboy:before{content:\"\"}.fa-hat-cowboy-side:before{content:\"\"}.fa-hat-wizard:before{content:\"\"}.fa-hdd:before{content:\"\"}.fa-head-side-cough:before{content:\"\"}.fa-head-side-cough-slash:before{content:\"\"}.fa-head-side-mask:before{content:\"\"}.fa-head-side-virus:before{content:\"\"}.fa-heading:before{content:\"\"}.fa-headphones:before{content:\"\"}.fa-headphones-alt:before{content:\"\"}.fa-headset:before{content:\"\"}.fa-heart:before{content:\"\"}.fa-heart-broken:before{content:\"\"}.fa-heartbeat:before{content:\"\"}.fa-helicopter:before{content:\"\"}.fa-highlighter:before{content:\"\"}.fa-hiking:before{content:\"\"}.fa-hippo:before{content:\"\"}.fa-hips:before{content:\"\"}.fa-hire-a-helper:before{content:\"\"}.fa-history:before{content:\"\"}.fa-hockey-puck:before{content:\"\"}.fa-holly-berry:before{content:\"\"}.fa-home:before{content:\"\"}.fa-hooli:before{content:\"\"}.fa-hornbill:before{content:\"\"}.fa-horse:before{content:\"\"}.fa-horse-head:before{content:\"\"}.fa-hospital:before{content:\"\"}.fa-hospital-alt:before{content:\"\"}.fa-hospital-symbol:before{content:\"\"}.fa-hospital-user:before{content:\"\"}.fa-hot-tub:before{content:\"\"}.fa-hotdog:before{content:\"\"}.fa-hotel:before{content:\"\"}.fa-hotjar:before{content:\"\"}.fa-hourglass:before{content:\"\"}.fa-hourglass-end:before{content:\"\"}.fa-hourglass-half:before{content:\"\"}.fa-hourglass-start:before{content:\"\"}.fa-house-damage:before{content:\"\"}.fa-house-user:before{content:\"\"}.fa-houzz:before{content:\"\"}.fa-hryvnia:before{content:\"\"}.fa-html5:before{content:\"\"}.fa-hubspot:before{content:\"\"}.fa-i-cursor:before{content:\"\"}.fa-ice-cream:before{content:\"\"}.fa-icicles:before{content:\"\"}.fa-icons:before{content:\"\"}.fa-id-badge:before{content:\"\"}.fa-id-card:before{content:\"\"}.fa-id-card-alt:before{content:\"\"}.fa-ideal:before{content:\"\"}.fa-igloo:before{content:\"\"}.fa-image:before{content:\"\"}.fa-images:before{content:\"\"}.fa-imdb:before{content:\"\"}.fa-inbox:before{content:\"\"}.fa-indent:before{content:\"\"}.fa-industry:before{content:\"\"}.fa-infinity:before{content:\"\"}.fa-info:before{content:\"\"}.fa-info-circle:before{content:\"\"}.fa-instagram:before{content:\"\"}.fa-instagram-square:before{content:\"\"}.fa-intercom:before{content:\"\"}.fa-internet-explorer:before{content:\"\"}.fa-invision:before{content:\"\"}.fa-ioxhost:before{content:\"\"}.fa-italic:before{content:\"\"}.fa-itch-io:before{content:\"\"}.fa-itunes:before{content:\"\"}.fa-itunes-note:before{content:\"\"}.fa-java:before{content:\"\"}.fa-jedi:before{content:\"\"}.fa-jedi-order:before{content:\"\"}.fa-jenkins:before{content:\"\"}.fa-jira:before{content:\"\"}.fa-joget:before{content:\"\"}.fa-joint:before{content:\"\"}.fa-joomla:before{content:\"\"}.fa-journal-whills:before{content:\"\"}.fa-js:before{content:\"\"}.fa-js-square:before{content:\"\"}.fa-jsfiddle:before{content:\"\"}.fa-kaaba:before{content:\"\"}.fa-kaggle:before{content:\"\"}.fa-key:before{content:\"\"}.fa-keybase:before{content:\"\"}.fa-keyboard:before{content:\"\"}.fa-keycdn:before{content:\"\"}.fa-khanda:before{content:\"\"}.fa-kickstarter:before{content:\"\"}.fa-kickstarter-k:before{content:\"\"}.fa-kiss:before{content:\"\"}.fa-kiss-beam:before{content:\"\"}.fa-kiss-wink-heart:before{content:\"\"}.fa-kiwi-bird:before{content:\"\"}.fa-korvue:before{content:\"\"}.fa-landmark:before{content:\"\"}.fa-language:before{content:\"\"}.fa-laptop:before{content:\"\"}.fa-laptop-code:before{content:\"\"}.fa-laptop-house:before{content:\"\"}.fa-laptop-medical:before{content:\"\"}.fa-laravel:before{content:\"\"}.fa-lastfm:before{content:\"\"}.fa-lastfm-square:before{content:\"\"}.fa-laugh:before{content:\"\"}.fa-laugh-beam:before{content:\"\"}.fa-laugh-squint:before{content:\"\"}.fa-laugh-wink:before{content:\"\"}.fa-layer-group:before{content:\"\"}.fa-leaf:before{content:\"\"}.fa-leanpub:before{content:\"\"}.fa-lemon:before{content:\"\"}.fa-less:before{content:\"\"}.fa-less-than:before{content:\"\"}.fa-less-than-equal:before{content:\"\"}.fa-level-down-alt:before{content:\"\"}.fa-level-up-alt:before{content:\"\"}.fa-life-ring:before{content:\"\"}.fa-lightbulb:before{content:\"\"}.fa-line:before{content:\"\"}.fa-link:before{content:\"\"}.fa-linkedin:before{content:\"\"}.fa-linkedin-in:before{content:\"\"}.fa-linode:before{content:\"\"}.fa-linux:before{content:\"\"}.fa-lira-sign:before{content:\"\"}.fa-list:before{content:\"\"}.fa-list-alt:before{content:\"\"}.fa-list-ol:before{content:\"\"}.fa-list-ul:before{content:\"\"}.fa-location-arrow:before{content:\"\"}.fa-lock:before{content:\"\"}.fa-lock-open:before{content:\"\"}.fa-long-arrow-alt-down:before{content:\"\"}.fa-long-arrow-alt-left:before{content:\"\"}.fa-long-arrow-alt-right:before{content:\"\"}.fa-long-arrow-alt-up:before{content:\"\"}.fa-low-vision:before{content:\"\"}.fa-luggage-cart:before{content:\"\"}.fa-lungs:before{content:\"\"}.fa-lungs-virus:before{content:\"\"}.fa-lyft:before{content:\"\"}.fa-magento:before{content:\"\"}.fa-magic:before{content:\"\"}.fa-magnet:before{content:\"\"}.fa-mail-bulk:before{content:\"\"}.fa-mailchimp:before{content:\"\"}.fa-male:before{content:\"\"}.fa-mandalorian:before{content:\"\"}.fa-map:before{content:\"\"}.fa-map-marked:before{content:\"\"}.fa-map-marked-alt:before{content:\"\"}.fa-map-marker:before{content:\"\"}.fa-map-marker-alt:before{content:\"\"}.fa-map-pin:before{content:\"\"}.fa-map-signs:before{content:\"\"}.fa-markdown:before{content:\"\"}.fa-marker:before{content:\"\"}.fa-mars:before{content:\"\"}.fa-mars-double:before{content:\"\"}.fa-mars-stroke:before{content:\"\"}.fa-mars-stroke-h:before{content:\"\"}.fa-mars-stroke-v:before{content:\"\"}.fa-mask:before{content:\"\"}.fa-mastodon:before{content:\"\"}.fa-maxcdn:before{content:\"\"}.fa-mdb:before{content:\"\"}.fa-medal:before{content:\"\"}.fa-medapps:before{content:\"\"}.fa-medium:before{content:\"\"}.fa-medium-m:before{content:\"\"}.fa-medkit:before{content:\"\"}.fa-medrt:before{content:\"\"}.fa-meetup:before{content:\"\"}.fa-megaport:before{content:\"\"}.fa-meh:before{content:\"\"}.fa-meh-blank:before{content:\"\"}.fa-meh-rolling-eyes:before{content:\"\"}.fa-memory:before{content:\"\"}.fa-mendeley:before{content:\"\"}.fa-menorah:before{content:\"\"}.fa-mercury:before{content:\"\"}.fa-meteor:before{content:\"\"}.fa-microblog:before{content:\"\"}.fa-microchip:before{content:\"\"}.fa-microphone:before{content:\"\"}.fa-microphone-alt:before{content:\"\"}.fa-microphone-alt-slash:before{content:\"\"}.fa-microphone-slash:before{content:\"\"}.fa-microscope:before{content:\"\"}.fa-microsoft:before{content:\"\"}.fa-minus:before{content:\"\"}.fa-minus-circle:before{content:\"\"}.fa-minus-square:before{content:\"\"}.fa-mitten:before{content:\"\"}.fa-mix:before{content:\"\"}.fa-mixcloud:before{content:\"\"}.fa-mixer:before{content:\"\"}.fa-mizuni:before{content:\"\"}.fa-mobile:before{content:\"\"}.fa-mobile-alt:before{content:\"\"}.fa-modx:before{content:\"\"}.fa-monero:before{content:\"\"}.fa-money-bill:before{content:\"\"}.fa-money-bill-alt:before{content:\"\"}.fa-money-bill-wave:before{content:\"\"}.fa-money-bill-wave-alt:before{content:\"\"}.fa-money-check:before{content:\"\"}.fa-money-check-alt:before{content:\"\"}.fa-monument:before{content:\"\"}.fa-moon:before{content:\"\"}.fa-mortar-pestle:before{content:\"\"}.fa-mosque:before{content:\"\"}.fa-motorcycle:before{content:\"\"}.fa-mountain:before{content:\"\"}.fa-mouse:before{content:\"\"}.fa-mouse-pointer:before{content:\"\"}.fa-mug-hot:before{content:\"\"}.fa-music:before{content:\"\"}.fa-napster:before{content:\"\"}.fa-neos:before{content:\"\"}.fa-network-wired:before{content:\"\"}.fa-neuter:before{content:\"\"}.fa-newspaper:before{content:\"\"}.fa-nimblr:before{content:\"\"}.fa-node:before{content:\"\"}.fa-node-js:before{content:\"\"}.fa-not-equal:before{content:\"\"}.fa-notes-medical:before{content:\"\"}.fa-npm:before{content:\"\"}.fa-ns8:before{content:\"\"}.fa-nutritionix:before{content:\"\"}.fa-object-group:before{content:\"\"}.fa-object-ungroup:before{content:\"\"}.fa-odnoklassniki:before{content:\"\"}.fa-odnoklassniki-square:before{content:\"\"}.fa-oil-can:before{content:\"\"}.fa-old-republic:before{content:\"\"}.fa-om:before{content:\"\"}.fa-opencart:before{content:\"\"}.fa-openid:before{content:\"\"}.fa-opera:before{content:\"\"}.fa-optin-monster:before{content:\"\"}.fa-orcid:before{content:\"\"}.fa-osi:before{content:\"\"}.fa-otter:before{content:\"\"}.fa-outdent:before{content:\"\"}.fa-page4:before{content:\"\"}.fa-pagelines:before{content:\"\"}.fa-pager:before{content:\"\"}.fa-paint-brush:before{content:\"\"}.fa-paint-roller:before{content:\"\"}.fa-palette:before{content:\"\"}.fa-palfed:before{content:\"\"}.fa-pallet:before{content:\"\"}.fa-paper-plane:before{content:\"\"}.fa-paperclip:before{content:\"\"}.fa-parachute-box:before{content:\"\"}.fa-paragraph:before{content:\"\"}.fa-parking:before{content:\"\"}.fa-passport:before{content:\"\"}.fa-pastafarianism:before{content:\"\"}.fa-paste:before{content:\"\"}.fa-patreon:before{content:\"\"}.fa-pause:before{content:\"\"}.fa-pause-circle:before{content:\"\"}.fa-paw:before{content:\"\"}.fa-paypal:before{content:\"\"}.fa-peace:before{content:\"\"}.fa-pen:before{content:\"\"}.fa-pen-alt:before{content:\"\"}.fa-pen-fancy:before{content:\"\"}.fa-pen-nib:before{content:\"\"}.fa-pen-square:before{content:\"\"}.fa-pencil-alt:before{content:\"\"}.fa-pencil-ruler:before{content:\"\"}.fa-penny-arcade:before{content:\"\"}.fa-people-arrows:before{content:\"\"}.fa-people-carry:before{content:\"\"}.fa-pepper-hot:before{content:\"\"}.fa-percent:before{content:\"\"}.fa-percentage:before{content:\"\"}.fa-periscope:before{content:\"\"}.fa-person-booth:before{content:\"\"}.fa-phabricator:before{content:\"\"}.fa-phoenix-framework:before{content:\"\"}.fa-phoenix-squadron:before{content:\"\"}.fa-phone:before{content:\"\"}.fa-phone-alt:before{content:\"\"}.fa-phone-slash:before{content:\"\"}.fa-phone-square:before{content:\"\"}.fa-phone-square-alt:before{content:\"\"}.fa-phone-volume:before{content:\"\"}.fa-photo-video:before{content:\"\"}.fa-php:before{content:\"\"}.fa-pied-piper:before{content:\"\"}.fa-pied-piper-alt:before{content:\"\"}.fa-pied-piper-hat:before{content:\"\"}.fa-pied-piper-pp:before{content:\"\"}.fa-pied-piper-square:before{content:\"\"}.fa-piggy-bank:before{content:\"\"}.fa-pills:before{content:\"\"}.fa-pinterest:before{content:\"\"}.fa-pinterest-p:before{content:\"\"}.fa-pinterest-square:before{content:\"\"}.fa-pizza-slice:before{content:\"\"}.fa-place-of-worship:before{content:\"\"}.fa-plane:before{content:\"\"}.fa-plane-arrival:before{content:\"\"}.fa-plane-departure:before{content:\"\"}.fa-plane-slash:before{content:\"\"}.fa-play:before{content:\"\"}.fa-play-circle:before{content:\"\"}.fa-playstation:before{content:\"\"}.fa-plug:before{content:\"\"}.fa-plus:before{content:\"\"}.fa-plus-circle:before{content:\"\"}.fa-plus-square:before{content:\"\"}.fa-podcast:before{content:\"\"}.fa-poll:before{content:\"\"}.fa-poll-h:before{content:\"\"}.fa-poo:before{content:\"\"}.fa-poo-storm:before{content:\"\"}.fa-poop:before{content:\"\"}.fa-portrait:before{content:\"\"}.fa-pound-sign:before{content:\"\"}.fa-power-off:before{content:\"\"}.fa-pray:before{content:\"\"}.fa-praying-hands:before{content:\"\"}.fa-prescription:before{content:\"\"}.fa-prescription-bottle:before{content:\"\"}.fa-prescription-bottle-alt:before{content:\"\"}.fa-print:before{content:\"\"}.fa-procedures:before{content:\"\"}.fa-product-hunt:before{content:\"\"}.fa-project-diagram:before{content:\"\"}.fa-pump-medical:before{content:\"\"}.fa-pump-soap:before{content:\"\"}.fa-pushed:before{content:\"\"}.fa-puzzle-piece:before{content:\"\"}.fa-python:before{content:\"\"}.fa-qq:before{content:\"\"}.fa-qrcode:before{content:\"\"}.fa-question:before{content:\"\"}.fa-question-circle:before{content:\"\"}.fa-quidditch:before{content:\"\"}.fa-quinscape:before{content:\"\"}.fa-quora:before{content:\"\"}.fa-quote-left:before{content:\"\"}.fa-quote-right:before{content:\"\"}.fa-quran:before{content:\"\"}.fa-r-project:before{content:\"\"}.fa-radiation:before{content:\"\"}.fa-radiation-alt:before{content:\"\"}.fa-rainbow:before{content:\"\"}.fa-random:before{content:\"\"}.fa-raspberry-pi:before{content:\"\"}.fa-ravelry:before{content:\"\"}.fa-react:before{content:\"\"}.fa-reacteurope:before{content:\"\"}.fa-readme:before{content:\"\"}.fa-rebel:before{content:\"\"}.fa-receipt:before{content:\"\"}.fa-record-vinyl:before{content:\"\"}.fa-recycle:before{content:\"\"}.fa-red-river:before{content:\"\"}.fa-reddit:before{content:\"\"}.fa-reddit-alien:before{content:\"\"}.fa-reddit-square:before{content:\"\"}.fa-redhat:before{content:\"\"}.fa-redo:before{content:\"\"}.fa-redo-alt:before{content:\"\"}.fa-registered:before{content:\"\"}.fa-remove-format:before{content:\"\"}.fa-renren:before{content:\"\"}.fa-reply:before{content:\"\"}.fa-reply-all:before{content:\"\"}.fa-replyd:before{content:\"\"}.fa-republican:before{content:\"\"}.fa-researchgate:before{content:\"\"}.fa-resolving:before{content:\"\"}.fa-restroom:before{content:\"\"}.fa-retweet:before{content:\"\"}.fa-rev:before{content:\"\"}.fa-ribbon:before{content:\"\"}.fa-ring:before{content:\"\"}.fa-road:before{content:\"\"}.fa-robot:before{content:\"\"}.fa-rocket:before{content:\"\"}.fa-rocketchat:before{content:\"\"}.fa-rockrms:before{content:\"\"}.fa-route:before{content:\"\"}.fa-rss:before{content:\"\"}.fa-rss-square:before{content:\"\"}.fa-ruble-sign:before{content:\"\"}.fa-ruler:before{content:\"\"}.fa-ruler-combined:before{content:\"\"}.fa-ruler-horizontal:before{content:\"\"}.fa-ruler-vertical:before{content:\"\"}.fa-running:before{content:\"\"}.fa-rupee-sign:before{content:\"\"}.fa-rust:before{content:\"\"}.fa-sad-cry:before{content:\"\"}.fa-sad-tear:before{content:\"\"}.fa-safari:before{content:\"\"}.fa-salesforce:before{content:\"\"}.fa-sass:before{content:\"\"}.fa-satellite:before{content:\"\"}.fa-satellite-dish:before{content:\"\"}.fa-save:before{content:\"\"}.fa-schlix:before{content:\"\"}.fa-school:before{content:\"\"}.fa-screwdriver:before{content:\"\"}.fa-scribd:before{content:\"\"}.fa-scroll:before{content:\"\"}.fa-sd-card:before{content:\"\"}.fa-search:before{content:\"\"}.fa-search-dollar:before{content:\"\"}.fa-search-location:before{content:\"\"}.fa-search-minus:before{content:\"\"}.fa-search-plus:before{content:\"\"}.fa-searchengin:before{content:\"\"}.fa-seedling:before{content:\"\"}.fa-sellcast:before{content:\"\"}.fa-sellsy:before{content:\"\"}.fa-server:before{content:\"\"}.fa-servicestack:before{content:\"\"}.fa-shapes:before{content:\"\"}.fa-share:before{content:\"\"}.fa-share-alt:before{content:\"\"}.fa-share-alt-square:before{content:\"\"}.fa-share-square:before{content:\"\"}.fa-shekel-sign:before{content:\"\"}.fa-shield-alt:before{content:\"\"}.fa-shield-virus:before{content:\"\"}.fa-ship:before{content:\"\"}.fa-shipping-fast:before{content:\"\"}.fa-shirtsinbulk:before{content:\"\"}.fa-shoe-prints:before{content:\"\"}.fa-shopify:before{content:\"\"}.fa-shopping-bag:before{content:\"\"}.fa-shopping-basket:before{content:\"\"}.fa-shopping-cart:before{content:\"\"}.fa-shopware:before{content:\"\"}.fa-shower:before{content:\"\"}.fa-shuttle-van:before{content:\"\"}.fa-sign:before{content:\"\"}.fa-sign-in-alt:before{content:\"\"}.fa-sign-language:before{content:\"\"}.fa-sign-out-alt:before{content:\"\"}.fa-signal:before{content:\"\"}.fa-signature:before{content:\"\"}.fa-sim-card:before{content:\"\"}.fa-simplybuilt:before{content:\"\"}.fa-sink:before{content:\"\"}.fa-sistrix:before{content:\"\"}.fa-sitemap:before{content:\"\"}.fa-sith:before{content:\"\"}.fa-skating:before{content:\"\"}.fa-sketch:before{content:\"\"}.fa-skiing:before{content:\"\"}.fa-skiing-nordic:before{content:\"\"}.fa-skull:before{content:\"\"}.fa-skull-crossbones:before{content:\"\"}.fa-skyatlas:before{content:\"\"}.fa-skype:before{content:\"\"}.fa-slack:before{content:\"\"}.fa-slack-hash:before{content:\"\"}.fa-slash:before{content:\"\"}.fa-sleigh:before{content:\"\"}.fa-sliders-h:before{content:\"\"}.fa-slideshare:before{content:\"\"}.fa-smile:before{content:\"\"}.fa-smile-beam:before{content:\"\"}.fa-smile-wink:before{content:\"\"}.fa-smog:before{content:\"\"}.fa-smoking:before{content:\"\"}.fa-smoking-ban:before{content:\"\"}.fa-sms:before{content:\"\"}.fa-snapchat:before{content:\"\"}.fa-snapchat-ghost:before{content:\"\"}.fa-snapchat-square:before{content:\"\"}.fa-snowboarding:before{content:\"\"}.fa-snowflake:before{content:\"\"}.fa-snowman:before{content:\"\"}.fa-snowplow:before{content:\"\"}.fa-soap:before{content:\"\"}.fa-socks:before{content:\"\"}.fa-solar-panel:before{content:\"\"}.fa-sort:before{content:\"\"}.fa-sort-alpha-down:before{content:\"\"}.fa-sort-alpha-down-alt:before{content:\"\"}.fa-sort-alpha-up:before{content:\"\"}.fa-sort-alpha-up-alt:before{content:\"\"}.fa-sort-amount-down:before{content:\"\"}.fa-sort-amount-down-alt:before{content:\"\"}.fa-sort-amount-up:before{content:\"\"}.fa-sort-amount-up-alt:before{content:\"\"}.fa-sort-down:before{content:\"\"}.fa-sort-numeric-down:before{content:\"\"}.fa-sort-numeric-down-alt:before{content:\"\"}.fa-sort-numeric-up:before{content:\"\"}.fa-sort-numeric-up-alt:before{content:\"\"}.fa-sort-up:before{content:\"\"}.fa-soundcloud:before{content:\"\"}.fa-sourcetree:before{content:\"\"}.fa-spa:before{content:\"\"}.fa-space-shuttle:before{content:\"\"}.fa-speakap:before{content:\"\"}.fa-speaker-deck:before{content:\"\"}.fa-spell-check:before{content:\"\"}.fa-spider:before{content:\"\"}.fa-spinner:before{content:\"\"}.fa-splotch:before{content:\"\"}.fa-spotify:before{content:\"\"}.fa-spray-can:before{content:\"\"}.fa-square:before{content:\"\"}.fa-square-full:before{content:\"\"}.fa-square-root-alt:before{content:\"\"}.fa-squarespace:before{content:\"\"}.fa-stack-exchange:before{content:\"\"}.fa-stack-overflow:before{content:\"\"}.fa-stackpath:before{content:\"\"}.fa-stamp:before{content:\"\"}.fa-star:before{content:\"\"}.fa-star-and-crescent:before{content:\"\"}.fa-star-half:before{content:\"\"}.fa-star-half-alt:before{content:\"\"}.fa-star-of-david:before{content:\"\"}.fa-star-of-life:before{content:\"\"}.fa-staylinked:before{content:\"\"}.fa-steam:before{content:\"\"}.fa-steam-square:before{content:\"\"}.fa-steam-symbol:before{content:\"\"}.fa-step-backward:before{content:\"\"}.fa-step-forward:before{content:\"\"}.fa-stethoscope:before{content:\"\"}.fa-sticker-mule:before{content:\"\"}.fa-sticky-note:before{content:\"\"}.fa-stop:before{content:\"\"}.fa-stop-circle:before{content:\"\"}.fa-stopwatch:before{content:\"\"}.fa-stopwatch-20:before{content:\"\"}.fa-store:before{content:\"\"}.fa-store-alt:before{content:\"\"}.fa-store-alt-slash:before{content:\"\"}.fa-store-slash:before{content:\"\"}.fa-strava:before{content:\"\"}.fa-stream:before{content:\"\"}.fa-street-view:before{content:\"\"}.fa-strikethrough:before{content:\"\"}.fa-stripe:before{content:\"\"}.fa-stripe-s:before{content:\"\"}.fa-stroopwafel:before{content:\"\"}.fa-studiovinari:before{content:\"\"}.fa-stumbleupon:before{content:\"\"}.fa-stumbleupon-circle:before{content:\"\"}.fa-subscript:before{content:\"\"}.fa-subway:before{content:\"\"}.fa-suitcase:before{content:\"\"}.fa-suitcase-rolling:before{content:\"\"}.fa-sun:before{content:\"\"}.fa-superpowers:before{content:\"\"}.fa-superscript:before{content:\"\"}.fa-supple:before{content:\"\"}.fa-surprise:before{content:\"\"}.fa-suse:before{content:\"\"}.fa-swatchbook:before{content:\"\"}.fa-swift:before{content:\"\"}.fa-swimmer:before{content:\"\"}.fa-swimming-pool:before{content:\"\"}.fa-symfony:before{content:\"\"}.fa-synagogue:before{content:\"\"}.fa-sync:before{content:\"\"}.fa-sync-alt:before{content:\"\"}.fa-syringe:before{content:\"\"}.fa-table:before{content:\"\"}.fa-table-tennis:before{content:\"\"}.fa-tablet:before{content:\"\"}.fa-tablet-alt:before{content:\"\"}.fa-tablets:before{content:\"\"}.fa-tachometer-alt:before{content:\"\"}.fa-tag:before{content:\"\"}.fa-tags:before{content:\"\"}.fa-tape:before{content:\"\"}.fa-tasks:before{content:\"\"}.fa-taxi:before{content:\"\"}.fa-teamspeak:before{content:\"\"}.fa-teeth:before{content:\"\"}.fa-teeth-open:before{content:\"\"}.fa-telegram:before{content:\"\"}.fa-telegram-plane:before{content:\"\"}.fa-temperature-high:before{content:\"\"}.fa-temperature-low:before{content:\"\"}.fa-tencent-weibo:before{content:\"\"}.fa-tenge:before{content:\"\"}.fa-terminal:before{content:\"\"}.fa-text-height:before{content:\"\"}.fa-text-width:before{content:\"\"}.fa-th:before{content:\"\"}.fa-th-large:before{content:\"\"}.fa-th-list:before{content:\"\"}.fa-the-red-yeti:before{content:\"\"}.fa-theater-masks:before{content:\"\"}.fa-themeco:before{content:\"\"}.fa-themeisle:before{content:\"\"}.fa-thermometer:before{content:\"\"}.fa-thermometer-empty:before{content:\"\"}.fa-thermometer-full:before{content:\"\"}.fa-thermometer-half:before{content:\"\"}.fa-thermometer-quarter:before{content:\"\"}.fa-thermometer-three-quarters:before{content:\"\"}.fa-think-peaks:before{content:\"\"}.fa-thumbs-down:before{content:\"\"}.fa-thumbs-up:before{content:\"\"}.fa-thumbtack:before{content:\"\"}.fa-ticket-alt:before{content:\"\"}.fa-tiktok:before{content:\"\"}.fa-times:before{content:\"\"}.fa-times-circle:before{content:\"\"}.fa-tint:before{content:\"\"}.fa-tint-slash:before{content:\"\"}.fa-tired:before{content:\"\"}.fa-toggle-off:before{content:\"\"}.fa-toggle-on:before{content:\"\"}.fa-toilet:before{content:\"\"}.fa-toilet-paper:before{content:\"\"}.fa-toilet-paper-slash:before{content:\"\"}.fa-toolbox:before{content:\"\"}.fa-tools:before{content:\"\"}.fa-tooth:before{content:\"\"}.fa-torah:before{content:\"\"}.fa-torii-gate:before{content:\"\"}.fa-tractor:before{content:\"\"}.fa-trade-federation:before{content:\"\"}.fa-trademark:before{content:\"\"}.fa-traffic-light:before{content:\"\"}.fa-trailer:before{content:\"\"}.fa-train:before{content:\"\"}.fa-tram:before{content:\"\"}.fa-transgender:before{content:\"\"}.fa-transgender-alt:before{content:\"\"}.fa-trash:before{content:\"\"}.fa-trash-alt:before{content:\"\"}.fa-trash-restore:before{content:\"\"}.fa-trash-restore-alt:before{content:\"\"}.fa-tree:before{content:\"\"}.fa-trello:before{content:\"\"}.fa-tripadvisor:before{content:\"\"}.fa-trophy:before{content:\"\"}.fa-truck:before{content:\"\"}.fa-truck-loading:before{content:\"\"}.fa-truck-monster:before{content:\"\"}.fa-truck-moving:before{content:\"\"}.fa-truck-pickup:before{content:\"\"}.fa-tshirt:before{content:\"\"}.fa-tty:before{content:\"\"}.fa-tumblr:before{content:\"\"}.fa-tumblr-square:before{content:\"\"}.fa-tv:before{content:\"\"}.fa-twitch:before{content:\"\"}.fa-twitter:before{content:\"\"}.fa-twitter-square:before{content:\"\"}.fa-typo3:before{content:\"\"}.fa-uber:before{content:\"\"}.fa-ubuntu:before{content:\"\"}.fa-uikit:before{content:\"\"}.fa-umbraco:before{content:\"\"}.fa-umbrella:before{content:\"\"}.fa-umbrella-beach:before{content:\"\"}.fa-underline:before{content:\"\"}.fa-undo:before{content:\"\"}.fa-undo-alt:before{content:\"\"}.fa-uniregistry:before{content:\"\"}.fa-unity:before{content:\"\"}.fa-universal-access:before{content:\"\"}.fa-university:before{content:\"\"}.fa-unlink:before{content:\"\"}.fa-unlock:before{content:\"\"}.fa-unlock-alt:before{content:\"\"}.fa-unsplash:before{content:\"\"}.fa-untappd:before{content:\"\"}.fa-upload:before{content:\"\"}.fa-ups:before{content:\"\"}.fa-usb:before{content:\"\"}.fa-user:before{content:\"\"}.fa-user-alt:before{content:\"\"}.fa-user-alt-slash:before{content:\"\"}.fa-user-astronaut:before{content:\"\"}.fa-user-check:before{content:\"\"}.fa-user-circle:before{content:\"\"}.fa-user-clock:before{content:\"\"}.fa-user-cog:before{content:\"\"}.fa-user-edit:before{content:\"\"}.fa-user-friends:before{content:\"\"}.fa-user-graduate:before{content:\"\"}.fa-user-injured:before{content:\"\"}.fa-user-lock:before{content:\"\"}.fa-user-md:before{content:\"\"}.fa-user-minus:before{content:\"\"}.fa-user-ninja:before{content:\"\"}.fa-user-nurse:before{content:\"\"}.fa-user-plus:before{content:\"\"}.fa-user-secret:before{content:\"\"}.fa-user-shield:before{content:\"\"}.fa-user-slash:before{content:\"\"}.fa-user-tag:before{content:\"\"}.fa-user-tie:before{content:\"\"}.fa-user-times:before{content:\"\"}.fa-users:before{content:\"\"}.fa-users-cog:before{content:\"\"}.fa-users-slash:before{content:\"\"}.fa-usps:before{content:\"\"}.fa-ussunnah:before{content:\"\"}.fa-utensil-spoon:before{content:\"\"}.fa-utensils:before{content:\"\"}.fa-vaadin:before{content:\"\"}.fa-vector-square:before{content:\"\"}.fa-venus:before{content:\"\"}.fa-venus-double:before{content:\"\"}.fa-venus-mars:before{content:\"\"}.fa-viacoin:before{content:\"\"}.fa-viadeo:before{content:\"\"}.fa-viadeo-square:before{content:\"\"}.fa-vial:before{content:\"\"}.fa-vials:before{content:\"\"}.fa-viber:before{content:\"\"}.fa-video:before{content:\"\"}.fa-video-slash:before{content:\"\"}.fa-vihara:before{content:\"\"}.fa-vimeo:before{content:\"\"}.fa-vimeo-square:before{content:\"\"}.fa-vimeo-v:before{content:\"\"}.fa-vine:before{content:\"\"}.fa-virus:before{content:\"\"}.fa-virus-slash:before{content:\"\"}.fa-viruses:before{content:\"\"}.fa-vk:before{content:\"\"}.fa-vnv:before{content:\"\"}.fa-voicemail:before{content:\"\"}.fa-volleyball-ball:before{content:\"\"}.fa-volume-down:before{content:\"\"}.fa-volume-mute:before{content:\"\"}.fa-volume-off:before{content:\"\"}.fa-volume-up:before{content:\"\"}.fa-vote-yea:before{content:\"\"}.fa-vr-cardboard:before{content:\"\"}.fa-vuejs:before{content:\"\"}.fa-walking:before{content:\"\"}.fa-wallet:before{content:\"\"}.fa-warehouse:before{content:\"\"}.fa-water:before{content:\"\"}.fa-wave-square:before{content:\"\"}.fa-waze:before{content:\"\"}.fa-weebly:before{content:\"\"}.fa-weibo:before{content:\"\"}.fa-weight:before{content:\"\"}.fa-weight-hanging:before{content:\"\"}.fa-weixin:before{content:\"\"}.fa-whatsapp:before{content:\"\"}.fa-whatsapp-square:before{content:\"\"}.fa-wheelchair:before{content:\"\"}.fa-whmcs:before{content:\"\"}.fa-wifi:before{content:\"\"}.fa-wikipedia-w:before{content:\"\"}.fa-wind:before{content:\"\"}.fa-window-close:before{content:\"\"}.fa-window-maximize:before{content:\"\"}.fa-window-minimize:before{content:\"\"}.fa-window-restore:before{content:\"\"}.fa-windows:before{content:\"\"}.fa-wine-bottle:before{content:\"\"}.fa-wine-glass:before{content:\"\"}.fa-wine-glass-alt:before{content:\"\"}.fa-wix:before{content:\"\"}.fa-wizards-of-the-coast:before{content:\"\"}.fa-wolf-pack-battalion:before{content:\"\"}.fa-won-sign:before{content:\"\"}.fa-wordpress:before{content:\"\"}.fa-wordpress-simple:before{content:\"\"}.fa-wpbeginner:before{content:\"\"}.fa-wpexplorer:before{content:\"\"}.fa-wpforms:before{content:\"\"}.fa-wpressr:before{content:\"\"}.fa-wrench:before{content:\"\"}.fa-x-ray:before{content:\"\"}.fa-xbox:before{content:\"\"}.fa-xing:before{content:\"\"}.fa-xing-square:before{content:\"\"}.fa-y-combinator:before{content:\"\"}.fa-yahoo:before{content:\"\"}.fa-yammer:before{content:\"\"}.fa-yandex:before{content:\"\"}.fa-yandex-international:before{content:\"\"}.fa-yarn:before{content:\"\"}.fa-yelp:before{content:\"\"}.fa-yen-sign:before{content:\"\"}.fa-yin-yang:before{content:\"\"}.fa-yoast:before{content:\"\"}.fa-youtube:before{content:\"\"}.fa-youtube-square:before{content:\"\"}.fa-zhihu:before{content:\"\"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.converse-website converse-icon:before,.conversejs converse-icon:before{content:none!important}.converse-website .far:not(converse-icon),.conversejs .far:not(converse-icon){font-family:ConverseFontAwesomeRegular!important;font-weight:400}.converse-website .fa:not(converse-icon),.converse-website .fas:not(converse-icon),.conversejs .fa:not(converse-icon),.conversejs .fas:not(converse-icon){font-family:ConverseFontAwesomeSolid!important;font-weight:900}.converse-website .fab:not(converse-icon),.conversejs .fab:not(converse-icon){font-family:ConverseFontAwesomeBrands}.converse-website .fa:not(converse-icon),.converse-website .fab:not(converse-icon),.converse-website .far:not(converse-icon),.converse-website .fas:not(converse-icon),.conversejs .fa:not(converse-icon),.conversejs .fab:not(converse-icon),.conversejs .far:not(converse-icon),.conversejs .fas:not(converse-icon){display:inline-block;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.converse-website .fa-info-circle,.conversejs .fa-info-circle{height:1em}.conversejs :root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}.conversejs *,.conversejs ::after,.conversejs ::before{box-sizing:border-box}.conversejs html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}.conversejs article,.conversejs aside,.conversejs figcaption,.conversejs figure,.conversejs footer,.conversejs header,.conversejs hgroup,.conversejs main,.conversejs nav,.conversejs section{display:block}.conversejs body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}.conversejs [tabindex=\"-1\"]:focus:not(:focus-visible){outline:0!important}.conversejs hr{box-sizing:content-box;height:0;overflow:visible}.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6{margin-top:0;margin-bottom:.5rem}.conversejs p{margin-top:0;margin-bottom:1rem}.conversejs abbr[data-original-title],.conversejs abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}.conversejs address{margin-bottom:1rem;font-style:normal;line-height:inherit}.conversejs dl,.conversejs ol,.conversejs ul{margin-top:0;margin-bottom:1rem}.conversejs ol ol,.conversejs ol ul,.conversejs ul ol,.conversejs ul ul{margin-bottom:0}.conversejs dt{font-weight:700}.conversejs dd{margin-bottom:.5rem;margin-left:0}.conversejs blockquote{margin:0 0 1rem}.conversejs b,.conversejs strong{font-weight:bolder}.conversejs small{font-size:80%}.conversejs sub,.conversejs sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.conversejs sub{bottom:-.25em}.conversejs sup{top:-.5em}.conversejs a{color:#007bff;text-decoration:none;background-color:transparent}.conversejs a:hover{color:#0056b3;text-decoration:underline}.conversejs a:not([href]):not([class]){color:inherit;text-decoration:none}.conversejs a:not([href]):not([class]):hover{color:inherit;text-decoration:none}.conversejs code,.conversejs kbd,.conversejs pre,.conversejs samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:1em}.conversejs pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}.conversejs figure{margin:0 0 1rem}.conversejs img{vertical-align:middle;border-style:none}.conversejs svg{overflow:hidden;vertical-align:middle}.conversejs table{border-collapse:collapse}.conversejs caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}.conversejs th{text-align:inherit;text-align:-webkit-match-parent}.conversejs label{display:inline-block;margin-bottom:.5rem}.conversejs button{border-radius:0}.conversejs button:focus:not(:focus-visible){outline:0}.conversejs button,.conversejs input,.conversejs optgroup,.conversejs select,.conversejs textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.conversejs button,.conversejs input{overflow:visible}.conversejs button,.conversejs select{text-transform:none}.conversejs [role=button]{cursor:pointer}.conversejs select{word-wrap:normal}.conversejs [type=button],.conversejs [type=reset],.conversejs [type=submit],.conversejs button{-webkit-appearance:button}.conversejs [type=button]:not(:disabled),.conversejs [type=reset]:not(:disabled),.conversejs [type=submit]:not(:disabled),.conversejs button:not(:disabled){cursor:pointer}.conversejs [type=button]::-moz-focus-inner,.conversejs [type=reset]::-moz-focus-inner,.conversejs [type=submit]::-moz-focus-inner,.conversejs button::-moz-focus-inner{padding:0;border-style:none}.conversejs input[type=checkbox],.conversejs input[type=radio]{box-sizing:border-box;padding:0}.conversejs textarea{overflow:auto;resize:vertical}.conversejs fieldset{min-width:0;padding:0;margin:0;border:0}.conversejs legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}.conversejs progress{vertical-align:baseline}.conversejs [type=number]::-webkit-inner-spin-button,.conversejs [type=number]::-webkit-outer-spin-button{height:auto}.conversejs [type=search]{outline-offset:-2px;-webkit-appearance:none}.conversejs [type=search]::-webkit-search-decoration{-webkit-appearance:none}.conversejs ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}.conversejs output{display:inline-block}.conversejs summary{display:list-item;cursor:pointer}.conversejs template{display:none}.conversejs [hidden]{display:none!important}.conversejs .h1,.conversejs .h2,.conversejs .h3,.conversejs .h4,.conversejs .h5,.conversejs .h6,.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.conversejs .h1,.conversejs h1{font-size:2.5rem}.conversejs .h2,.conversejs h2{font-size:2rem}.conversejs .h3,.conversejs h3{font-size:1.75rem}.conversejs .h4,.conversejs h4{font-size:1.5rem}.conversejs .h5,.conversejs h5{font-size:1.25rem}.conversejs .h6,.conversejs h6{font-size:1rem}.conversejs .lead{font-size:1.25rem;font-weight:300}.conversejs .display-1{font-size:6rem;font-weight:300;line-height:1.2}.conversejs .display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.conversejs .display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.conversejs .display-4{font-size:3.5rem;font-weight:300;line-height:1.2}.conversejs hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.conversejs .small,.conversejs small{font-size:80%;font-weight:400}.conversejs .mark,.conversejs mark{padding:.2em;background-color:#fcf8e3}.conversejs .list-unstyled{padding-left:0;list-style:none}.conversejs .list-inline{padding-left:0;list-style:none}.conversejs .list-inline-item{display:inline-block}.conversejs .list-inline-item:not(:last-child){margin-right:.5rem}.conversejs .initialism{font-size:90%;text-transform:uppercase}.conversejs .blockquote{margin-bottom:1rem;font-size:1.25rem}.conversejs .blockquote-footer{display:block;font-size:80%;color:#6c757d}.conversejs .blockquote-footer::before{content:\"— \"}.conversejs .img-fluid{max-width:100%;height:auto}.conversejs .img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.conversejs .figure{display:inline-block}.conversejs .figure-img{margin-bottom:.5rem;line-height:1}.conversejs .figure-caption{font-size:90%;color:#6c757d}.conversejs .container,.conversejs .container-fluid,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm,.conversejs .container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width:576px){.conversejs .container,.conversejs .container-sm{max-width:540px}}@media(min-width:768px){.conversejs .container,.conversejs .container-md,.conversejs .container-sm{max-width:720px}}@media(min-width:992px){.conversejs .container,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm{max-width:960px}}@media(min-width:1200px){.conversejs .container,.conversejs .container-lg,.conversejs .container-md,.conversejs .container-sm,.conversejs .container-xl{max-width:1140px}}.conversejs .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.conversejs .no-gutters{margin-right:0;margin-left:0}.conversejs .no-gutters>.col,.conversejs .no-gutters>[class*=col-]{padding-right:0;padding-left:0}.conversejs .col,.conversejs .col-1,.conversejs .col-10,.conversejs .col-11,.conversejs .col-12,.conversejs .col-2,.conversejs .col-3,.conversejs .col-4,.conversejs .col-5,.conversejs .col-6,.conversejs .col-7,.conversejs .col-8,.conversejs .col-9,.conversejs .col-auto,.conversejs .col-lg,.conversejs .col-lg-1,.conversejs .col-lg-10,.conversejs .col-lg-11,.conversejs .col-lg-12,.conversejs .col-lg-2,.conversejs .col-lg-3,.conversejs .col-lg-4,.conversejs .col-lg-5,.conversejs .col-lg-6,.conversejs .col-lg-7,.conversejs .col-lg-8,.conversejs .col-lg-9,.conversejs .col-lg-auto,.conversejs .col-md,.conversejs .col-md-1,.conversejs .col-md-10,.conversejs .col-md-11,.conversejs .col-md-12,.conversejs .col-md-2,.conversejs .col-md-3,.conversejs .col-md-4,.conversejs .col-md-5,.conversejs .col-md-6,.conversejs .col-md-7,.conversejs .col-md-8,.conversejs .col-md-9,.conversejs .col-md-auto,.conversejs .col-sm,.conversejs .col-sm-1,.conversejs .col-sm-10,.conversejs .col-sm-11,.conversejs .col-sm-12,.conversejs .col-sm-2,.conversejs .col-sm-3,.conversejs .col-sm-4,.conversejs .col-sm-5,.conversejs .col-sm-6,.conversejs .col-sm-7,.conversejs .col-sm-8,.conversejs .col-sm-9,.conversejs .col-sm-auto,.conversejs .col-xl,.conversejs .col-xl-1,.conversejs .col-xl-10,.conversejs .col-xl-11,.conversejs .col-xl-12,.conversejs .col-xl-2,.conversejs .col-xl-3,.conversejs .col-xl-4,.conversejs .col-xl-5,.conversejs .col-xl-6,.conversejs .col-xl-7,.conversejs .col-xl-8,.conversejs .col-xl-9,.conversejs .col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.conversejs .col{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-3{flex:0 0 25%;max-width:25%}.conversejs .col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-6{flex:0 0 50%;max-width:50%}.conversejs .col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-9{flex:0 0 75%;max-width:75%}.conversejs .col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-12{flex:0 0 100%;max-width:100%}.conversejs .order-first{order:-1}.conversejs .order-last{order:13}.conversejs .order-0{order:0}.conversejs .order-1{order:1}.conversejs .order-2{order:2}.conversejs .order-3{order:3}.conversejs .order-4{order:4}.conversejs .order-5{order:5}.conversejs .order-6{order:6}.conversejs .order-7{order:7}.conversejs .order-8{order:8}.conversejs .order-9{order:9}.conversejs .order-10{order:10}.conversejs .order-11{order:11}.conversejs .order-12{order:12}.conversejs .offset-1{margin-left:8.3333333333%}.conversejs .offset-2{margin-left:16.6666666667%}.conversejs .offset-3{margin-left:25%}.conversejs .offset-4{margin-left:33.3333333333%}.conversejs .offset-5{margin-left:41.6666666667%}.conversejs .offset-6{margin-left:50%}.conversejs .offset-7{margin-left:58.3333333333%}.conversejs .offset-8{margin-left:66.6666666667%}.conversejs .offset-9{margin-left:75%}.conversejs .offset-10{margin-left:83.3333333333%}.conversejs .offset-11{margin-left:91.6666666667%}@media(min-width:576px){.conversejs .col-sm{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-sm-3{flex:0 0 25%;max-width:25%}.conversejs .col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-sm-6{flex:0 0 50%;max-width:50%}.conversejs .col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-sm-9{flex:0 0 75%;max-width:75%}.conversejs .col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-sm-12{flex:0 0 100%;max-width:100%}.conversejs .order-sm-first{order:-1}.conversejs .order-sm-last{order:13}.conversejs .order-sm-0{order:0}.conversejs .order-sm-1{order:1}.conversejs .order-sm-2{order:2}.conversejs .order-sm-3{order:3}.conversejs .order-sm-4{order:4}.conversejs .order-sm-5{order:5}.conversejs .order-sm-6{order:6}.conversejs .order-sm-7{order:7}.conversejs .order-sm-8{order:8}.conversejs .order-sm-9{order:9}.conversejs .order-sm-10{order:10}.conversejs .order-sm-11{order:11}.conversejs .order-sm-12{order:12}.conversejs .offset-sm-0{margin-left:0}.conversejs .offset-sm-1{margin-left:8.3333333333%}.conversejs .offset-sm-2{margin-left:16.6666666667%}.conversejs .offset-sm-3{margin-left:25%}.conversejs .offset-sm-4{margin-left:33.3333333333%}.conversejs .offset-sm-5{margin-left:41.6666666667%}.conversejs .offset-sm-6{margin-left:50%}.conversejs .offset-sm-7{margin-left:58.3333333333%}.conversejs .offset-sm-8{margin-left:66.6666666667%}.conversejs .offset-sm-9{margin-left:75%}.conversejs .offset-sm-10{margin-left:83.3333333333%}.conversejs .offset-sm-11{margin-left:91.6666666667%}}@media(min-width:768px){.conversejs .col-md{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-md-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-md-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-md-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-md-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-md-3{flex:0 0 25%;max-width:25%}.conversejs .col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-md-6{flex:0 0 50%;max-width:50%}.conversejs .col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-md-9{flex:0 0 75%;max-width:75%}.conversejs .col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-md-12{flex:0 0 100%;max-width:100%}.conversejs .order-md-first{order:-1}.conversejs .order-md-last{order:13}.conversejs .order-md-0{order:0}.conversejs .order-md-1{order:1}.conversejs .order-md-2{order:2}.conversejs .order-md-3{order:3}.conversejs .order-md-4{order:4}.conversejs .order-md-5{order:5}.conversejs .order-md-6{order:6}.conversejs .order-md-7{order:7}.conversejs .order-md-8{order:8}.conversejs .order-md-9{order:9}.conversejs .order-md-10{order:10}.conversejs .order-md-11{order:11}.conversejs .order-md-12{order:12}.conversejs .offset-md-0{margin-left:0}.conversejs .offset-md-1{margin-left:8.3333333333%}.conversejs .offset-md-2{margin-left:16.6666666667%}.conversejs .offset-md-3{margin-left:25%}.conversejs .offset-md-4{margin-left:33.3333333333%}.conversejs .offset-md-5{margin-left:41.6666666667%}.conversejs .offset-md-6{margin-left:50%}.conversejs .offset-md-7{margin-left:58.3333333333%}.conversejs .offset-md-8{margin-left:66.6666666667%}.conversejs .offset-md-9{margin-left:75%}.conversejs .offset-md-10{margin-left:83.3333333333%}.conversejs .offset-md-11{margin-left:91.6666666667%}}@media(min-width:992px){.conversejs .col-lg{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-lg-3{flex:0 0 25%;max-width:25%}.conversejs .col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-lg-6{flex:0 0 50%;max-width:50%}.conversejs .col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-lg-9{flex:0 0 75%;max-width:75%}.conversejs .col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-lg-12{flex:0 0 100%;max-width:100%}.conversejs .order-lg-first{order:-1}.conversejs .order-lg-last{order:13}.conversejs .order-lg-0{order:0}.conversejs .order-lg-1{order:1}.conversejs .order-lg-2{order:2}.conversejs .order-lg-3{order:3}.conversejs .order-lg-4{order:4}.conversejs .order-lg-5{order:5}.conversejs .order-lg-6{order:6}.conversejs .order-lg-7{order:7}.conversejs .order-lg-8{order:8}.conversejs .order-lg-9{order:9}.conversejs .order-lg-10{order:10}.conversejs .order-lg-11{order:11}.conversejs .order-lg-12{order:12}.conversejs .offset-lg-0{margin-left:0}.conversejs .offset-lg-1{margin-left:8.3333333333%}.conversejs .offset-lg-2{margin-left:16.6666666667%}.conversejs .offset-lg-3{margin-left:25%}.conversejs .offset-lg-4{margin-left:33.3333333333%}.conversejs .offset-lg-5{margin-left:41.6666666667%}.conversejs .offset-lg-6{margin-left:50%}.conversejs .offset-lg-7{margin-left:58.3333333333%}.conversejs .offset-lg-8{margin-left:66.6666666667%}.conversejs .offset-lg-9{margin-left:75%}.conversejs .offset-lg-10{margin-left:83.3333333333%}.conversejs .offset-lg-11{margin-left:91.6666666667%}}@media(min-width:1200px){.conversejs .col-xl{flex-basis:0;flex-grow:1;max-width:100%}.conversejs .row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.conversejs .row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.conversejs .row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.conversejs .row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.conversejs .row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.conversejs .col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.conversejs .col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.conversejs .col-xl-3{flex:0 0 25%;max-width:25%}.conversejs .col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.conversejs .col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs .col-xl-6{flex:0 0 50%;max-width:50%}.conversejs .col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs .col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.conversejs .col-xl-9{flex:0 0 75%;max-width:75%}.conversejs .col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.conversejs .col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.conversejs .col-xl-12{flex:0 0 100%;max-width:100%}.conversejs .order-xl-first{order:-1}.conversejs .order-xl-last{order:13}.conversejs .order-xl-0{order:0}.conversejs .order-xl-1{order:1}.conversejs .order-xl-2{order:2}.conversejs .order-xl-3{order:3}.conversejs .order-xl-4{order:4}.conversejs .order-xl-5{order:5}.conversejs .order-xl-6{order:6}.conversejs .order-xl-7{order:7}.conversejs .order-xl-8{order:8}.conversejs .order-xl-9{order:9}.conversejs .order-xl-10{order:10}.conversejs .order-xl-11{order:11}.conversejs .order-xl-12{order:12}.conversejs .offset-xl-0{margin-left:0}.conversejs .offset-xl-1{margin-left:8.3333333333%}.conversejs .offset-xl-2{margin-left:16.6666666667%}.conversejs .offset-xl-3{margin-left:25%}.conversejs .offset-xl-4{margin-left:33.3333333333%}.conversejs .offset-xl-5{margin-left:41.6666666667%}.conversejs .offset-xl-6{margin-left:50%}.conversejs .offset-xl-7{margin-left:58.3333333333%}.conversejs .offset-xl-8{margin-left:66.6666666667%}.conversejs .offset-xl-9{margin-left:75%}.conversejs .offset-xl-10{margin-left:83.3333333333%}.conversejs .offset-xl-11{margin-left:91.6666666667%}}.conversejs .fade{transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.conversejs .fade{transition:none}}.conversejs .fade:not(.show){opacity:0}.conversejs .collapse:not(.show){display:none}.conversejs .collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion:reduce){.conversejs .collapsing{transition:none}}.conversejs .dropdown,.conversejs .dropleft,.conversejs .dropright,.conversejs .dropup{position:relative}.conversejs .dropdown-toggle{white-space:nowrap}.conversejs .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.conversejs .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.conversejs .dropdown-menu-left{right:auto;left:0}.conversejs .dropdown-menu-right{right:0;left:auto}@media(min-width:576px){.conversejs .dropdown-menu-sm-left{right:auto;left:0}.conversejs .dropdown-menu-sm-right{right:0;left:auto}}@media(min-width:768px){.conversejs .dropdown-menu-md-left{right:auto;left:0}.conversejs .dropdown-menu-md-right{right:0;left:auto}}@media(min-width:992px){.conversejs .dropdown-menu-lg-left{right:auto;left:0}.conversejs .dropdown-menu-lg-right{right:0;left:auto}}@media(min-width:1200px){.conversejs .dropdown-menu-xl-left{right:auto;left:0}.conversejs .dropdown-menu-xl-right{right:0;left:auto}}.conversejs .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.conversejs .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.conversejs .dropup .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.conversejs .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.conversejs .dropright .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-toggle::after{vertical-align:0}.conversejs .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.conversejs .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.conversejs .dropleft .dropdown-toggle::after{display:none}.conversejs .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.conversejs .dropleft .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropleft .dropdown-toggle::before{vertical-align:0}.conversejs .dropdown-menu[x-placement^=bottom],.conversejs .dropdown-menu[x-placement^=left],.conversejs .dropdown-menu[x-placement^=right],.conversejs .dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.conversejs .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.conversejs .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.conversejs .dropdown-item:focus,.conversejs .dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.conversejs .dropdown-item.active,.conversejs .dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.conversejs .dropdown-item.disabled,.conversejs .dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.conversejs .dropdown-menu.show{display:block}.conversejs .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.conversejs .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.conversejs .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.conversejs .nav-link{display:block;padding:.5rem 1rem}.conversejs .nav-link:focus,.conversejs .nav-link:hover{text-decoration:none}.conversejs .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.conversejs .nav-tabs{border-bottom:1px solid #dee2e6}.conversejs .nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.conversejs .nav-tabs .nav-link:focus,.conversejs .nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.conversejs .nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.conversejs .nav-tabs .nav-item.show .nav-link,.conversejs .nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.conversejs .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.conversejs .nav-pills .nav-link{border-radius:.25rem}.conversejs .nav-pills .nav-link.active,.conversejs .nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.conversejs .nav-fill .nav-item,.conversejs .nav-fill>.nav-link{flex:1 1 auto;text-align:center}.conversejs .nav-justified .nav-item,.conversejs .nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.conversejs .tab-content>.tab-pane{display:none}.conversejs .tab-content>.active{display:block}.conversejs .alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.conversejs .alert-heading{color:inherit}.conversejs .alert-link{font-weight:700}.conversejs .alert-dismissible{padding-right:4rem}.conversejs .alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.conversejs .alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.conversejs .alert-primary hr{border-top-color:#9fcdff}.conversejs .alert-primary .alert-link{color:#002752}.conversejs .alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.conversejs .alert-secondary hr{border-top-color:#c8cbcf}.conversejs .alert-secondary .alert-link{color:#202326}.conversejs .alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.conversejs .alert-success hr{border-top-color:#b1dfbb}.conversejs .alert-success .alert-link{color:#0b2e13}.conversejs .alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.conversejs .alert-info hr{border-top-color:#abdde5}.conversejs .alert-info .alert-link{color:#062c33}.conversejs .alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.conversejs .alert-warning hr{border-top-color:#ffe8a1}.conversejs .alert-warning .alert-link{color:#533f03}.conversejs .alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.conversejs .alert-danger hr{border-top-color:#f1b0b7}.conversejs .alert-danger .alert-link{color:#491217}.conversejs .alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.conversejs .alert-light hr{border-top-color:#ececf6}.conversejs .alert-light .alert-link{color:#686868}.conversejs .alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.conversejs .alert-dark hr{border-top-color:#b9bbbe}.conversejs .alert-dark .alert-link{color:#040505}.conversejs .media{display:flex;align-items:flex-start}.conversejs .media-body{flex:1}.conversejs .close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.conversejs .close:hover{color:#000;text-decoration:none}.conversejs .close:not(:disabled):not(.disabled):focus,.conversejs .close:not(:disabled):not(.disabled):hover{opacity:.75}.conversejs button.close{padding:0;background-color:transparent;border:0}.conversejs a.close.disabled{pointer-events:none}.conversejs .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",\"Liberation Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.conversejs .popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.conversejs .popover .arrow::after,.conversejs .popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.conversejs .bs-popover-auto[x-placement^=top],.conversejs .bs-popover-top{margin-bottom:.5rem}.conversejs .bs-popover-auto[x-placement^=top]>.arrow,.conversejs .bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.conversejs .bs-popover-auto[x-placement^=top]>.arrow::before,.conversejs .bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=top]>.arrow::after,.conversejs .bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.conversejs .bs-popover-auto[x-placement^=right],.conversejs .bs-popover-right{margin-left:.5rem}.conversejs .bs-popover-auto[x-placement^=right]>.arrow,.conversejs .bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.conversejs .bs-popover-auto[x-placement^=right]>.arrow::before,.conversejs .bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=right]>.arrow::after,.conversejs .bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.conversejs .bs-popover-auto[x-placement^=bottom],.conversejs .bs-popover-bottom{margin-top:.5rem}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow,.conversejs .bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::before,.conversejs .bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=bottom]>.arrow::after,.conversejs .bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.conversejs .bs-popover-auto[x-placement^=bottom] .popover-header::before,.conversejs .bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.conversejs .bs-popover-auto[x-placement^=left],.conversejs .bs-popover-left{margin-right:.5rem}.conversejs .bs-popover-auto[x-placement^=left]>.arrow,.conversejs .bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.conversejs .bs-popover-auto[x-placement^=left]>.arrow::before,.conversejs .bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.conversejs .bs-popover-auto[x-placement^=left]>.arrow::after,.conversejs .bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.conversejs .popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.conversejs .popover-header:empty{display:none}.conversejs .popover-body{padding:.5rem .75rem;color:#212529}.conversejs .align-baseline{vertical-align:baseline!important}.conversejs .align-top{vertical-align:top!important}.conversejs .align-middle{vertical-align:middle!important}.conversejs .align-bottom{vertical-align:bottom!important}.conversejs .align-text-bottom{vertical-align:text-bottom!important}.conversejs .align-text-top{vertical-align:text-top!important}.conversejs .bg-primary{background-color:#007bff!important}.conversejs a.bg-primary:focus,.conversejs a.bg-primary:hover,.conversejs button.bg-primary:focus,.conversejs button.bg-primary:hover{background-color:#0062cc!important}.conversejs .bg-secondary{background-color:#6c757d!important}.conversejs a.bg-secondary:focus,.conversejs a.bg-secondary:hover,.conversejs button.bg-secondary:focus,.conversejs button.bg-secondary:hover{background-color:#545b62!important}.conversejs .bg-success{background-color:#28a745!important}.conversejs a.bg-success:focus,.conversejs a.bg-success:hover,.conversejs button.bg-success:focus,.conversejs button.bg-success:hover{background-color:#1e7e34!important}.conversejs .bg-info{background-color:#17a2b8!important}.conversejs a.bg-info:focus,.conversejs a.bg-info:hover,.conversejs button.bg-info:focus,.conversejs button.bg-info:hover{background-color:#117a8b!important}.conversejs .bg-warning{background-color:#ffc107!important}.conversejs a.bg-warning:focus,.conversejs a.bg-warning:hover,.conversejs button.bg-warning:focus,.conversejs button.bg-warning:hover{background-color:#d39e00!important}.conversejs .bg-danger{background-color:#dc3545!important}.conversejs a.bg-danger:focus,.conversejs a.bg-danger:hover,.conversejs button.bg-danger:focus,.conversejs button.bg-danger:hover{background-color:#bd2130!important}.conversejs .bg-light{background-color:#f8f9fa!important}.conversejs a.bg-light:focus,.conversejs a.bg-light:hover,.conversejs button.bg-light:focus,.conversejs button.bg-light:hover{background-color:#dae0e5!important}.conversejs .bg-dark{background-color:#343a40!important}.conversejs a.bg-dark:focus,.conversejs a.bg-dark:hover,.conversejs button.bg-dark:focus,.conversejs button.bg-dark:hover{background-color:#1d2124!important}.conversejs .bg-white{background-color:#fff!important}.conversejs .bg-transparent{background-color:transparent!important}.conversejs .border{border:1px solid #dee2e6!important}.conversejs .border-top{border-top:1px solid #dee2e6!important}.conversejs .border-right{border-right:1px solid #dee2e6!important}.conversejs .border-bottom{border-bottom:1px solid #dee2e6!important}.conversejs .border-left{border-left:1px solid #dee2e6!important}.conversejs .border-0{border:0!important}.conversejs .border-top-0{border-top:0!important}.conversejs .border-right-0{border-right:0!important}.conversejs .border-bottom-0{border-bottom:0!important}.conversejs .border-left-0{border-left:0!important}.conversejs .border-primary{border-color:#007bff!important}.conversejs .border-secondary{border-color:#6c757d!important}.conversejs .border-success{border-color:#28a745!important}.conversejs .border-info{border-color:#17a2b8!important}.conversejs .border-warning{border-color:#ffc107!important}.conversejs .border-danger{border-color:#dc3545!important}.conversejs .border-light{border-color:#f8f9fa!important}.conversejs .border-dark{border-color:#343a40!important}.conversejs .border-white{border-color:#fff!important}.conversejs .rounded-sm{border-radius:.2rem!important}.conversejs .rounded{border-radius:.25rem!important}.conversejs .rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.conversejs .rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.conversejs .rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.conversejs .rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.conversejs .rounded-lg{border-radius:.3rem!important}.conversejs .rounded-circle{border-radius:50%!important}.conversejs .rounded-pill{border-radius:50rem!important}.conversejs .rounded-0{border-radius:0!important}.conversejs .clearfix::after{display:block;clear:both;content:\"\"}.conversejs .d-none{display:none!important}.conversejs .d-inline{display:inline!important}.conversejs .d-inline-block{display:inline-block!important}.conversejs .d-block{display:block!important}.conversejs .d-table{display:table!important}.conversejs .d-table-row{display:table-row!important}.conversejs .d-table-cell{display:table-cell!important}.conversejs .d-flex{display:flex!important}.conversejs .d-inline-flex{display:inline-flex!important}@media(min-width:576px){.conversejs .d-sm-none{display:none!important}.conversejs .d-sm-inline{display:inline!important}.conversejs .d-sm-inline-block{display:inline-block!important}.conversejs .d-sm-block{display:block!important}.conversejs .d-sm-table{display:table!important}.conversejs .d-sm-table-row{display:table-row!important}.conversejs .d-sm-table-cell{display:table-cell!important}.conversejs .d-sm-flex{display:flex!important}.conversejs .d-sm-inline-flex{display:inline-flex!important}}@media(min-width:768px){.conversejs .d-md-none{display:none!important}.conversejs .d-md-inline{display:inline!important}.conversejs .d-md-inline-block{display:inline-block!important}.conversejs .d-md-block{display:block!important}.conversejs .d-md-table{display:table!important}.conversejs .d-md-table-row{display:table-row!important}.conversejs .d-md-table-cell{display:table-cell!important}.conversejs .d-md-flex{display:flex!important}.conversejs .d-md-inline-flex{display:inline-flex!important}}@media(min-width:992px){.conversejs .d-lg-none{display:none!important}.conversejs .d-lg-inline{display:inline!important}.conversejs .d-lg-inline-block{display:inline-block!important}.conversejs .d-lg-block{display:block!important}.conversejs .d-lg-table{display:table!important}.conversejs .d-lg-table-row{display:table-row!important}.conversejs .d-lg-table-cell{display:table-cell!important}.conversejs .d-lg-flex{display:flex!important}.conversejs .d-lg-inline-flex{display:inline-flex!important}}@media(min-width:1200px){.conversejs .d-xl-none{display:none!important}.conversejs .d-xl-inline{display:inline!important}.conversejs .d-xl-inline-block{display:inline-block!important}.conversejs .d-xl-block{display:block!important}.conversejs .d-xl-table{display:table!important}.conversejs .d-xl-table-row{display:table-row!important}.conversejs .d-xl-table-cell{display:table-cell!important}.conversejs .d-xl-flex{display:flex!important}.conversejs .d-xl-inline-flex{display:inline-flex!important}}@media print{.conversejs .d-print-none{display:none!important}.conversejs .d-print-inline{display:inline!important}.conversejs .d-print-inline-block{display:inline-block!important}.conversejs .d-print-block{display:block!important}.conversejs .d-print-table{display:table!important}.conversejs .d-print-table-row{display:table-row!important}.conversejs .d-print-table-cell{display:table-cell!important}.conversejs .d-print-flex{display:flex!important}.conversejs .d-print-inline-flex{display:inline-flex!important}}.conversejs .embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.conversejs .embed-responsive::before{display:block;content:\"\"}.conversejs .embed-responsive .embed-responsive-item,.conversejs .embed-responsive embed,.conversejs .embed-responsive iframe,.conversejs .embed-responsive object,.conversejs .embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.conversejs .embed-responsive-21by9::before{padding-top:42.8571428571%}.conversejs .embed-responsive-16by9::before{padding-top:56.25%}.conversejs .embed-responsive-4by3::before{padding-top:75%}.conversejs .embed-responsive-1by1::before{padding-top:100%}.conversejs .flex-row{flex-direction:row!important}.conversejs .flex-column{flex-direction:column!important}.conversejs .flex-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-wrap{flex-wrap:wrap!important}.conversejs .flex-nowrap{flex-wrap:nowrap!important}.conversejs .flex-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-fill{flex:1 1 auto!important}.conversejs .flex-grow-0{flex-grow:0!important}.conversejs .flex-grow-1{flex-grow:1!important}.conversejs .flex-shrink-0{flex-shrink:0!important}.conversejs .flex-shrink-1{flex-shrink:1!important}.conversejs .justify-content-start{justify-content:flex-start!important}.conversejs .justify-content-end{justify-content:flex-end!important}.conversejs .justify-content-center{justify-content:center!important}.conversejs .justify-content-between{justify-content:space-between!important}.conversejs .justify-content-around{justify-content:space-around!important}.conversejs .align-items-start{align-items:flex-start!important}.conversejs .align-items-end{align-items:flex-end!important}.conversejs .align-items-center{align-items:center!important}.conversejs .align-items-baseline{align-items:baseline!important}.conversejs .align-items-stretch{align-items:stretch!important}.conversejs .align-content-start{align-content:flex-start!important}.conversejs .align-content-end{align-content:flex-end!important}.conversejs .align-content-center{align-content:center!important}.conversejs .align-content-between{align-content:space-between!important}.conversejs .align-content-around{align-content:space-around!important}.conversejs .align-content-stretch{align-content:stretch!important}.conversejs .align-self-auto{align-self:auto!important}.conversejs .align-self-start{align-self:flex-start!important}.conversejs .align-self-end{align-self:flex-end!important}.conversejs .align-self-center{align-self:center!important}.conversejs .align-self-baseline{align-self:baseline!important}.conversejs .align-self-stretch{align-self:stretch!important}@media(min-width:576px){.conversejs .flex-sm-row{flex-direction:row!important}.conversejs .flex-sm-column{flex-direction:column!important}.conversejs .flex-sm-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-sm-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-sm-wrap{flex-wrap:wrap!important}.conversejs .flex-sm-nowrap{flex-wrap:nowrap!important}.conversejs .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-sm-fill{flex:1 1 auto!important}.conversejs .flex-sm-grow-0{flex-grow:0!important}.conversejs .flex-sm-grow-1{flex-grow:1!important}.conversejs .flex-sm-shrink-0{flex-shrink:0!important}.conversejs .flex-sm-shrink-1{flex-shrink:1!important}.conversejs .justify-content-sm-start{justify-content:flex-start!important}.conversejs .justify-content-sm-end{justify-content:flex-end!important}.conversejs .justify-content-sm-center{justify-content:center!important}.conversejs .justify-content-sm-between{justify-content:space-between!important}.conversejs .justify-content-sm-around{justify-content:space-around!important}.conversejs .align-items-sm-start{align-items:flex-start!important}.conversejs .align-items-sm-end{align-items:flex-end!important}.conversejs .align-items-sm-center{align-items:center!important}.conversejs .align-items-sm-baseline{align-items:baseline!important}.conversejs .align-items-sm-stretch{align-items:stretch!important}.conversejs .align-content-sm-start{align-content:flex-start!important}.conversejs .align-content-sm-end{align-content:flex-end!important}.conversejs .align-content-sm-center{align-content:center!important}.conversejs .align-content-sm-between{align-content:space-between!important}.conversejs .align-content-sm-around{align-content:space-around!important}.conversejs .align-content-sm-stretch{align-content:stretch!important}.conversejs .align-self-sm-auto{align-self:auto!important}.conversejs .align-self-sm-start{align-self:flex-start!important}.conversejs .align-self-sm-end{align-self:flex-end!important}.conversejs .align-self-sm-center{align-self:center!important}.conversejs .align-self-sm-baseline{align-self:baseline!important}.conversejs .align-self-sm-stretch{align-self:stretch!important}}@media(min-width:768px){.conversejs .flex-md-row{flex-direction:row!important}.conversejs .flex-md-column{flex-direction:column!important}.conversejs .flex-md-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-md-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-md-wrap{flex-wrap:wrap!important}.conversejs .flex-md-nowrap{flex-wrap:nowrap!important}.conversejs .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-md-fill{flex:1 1 auto!important}.conversejs .flex-md-grow-0{flex-grow:0!important}.conversejs .flex-md-grow-1{flex-grow:1!important}.conversejs .flex-md-shrink-0{flex-shrink:0!important}.conversejs .flex-md-shrink-1{flex-shrink:1!important}.conversejs .justify-content-md-start{justify-content:flex-start!important}.conversejs .justify-content-md-end{justify-content:flex-end!important}.conversejs .justify-content-md-center{justify-content:center!important}.conversejs .justify-content-md-between{justify-content:space-between!important}.conversejs .justify-content-md-around{justify-content:space-around!important}.conversejs .align-items-md-start{align-items:flex-start!important}.conversejs .align-items-md-end{align-items:flex-end!important}.conversejs .align-items-md-center{align-items:center!important}.conversejs .align-items-md-baseline{align-items:baseline!important}.conversejs .align-items-md-stretch{align-items:stretch!important}.conversejs .align-content-md-start{align-content:flex-start!important}.conversejs .align-content-md-end{align-content:flex-end!important}.conversejs .align-content-md-center{align-content:center!important}.conversejs .align-content-md-between{align-content:space-between!important}.conversejs .align-content-md-around{align-content:space-around!important}.conversejs .align-content-md-stretch{align-content:stretch!important}.conversejs .align-self-md-auto{align-self:auto!important}.conversejs .align-self-md-start{align-self:flex-start!important}.conversejs .align-self-md-end{align-self:flex-end!important}.conversejs .align-self-md-center{align-self:center!important}.conversejs .align-self-md-baseline{align-self:baseline!important}.conversejs .align-self-md-stretch{align-self:stretch!important}}@media(min-width:992px){.conversejs .flex-lg-row{flex-direction:row!important}.conversejs .flex-lg-column{flex-direction:column!important}.conversejs .flex-lg-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-lg-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-lg-wrap{flex-wrap:wrap!important}.conversejs .flex-lg-nowrap{flex-wrap:nowrap!important}.conversejs .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-lg-fill{flex:1 1 auto!important}.conversejs .flex-lg-grow-0{flex-grow:0!important}.conversejs .flex-lg-grow-1{flex-grow:1!important}.conversejs .flex-lg-shrink-0{flex-shrink:0!important}.conversejs .flex-lg-shrink-1{flex-shrink:1!important}.conversejs .justify-content-lg-start{justify-content:flex-start!important}.conversejs .justify-content-lg-end{justify-content:flex-end!important}.conversejs .justify-content-lg-center{justify-content:center!important}.conversejs .justify-content-lg-between{justify-content:space-between!important}.conversejs .justify-content-lg-around{justify-content:space-around!important}.conversejs .align-items-lg-start{align-items:flex-start!important}.conversejs .align-items-lg-end{align-items:flex-end!important}.conversejs .align-items-lg-center{align-items:center!important}.conversejs .align-items-lg-baseline{align-items:baseline!important}.conversejs .align-items-lg-stretch{align-items:stretch!important}.conversejs .align-content-lg-start{align-content:flex-start!important}.conversejs .align-content-lg-end{align-content:flex-end!important}.conversejs .align-content-lg-center{align-content:center!important}.conversejs .align-content-lg-between{align-content:space-between!important}.conversejs .align-content-lg-around{align-content:space-around!important}.conversejs .align-content-lg-stretch{align-content:stretch!important}.conversejs .align-self-lg-auto{align-self:auto!important}.conversejs .align-self-lg-start{align-self:flex-start!important}.conversejs .align-self-lg-end{align-self:flex-end!important}.conversejs .align-self-lg-center{align-self:center!important}.conversejs .align-self-lg-baseline{align-self:baseline!important}.conversejs .align-self-lg-stretch{align-self:stretch!important}}@media(min-width:1200px){.conversejs .flex-xl-row{flex-direction:row!important}.conversejs .flex-xl-column{flex-direction:column!important}.conversejs .flex-xl-row-reverse{flex-direction:row-reverse!important}.conversejs .flex-xl-column-reverse{flex-direction:column-reverse!important}.conversejs .flex-xl-wrap{flex-wrap:wrap!important}.conversejs .flex-xl-nowrap{flex-wrap:nowrap!important}.conversejs .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.conversejs .flex-xl-fill{flex:1 1 auto!important}.conversejs .flex-xl-grow-0{flex-grow:0!important}.conversejs .flex-xl-grow-1{flex-grow:1!important}.conversejs .flex-xl-shrink-0{flex-shrink:0!important}.conversejs .flex-xl-shrink-1{flex-shrink:1!important}.conversejs .justify-content-xl-start{justify-content:flex-start!important}.conversejs .justify-content-xl-end{justify-content:flex-end!important}.conversejs .justify-content-xl-center{justify-content:center!important}.conversejs .justify-content-xl-between{justify-content:space-between!important}.conversejs .justify-content-xl-around{justify-content:space-around!important}.conversejs .align-items-xl-start{align-items:flex-start!important}.conversejs .align-items-xl-end{align-items:flex-end!important}.conversejs .align-items-xl-center{align-items:center!important}.conversejs .align-items-xl-baseline{align-items:baseline!important}.conversejs .align-items-xl-stretch{align-items:stretch!important}.conversejs .align-content-xl-start{align-content:flex-start!important}.conversejs .align-content-xl-end{align-content:flex-end!important}.conversejs .align-content-xl-center{align-content:center!important}.conversejs .align-content-xl-between{align-content:space-between!important}.conversejs .align-content-xl-around{align-content:space-around!important}.conversejs .align-content-xl-stretch{align-content:stretch!important}.conversejs .align-self-xl-auto{align-self:auto!important}.conversejs .align-self-xl-start{align-self:flex-start!important}.conversejs .align-self-xl-end{align-self:flex-end!important}.conversejs .align-self-xl-center{align-self:center!important}.conversejs .align-self-xl-baseline{align-self:baseline!important}.conversejs .align-self-xl-stretch{align-self:stretch!important}}.conversejs .float-left{float:left!important}.conversejs .float-right{float:right!important}.conversejs .float-none{float:none!important}@media(min-width:576px){.conversejs .float-sm-left{float:left!important}.conversejs .float-sm-right{float:right!important}.conversejs .float-sm-none{float:none!important}}@media(min-width:768px){.conversejs .float-md-left{float:left!important}.conversejs .float-md-right{float:right!important}.conversejs .float-md-none{float:none!important}}@media(min-width:992px){.conversejs .float-lg-left{float:left!important}.conversejs .float-lg-right{float:right!important}.conversejs .float-lg-none{float:none!important}}@media(min-width:1200px){.conversejs .float-xl-left{float:left!important}.conversejs .float-xl-right{float:right!important}.conversejs .float-xl-none{float:none!important}}.conversejs .user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.conversejs .user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.conversejs .user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.conversejs .overflow-auto{overflow:auto!important}.conversejs .overflow-hidden{overflow:hidden!important}.conversejs .position-static{position:static!important}.conversejs .position-relative{position:relative!important}.conversejs .position-absolute{position:absolute!important}.conversejs .position-fixed{position:fixed!important}.conversejs .position-sticky{position:sticky!important}.conversejs .fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.conversejs .fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports(position:sticky){.conversejs .sticky-top{position:sticky;top:0;z-index:1020}}.conversejs .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.conversejs .sr-only-focusable:active,.conversejs .sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.conversejs .shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.conversejs .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.conversejs .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.conversejs .shadow-none{box-shadow:none!important}.conversejs .w-25{width:25%!important}.conversejs .w-50{width:50%!important}.conversejs .w-75{width:75%!important}.conversejs .w-100{width:100%!important}.conversejs .w-auto{width:auto!important}.conversejs .h-25{height:25%!important}.conversejs .h-50{height:50%!important}.conversejs .h-75{height:75%!important}.conversejs .h-100{height:100%!important}.conversejs .h-auto{height:auto!important}.conversejs .mw-100{max-width:100%!important}.conversejs .mh-100{max-height:100%!important}.conversejs .min-vw-100{min-width:100vw!important}.conversejs .min-vh-100{min-height:100vh!important}.conversejs .vw-100{width:100vw!important}.conversejs .vh-100{height:100vh!important}.conversejs .m-0{margin:0!important}.conversejs .mt-0,.conversejs .my-0{margin-top:0!important}.conversejs .mr-0,.conversejs .mx-0{margin-right:0!important}.conversejs .mb-0,.conversejs .my-0{margin-bottom:0!important}.conversejs .ml-0,.conversejs .mx-0{margin-left:0!important}.conversejs .m-1{margin:.25rem!important}.conversejs .mt-1,.conversejs .my-1{margin-top:.25rem!important}.conversejs .mr-1,.conversejs .mx-1{margin-right:.25rem!important}.conversejs .mb-1,.conversejs .my-1{margin-bottom:.25rem!important}.conversejs .ml-1,.conversejs .mx-1{margin-left:.25rem!important}.conversejs .m-2{margin:.5rem!important}.conversejs .mt-2,.conversejs .my-2{margin-top:.5rem!important}.conversejs .mr-2,.conversejs .mx-2{margin-right:.5rem!important}.conversejs .mb-2,.conversejs .my-2{margin-bottom:.5rem!important}.conversejs .ml-2,.conversejs .mx-2{margin-left:.5rem!important}.conversejs .m-3{margin:1rem!important}.conversejs .mt-3,.conversejs .my-3{margin-top:1rem!important}.conversejs .mr-3,.conversejs .mx-3{margin-right:1rem!important}.conversejs .mb-3,.conversejs .my-3{margin-bottom:1rem!important}.conversejs .ml-3,.conversejs .mx-3{margin-left:1rem!important}.conversejs .m-4{margin:1.5rem!important}.conversejs .mt-4,.conversejs .my-4{margin-top:1.5rem!important}.conversejs .mr-4,.conversejs .mx-4{margin-right:1.5rem!important}.conversejs .mb-4,.conversejs .my-4{margin-bottom:1.5rem!important}.conversejs .ml-4,.conversejs .mx-4{margin-left:1.5rem!important}.conversejs .m-5{margin:3rem!important}.conversejs .mt-5,.conversejs .my-5{margin-top:3rem!important}.conversejs .mr-5,.conversejs .mx-5{margin-right:3rem!important}.conversejs .mb-5,.conversejs .my-5{margin-bottom:3rem!important}.conversejs .ml-5,.conversejs .mx-5{margin-left:3rem!important}.conversejs .p-0{padding:0!important}.conversejs .pt-0,.conversejs .py-0{padding-top:0!important}.conversejs .pr-0,.conversejs .px-0{padding-right:0!important}.conversejs .pb-0,.conversejs .py-0{padding-bottom:0!important}.conversejs .pl-0,.conversejs .px-0{padding-left:0!important}.conversejs .p-1{padding:.25rem!important}.conversejs .pt-1,.conversejs .py-1{padding-top:.25rem!important}.conversejs .pr-1,.conversejs .px-1{padding-right:.25rem!important}.conversejs .pb-1,.conversejs .py-1{padding-bottom:.25rem!important}.conversejs .pl-1,.conversejs .px-1{padding-left:.25rem!important}.conversejs .p-2{padding:.5rem!important}.conversejs .pt-2,.conversejs .py-2{padding-top:.5rem!important}.conversejs .pr-2,.conversejs .px-2{padding-right:.5rem!important}.conversejs .pb-2,.conversejs .py-2{padding-bottom:.5rem!important}.conversejs .pl-2,.conversejs .px-2{padding-left:.5rem!important}.conversejs .p-3{padding:1rem!important}.conversejs .pt-3,.conversejs .py-3{padding-top:1rem!important}.conversejs .pr-3,.conversejs .px-3{padding-right:1rem!important}.conversejs .pb-3,.conversejs .py-3{padding-bottom:1rem!important}.conversejs .pl-3,.conversejs .px-3{padding-left:1rem!important}.conversejs .p-4{padding:1.5rem!important}.conversejs .pt-4,.conversejs .py-4{padding-top:1.5rem!important}.conversejs .pr-4,.conversejs .px-4{padding-right:1.5rem!important}.conversejs .pb-4,.conversejs .py-4{padding-bottom:1.5rem!important}.conversejs .pl-4,.conversejs .px-4{padding-left:1.5rem!important}.conversejs .p-5{padding:3rem!important}.conversejs .pt-5,.conversejs .py-5{padding-top:3rem!important}.conversejs .pr-5,.conversejs .px-5{padding-right:3rem!important}.conversejs .pb-5,.conversejs .py-5{padding-bottom:3rem!important}.conversejs .pl-5,.conversejs .px-5{padding-left:3rem!important}.conversejs .m-n1{margin:-.25rem!important}.conversejs .mt-n1,.conversejs .my-n1{margin-top:-.25rem!important}.conversejs .mr-n1,.conversejs .mx-n1{margin-right:-.25rem!important}.conversejs .mb-n1,.conversejs .my-n1{margin-bottom:-.25rem!important}.conversejs .ml-n1,.conversejs .mx-n1{margin-left:-.25rem!important}.conversejs .m-n2{margin:-.5rem!important}.conversejs .mt-n2,.conversejs .my-n2{margin-top:-.5rem!important}.conversejs .mr-n2,.conversejs .mx-n2{margin-right:-.5rem!important}.conversejs .mb-n2,.conversejs .my-n2{margin-bottom:-.5rem!important}.conversejs .ml-n2,.conversejs .mx-n2{margin-left:-.5rem!important}.conversejs .m-n3{margin:-1rem!important}.conversejs .mt-n3,.conversejs .my-n3{margin-top:-1rem!important}.conversejs .mr-n3,.conversejs .mx-n3{margin-right:-1rem!important}.conversejs .mb-n3,.conversejs .my-n3{margin-bottom:-1rem!important}.conversejs .ml-n3,.conversejs .mx-n3{margin-left:-1rem!important}.conversejs .m-n4{margin:-1.5rem!important}.conversejs .mt-n4,.conversejs .my-n4{margin-top:-1.5rem!important}.conversejs .mr-n4,.conversejs .mx-n4{margin-right:-1.5rem!important}.conversejs .mb-n4,.conversejs .my-n4{margin-bottom:-1.5rem!important}.conversejs .ml-n4,.conversejs .mx-n4{margin-left:-1.5rem!important}.conversejs .m-n5{margin:-3rem!important}.conversejs .mt-n5,.conversejs .my-n5{margin-top:-3rem!important}.conversejs .mr-n5,.conversejs .mx-n5{margin-right:-3rem!important}.conversejs .mb-n5,.conversejs .my-n5{margin-bottom:-3rem!important}.conversejs .ml-n5,.conversejs .mx-n5{margin-left:-3rem!important}.conversejs .m-auto{margin:auto!important}.conversejs .mt-auto,.conversejs .my-auto{margin-top:auto!important}.conversejs .mr-auto,.conversejs .mx-auto{margin-right:auto!important}.conversejs .mb-auto,.conversejs .my-auto{margin-bottom:auto!important}.conversejs .ml-auto,.conversejs .mx-auto{margin-left:auto!important}@media(min-width:576px){.conversejs .m-sm-0{margin:0!important}.conversejs .mt-sm-0,.conversejs .my-sm-0{margin-top:0!important}.conversejs .mr-sm-0,.conversejs .mx-sm-0{margin-right:0!important}.conversejs .mb-sm-0,.conversejs .my-sm-0{margin-bottom:0!important}.conversejs .ml-sm-0,.conversejs .mx-sm-0{margin-left:0!important}.conversejs .m-sm-1{margin:.25rem!important}.conversejs .mt-sm-1,.conversejs .my-sm-1{margin-top:.25rem!important}.conversejs .mr-sm-1,.conversejs .mx-sm-1{margin-right:.25rem!important}.conversejs .mb-sm-1,.conversejs .my-sm-1{margin-bottom:.25rem!important}.conversejs .ml-sm-1,.conversejs .mx-sm-1{margin-left:.25rem!important}.conversejs .m-sm-2{margin:.5rem!important}.conversejs .mt-sm-2,.conversejs .my-sm-2{margin-top:.5rem!important}.conversejs .mr-sm-2,.conversejs .mx-sm-2{margin-right:.5rem!important}.conversejs .mb-sm-2,.conversejs .my-sm-2{margin-bottom:.5rem!important}.conversejs .ml-sm-2,.conversejs .mx-sm-2{margin-left:.5rem!important}.conversejs .m-sm-3{margin:1rem!important}.conversejs .mt-sm-3,.conversejs .my-sm-3{margin-top:1rem!important}.conversejs .mr-sm-3,.conversejs .mx-sm-3{margin-right:1rem!important}.conversejs .mb-sm-3,.conversejs .my-sm-3{margin-bottom:1rem!important}.conversejs .ml-sm-3,.conversejs .mx-sm-3{margin-left:1rem!important}.conversejs .m-sm-4{margin:1.5rem!important}.conversejs .mt-sm-4,.conversejs .my-sm-4{margin-top:1.5rem!important}.conversejs .mr-sm-4,.conversejs .mx-sm-4{margin-right:1.5rem!important}.conversejs .mb-sm-4,.conversejs .my-sm-4{margin-bottom:1.5rem!important}.conversejs .ml-sm-4,.conversejs .mx-sm-4{margin-left:1.5rem!important}.conversejs .m-sm-5{margin:3rem!important}.conversejs .mt-sm-5,.conversejs .my-sm-5{margin-top:3rem!important}.conversejs .mr-sm-5,.conversejs .mx-sm-5{margin-right:3rem!important}.conversejs .mb-sm-5,.conversejs .my-sm-5{margin-bottom:3rem!important}.conversejs .ml-sm-5,.conversejs .mx-sm-5{margin-left:3rem!important}.conversejs .p-sm-0{padding:0!important}.conversejs .pt-sm-0,.conversejs .py-sm-0{padding-top:0!important}.conversejs .pr-sm-0,.conversejs .px-sm-0{padding-right:0!important}.conversejs .pb-sm-0,.conversejs .py-sm-0{padding-bottom:0!important}.conversejs .pl-sm-0,.conversejs .px-sm-0{padding-left:0!important}.conversejs .p-sm-1{padding:.25rem!important}.conversejs .pt-sm-1,.conversejs .py-sm-1{padding-top:.25rem!important}.conversejs .pr-sm-1,.conversejs .px-sm-1{padding-right:.25rem!important}.conversejs .pb-sm-1,.conversejs .py-sm-1{padding-bottom:.25rem!important}.conversejs .pl-sm-1,.conversejs .px-sm-1{padding-left:.25rem!important}.conversejs .p-sm-2{padding:.5rem!important}.conversejs .pt-sm-2,.conversejs .py-sm-2{padding-top:.5rem!important}.conversejs .pr-sm-2,.conversejs .px-sm-2{padding-right:.5rem!important}.conversejs .pb-sm-2,.conversejs .py-sm-2{padding-bottom:.5rem!important}.conversejs .pl-sm-2,.conversejs .px-sm-2{padding-left:.5rem!important}.conversejs .p-sm-3{padding:1rem!important}.conversejs .pt-sm-3,.conversejs .py-sm-3{padding-top:1rem!important}.conversejs .pr-sm-3,.conversejs .px-sm-3{padding-right:1rem!important}.conversejs .pb-sm-3,.conversejs .py-sm-3{padding-bottom:1rem!important}.conversejs .pl-sm-3,.conversejs .px-sm-3{padding-left:1rem!important}.conversejs .p-sm-4{padding:1.5rem!important}.conversejs .pt-sm-4,.conversejs .py-sm-4{padding-top:1.5rem!important}.conversejs .pr-sm-4,.conversejs .px-sm-4{padding-right:1.5rem!important}.conversejs .pb-sm-4,.conversejs .py-sm-4{padding-bottom:1.5rem!important}.conversejs .pl-sm-4,.conversejs .px-sm-4{padding-left:1.5rem!important}.conversejs .p-sm-5{padding:3rem!important}.conversejs .pt-sm-5,.conversejs .py-sm-5{padding-top:3rem!important}.conversejs .pr-sm-5,.conversejs .px-sm-5{padding-right:3rem!important}.conversejs .pb-sm-5,.conversejs .py-sm-5{padding-bottom:3rem!important}.conversejs .pl-sm-5,.conversejs .px-sm-5{padding-left:3rem!important}.conversejs .m-sm-n1{margin:-.25rem!important}.conversejs .mt-sm-n1,.conversejs .my-sm-n1{margin-top:-.25rem!important}.conversejs .mr-sm-n1,.conversejs .mx-sm-n1{margin-right:-.25rem!important}.conversejs .mb-sm-n1,.conversejs .my-sm-n1{margin-bottom:-.25rem!important}.conversejs .ml-sm-n1,.conversejs .mx-sm-n1{margin-left:-.25rem!important}.conversejs .m-sm-n2{margin:-.5rem!important}.conversejs .mt-sm-n2,.conversejs .my-sm-n2{margin-top:-.5rem!important}.conversejs .mr-sm-n2,.conversejs .mx-sm-n2{margin-right:-.5rem!important}.conversejs .mb-sm-n2,.conversejs .my-sm-n2{margin-bottom:-.5rem!important}.conversejs .ml-sm-n2,.conversejs .mx-sm-n2{margin-left:-.5rem!important}.conversejs .m-sm-n3{margin:-1rem!important}.conversejs .mt-sm-n3,.conversejs .my-sm-n3{margin-top:-1rem!important}.conversejs .mr-sm-n3,.conversejs .mx-sm-n3{margin-right:-1rem!important}.conversejs .mb-sm-n3,.conversejs .my-sm-n3{margin-bottom:-1rem!important}.conversejs .ml-sm-n3,.conversejs .mx-sm-n3{margin-left:-1rem!important}.conversejs .m-sm-n4{margin:-1.5rem!important}.conversejs .mt-sm-n4,.conversejs .my-sm-n4{margin-top:-1.5rem!important}.conversejs .mr-sm-n4,.conversejs .mx-sm-n4{margin-right:-1.5rem!important}.conversejs .mb-sm-n4,.conversejs .my-sm-n4{margin-bottom:-1.5rem!important}.conversejs .ml-sm-n4,.conversejs .mx-sm-n4{margin-left:-1.5rem!important}.conversejs .m-sm-n5{margin:-3rem!important}.conversejs .mt-sm-n5,.conversejs .my-sm-n5{margin-top:-3rem!important}.conversejs .mr-sm-n5,.conversejs .mx-sm-n5{margin-right:-3rem!important}.conversejs .mb-sm-n5,.conversejs .my-sm-n5{margin-bottom:-3rem!important}.conversejs .ml-sm-n5,.conversejs .mx-sm-n5{margin-left:-3rem!important}.conversejs .m-sm-auto{margin:auto!important}.conversejs .mt-sm-auto,.conversejs .my-sm-auto{margin-top:auto!important}.conversejs .mr-sm-auto,.conversejs .mx-sm-auto{margin-right:auto!important}.conversejs .mb-sm-auto,.conversejs .my-sm-auto{margin-bottom:auto!important}.conversejs .ml-sm-auto,.conversejs .mx-sm-auto{margin-left:auto!important}}@media(min-width:768px){.conversejs .m-md-0{margin:0!important}.conversejs .mt-md-0,.conversejs .my-md-0{margin-top:0!important}.conversejs .mr-md-0,.conversejs .mx-md-0{margin-right:0!important}.conversejs .mb-md-0,.conversejs .my-md-0{margin-bottom:0!important}.conversejs .ml-md-0,.conversejs .mx-md-0{margin-left:0!important}.conversejs .m-md-1{margin:.25rem!important}.conversejs .mt-md-1,.conversejs .my-md-1{margin-top:.25rem!important}.conversejs .mr-md-1,.conversejs .mx-md-1{margin-right:.25rem!important}.conversejs .mb-md-1,.conversejs .my-md-1{margin-bottom:.25rem!important}.conversejs .ml-md-1,.conversejs .mx-md-1{margin-left:.25rem!important}.conversejs .m-md-2{margin:.5rem!important}.conversejs .mt-md-2,.conversejs .my-md-2{margin-top:.5rem!important}.conversejs .mr-md-2,.conversejs .mx-md-2{margin-right:.5rem!important}.conversejs .mb-md-2,.conversejs .my-md-2{margin-bottom:.5rem!important}.conversejs .ml-md-2,.conversejs .mx-md-2{margin-left:.5rem!important}.conversejs .m-md-3{margin:1rem!important}.conversejs .mt-md-3,.conversejs .my-md-3{margin-top:1rem!important}.conversejs .mr-md-3,.conversejs .mx-md-3{margin-right:1rem!important}.conversejs .mb-md-3,.conversejs .my-md-3{margin-bottom:1rem!important}.conversejs .ml-md-3,.conversejs .mx-md-3{margin-left:1rem!important}.conversejs .m-md-4{margin:1.5rem!important}.conversejs .mt-md-4,.conversejs .my-md-4{margin-top:1.5rem!important}.conversejs .mr-md-4,.conversejs .mx-md-4{margin-right:1.5rem!important}.conversejs .mb-md-4,.conversejs .my-md-4{margin-bottom:1.5rem!important}.conversejs .ml-md-4,.conversejs .mx-md-4{margin-left:1.5rem!important}.conversejs .m-md-5{margin:3rem!important}.conversejs .mt-md-5,.conversejs .my-md-5{margin-top:3rem!important}.conversejs .mr-md-5,.conversejs .mx-md-5{margin-right:3rem!important}.conversejs .mb-md-5,.conversejs .my-md-5{margin-bottom:3rem!important}.conversejs .ml-md-5,.conversejs .mx-md-5{margin-left:3rem!important}.conversejs .p-md-0{padding:0!important}.conversejs .pt-md-0,.conversejs .py-md-0{padding-top:0!important}.conversejs .pr-md-0,.conversejs .px-md-0{padding-right:0!important}.conversejs .pb-md-0,.conversejs .py-md-0{padding-bottom:0!important}.conversejs .pl-md-0,.conversejs .px-md-0{padding-left:0!important}.conversejs .p-md-1{padding:.25rem!important}.conversejs .pt-md-1,.conversejs .py-md-1{padding-top:.25rem!important}.conversejs .pr-md-1,.conversejs .px-md-1{padding-right:.25rem!important}.conversejs .pb-md-1,.conversejs .py-md-1{padding-bottom:.25rem!important}.conversejs .pl-md-1,.conversejs .px-md-1{padding-left:.25rem!important}.conversejs .p-md-2{padding:.5rem!important}.conversejs .pt-md-2,.conversejs .py-md-2{padding-top:.5rem!important}.conversejs .pr-md-2,.conversejs .px-md-2{padding-right:.5rem!important}.conversejs .pb-md-2,.conversejs .py-md-2{padding-bottom:.5rem!important}.conversejs .pl-md-2,.conversejs .px-md-2{padding-left:.5rem!important}.conversejs .p-md-3{padding:1rem!important}.conversejs .pt-md-3,.conversejs .py-md-3{padding-top:1rem!important}.conversejs .pr-md-3,.conversejs .px-md-3{padding-right:1rem!important}.conversejs .pb-md-3,.conversejs .py-md-3{padding-bottom:1rem!important}.conversejs .pl-md-3,.conversejs .px-md-3{padding-left:1rem!important}.conversejs .p-md-4{padding:1.5rem!important}.conversejs .pt-md-4,.conversejs .py-md-4{padding-top:1.5rem!important}.conversejs .pr-md-4,.conversejs .px-md-4{padding-right:1.5rem!important}.conversejs .pb-md-4,.conversejs .py-md-4{padding-bottom:1.5rem!important}.conversejs .pl-md-4,.conversejs .px-md-4{padding-left:1.5rem!important}.conversejs .p-md-5{padding:3rem!important}.conversejs .pt-md-5,.conversejs .py-md-5{padding-top:3rem!important}.conversejs .pr-md-5,.conversejs .px-md-5{padding-right:3rem!important}.conversejs .pb-md-5,.conversejs .py-md-5{padding-bottom:3rem!important}.conversejs .pl-md-5,.conversejs .px-md-5{padding-left:3rem!important}.conversejs .m-md-n1{margin:-.25rem!important}.conversejs .mt-md-n1,.conversejs .my-md-n1{margin-top:-.25rem!important}.conversejs .mr-md-n1,.conversejs .mx-md-n1{margin-right:-.25rem!important}.conversejs .mb-md-n1,.conversejs .my-md-n1{margin-bottom:-.25rem!important}.conversejs .ml-md-n1,.conversejs .mx-md-n1{margin-left:-.25rem!important}.conversejs .m-md-n2{margin:-.5rem!important}.conversejs .mt-md-n2,.conversejs .my-md-n2{margin-top:-.5rem!important}.conversejs .mr-md-n2,.conversejs .mx-md-n2{margin-right:-.5rem!important}.conversejs .mb-md-n2,.conversejs .my-md-n2{margin-bottom:-.5rem!important}.conversejs .ml-md-n2,.conversejs .mx-md-n2{margin-left:-.5rem!important}.conversejs .m-md-n3{margin:-1rem!important}.conversejs .mt-md-n3,.conversejs .my-md-n3{margin-top:-1rem!important}.conversejs .mr-md-n3,.conversejs .mx-md-n3{margin-right:-1rem!important}.conversejs .mb-md-n3,.conversejs .my-md-n3{margin-bottom:-1rem!important}.conversejs .ml-md-n3,.conversejs .mx-md-n3{margin-left:-1rem!important}.conversejs .m-md-n4{margin:-1.5rem!important}.conversejs .mt-md-n4,.conversejs .my-md-n4{margin-top:-1.5rem!important}.conversejs .mr-md-n4,.conversejs .mx-md-n4{margin-right:-1.5rem!important}.conversejs .mb-md-n4,.conversejs .my-md-n4{margin-bottom:-1.5rem!important}.conversejs .ml-md-n4,.conversejs .mx-md-n4{margin-left:-1.5rem!important}.conversejs .m-md-n5{margin:-3rem!important}.conversejs .mt-md-n5,.conversejs .my-md-n5{margin-top:-3rem!important}.conversejs .mr-md-n5,.conversejs .mx-md-n5{margin-right:-3rem!important}.conversejs .mb-md-n5,.conversejs .my-md-n5{margin-bottom:-3rem!important}.conversejs .ml-md-n5,.conversejs .mx-md-n5{margin-left:-3rem!important}.conversejs .m-md-auto{margin:auto!important}.conversejs .mt-md-auto,.conversejs .my-md-auto{margin-top:auto!important}.conversejs .mr-md-auto,.conversejs .mx-md-auto{margin-right:auto!important}.conversejs .mb-md-auto,.conversejs .my-md-auto{margin-bottom:auto!important}.conversejs .ml-md-auto,.conversejs .mx-md-auto{margin-left:auto!important}}@media(min-width:992px){.conversejs .m-lg-0{margin:0!important}.conversejs .mt-lg-0,.conversejs .my-lg-0{margin-top:0!important}.conversejs .mr-lg-0,.conversejs .mx-lg-0{margin-right:0!important}.conversejs .mb-lg-0,.conversejs .my-lg-0{margin-bottom:0!important}.conversejs .ml-lg-0,.conversejs .mx-lg-0{margin-left:0!important}.conversejs .m-lg-1{margin:.25rem!important}.conversejs .mt-lg-1,.conversejs .my-lg-1{margin-top:.25rem!important}.conversejs .mr-lg-1,.conversejs .mx-lg-1{margin-right:.25rem!important}.conversejs .mb-lg-1,.conversejs .my-lg-1{margin-bottom:.25rem!important}.conversejs .ml-lg-1,.conversejs .mx-lg-1{margin-left:.25rem!important}.conversejs .m-lg-2{margin:.5rem!important}.conversejs .mt-lg-2,.conversejs .my-lg-2{margin-top:.5rem!important}.conversejs .mr-lg-2,.conversejs .mx-lg-2{margin-right:.5rem!important}.conversejs .mb-lg-2,.conversejs .my-lg-2{margin-bottom:.5rem!important}.conversejs .ml-lg-2,.conversejs .mx-lg-2{margin-left:.5rem!important}.conversejs .m-lg-3{margin:1rem!important}.conversejs .mt-lg-3,.conversejs .my-lg-3{margin-top:1rem!important}.conversejs .mr-lg-3,.conversejs .mx-lg-3{margin-right:1rem!important}.conversejs .mb-lg-3,.conversejs .my-lg-3{margin-bottom:1rem!important}.conversejs .ml-lg-3,.conversejs .mx-lg-3{margin-left:1rem!important}.conversejs .m-lg-4{margin:1.5rem!important}.conversejs .mt-lg-4,.conversejs .my-lg-4{margin-top:1.5rem!important}.conversejs .mr-lg-4,.conversejs .mx-lg-4{margin-right:1.5rem!important}.conversejs .mb-lg-4,.conversejs .my-lg-4{margin-bottom:1.5rem!important}.conversejs .ml-lg-4,.conversejs .mx-lg-4{margin-left:1.5rem!important}.conversejs .m-lg-5{margin:3rem!important}.conversejs .mt-lg-5,.conversejs .my-lg-5{margin-top:3rem!important}.conversejs .mr-lg-5,.conversejs .mx-lg-5{margin-right:3rem!important}.conversejs .mb-lg-5,.conversejs .my-lg-5{margin-bottom:3rem!important}.conversejs .ml-lg-5,.conversejs .mx-lg-5{margin-left:3rem!important}.conversejs .p-lg-0{padding:0!important}.conversejs .pt-lg-0,.conversejs .py-lg-0{padding-top:0!important}.conversejs .pr-lg-0,.conversejs .px-lg-0{padding-right:0!important}.conversejs .pb-lg-0,.conversejs .py-lg-0{padding-bottom:0!important}.conversejs .pl-lg-0,.conversejs .px-lg-0{padding-left:0!important}.conversejs .p-lg-1{padding:.25rem!important}.conversejs .pt-lg-1,.conversejs .py-lg-1{padding-top:.25rem!important}.conversejs .pr-lg-1,.conversejs .px-lg-1{padding-right:.25rem!important}.conversejs .pb-lg-1,.conversejs .py-lg-1{padding-bottom:.25rem!important}.conversejs .pl-lg-1,.conversejs .px-lg-1{padding-left:.25rem!important}.conversejs .p-lg-2{padding:.5rem!important}.conversejs .pt-lg-2,.conversejs .py-lg-2{padding-top:.5rem!important}.conversejs .pr-lg-2,.conversejs .px-lg-2{padding-right:.5rem!important}.conversejs .pb-lg-2,.conversejs .py-lg-2{padding-bottom:.5rem!important}.conversejs .pl-lg-2,.conversejs .px-lg-2{padding-left:.5rem!important}.conversejs .p-lg-3{padding:1rem!important}.conversejs .pt-lg-3,.conversejs .py-lg-3{padding-top:1rem!important}.conversejs .pr-lg-3,.conversejs .px-lg-3{padding-right:1rem!important}.conversejs .pb-lg-3,.conversejs .py-lg-3{padding-bottom:1rem!important}.conversejs .pl-lg-3,.conversejs .px-lg-3{padding-left:1rem!important}.conversejs .p-lg-4{padding:1.5rem!important}.conversejs .pt-lg-4,.conversejs .py-lg-4{padding-top:1.5rem!important}.conversejs .pr-lg-4,.conversejs .px-lg-4{padding-right:1.5rem!important}.conversejs .pb-lg-4,.conversejs .py-lg-4{padding-bottom:1.5rem!important}.conversejs .pl-lg-4,.conversejs .px-lg-4{padding-left:1.5rem!important}.conversejs .p-lg-5{padding:3rem!important}.conversejs .pt-lg-5,.conversejs .py-lg-5{padding-top:3rem!important}.conversejs .pr-lg-5,.conversejs .px-lg-5{padding-right:3rem!important}.conversejs .pb-lg-5,.conversejs .py-lg-5{padding-bottom:3rem!important}.conversejs .pl-lg-5,.conversejs .px-lg-5{padding-left:3rem!important}.conversejs .m-lg-n1{margin:-.25rem!important}.conversejs .mt-lg-n1,.conversejs .my-lg-n1{margin-top:-.25rem!important}.conversejs .mr-lg-n1,.conversejs .mx-lg-n1{margin-right:-.25rem!important}.conversejs .mb-lg-n1,.conversejs .my-lg-n1{margin-bottom:-.25rem!important}.conversejs .ml-lg-n1,.conversejs .mx-lg-n1{margin-left:-.25rem!important}.conversejs .m-lg-n2{margin:-.5rem!important}.conversejs .mt-lg-n2,.conversejs .my-lg-n2{margin-top:-.5rem!important}.conversejs .mr-lg-n2,.conversejs .mx-lg-n2{margin-right:-.5rem!important}.conversejs .mb-lg-n2,.conversejs .my-lg-n2{margin-bottom:-.5rem!important}.conversejs .ml-lg-n2,.conversejs .mx-lg-n2{margin-left:-.5rem!important}.conversejs .m-lg-n3{margin:-1rem!important}.conversejs .mt-lg-n3,.conversejs .my-lg-n3{margin-top:-1rem!important}.conversejs .mr-lg-n3,.conversejs .mx-lg-n3{margin-right:-1rem!important}.conversejs .mb-lg-n3,.conversejs .my-lg-n3{margin-bottom:-1rem!important}.conversejs .ml-lg-n3,.conversejs .mx-lg-n3{margin-left:-1rem!important}.conversejs .m-lg-n4{margin:-1.5rem!important}.conversejs .mt-lg-n4,.conversejs .my-lg-n4{margin-top:-1.5rem!important}.conversejs .mr-lg-n4,.conversejs .mx-lg-n4{margin-right:-1.5rem!important}.conversejs .mb-lg-n4,.conversejs .my-lg-n4{margin-bottom:-1.5rem!important}.conversejs .ml-lg-n4,.conversejs .mx-lg-n4{margin-left:-1.5rem!important}.conversejs .m-lg-n5{margin:-3rem!important}.conversejs .mt-lg-n5,.conversejs .my-lg-n5{margin-top:-3rem!important}.conversejs .mr-lg-n5,.conversejs .mx-lg-n5{margin-right:-3rem!important}.conversejs .mb-lg-n5,.conversejs .my-lg-n5{margin-bottom:-3rem!important}.conversejs .ml-lg-n5,.conversejs .mx-lg-n5{margin-left:-3rem!important}.conversejs .m-lg-auto{margin:auto!important}.conversejs .mt-lg-auto,.conversejs .my-lg-auto{margin-top:auto!important}.conversejs .mr-lg-auto,.conversejs .mx-lg-auto{margin-right:auto!important}.conversejs .mb-lg-auto,.conversejs .my-lg-auto{margin-bottom:auto!important}.conversejs .ml-lg-auto,.conversejs .mx-lg-auto{margin-left:auto!important}}@media(min-width:1200px){.conversejs .m-xl-0{margin:0!important}.conversejs .mt-xl-0,.conversejs .my-xl-0{margin-top:0!important}.conversejs .mr-xl-0,.conversejs .mx-xl-0{margin-right:0!important}.conversejs .mb-xl-0,.conversejs .my-xl-0{margin-bottom:0!important}.conversejs .ml-xl-0,.conversejs .mx-xl-0{margin-left:0!important}.conversejs .m-xl-1{margin:.25rem!important}.conversejs .mt-xl-1,.conversejs .my-xl-1{margin-top:.25rem!important}.conversejs .mr-xl-1,.conversejs .mx-xl-1{margin-right:.25rem!important}.conversejs .mb-xl-1,.conversejs .my-xl-1{margin-bottom:.25rem!important}.conversejs .ml-xl-1,.conversejs .mx-xl-1{margin-left:.25rem!important}.conversejs .m-xl-2{margin:.5rem!important}.conversejs .mt-xl-2,.conversejs .my-xl-2{margin-top:.5rem!important}.conversejs .mr-xl-2,.conversejs .mx-xl-2{margin-right:.5rem!important}.conversejs .mb-xl-2,.conversejs .my-xl-2{margin-bottom:.5rem!important}.conversejs .ml-xl-2,.conversejs .mx-xl-2{margin-left:.5rem!important}.conversejs .m-xl-3{margin:1rem!important}.conversejs .mt-xl-3,.conversejs .my-xl-3{margin-top:1rem!important}.conversejs .mr-xl-3,.conversejs .mx-xl-3{margin-right:1rem!important}.conversejs .mb-xl-3,.conversejs .my-xl-3{margin-bottom:1rem!important}.conversejs .ml-xl-3,.conversejs .mx-xl-3{margin-left:1rem!important}.conversejs .m-xl-4{margin:1.5rem!important}.conversejs .mt-xl-4,.conversejs .my-xl-4{margin-top:1.5rem!important}.conversejs .mr-xl-4,.conversejs .mx-xl-4{margin-right:1.5rem!important}.conversejs .mb-xl-4,.conversejs .my-xl-4{margin-bottom:1.5rem!important}.conversejs .ml-xl-4,.conversejs .mx-xl-4{margin-left:1.5rem!important}.conversejs .m-xl-5{margin:3rem!important}.conversejs .mt-xl-5,.conversejs .my-xl-5{margin-top:3rem!important}.conversejs .mr-xl-5,.conversejs .mx-xl-5{margin-right:3rem!important}.conversejs .mb-xl-5,.conversejs .my-xl-5{margin-bottom:3rem!important}.conversejs .ml-xl-5,.conversejs .mx-xl-5{margin-left:3rem!important}.conversejs .p-xl-0{padding:0!important}.conversejs .pt-xl-0,.conversejs .py-xl-0{padding-top:0!important}.conversejs .pr-xl-0,.conversejs .px-xl-0{padding-right:0!important}.conversejs .pb-xl-0,.conversejs .py-xl-0{padding-bottom:0!important}.conversejs .pl-xl-0,.conversejs .px-xl-0{padding-left:0!important}.conversejs .p-xl-1{padding:.25rem!important}.conversejs .pt-xl-1,.conversejs .py-xl-1{padding-top:.25rem!important}.conversejs .pr-xl-1,.conversejs .px-xl-1{padding-right:.25rem!important}.conversejs .pb-xl-1,.conversejs .py-xl-1{padding-bottom:.25rem!important}.conversejs .pl-xl-1,.conversejs .px-xl-1{padding-left:.25rem!important}.conversejs .p-xl-2{padding:.5rem!important}.conversejs .pt-xl-2,.conversejs .py-xl-2{padding-top:.5rem!important}.conversejs .pr-xl-2,.conversejs .px-xl-2{padding-right:.5rem!important}.conversejs .pb-xl-2,.conversejs .py-xl-2{padding-bottom:.5rem!important}.conversejs .pl-xl-2,.conversejs .px-xl-2{padding-left:.5rem!important}.conversejs .p-xl-3{padding:1rem!important}.conversejs .pt-xl-3,.conversejs .py-xl-3{padding-top:1rem!important}.conversejs .pr-xl-3,.conversejs .px-xl-3{padding-right:1rem!important}.conversejs .pb-xl-3,.conversejs .py-xl-3{padding-bottom:1rem!important}.conversejs .pl-xl-3,.conversejs .px-xl-3{padding-left:1rem!important}.conversejs .p-xl-4{padding:1.5rem!important}.conversejs .pt-xl-4,.conversejs .py-xl-4{padding-top:1.5rem!important}.conversejs .pr-xl-4,.conversejs .px-xl-4{padding-right:1.5rem!important}.conversejs .pb-xl-4,.conversejs .py-xl-4{padding-bottom:1.5rem!important}.conversejs .pl-xl-4,.conversejs .px-xl-4{padding-left:1.5rem!important}.conversejs .p-xl-5{padding:3rem!important}.conversejs .pt-xl-5,.conversejs .py-xl-5{padding-top:3rem!important}.conversejs .pr-xl-5,.conversejs .px-xl-5{padding-right:3rem!important}.conversejs .pb-xl-5,.conversejs .py-xl-5{padding-bottom:3rem!important}.conversejs .pl-xl-5,.conversejs .px-xl-5{padding-left:3rem!important}.conversejs .m-xl-n1{margin:-.25rem!important}.conversejs .mt-xl-n1,.conversejs .my-xl-n1{margin-top:-.25rem!important}.conversejs .mr-xl-n1,.conversejs .mx-xl-n1{margin-right:-.25rem!important}.conversejs .mb-xl-n1,.conversejs .my-xl-n1{margin-bottom:-.25rem!important}.conversejs .ml-xl-n1,.conversejs .mx-xl-n1{margin-left:-.25rem!important}.conversejs .m-xl-n2{margin:-.5rem!important}.conversejs .mt-xl-n2,.conversejs .my-xl-n2{margin-top:-.5rem!important}.conversejs .mr-xl-n2,.conversejs .mx-xl-n2{margin-right:-.5rem!important}.conversejs .mb-xl-n2,.conversejs .my-xl-n2{margin-bottom:-.5rem!important}.conversejs .ml-xl-n2,.conversejs .mx-xl-n2{margin-left:-.5rem!important}.conversejs .m-xl-n3{margin:-1rem!important}.conversejs .mt-xl-n3,.conversejs .my-xl-n3{margin-top:-1rem!important}.conversejs .mr-xl-n3,.conversejs .mx-xl-n3{margin-right:-1rem!important}.conversejs .mb-xl-n3,.conversejs .my-xl-n3{margin-bottom:-1rem!important}.conversejs .ml-xl-n3,.conversejs .mx-xl-n3{margin-left:-1rem!important}.conversejs .m-xl-n4{margin:-1.5rem!important}.conversejs .mt-xl-n4,.conversejs .my-xl-n4{margin-top:-1.5rem!important}.conversejs .mr-xl-n4,.conversejs .mx-xl-n4{margin-right:-1.5rem!important}.conversejs .mb-xl-n4,.conversejs .my-xl-n4{margin-bottom:-1.5rem!important}.conversejs .ml-xl-n4,.conversejs .mx-xl-n4{margin-left:-1.5rem!important}.conversejs .m-xl-n5{margin:-3rem!important}.conversejs .mt-xl-n5,.conversejs .my-xl-n5{margin-top:-3rem!important}.conversejs .mr-xl-n5,.conversejs .mx-xl-n5{margin-right:-3rem!important}.conversejs .mb-xl-n5,.conversejs .my-xl-n5{margin-bottom:-3rem!important}.conversejs .ml-xl-n5,.conversejs .mx-xl-n5{margin-left:-3rem!important}.conversejs .m-xl-auto{margin:auto!important}.conversejs .mt-xl-auto,.conversejs .my-xl-auto{margin-top:auto!important}.conversejs .mr-xl-auto,.conversejs .mx-xl-auto{margin-right:auto!important}.conversejs .mb-xl-auto,.conversejs .my-xl-auto{margin-bottom:auto!important}.conversejs .ml-xl-auto,.conversejs .mx-xl-auto{margin-left:auto!important}}.conversejs .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:\"\";background-color:rgba(0,0,0,0)}.conversejs .text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace!important}.conversejs .text-justify{text-align:justify!important}.conversejs .text-wrap{white-space:normal!important}.conversejs .text-nowrap{white-space:nowrap!important}.conversejs .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .text-left{text-align:left!important}.conversejs .text-right{text-align:right!important}.conversejs .text-center{text-align:center!important}@media(min-width:576px){.conversejs .text-sm-left{text-align:left!important}.conversejs .text-sm-right{text-align:right!important}.conversejs .text-sm-center{text-align:center!important}}@media(min-width:768px){.conversejs .text-md-left{text-align:left!important}.conversejs .text-md-right{text-align:right!important}.conversejs .text-md-center{text-align:center!important}}@media(min-width:992px){.conversejs .text-lg-left{text-align:left!important}.conversejs .text-lg-right{text-align:right!important}.conversejs .text-lg-center{text-align:center!important}}@media(min-width:1200px){.conversejs .text-xl-left{text-align:left!important}.conversejs .text-xl-right{text-align:right!important}.conversejs .text-xl-center{text-align:center!important}}.conversejs .text-lowercase{text-transform:lowercase!important}.conversejs .text-uppercase{text-transform:uppercase!important}.conversejs .text-capitalize{text-transform:capitalize!important}.conversejs .font-weight-light{font-weight:300!important}.conversejs .font-weight-lighter{font-weight:lighter!important}.conversejs .font-weight-normal{font-weight:400!important}.conversejs .font-weight-bold{font-weight:700!important}.conversejs .font-weight-bolder{font-weight:bolder!important}.conversejs .font-italic{font-style:italic!important}.conversejs .text-white{color:#fff!important}.conversejs .text-primary{color:#007bff!important}.conversejs a.text-primary:focus,.conversejs a.text-primary:hover{color:#0056b3!important}.conversejs .text-secondary{color:#6c757d!important}.conversejs a.text-secondary:focus,.conversejs a.text-secondary:hover{color:#494f54!important}.conversejs .text-success{color:#28a745!important}.conversejs a.text-success:focus,.conversejs a.text-success:hover{color:#19692c!important}.conversejs .text-info{color:#17a2b8!important}.conversejs a.text-info:focus,.conversejs a.text-info:hover{color:#0f6674!important}.conversejs .text-warning{color:#ffc107!important}.conversejs a.text-warning:focus,.conversejs a.text-warning:hover{color:#ba8b00!important}.conversejs .text-danger{color:#dc3545!important}.conversejs a.text-danger:focus,.conversejs a.text-danger:hover{color:#a71d2a!important}.conversejs .text-light{color:#f8f9fa!important}.conversejs a.text-light:focus,.conversejs a.text-light:hover{color:#cbd3da!important}.conversejs .text-dark{color:#343a40!important}.conversejs a.text-dark:focus,.conversejs a.text-dark:hover{color:#121416!important}.conversejs .text-body{color:#212529!important}.conversejs .text-muted{color:#6c757d!important}.conversejs .text-black-50{color:rgba(0,0,0,.5)!important}.conversejs .text-white-50{color:rgba(255,255,255,.5)!important}.conversejs .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.conversejs .text-decoration-none{text-decoration:none!important}.conversejs .text-break{word-break:break-word!important;word-wrap:break-word!important}.conversejs .text-reset{color:inherit!important}.conversejs .visible{visibility:visible!important}.conversejs .invisible{visibility:hidden!important}#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs{color:var(--text-color);font-family:var(--normal-font);font-size:var(--font-size);direction:ltr}.conversejs .flyout{position:absolute}.conversejs textarea:disabled{background-color:#eee!important}.conversejs .subdued{opacity:.35}.conversejs .fit-content{width:-webkit-fit-content!important;width:-moz-fit-content!important;width:fit-content!important;max-width:-webkit-fit-content!important;max-width:-moz-fit-content!important;max-width:fit-content!important}.conversejs .nopadding{padding:0!important}.conversejs .no-scrolling{overflow-x:none;overflow-y:none}.conversejs converse-brand-heading{text-align:center}.conversejs .brand-heading{display:inline-flex;flex-direction:row;align-items:flex-start;font-family:var(--branding-font);color:var(--link-color);margin-bottom:.75em}.conversejs .brand-heading .brand-name-wrapper{display:flex;white-space:nowrap;margin:auto}.conversejs .brand-heading .brand-name{color:var(--link-color);display:flex;flex-direction:column;align-items:center;margin-top:-.25em}.conversejs .brand-heading .brand-name .byline{font-family:var(--heading-font);font-size:.3em;margin-bottom:.75em;margin-left:-2.7em;opacity:.55;word-spacing:5px}.conversejs .brand-heading .brand-subtitle{color:var(--text-color)}.conversejs .brand-heading .brand-name__text{font-size:120%;vertical-align:text-bottom}.conversejs .brand-heading .converse-svg-logo{color:var(--link-color);height:1.5em;margin-right:.25em;margin-bottom:-.25em}.conversejs .brand-heading .converse-svg-logo .cls-1{isolation:isolate}.conversejs .brand-heading .converse-svg-logo .cls-2{opacity:.5;mix-blend-mode:multiply}.conversejs .brand-heading .converse-svg-logo .cls-3{fill:var(--link-color)}.conversejs .brand-heading .converse-svg-logo .cls-4{fill:var(--link-color)}.conversejs .brand-heading--inverse .converse-svg-logo{margin-bottom:0;margin-top:-.2em}.conversejs .brand-heading--inverse .byline{margin:0;font-family:var(--heading-font);font-size:.25em;opacity:.55;margin-left:-7em;word-spacing:5px}.conversejs .popover{position:fixed}.conversejs ::-moz-placeholder{color:var(--subdued-color)}.conversejs :-ms-input-placeholder{color:var(--subdued-color)}.conversejs ::placeholder{color:var(--subdued-color)}.conversejs ::-moz-selection{background-color:var(--highlight-color)}.conversejs ::selection{background-color:var(--highlight-color)}.conversejs ::-moz-selection{background-color:var(--highlight-color)}@media screen and (max-width:480px){.conversejs{margin:0;right:10px;left:10px;bottom:5px}}@media screen and (max-height:450px){.conversejs{margin:0;right:10px;left:10px;bottom:5px}}.conversejs ul li{height:auto}.conversejs a,.conversejs article,.conversejs aside,.conversejs audio,.conversejs blockquote,.conversejs caption,.conversejs dd,.conversejs details,.conversejs div,.conversejs dl,.conversejs dt,.conversejs em,.conversejs embed,.conversejs fieldset,.conversejs figcaption,.conversejs figure,.conversejs footer,.conversejs form,.conversejs h1,.conversejs h2,.conversejs h3,.conversejs h4,.conversejs h5,.conversejs h6,.conversejs header,.conversejs hgroup,.conversejs img,.conversejs legend,.conversejs li,.conversejs mark,.conversejs menu,.conversejs nav,.conversejs ol,.conversejs output,.conversejs p,.conversejs pre,.conversejs ruby,.conversejs section,.conversejs span,.conversejs strong,.conversejs summary,.conversejs table,.conversejs tbody,.conversejs td,.conversejs tfoot,.conversejs th,.conversejs thead,.conversejs time,.conversejs tr,.conversejs ul,.conversejs video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}.conversejs button,.conversejs input[type=button],.conversejs input[type=password],.conversejs input[type=submit],.conversejs input[type=text],.conversejs textarea{font-size:var(--font-size);min-height:0}.conversejs strong{font-weight:700}.conversejs em{font-style:italic}.conversejs ol,.conversejs ul{list-style:none}.conversejs li{height:10px}.conversejs dl,.conversejs ol,.conversejs ul{font:inherit;margin:0}.conversejs a{cursor:pointer}.conversejs a,.conversejs a:not([href]):not([tabindex]),.conversejs a:visited{text-decoration:none;color:var(--link-color);text-shadow:none;cursor:pointer}.conversejs a:hover,.conversejs a:not([href]):not([tabindex]):hover,.conversejs a:visited:hover{color:var(--link-hover-color);text-decoration:none;text-shadow:none}.conversejs a.fa,.conversejs a.far,.conversejs a.fas,.conversejs a:not([href]):not([tabindex]).fa,.conversejs a:not([href]):not([tabindex]).far,.conversejs a:not([href]):not([tabindex]).fas,.conversejs a:visited.fa,.conversejs a:visited.far,.conversejs a:visited.fas{color:var(--subdued-color)}.conversejs a.fa:hover,.conversejs a.far:hover,.conversejs a.fas:hover,.conversejs a:not([href]):not([tabindex]).fa:hover,.conversejs a:not([href]):not([tabindex]).far:hover,.conversejs a:not([href]):not([tabindex]).fas:hover,.conversejs a:visited.fa:hover,.conversejs a:visited.far:hover,.conversejs a:visited.fas:hover{color:var(--gray-color)}.conversejs svg{border-radius:var(--chatbox-border-radius)}.conversejs .fa,.conversejs .far,.conversejs .fas{color:var(--subdued-color)}.conversejs .fa:hover,.conversejs .far:hover,.conversejs .fas:hover{color:var(--gray-color)}.conversejs q{quotes:\"“\" \"”\" \"‘\" \"’\"}.conversejs q.reason{display:inline}.conversejs q:before{content:open-quote}.conversejs q:after{content:close-quote}.conversejs .helptext{font-size:var(--font-size-tiny);color:var(--text-color-lighten-15-percent)}.conversejs .selected{color:var(--link-color)!important}.conversejs .circle{border-radius:50%}.conversejs .no-text-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage{0%{background-color:#8dd8ae}25%{background-color:rgba(141,216,174,.75)}50%{background-color:rgba(141,216,174,.5)}75%{background-color:rgba(141,216,174,.25)}100%{background-color:transparent}}@keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@-webkit-keyframes colorchange-chatmessage-muc{0%{background-color:#ffb5a2}25%{background-color:rgba(255,181,162,.75)}50%{background-color:rgba(255,181,162,.5)}75%{background-color:rgba(255,181,162,.25)}100%{background-color:transparent}}@keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}@keyframes fadeOut{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}.conversejs .fade-in{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs .visible{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}.conversejs .hidden{opacity:0!important;display:none!important}.conversejs .fade-out{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.conversejs .collapsed{height:0!important;overflow:hidden!important;padding:0!important}.conversejs .locked{padding-right:22px}@-webkit-keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(359deg)}}.conversejs .spinner__container{width:100%}.conversejs .spinner{-webkit-animation:spin 2s infinite,linear;animation:spin 2s infinite,linear;width:1em;display:block;text-align:center;padding:.5em 0;font-size:24px}.conversejs .left{float:left}.conversejs .right{float:right}.conversejs .centered{text-align:center;display:block;margin:auto}.conversejs .hor_centered{text-align:center;display:block!important;margin:0 auto;clear:both}.conversejs .error{color:var(--error-color)!important}.conversejs .info{color:var(--info-color)}.conversejs .reg-feedback{font-size:85%;margin-bottom:1em}.conversejs #converse-login .conn-feedback,.conversejs .reg-feedback{display:block;text-align:center;width:100%}.conversejs .avatar{border-radius:var(--avatar-border-radius);border:var(--avatar-border);background-color:var(--avatar-background-color)}.conversejs .avatar-autocomplete{margin-right:.5em;vertical-align:middle}.conversejs .activated{display:block!important}.conversejs .form-help{color:var(--subdued-color);font-size:90%}.conversejs .form-control--labeled{margin-top:.5em}.conversejs .nav-pills .nav-link.active,.conversejs .nav-pills .show>.nav-link{background-color:var(--primary-color)}@media screen and (max-width:575px){body .converse-brand{font-size:3.75em}.conversejs:not(.converse-embedded) .chatbox .chat-body{border-radius:var(--chatbox-border-radius)}.conversejs:not(.converse-embedded) .flyout{border-radius:var(--chatbox-border-radius)}}@media screen and (min-width:576px){.conversejs .offset-sm-2{margin-left:16.666667%}}@media screen and (min-width:768px){.conversejs .offset-md-2{margin-left:16.666667%}.conversejs .offset-md-3{margin-left:25%}}@media screen and (min-width:992px){.conversejs .offset-lg-2{margin-left:16.666667%}.conversejs .offset-lg-3{margin-left:25%}}@media screen and (min-width:1200px){.conversejs .offset-xl-2{margin-left:16.666667%}}@media screen and (max-height:450px){.conversejs{left:0}}.conversejs .btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .btn{transition:none}}.conversejs .btn:hover{color:#212529;text-decoration:none}.conversejs .btn.focus,.conversejs .btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .btn.disabled,.conversejs .btn:disabled{opacity:.65}.conversejs .btn:not(:disabled):not(.disabled){cursor:pointer}.conversejs a.btn.disabled,.conversejs fieldset:disabled a.btn{pointer-events:none}.conversejs .btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.conversejs .btn-primary.focus,.conversejs .btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.conversejs .btn-primary.disabled,.conversejs .btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-primary:not(:disabled):not(.disabled).active,.conversejs .btn-primary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.conversejs .btn-primary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.conversejs .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.conversejs .btn-secondary.focus,.conversejs .btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.conversejs .btn-secondary.disabled,.conversejs .btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-secondary:not(:disabled):not(.disabled).active,.conversejs .btn-secondary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.conversejs .btn-secondary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.conversejs .btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.conversejs .btn-success.focus,.conversejs .btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.conversejs .btn-success.disabled,.conversejs .btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-success:not(:disabled):not(.disabled).active,.conversejs .btn-success:not(:disabled):not(.disabled):active,.show>.conversejs .btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.conversejs .btn-success:not(:disabled):not(.disabled).active:focus,.conversejs .btn-success:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.conversejs .btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.conversejs .btn-info.focus,.conversejs .btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.conversejs .btn-info.disabled,.conversejs .btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-info:not(:disabled):not(.disabled).active,.conversejs .btn-info:not(:disabled):not(.disabled):active,.show>.conversejs .btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.conversejs .btn-info:not(:disabled):not(.disabled).active:focus,.conversejs .btn-info:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.conversejs .btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.conversejs .btn-warning.focus,.conversejs .btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.conversejs .btn-warning.disabled,.conversejs .btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-warning:not(:disabled):not(.disabled).active,.conversejs .btn-warning:not(:disabled):not(.disabled):active,.show>.conversejs .btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.conversejs .btn-warning:not(:disabled):not(.disabled).active:focus,.conversejs .btn-warning:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.conversejs .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.conversejs .btn-danger.focus,.conversejs .btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.conversejs .btn-danger.disabled,.conversejs .btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-danger:not(:disabled):not(.disabled).active,.conversejs .btn-danger:not(:disabled):not(.disabled):active,.show>.conversejs .btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.conversejs .btn-danger:not(:disabled):not(.disabled).active:focus,.conversejs .btn-danger:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.conversejs .btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.conversejs .btn-light.focus,.conversejs .btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.conversejs .btn-light.disabled,.conversejs .btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-light:not(:disabled):not(.disabled).active,.conversejs .btn-light:not(:disabled):not(.disabled):active,.show>.conversejs .btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.conversejs .btn-light:not(:disabled):not(.disabled).active:focus,.conversejs .btn-light:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.conversejs .btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.conversejs .btn-dark.focus,.conversejs .btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.conversejs .btn-dark.disabled,.conversejs .btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-dark:not(:disabled):not(.disabled).active,.conversejs .btn-dark:not(:disabled):not(.disabled):active,.show>.conversejs .btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.conversejs .btn-dark:not(:disabled):not(.disabled).active:focus,.conversejs .btn-dark:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.conversejs .btn-outline-primary{color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary.focus,.conversejs .btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .btn-outline-primary.disabled,.conversejs .btn-outline-primary:disabled{color:#007bff;background-color:transparent}.conversejs .btn-outline-primary:not(:disabled):not(.disabled).active,.conversejs .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .btn-outline-secondary{color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary.focus,.conversejs .btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .btn-outline-secondary.disabled,.conversejs .btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active,.conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.conversejs .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .btn-outline-success{color:#28a745;border-color:#28a745}.conversejs .btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-outline-success.focus,.conversejs .btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .btn-outline-success.disabled,.conversejs .btn-outline-success:disabled{color:#28a745;background-color:transparent}.conversejs .btn-outline-success:not(:disabled):not(.disabled).active,.conversejs .btn-outline-success:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.conversejs .btn-outline-success:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .btn-outline-info{color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info.focus,.conversejs .btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .btn-outline-info.disabled,.conversejs .btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.conversejs .btn-outline-info:not(:disabled):not(.disabled).active,.conversejs .btn-outline-info:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.conversejs .btn-outline-info:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .btn-outline-warning{color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning.focus,.conversejs .btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .btn-outline-warning.disabled,.conversejs .btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.conversejs .btn-outline-warning:not(:disabled):not(.disabled).active,.conversejs .btn-outline-warning:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.conversejs .btn-outline-warning:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .btn-outline-danger{color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger.focus,.conversejs .btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .btn-outline-danger.disabled,.conversejs .btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.conversejs .btn-outline-danger:not(:disabled):not(.disabled).active,.conversejs .btn-outline-danger:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.conversejs .btn-outline-danger:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light.focus,.conversejs .btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .btn-outline-light.disabled,.conversejs .btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.conversejs .btn-outline-light:not(:disabled):not(.disabled).active,.conversejs .btn-outline-light:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.conversejs .btn-outline-light:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .btn-outline-dark{color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark.focus,.conversejs .btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .btn-outline-dark.disabled,.conversejs .btn-outline-dark:disabled{color:#343a40;background-color:transparent}.conversejs .btn-outline-dark:not(:disabled):not(.disabled).active,.conversejs .btn-outline-dark:not(:disabled):not(.disabled):active,.show>.conversejs .btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.conversejs .btn-outline-dark:not(:disabled):not(.disabled).active:focus,.conversejs .btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.conversejs .btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .btn-link{font-weight:400;color:#007bff;text-decoration:none}.conversejs .btn-link:hover{color:#0056b3;text-decoration:underline}.conversejs .btn-link.focus,.conversejs .btn-link:focus{text-decoration:underline}.conversejs .btn-link.disabled,.conversejs .btn-link:disabled{color:#6c757d;pointer-events:none}.conversejs .btn-group-lg>.btn,.conversejs .btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs .btn-group-sm>.btn,.conversejs .btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .btn-block{display:block;width:100%}.conversejs .btn-block+.btn-block{margin-top:.5rem}.conversejs input[type=button].btn-block,.conversejs input[type=reset].btn-block,.conversejs input[type=submit].btn-block{width:100%}.conversejs .btn-group,.conversejs .btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.conversejs .btn-group-vertical>.btn,.conversejs .btn-group>.btn{position:relative;flex:1 1 auto}.conversejs .btn-group-vertical>.btn:hover,.conversejs .btn-group>.btn:hover{z-index:1}.conversejs .btn-group-vertical>.btn.active,.conversejs .btn-group-vertical>.btn:active,.conversejs .btn-group-vertical>.btn:focus,.conversejs .btn-group>.btn.active,.conversejs .btn-group>.btn:active,.conversejs .btn-group>.btn:focus{z-index:1}.conversejs .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.conversejs .btn-toolbar .input-group{width:auto}.conversejs .btn-group>.btn-group:not(:first-child),.conversejs .btn-group>.btn:not(:first-child){margin-left:-1px}.conversejs .btn-group>.btn-group:not(:last-child)>.btn,.conversejs .btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .btn-group>.btn-group:not(:first-child)>.btn,.conversejs .btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.conversejs .dropdown-toggle-split::after,.dropright .conversejs .dropdown-toggle-split::after,.dropup .conversejs .dropdown-toggle-split::after{margin-left:0}.dropleft .conversejs .dropdown-toggle-split::before{margin-right:0}.conversejs .btn-group-sm>.btn+.dropdown-toggle-split,.conversejs .btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.conversejs .btn-group-lg>.btn+.dropdown-toggle-split,.conversejs .btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.conversejs .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.conversejs .btn-group-vertical>.btn,.conversejs .btn-group-vertical>.btn-group{width:100%}.conversejs .btn-group-vertical>.btn-group:not(:first-child),.conversejs .btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.conversejs .btn-group-vertical>.btn-group:not(:last-child)>.btn,.conversejs .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.conversejs .btn-group-vertical>.btn-group:not(:first-child)>.btn,.conversejs .btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.conversejs .btn-group-toggle>.btn,.conversejs .btn-group-toggle>.btn-group>.btn{margin-bottom:0}.conversejs .btn-group-toggle>.btn input[type=checkbox],.conversejs .btn-group-toggle>.btn input[type=radio],.conversejs .btn-group-toggle>.btn-group>.btn input[type=checkbox],.conversejs .btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.conversejs .btn{font-weight:400;color:var(--button-text-color)}.conversejs .btn.fa{color:var(--button-text-color)!important}.conversejs .btn i.fa,.conversejs .btn i.far,.conversejs .btn i.fas{color:var(--button-text-color);margin-right:.5em}.conversejs .btn i.fa.only-icon,.conversejs .btn i.far.only-icon,.conversejs .btn i.fas.only-icon{margin-right:0}.conversejs .btn converse-icon{display:inline-block;margin-right:0}.conversejs .btn-primary{background-color:var(--primary-color);border-color:transparent}.conversejs .btn-primary:active,.conversejs .btn-primary:focus,.conversejs .btn-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}.conversejs .btn--transparent{background:0 0;border:none}.conversejs .btn-circle{width:30px;height:30px;text-align:center;padding:.5em 0;font-size:var(--font-size-small);line-height:1.428571429;border-radius:50%}.conversejs .badge-info,.conversejs .btn-info{background-color:var(--primary-color);border-color:var(--primary-color)}.conversejs .badge-info:hover,.conversejs .btn-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}.conversejs .badge-secondary,.conversejs .btn-secondary,.conversejs .button-cancel{color:var(--button-text-color);background-color:var(--secondary-color);border-color:var(--secondary-color)}.conversejs .badge-secondary:hover,.conversejs .btn-secondary:hover,.conversejs .button-cancel:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}.conversejs .btn-warning{color:var(--button-text-color);background-color:var(--warning-color);border-color:var(--warning-color)}.conversejs .btn-warning:hover{color:var(--button-text-color);background-color:var(--warning-color-dark);border-color:var(--warning-color-dark)}.conversejs .btn-danger{color:var(--button-text-color);background-color:var(--danger-color);border-color:var(--danger-color)!important}.conversejs .btn-danger:hover{background-color:var(--danger-color-dark);border-color:var(--danger-color-dark)}.conversejs .badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .badge{transition:none}}a.conversejs .badge:focus,a.conversejs .badge:hover{text-decoration:none}.conversejs .badge:empty{display:none}.conversejs .btn .badge{position:relative;top:-1px}.conversejs .badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.conversejs .badge-primary{color:#fff;background-color:#007bff}a.conversejs .badge-primary:focus,a.conversejs .badge-primary:hover{color:#fff;background-color:#0062cc}a.conversejs .badge-primary.focus,a.conversejs .badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.conversejs .badge-secondary{color:#fff;background-color:#6c757d}a.conversejs .badge-secondary:focus,a.conversejs .badge-secondary:hover{color:#fff;background-color:#545b62}a.conversejs .badge-secondary.focus,a.conversejs .badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.conversejs .badge-success{color:#fff;background-color:#28a745}a.conversejs .badge-success:focus,a.conversejs .badge-success:hover{color:#fff;background-color:#1e7e34}a.conversejs .badge-success.focus,a.conversejs .badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.conversejs .badge-info{color:#fff;background-color:#17a2b8}a.conversejs .badge-info:focus,a.conversejs .badge-info:hover{color:#fff;background-color:#117a8b}a.conversejs .badge-info.focus,a.conversejs .badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.conversejs .badge-warning{color:#212529;background-color:#ffc107}a.conversejs .badge-warning:focus,a.conversejs .badge-warning:hover{color:#212529;background-color:#d39e00}a.conversejs .badge-warning.focus,a.conversejs .badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.conversejs .badge-danger{color:#fff;background-color:#dc3545}a.conversejs .badge-danger:focus,a.conversejs .badge-danger:hover{color:#fff;background-color:#bd2130}a.conversejs .badge-danger.focus,a.conversejs .badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.conversejs .badge-light{color:#212529;background-color:#f8f9fa}a.conversejs .badge-light:focus,a.conversejs .badge-light:hover{color:#212529;background-color:#dae0e5}a.conversejs .badge-light.focus,a.conversejs .badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.conversejs .badge-dark{color:#fff;background-color:#343a40}a.conversejs .badge-dark:focus,a.conversejs .badge-dark:hover{color:#fff;background-color:#1d2124}a.conversejs .badge-dark.focus,a.conversejs .badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.conversejs .badge{color:#fff;font-size:90%;font-weight:400;line-height:1;text-shadow:none}.conversejs .badge-light{color:var(--text-color)}.conversejs .badge-primary{background-color:var(--primary-color);border-color:transparent}.conversejs .badge-primary:active,.conversejs .badge-primary:focus,.conversejs .badge-primary:hover{background-color:var(--primary-color-dark)!important;border-color:transparent!important}.conversejs .badge-info{background-color:var(--primary-color);border-color:var(--primary-color)}.conversejs .badge-info:hover{background-color:var(--primary-color-dark);border-color:var(--primary-color-dark)}.conversejs .badge-secondary{color:#fff;background-color:var(--secondary-color);border-color:var(--secondary-color)}.conversejs .badge-secondary:hover{background-color:var(--secondary-color-dark);border-color:var(--secondary-color-dark)}.conversejs .form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .form-control{transition:none}}.conversejs .form-control::-ms-expand{background-color:transparent;border:0}.conversejs .form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.conversejs .form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .form-control::-moz-placeholder{color:#6c757d;opacity:1}.conversejs .form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.conversejs .form-control::placeholder{color:#6c757d;opacity:1}.conversejs .form-control:disabled,.conversejs .form-control[readonly]{background-color:#e9ecef;opacity:1}.conversejs input[type=date].form-control,.conversejs input[type=datetime-local].form-control,.conversejs input[type=month].form-control,.conversejs input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.conversejs .form-control-file,.conversejs .form-control-range{display:block;width:100%}.conversejs .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.conversejs .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.conversejs .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.conversejs .form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.conversejs .form-control-plaintext.form-control-lg,.conversejs .form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.conversejs .form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs select.form-control[multiple],.conversejs select.form-control[size]{height:auto}.conversejs textarea.form-control{height:auto}.conversejs .form-group{margin-bottom:1rem}.conversejs .form-text{display:block;margin-top:.25rem}.conversejs .form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.conversejs .form-row>.col,.conversejs .form-row>[class*=col-]{padding-right:5px;padding-left:5px}.conversejs .form-check{position:relative;display:block;padding-left:1.25rem}.conversejs .form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.conversejs .form-check-input:disabled~.form-check-label,.conversejs .form-check-input[disabled]~.form-check-label{color:#6c757d}.conversejs .form-check-label{margin-bottom:0}.conversejs .form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.conversejs .form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.conversejs .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.conversejs .valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.conversejs .valid-tooltip,.form-row>[class*=col-]>.conversejs .valid-tooltip{left:5px}.conversejs.is-valid~.valid-feedback,.conversejs.is-valid~.valid-tooltip,.was-validated .conversejs:valid~.valid-feedback,.was-validated .conversejs:valid~.valid-tooltip{display:block}.conversejs .form-control.is-valid,.was-validated .conversejs .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.conversejs .form-control.is-valid:focus,.was-validated .conversejs .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs textarea.form-control.is-valid,.was-validated .conversejs textarea.form-control:valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.conversejs .custom-select.is-valid,.was-validated .conversejs .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right .75rem center/8px 10px no-repeat,#fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.conversejs .custom-select.is-valid:focus,.was-validated .conversejs .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .form-check-input.is-valid~.form-check-label,.was-validated .conversejs .form-check-input:valid~.form-check-label{color:#28a745}.conversejs .form-check-input.is-valid~.valid-feedback,.conversejs .form-check-input.is-valid~.valid-tooltip,.was-validated .conversejs .form-check-input:valid~.valid-feedback,.was-validated .conversejs .form-check-input:valid~.valid-tooltip{display:block}.conversejs .custom-control-input.is-valid~.custom-control-label,.was-validated .conversejs .custom-control-input:valid~.custom-control-label{color:#28a745}.conversejs .custom-control-input.is-valid~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.conversejs .custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.conversejs .custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .conversejs .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.conversejs .custom-file-input.is-valid~.custom-file-label,.was-validated .conversejs .custom-file-input:valid~.custom-file-label{border-color:#28a745}.conversejs .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .conversejs .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.conversejs .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.conversejs .invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.conversejs .invalid-tooltip,.form-row>[class*=col-]>.conversejs .invalid-tooltip{left:5px}.conversejs.is-invalid~.invalid-feedback,.conversejs.is-invalid~.invalid-tooltip,.was-validated .conversejs:invalid~.invalid-feedback,.was-validated .conversejs:invalid~.invalid-tooltip{display:block}.conversejs .form-control.is-invalid,.was-validated .conversejs .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.conversejs .form-control.is-invalid:focus,.was-validated .conversejs .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs textarea.form-control.is-invalid,.was-validated .conversejs textarea.form-control:invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.conversejs .custom-select.is-invalid,.was-validated .conversejs .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right .75rem center/8px 10px no-repeat,#fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.conversejs .custom-select.is-invalid:focus,.was-validated .conversejs .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .form-check-input.is-invalid~.form-check-label,.was-validated .conversejs .form-check-input:invalid~.form-check-label{color:#dc3545}.conversejs .form-check-input.is-invalid~.invalid-feedback,.conversejs .form-check-input.is-invalid~.invalid-tooltip,.was-validated .conversejs .form-check-input:invalid~.invalid-feedback,.was-validated .conversejs .form-check-input:invalid~.invalid-tooltip{display:block}.conversejs .custom-control-input.is-invalid~.custom-control-label,.was-validated .conversejs .custom-control-input:invalid~.custom-control-label{color:#dc3545}.conversejs .custom-control-input.is-invalid~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.conversejs .custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.conversejs .custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .conversejs .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.conversejs .custom-file-input.is-invalid~.custom-file-label,.was-validated .conversejs .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.conversejs .custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .conversejs .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.conversejs .form-inline{display:flex;flex-flow:row wrap;align-items:center}.conversejs .form-inline .form-check{width:100%}@media(min-width:576px){.conversejs .form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.conversejs .form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.conversejs .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.conversejs .form-inline .form-control-plaintext{display:inline-block}.conversejs .form-inline .custom-select,.conversejs .form-inline .input-group{width:auto}.conversejs .form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.conversejs .form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.conversejs .form-inline .custom-control{align-items:center;justify-content:center}.conversejs .form-inline .custom-control-label{margin-bottom:0}}.conversejs .input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.conversejs .input-group>.custom-file,.conversejs .input-group>.custom-select,.conversejs .input-group>.form-control,.conversejs .input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.conversejs .input-group>.custom-file+.custom-file,.conversejs .input-group>.custom-file+.custom-select,.conversejs .input-group>.custom-file+.form-control,.conversejs .input-group>.custom-select+.custom-file,.conversejs .input-group>.custom-select+.custom-select,.conversejs .input-group>.custom-select+.form-control,.conversejs .input-group>.form-control+.custom-file,.conversejs .input-group>.form-control+.custom-select,.conversejs .input-group>.form-control+.form-control,.conversejs .input-group>.form-control-plaintext+.custom-file,.conversejs .input-group>.form-control-plaintext+.custom-select,.conversejs .input-group>.form-control-plaintext+.form-control{margin-left:-1px}.conversejs .input-group>.custom-file .custom-file-input:focus~.custom-file-label,.conversejs .input-group>.custom-select:focus,.conversejs .input-group>.form-control:focus{z-index:3}.conversejs .input-group>.custom-file .custom-file-input:focus{z-index:4}.conversejs .input-group>.custom-select:not(:first-child),.conversejs .input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .input-group>.custom-file{display:flex;align-items:center}.conversejs .input-group>.custom-file:not(:first-child) .custom-file-label,.conversejs .input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.conversejs .input-group:not(.has-validation)>.custom-select:not(:last-child),.conversejs .input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.conversejs .input-group.has-validation>.custom-select:nth-last-child(n+3),.conversejs .input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group-append,.conversejs .input-group-prepend{display:flex}.conversejs .input-group-append .btn,.conversejs .input-group-prepend .btn{position:relative;z-index:2}.conversejs .input-group-append .btn:focus,.conversejs .input-group-prepend .btn:focus{z-index:3}.conversejs .input-group-append .btn+.btn,.conversejs .input-group-append .btn+.input-group-text,.conversejs .input-group-append .input-group-text+.btn,.conversejs .input-group-append .input-group-text+.input-group-text,.conversejs .input-group-prepend .btn+.btn,.conversejs .input-group-prepend .btn+.input-group-text,.conversejs .input-group-prepend .input-group-text+.btn,.conversejs .input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.conversejs .input-group-prepend{margin-right:-1px}.conversejs .input-group-append{margin-left:-1px}.conversejs .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.conversejs .input-group-text input[type=checkbox],.conversejs .input-group-text input[type=radio]{margin-top:0}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-lg>.form-control,.conversejs .input-group-lg>.input-group-append>.btn,.conversejs .input-group-lg>.input-group-append>.input-group-text,.conversejs .input-group-lg>.input-group-prepend>.btn,.conversejs .input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.conversejs .input-group-sm>.custom-select,.conversejs .input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.conversejs .input-group-sm>.custom-select,.conversejs .input-group-sm>.form-control,.conversejs .input-group-sm>.input-group-append>.btn,.conversejs .input-group-sm>.input-group-append>.input-group-text,.conversejs .input-group-sm>.input-group-prepend>.btn,.conversejs .input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.conversejs .input-group-lg>.custom-select,.conversejs .input-group-sm>.custom-select{padding-right:1.75rem}.conversejs .input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.conversejs .input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.conversejs .input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.conversejs .input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.conversejs .input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.conversejs .input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.conversejs .input-group>.input-group-prepend>.btn,.conversejs .input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .input-group>.input-group-append>.btn,.conversejs .input-group>.input-group-append>.input-group-text,.conversejs .input-group>.input-group-prepend:first-child>.btn:not(:first-child),.conversejs .input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.conversejs .input-group>.input-group-prepend:not(:first-child)>.btn,.conversejs .input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.conversejs .custom-control-inline{display:inline-flex;margin-right:1rem}.conversejs .custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.conversejs .custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.conversejs .custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.conversejs .custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.conversejs .custom-control-input:disabled~.custom-control-label,.conversejs .custom-control-input[disabled]~.custom-control-label{color:#6c757d}.conversejs .custom-control-input:disabled~.custom-control-label::before,.conversejs .custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.conversejs .custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.conversejs .custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";background-color:#fff;border:#adb5bd solid 1px}.conversejs .custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\"\";background:50%/50% 50% no-repeat}.conversejs .custom-checkbox .custom-control-label::before{border-radius:.25rem}.conversejs .custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\")}.conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.conversejs .custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\")}.conversejs .custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-radio .custom-control-label::before{border-radius:50%}.conversejs .custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.conversejs .custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-switch{padding-left:2.25rem}.conversejs .custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.conversejs .custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .custom-switch .custom-control-label::after{transition:none}}.conversejs .custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.conversejs .custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.conversejs .custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs .custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-select:focus::-ms-value{color:#495057;background-color:#fff}.conversejs .custom-select[multiple],.conversejs .custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.conversejs .custom-select:disabled{color:#6c757d;background-color:#e9ecef}.conversejs .custom-select::-ms-expand{display:none}.conversejs .custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.conversejs .custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.conversejs .custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.conversejs .custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.conversejs .custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.conversejs .custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-file-input:disabled~.custom-file-label,.conversejs .custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.conversejs .custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.conversejs .custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.conversejs .custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.conversejs .custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.conversejs .custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.conversejs .custom-range:focus{outline:0}.conversejs .custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.conversejs .custom-range::-moz-focus-outer{border:0}.conversejs .custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.conversejs .custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.conversejs .custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.conversejs .custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.conversejs .custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media(prefers-reduced-motion:reduce){.conversejs .custom-range::-ms-thumb{-ms-transition:none;transition:none}}.conversejs .custom-range::-ms-thumb:active{background-color:#b3d7ff}.conversejs .custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.conversejs .custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.conversejs .custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.conversejs .custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.conversejs .custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.conversejs .custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.conversejs .custom-range:disabled::-moz-range-track{cursor:default}.conversejs .custom-range:disabled::-ms-thumb{background-color:#adb5bd}.conversejs .custom-control-label::before,.conversejs .custom-file-label,.conversejs .custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.conversejs .custom-control-label::before,.conversejs .custom-file-label,.conversejs .custom-select{transition:none}}.conversejs .btn--small{font-size:80%;font-weight:400}.conversejs form .hidden-username{opacity:0!important;height:0!important;padding:0!important}.conversejs form .error-feedback{margin-bottom:.5em}.conversejs form .form-check-label{margin-top:.3rem}.conversejs form .form-control::-moz-placeholder{color:var(--subdued-color)}.conversejs form .form-control:-ms-input-placeholder{color:var(--subdued-color)}.conversejs form .form-control::placeholder{color:var(--subdued-color)}.conversejs form .clear-input{margin-top:.5em;margin-bottom:.5em;position:absolute;right:.2em;cursor:pointer;font-size:var(--font-size)}.conversejs form#converse-login,.conversejs form#converse-register{background:var(--controlbox-pane-background-color)}.conversejs form#converse-login legend,.conversejs form#converse-register legend{width:100%;text-align:center;margin:0 auto .5em auto}.conversejs form#converse-login fieldset.buttons,.conversejs form#converse-register fieldset.buttons{text-align:center}.conversejs form#converse-login .login-anon,.conversejs form#converse-register .login-anon{height:auto;white-space:normal}.conversejs form#converse-login .save-submit,.conversejs form#converse-register .save-submit{color:var(--save-button-color)}.conversejs form#converse-login .form-url,.conversejs form#converse-register .form-url{display:block;font-weight:400;margin:1em 0}.conversejs form.converse-form{padding:1.2rem}.conversejs form.converse-form legend{color:var(--text-color);font-size:125%;margin-bottom:1.5em}.conversejs form.converse-form input[type=number],.conversejs form.converse-form input[type=password],.conversejs form.converse-form input[type=text],.conversejs form.converse-form select{min-width:50%}.conversejs form.converse-form input[type=button],.conversejs form.converse-form input[type=number],.conversejs form.converse-form input[type=password],.conversejs form.converse-form input[type=submit],.conversejs form.converse-form input[type=text]{padding:.5em}.conversejs form.converse-form input[type=button],.conversejs form.converse-form input[type=submit]{padding-left:1em;padding-right:1em;border:none}.conversejs form.converse-form input.error{border:1px solid var(--error-color);color:var(--text-color)}.conversejs form.converse-form .text-muted{color:var(--subdued-color)!important;font-size:85%;padding-top:.5em}.conversejs form.converse-form .text-muted a{color:var(--link-color-lighten-10-percent)}.conversejs form.converse-form .text-muted.error{color:var(--error-color)}.conversejs form.converse-form--modal{padding-bottom:0}.conversejs form.converse-form--spinner{height:100%}.conversejs form.converse-centered-form{min-height:66%;text-align:center}.conversejs form.converse-centered-form input{max-width:30em;margin:auto}.conversejs .list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.conversejs .list-group-item-action{width:100%;color:#495057;text-align:inherit}.conversejs .list-group-item-action:focus,.conversejs .list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.conversejs .list-group-item-action:active{color:#212529;background-color:#e9ecef}.conversejs .list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.conversejs .list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.conversejs .list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.conversejs .list-group-item.disabled,.conversejs .list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.conversejs .list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.conversejs .list-group-item+.conversejs .list-group-item{border-top-width:0}.conversejs .list-group-item+.conversejs .list-group-item.active{margin-top:-1px;border-top-width:1px}.conversejs .list-group-horizontal{flex-direction:row}.conversejs .list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width:576px){.conversejs .list-group-horizontal-sm{flex-direction:row}.conversejs .list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-sm>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:768px){.conversejs .list-group-horizontal-md{flex-direction:row}.conversejs .list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-md>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:992px){.conversejs .list-group-horizontal-lg{flex-direction:row}.conversejs .list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-lg>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width:1200px){.conversejs .list-group-horizontal-xl{flex-direction:row}.conversejs .list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.conversejs .list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.conversejs .list-group-horizontal-xl>.list-group-item.active{margin-top:0}.conversejs .list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.conversejs .list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.conversejs .list-group-flush{border-radius:0}.conversejs .list-group-flush>.list-group-item{border-width:0 0 1px}.conversejs .list-group-flush>.list-group-item:last-child{border-bottom-width:0}.conversejs .list-group-item-primary{color:#004085;background-color:#b8daff}.conversejs .list-group-item-primary.list-group-item-action:focus,.conversejs .list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.conversejs .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.conversejs .list-group-item-secondary{color:#383d41;background-color:#d6d8db}.conversejs .list-group-item-secondary.list-group-item-action:focus,.conversejs .list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.conversejs .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.conversejs .list-group-item-success{color:#155724;background-color:#c3e6cb}.conversejs .list-group-item-success.list-group-item-action:focus,.conversejs .list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.conversejs .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.conversejs .list-group-item-info{color:#0c5460;background-color:#bee5eb}.conversejs .list-group-item-info.list-group-item-action:focus,.conversejs .list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.conversejs .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.conversejs .list-group-item-warning{color:#856404;background-color:#ffeeba}.conversejs .list-group-item-warning.list-group-item-action:focus,.conversejs .list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.conversejs .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.conversejs .list-group-item-danger{color:#721c24;background-color:#f5c6cb}.conversejs .list-group-item-danger.list-group-item-action:focus,.conversejs .list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.conversejs .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.conversejs .list-group-item-light{color:#818182;background-color:#fdfdfe}.conversejs .list-group-item-light.list-group-item-action:focus,.conversejs .list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.conversejs .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.conversejs .list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.conversejs .list-group-item-dark.list-group-item-action:focus,.conversejs .list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.conversejs .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.conversejs .list-group-item.active{background-color:var(--primary-color);border-color:var(--primary-color-dark)}.conversejs .list-container{text-align:left;padding:.3em 0}.conversejs .list-container .list-toggle{font-family:var(--heading-font);font-weight:var(--list-toggle-font-weight);display:block;color:var(--list-toggle-color);padding:0 0 .5rem 0}.conversejs .list-container .list-toggle:hover{color:var(--list-toggle-hover-color)}.conversejs .items-list{text-align:left}.conversejs .items-list .list-item{border:none;clear:both;color:var(--text-color);overflow:hidden;padding:.5em 0;text-shadow:0 1px 0 var(--text-shadow-color);word-wrap:break-word;height:2.5em}.conversejs .items-list .list-item.unread-msgs{font-weight:700}.conversejs .items-list .list-item .list-item-link{color:var(--list-item-link-color);margin:auto;font-size:var(--font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;vertical-align:baseline}.conversejs .items-list .list-item .list-item-link:hover{color:var(--list-item-link-hover-color)}.conversejs .items-list .list-item .list-item-badge{opacity:1;border-radius:25%;color:#fff;font-size:var(--font-size-small);line-height:var(--font-size-small)}.conversejs .items-list .list-item .list-item-action{opacity:0;font-size:var(--font-size-tiny);padding:.3em 0 0 0;margin:0 0 0 var(--inline-action-margin);width:2em;height:2em;color:var(--subdued-color)}.conversejs .items-list .list-item .list-item-action:before{font-size:var(--font-size)}.conversejs .items-list .list-item .list-item-action.button-on{color:var(--list-item-link-color)}.conversejs .items-list .list-item .list-item-action.button-on:hover{color:var(--list-item-link-hover-color)}.conversejs .items-list .list-item .list-item-action:hover{color:var(--list-toggle-hover-color);opacity:1}.conversejs .items-list .list-item .list-item-action--visible{opacity:1!important}.conversejs .items-list .list-item.open{background-color:var(--list-item-open-color)}.conversejs .items-list .list-item.open:hover{background-color:var(--list-item-open-hover-color)!important}.conversejs .items-list .list-item.open a{color:#fff}.conversejs .items-list .list-item.open .list-item-link:hover{color:#fff}.conversejs .items-list .list-item.open .list-item-action{color:var(--list-item-action-color)}.conversejs .items-list .list-item.open .list-item-action:hover{color:#fff}.conversejs .items-list .list-item:hover{background-color:var(--controlbox-pane-bg-hover-color)}.conversejs .items-list .list-item:hover .fa,.conversejs .items-list .list-item:hover .far,.conversejs .items-list .list-item:hover .fas{opacity:1}.conversejs .styling-directive{color:var(--subdued-color)}.conversejs .older-msg time{font-weight:700}.conversejs .message .show-msg-author-modal{align-self:flex-start;color:var(--text-color)!important}.conversejs .message blockquote{margin-left:.5em;margin-bottom:.25em;padding-right:1em;color:var(--subdued-color);border-left:.3em solid var(--subdued-color);padding-left:.5em;display:inline-block}.conversejs .message code{font-family:monospace}.conversejs .message .mention{font-weight:700}.conversejs .message .mention--self{font-weight:400}.conversejs .message.date-separator,.conversejs .message.separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}.conversejs .message.date-separator .separator,.conversejs .message.separator .separator{border-top:0;border-bottom:var(--chat-separator-border-bottom);margin:0 1em;position:relative;top:1em;z-index:5}.conversejs .message.date-separator .separator-text,.conversejs .message.separator .separator-text{background:#fff;bottom:1px;color:var(--separator-text-color);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5}.conversejs .message.chat-info{color:var(--chat-head-color);font-size:var(--message-font-size);line-height:var(--line-height-small);font-size:90%;padding:.17rem 1rem}.conversejs .message.chat-info.badge{color:var(--chat-head-text-color)}.conversejs .message.chat-info.chat-state-notification{font-style:italic}.conversejs .message.chat-info.chat-event{clear:left;font-style:italic}.conversejs .message.chat-info.chat-error{color:var(--error-color);font-weight:700}.conversejs .message.chat-info .q{font-style:italic}.conversejs .message .chat-image{height:auto;width:auto;max-height:15em;max-width:100%}.conversejs .message.chat-msg--action{font-style:italic}.conversejs .message.chat-msg--action .chat-msg__author{padding-right:.2em}.conversejs .message.chat-msg{display:inline-flex;width:100%;flex-direction:row;padding:.125rem 1rem}.conversejs .message.chat-msg.onload{animation:colorchange-chatmessage 1s;-webkit-animation:colorchange-chatmessage 1s}.conversejs .message.chat-msg:hover{background-color:var(--list-item-hover-color)}.conversejs .message.chat-msg.correcting.groupchat{background-color:var(--chatroom-correcting-color)}.conversejs .message.chat-msg.correcting:not(.groupchat){background-color:var(--chat-correcting-color)}.conversejs .message.chat-msg .spoiler{margin-top:.5em}.conversejs .message.chat-msg .spoiler-hint{margin-bottom:.5em}.conversejs .message.chat-msg .spoiler-toggle{color:#fff}.conversejs .message.chat-msg .spoiler-toggle i{color:#fff;padding-right:.5em}.conversejs .message.chat-msg .spoiler-toggle:before{padding-right:.25em;whitespace:nowrap}.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat .chat-msg__text{color:var(--subdued-color)}.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--delayed .chat-msg__text,.conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--received .chat-msg__text{color:var(--message-text-color)}.conversejs .message.chat-msg .chat-msg__content--action{width:100%;margin-left:0}.conversejs .message.chat-msg converse-chat-message-body{display:inline}.conversejs .message.chat-msg .chat-msg__message{line-height:1.5em;display:inline-flex;flex-direction:column;width:100%;overflow-wrap:break-word}.conversejs .message.chat-msg .chat-msg__edit-modal{cursor:pointer;padding-right:.5em}.conversejs .message.chat-msg .chat-msg__subject{font-weight:700;clear:right}.conversejs .message.chat-msg .chat-msg__text{color:var(--message-text-color);padding:0;white-space:pre-wrap;word-wrap:break-word;word-break:break-word}.conversejs .message.chat-msg .chat-msg__text a{word-wrap:break-word;word-break:break-all;display:inline}.conversejs .message.chat-msg .chat-msg__text a.chat-image__link{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:block}.conversejs .message.chat-msg .chat-msg__text img.emoji{height:1.5em;width:1.5em;margin:0 .05em 0 .1em;vertical-align:-.1em}.conversejs .message.chat-msg .chat-msg__text .emojione{margin-bottom:-6px}.conversejs .message.chat-msg .chat-msg__text--larger{font-size:1.6em;padding-top:.25em;padding-bottom:.25em}.conversejs .message.chat-msg .chat-msg__error{color:var(--error-color)}.conversejs .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}.conversejs .message.chat-msg .chat-msg__media a{word-wrap:break-word}.conversejs .message.chat-msg .chat-msg__media audio{width:100%}.conversejs .message.chat-msg .chat-msg__avatar{margin-top:.5em;vertical-align:middle;height:var(--message-avatar-height);width:var(--message-avatar-width);min-height:var(--message-avatar-height);min-width:var(--message-avatar-width)}.conversejs .message.chat-msg .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}.conversejs .message.chat-msg .chat-msg__heading{width:100%;margin-top:.5em;padding-right:.25rem;padding-bottom:.25rem}.conversejs .message.chat-msg .chat-msg__heading .badge{margin-left:.5em;font-family:var(--normal_font)}.conversejs .message.chat-msg .chat-msg__heading .chat-msg__time{padding-left:.25em;padding-right:.25em;color:var(--text-color-lighten-15-percent)}.conversejs .message.chat-msg.chat-msg--action .chat-msg__message{flex-direction:row}.conversejs .message.chat-msg.chat-msg--action .chat-msg__text{width:auto}.conversejs .message.chat-msg.chat-msg--action .chat-msg__heading{margin-top:0;padding-bottom:0;width:auto}.conversejs .message.chat-msg.chat-msg--action .chat-msg__heading .fa{margin-left:.5em}.conversejs .message.chat-msg.chat-msg--action .chat-msg__author{font-size:var(--message-font-size)}.conversejs .message.chat-msg.chat-msg--action .chat-msg__time{margin-left:0}.conversejs .message.chat-msg .chat-msg__content{width:calc(100% - var(--message-avatar-width))}.conversejs .message.chat-msg.chat-msg--followup .chat-msg__avatar,.conversejs .message.chat-msg.chat-msg--followup .chat-msg__heading{display:none}.conversejs .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content{margin-left:2.75rem;width:100%}.conversejs .message.chat-msg .chat-msg__receipt{margin-left:.5em;margin-right:.5em;color:var(--message-receipt-color)}.conversejs .message .chat-msg__content{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;margin-left:.5rem}.conversejs .message .chat-msg__content:hover .btn--standalone{opacity:1}.conversejs .message .chat-msg__body{display:flex;flex-direction:row;justify-content:space-between}.conversejs .chatroom-body .message.onload{animation:colorchange-chatmessage-muc 1s;-webkit-animation:colorchange-chatmessage-muc 1s}.conversejs .chatroom-body .message .separator{border-top:0;border-bottom:var(--chatroom-separator-border-bottom)}.conversejs converse-chats.converse-overlayed .message.chat-msg.chat-msg--followup .chat-msg__content{margin-left:0}@media screen and (max-width:767px){converse-chats:not(.converse-embedded) .message.chat-msg .chat-msg__author{white-space:normal}}#conversejs-bg .subdued{opacity:.35}#conversejs-bg .converse-brand{display:flex;justify-content:space-between;margin-top:15vh;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:5s;animation-duration:5s;-webkit-animation-timing-function:ease;animation-timing-function:ease}#conversejs-bg .converse-brand__text{color:#fff;font-family:var(--branding-font);font-weight:400;text-align:center;font-size:140%;margin-left:.2em}#conversejs-bg .converse-brand__text .byline{margin:0;font-family:var(--heading-font);font-size:.3em;opacity:.55;margin-bottom:2em;margin-left:-2.7em;word-spacing:5px}.converse-fullscreen #conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media(min-width:768px){.converse-fullscreen #conversejs-bg .converse-brand__padding{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.converse-fullscreen #conversejs-bg .converse-brand__padding{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.converse-fullscreen #conversejs-bg .converse-brand__padding{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.converse-fullscreen #conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media(min-width:768px){.converse-fullscreen #conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.converse-fullscreen #conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 75%;max-width:75%}}@media(min-width:1200px){.converse-fullscreen #conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}.converse-fullscreen #conversejs-bg .converse-brand__heading svg{margin-top:.3em}.converse-overlayed #conversejs-bg .converse-brand__padding{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0}@media(min-width:768px){.converse-overlayed #conversejs-bg .converse-brand__padding{flex:0 0 16.6666666667%;max-width:16.6666666667%}}@media(min-width:992px){.converse-overlayed #conversejs-bg .converse-brand__padding{flex:0 0 8.3333333333%;max-width:8.3333333333%}}@media(min-width:1200px){.converse-overlayed #conversejs-bg .converse-brand__padding{flex:0 0 8.3333333333%;max-width:8.3333333333%}}.converse-overlayed #conversejs-bg .converse-brand__heading{position:relative;width:100%;padding-right:15px;padding-left:15px;padding:0;display:flex;justify-content:center;margin:auto}@media(min-width:768px){.converse-overlayed #conversejs-bg .converse-brand__heading{font-size:4em;flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.converse-overlayed #conversejs-bg .converse-brand__heading{font-size:5em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}@media(min-width:1200px){.converse-overlayed #conversejs-bg .converse-brand__heading{font-size:6em;flex:0 0 83.3333333333%;max-width:83.3333333333%}}.converse-overlayed #conversejs-bg .converse-brand__heading svg{margin-top:.3em}#conversejs.theme-darkbeet{--darkbeet:#50162D;--fontcolor:#FFF;--bodybg:#252121;--postbg:#292525;--posthover:#353131;--postbright:#353131;--text-color:#DDDDDD;--text-color-lighten-15-percent:#FFF;--maincolor:#8EB726;--first-accent:var(--main-color);--second-accent:#4F8F93;--alert:#72384F;--green:#25DB77;--light-blue:#4E9CFE;--pink:#BD23E1;--darkbeet-green:rgb(25, 68, 71);--blue:#4E9CFE;--dark-link-color:#3a3a3a;--occupants-background-color:var(--bodybg);--global-background-color:var(--bodybg);--maincolorder-first-accent:var(--darkbeet);--primary-color:var(--darkbeet);--primary-color-dark:var(--darkbeet);--highlight-color-darker:var(--maincolor);--highlight-color:var(--darkbeet);--headline-head-color:var(--darkbeet-green);--message-text-color:var(--text-color);--text-controlbox-color:var(--text-color);--message-receipt-color:var(--bodybg);--link-color:var(--maincolor);--error-color:var(--danger-color-dark);--chat-textarea-color:var(--font-hover-head-color);--chat-textarea-background-color:var(--postbg);--chat-content-background-color:var(--postbg);--controlbox-heading-top-margin:0.75em;--inline-action-margin:0.75em;--chat-head-color:var(--darkbeet-green);--chat-head-color-dark:#b9b9ac;--chat-head-color-darker:#e8e8e3;--chat-correcting-color:var(--darkbeet);--chatbox-border-radius:0px;--controlbox-head-color-lighten-45-percent:#0e0e0e;--controlbox-pane-background-color:var(--bodybg);--font-head-color:#777;--font-hover-head-color:#c5c5c5;--chatroom-width:100%;--chatroom-correcting-color:var(--darkbeet);--chatroom-head-bg-color:var(--darkbeet);--chatroom-message-input-border-top:2px solid var(--second-accent);--font-size-tiny:10px;--font-size-small:12px;--font-size-occupants:100%;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--chat-separator-border-bottom:2px solid var(--darkbeet);--chatroom-separator-border-bottom:2px solid var(--darkbeet);--message-background-color:#303030;--message-input-border-top:4px solid var(--darkbeet);--message-mention-color:#404040;--message-mention-self-color:#AB3131;--message-separator-background-color:#2E1520;--embedded-emoji-picker-height:200px;--avatar-border-radius:50%;--fullpage-emoji-picker-height:200px;--overlayed-emoji-picker-height:100px;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--list-item-action-color);--list-item-open-color:var(--chat-content-background-color);--list-item-open-hover-color:var(--darkbeet);--list-dot-circle-color:#f6dec1;scrollbar-color:var(--occupants-background-color) var(--bodybg);scrollbar-width:thin}#conversejs.theme-darkbeet ::-webkit-scrollbar{width:5px;height:5px;background-color:var(--bodybg)}#conversejs.theme-darkbeet ::-webkit-scrollbar-track-piece{background-color:var(--bodybg)}#conversejs.theme-darkbeet ::-webkit-scrollbar-thumb:vertical{height:15px;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .scroller{width:300px;height:100px;overflow-y:scroll;scrollbar-color:var(--occupants-background-color) var(--bodybg)}#conversejs.theme-darkbeet #controlbox .bookmarks-toggle,#conversejs.theme-darkbeet #controlbox .bookmarks-toggle .fa{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.theme-darkbeet #controlbox .bookmarks-toggle .fa:hover,#conversejs.theme-darkbeet #controlbox .bookmarks-toggle:hover{color:var(--first-accent)!important}#conversejs.theme-darkbeet .chatbox .chatroom .sendXMPPMessage{background-color:var(--message-background-color)}#conversejs.theme-darkbeet .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);resize:none;margin-top:1px;padding-left:7px}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea:active,#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea:focus{outline-color:unset!important;outline:unset!important}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea.spoiler{height:42px}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .chat-textarea.correcting{background-color:var(--chat-textarea-background-color)}#conversejs.theme-darkbeet .chatroom .sendXMPPMessage{background-color:var(--message-background-color)}#conversejs.theme-darkbeet .chatroom .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);resize:none;margin-top:1px;padding-left:7px}#conversejs.theme-darkbeet .chatroom .chat-textarea.correcting{background-color:var(--chat-textarea-background-color);margin-bottom:-3px;border-width:2px;border-style:dotted;border-color:var(--maincolor)}#conversejs.theme-darkbeet .chatroom .chat-textarea .chat-textarea:active,#conversejs.theme-darkbeet .chatroom .chat-textarea .chat-textarea:focus{outline-color:maincolor!important}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chat-info{color:var(--second-accent)}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .occupants{border-left:unset}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chatroom-form-container{background-color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatroom .box-flyout .chatroom-body .chatroom-form{background-color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatroom .box-flyout .occupants{flex:0 0 0}#conversejs.theme-darkbeet #controlbox .open-rooms-toggle,#conversejs.theme-darkbeet #controlbox .open-rooms-toggle .fa{color:var(--chatroom-head-bg-color-dark)!important}#conversejs.theme-darkbeet #controlbox .open-rooms-toggle .fa:hover,#conversejs.theme-darkbeet #controlbox .open-rooms-toggle:hover{color:var(--first-accent)!important}#conversejs.theme-darkbeet #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--first-accent)}#conversejs.theme-darkbeet #controlbox .controlbox-pane dd{background-color:var(--darkbeet)}#conversejs.theme-darkbeet #controlbox .controlbox-panes{border-right:unset}#conversejs.theme-darkbeet .avatar{border-radius:var(--avatar-border-radius);border:none;background-color:unset}#conversejs.theme-darkbeet .dropdown-menu{color:var(--text-color);background-color:var(--bodybg)}#conversejs.theme-darkbeet .dropdown-menu.selected,#conversejs.theme-darkbeet .dropdown-menu:active{color:var(--text-color-lighten-15-percent)!important;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .dropdown-item{color:var(--text-color)}#conversejs.theme-darkbeet .dropdown-item.selected,#conversejs.theme-darkbeet .dropdown-item:active{color:var(--text-color-lighten-15-percent)!important;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .dropdown-item:hover{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet ::-webkit-scrollbar-thumb{background:var(--list-item-action-color);border-radius:10px}#conversejs.theme-darkbeet ::-webkit-scrollbar-track{background:var(--darkbeet)}#conversejs.theme-darkbeet .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}#conversejs.theme-darkbeet .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}#conversejs.theme-darkbeet .chatbox converse-emoji-dropdown{display:inline-block}#conversejs.theme-darkbeet .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}#conversejs.theme-darkbeet .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--occupants-background-color);overflow-y:hidden;background:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--occupants-background-color);width:auto;font-size:var(--font-size)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker{background-color:var(--occupants-background-color);padding:.5em 0 0 .5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header{display:flex;flex-direction:column;padding:.1em 0;background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:var(--occupants-background-color);border:1px var(--chat-head-color) solid;border-bottom:none}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}#conversejs.theme-darkbeet .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker{background-color:var(--occupants-background-color);background:#fff}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}#conversejs.theme-darkbeet .items-list .list-item:hover{color:var(--text-color);background-color:var(--darkbeet)}#conversejs.theme-darkbeet .items-list .list-item:hover .fa,#conversejs.theme-darkbeet .items-list .list-item:hover .far,#conversejs.theme-darkbeet .items-list .list-item:hover .fas{opacity:1}#conversejs.theme-darkbeet .items-list .list-item.open{border-left:4px solid var(--maincolor);background-color:var(--list-item-open-color)}#conversejs.theme-darkbeet .items-list .list-item.open:hover{color:var(--text-color);background-color:var(--list-item-open-hover-color)!important}#conversejs.theme-darkbeet .items-list .list-item-badge{color:var(--text-color);float:right;text-align:center;width:22px;background-color:var(--maincolor);border-radius:50%;padding:.5em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet .message .mention{font-weight:700;border-width:0;border-radius:.25rem;background-color:var(--message-mention-color);color:var(--text-color-lighten-15-percent);padding:.25em}#conversejs.theme-darkbeet .message .mention--self{background:var(--message-mention-self-color)}#conversejs.theme-darkbeet .message.correcting.groupchat{background-color:unset;border-style:dotted;border-radius:1em;border-color:var(--maincolor);border-width:.2em}#conversejs.theme-darkbeet .message.correcting:not(.groupchat){background-color:unset;border-style:solid;border-radius:1em;border-color:var(--maincolor)}#conversejs.theme-darkbeet .message .chat-msg__heading .chat-msg__author{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--first-accent);font-family:var(--heading-font);font-size:115%;font-weight:700;padding-bottom:1px}#conversejs.theme-darkbeet .message.chat-msg.chat-msg--followup.chat-msg--with-avatar .chat-msg__content{margin-left:1rem;margin-top:.5rem}#conversejs.theme-darkbeet .chat-msg__content{margin-left:1rem}#conversejs.theme-darkbeet .chat-msg__text{display:inline;color:var(--message-text-color);padding:unset;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;line-height:1em}#conversejs.theme-darkbeet .chat-msg__message{display:inline-flex;flex-direction:column;width:unset;overflow-wrap:break-word}#conversejs.theme-darkbeet .chat-msg__avatar{height:var(--message-avatar-height);width:var(--message-avatar-width);display:block;margin-left:auto;margin-right:auto;background-size:cover}#conversejs.theme-darkbeet .message .mention{font-weight:700}#conversejs.theme-darkbeet .message .mention--self{font-weight:400}#conversejs.theme-darkbeet .message.date-separator{height:2em;margin:0;position:relative;text-align:center;z-index:0}#conversejs.theme-darkbeet .message.date-separator .separator{border-top:0;border-bottom:var(--global-background-color);border-style:solid}#conversejs.theme-darkbeet .message.date-separator .separator-text{background:var(--global-background-color);bottom:1px;color:var(--chatbox-separator-text);display:inline-block;line-height:2em;padding:0 1em;position:relative;z-index:5;border-style:solid;border-radius:2em;border-width:0}#conversejs.theme-darkbeet .message.separator .separator-text{background:var(--darkbeet);color:var(--chatroom-head-color);border-radius:2em}#conversejs.theme-darkbeet .chat-image{border-radius:2em;max-height:25em;transition:.5s;border:0;margin-left:5em;margin-top:2em}#conversejs.theme-darkbeet .chat-image:hover{filter:grayscale(1)}#conversejs.theme-darkbeet .img-thumbnail{background-color:unset}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media{margin-top:.25rem;word-break:break-all}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media a{word-wrap:break-word}#conversejs.theme-darkbeet .message.chat-msg .chat-msg__media audio{width:50%;background-color:unset;color:var(--darkbeet)}#conversejs.theme-darkbeet #converse-modals .modal-header{background-color:var(--darkbeet);border-bottom:none}#conversejs.theme-darkbeet #converse-modals .modal-header .close{color:#fff;background-color:var(--maincolor)}#conversejs.theme-darkbeet #converse-modals .modal-body{background-color:var(--chat-content-background-color)}#conversejs.theme-darkbeet #converse-modals .form-control{color:#fff;background-color:var(--bodybg);border:1px solid var(--bodybg)}#conversejs.theme-darkbeet #converse-modals .modal-content{background-color:var(--bodybg)}#conversejs.theme-darkbeet #converse-modals .modal-footer{border-top:none}#conversejs.theme-darkbeet #converse-modals .list-group-item{background-color:var(--bodybg)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .current-xmpp-contact .chat-status{vertical-align:middle;font-size:1em;margin-right:0;margin-left:-.8em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle,#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle .fa{color:var(--maincolor)!important}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle .fa:hover,#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group .group-toggle:hover{color:var(--darkbeet-green)!important}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group li .open-chat .msgs-indicator{float:right;color:#fff;text-align:center;width:22px;background-color:var(--maincolor);border-radius:50%;padding:.5em;font-size:var(--font-size-small)}#conversejs.theme-darkbeet #converse-roster .roster-contacts .roster-group li .open-chat:hover{background-color:var(--darkbeet)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar{background-color:var(--chat-content-background-color);box-sizing:border-box;color:var(--text-color);display:flex;justify-content:space-between;margin:0;width:100%}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas:hover{color:var(--font-head-color);font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fa:hover svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .far:hover svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas svg,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .fas:hover svg{fill:var(--text-color)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted a{color:var(--text-color)}#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted .toolbar-menu a,#conversejs.theme-darkbeet .chat-toolbar converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}#conversejs.theme-darkbeet .chat-toolbar .toolbar-buttons{width:100%;display:inline-block}#conversejs.theme-darkbeet .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}#conversejs.theme-darkbeet .chat-toolbar button{margin:.2em;padding-bottom:.25em;border:1px transparent solid;background-color:transparent}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa{color:gray}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa:hover{color:gray}#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa svg,#conversejs.theme-darkbeet .chat-toolbar button:disabled .fa svg:hover{fill:gray}#conversejs.theme-darkbeet .chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}#conversejs.theme-darkbeet .chat-toolbar .unverified,#conversejs.theme-darkbeet .chat-toolbar .unverified a{color:#cf5300}#conversejs.theme-darkbeet .chat-toolbar .private,#conversejs.theme-darkbeet .chat-toolbar .private a{color:#4b7003}#conversejs.theme-darkbeet .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}#conversejs.theme-darkbeet .chat-toolbar li:hover{cursor:pointer}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu{background-color:var(--chat-content-background-color);bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}#conversejs.theme-darkbeet .chat-toolbar li .toolbar-menu a{color:var(--link-color)}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul{z-index:99}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}#conversejs.theme-darkbeet .chat-toolbar li.toggle-otr ul li a{display:block}#conversejs.theme-darkbeet .chatbox .new-msgs-indicator{color:var(--chatroom-head-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar{border-top:var(--chatbox-message-input-border-top);color:var(--text-color);background-color:var(--chat-content-background-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .far,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chatbox converse-chat-toolbar .fas:hover{color:var(--dark-link-color)}#conversejs.theme-darkbeet .chatbox converse-chat-toolbar button:focus{outline-color:unset!important;color:var(--maincolor)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--text-color)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa:hover,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far:hover,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas:hover{color:var(--dark-link-color);font-size:var(--font-size-huge)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fa:hover svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .far:hover svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas svg,#conversejs.theme-darkbeet .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--text-color)}#conversejs.theme-darkbeet .chatroom converse-chat-toolbar button:focus{outline-color:unset!important}#conversejs.theme-darkbeet .suggestion-box{background-color:var(--occupants-background-color)}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results,#conversejs.theme-darkbeet .suggestion-box>ul{position:absolute;left:0;right:0;z-index:2;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:rgba(37,36,36,.9);border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);text-shadow:none}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results:before,#conversejs.theme-darkbeet .suggestion-box>ul:before{content:\"\";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:var(--maincolor);border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}#conversejs.theme-darkbeet .suggestion-box .suggestion-box__results>li,#conversejs.theme-darkbeet .suggestion-box>ul>li{text-overflow:ellipsis;overflow-x:hidden;position:relative;cursor:pointer;padding:1em}",".conversejs #controlbox .bookmarks-toggle,.conversejs #controlbox .bookmarks-toggle .fa{color:var(--groupchats-header-color)!important}.conversejs #controlbox .bookmarks-toggle .fa:hover,.conversejs #controlbox .bookmarks-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}.conversejs.fullscreen #controlbox #chatrooms .bookmarks-list dl.rooms-list.bookmarks dd.available-chatroom a.open-room{width:80%}",".conversejs converse-chats.converse-chatboxes{z-index:1031;position:fixed;bottom:0;right:0}.conversejs converse-chats.converse-overlayed{height:3em}.conversejs converse-chats.converse-overlayed>.row{flex-direction:row-reverse}.conversejs converse-chats.converse-fullscreen,.conversejs converse-chats.converse-mobile{flex-wrap:nowrap;width:100vw}.conversejs converse-chats.converse-embedded{box-sizing:border-box;bottom:auto;height:100%;position:relative;right:auto;width:100%}.conversejs converse-chats.converse-embedded *,.conversejs converse-chats.converse-embedded :after,.conversejs converse-chats.converse-embedded :before{box-sizing:border-box}.conversejs converse-chats.converse-embedded.converse-chatboxes{z-index:1031;position:inherit;flex-wrap:nowrap;bottom:auto;height:100%;width:100%}",".conversejs .modal-open{overflow:hidden}.conversejs .modal-open .modal{overflow-x:hidden;overflow-y:auto}.conversejs .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.conversejs .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .conversejs .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media(prefers-reduced-motion:reduce){.modal.fade .conversejs .modal-dialog{transition:none}}.modal.show .conversejs .modal-dialog{transform:none}.modal.modal-static .conversejs .modal-dialog{transform:scale(1.02)}.conversejs .modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.conversejs .modal-dialog-scrollable .modal-footer,.conversejs .modal-dialog-scrollable .modal-header{flex-shrink:0}.conversejs .modal-dialog-scrollable .modal-body{overflow-y:auto}.conversejs .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.conversejs .modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:\"\"}.conversejs .modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.conversejs .modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.conversejs .modal-dialog-centered.modal-dialog-scrollable::before{content:none}.conversejs .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.conversejs .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.conversejs .modal-backdrop.fade{opacity:0}.conversejs .modal-backdrop.show{opacity:.5}.conversejs .modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.conversejs .modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.conversejs .modal-title{margin-bottom:0;line-height:1.5}.conversejs .modal-body{position:relative;flex:1 1 auto;padding:1rem}.conversejs .modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.conversejs .modal-footer>*{margin:.25rem}.conversejs .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width:576px){.conversejs .modal-dialog{max-width:500px;margin:1.75rem auto}.conversejs .modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.conversejs .modal-dialog-centered{min-height:calc(100% - 3.5rem)}.conversejs .modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.conversejs .modal-sm{max-width:300px}}@media(min-width:992px){.conversejs .modal-lg,.conversejs .modal-xl{max-width:800px}}@media(min-width:1200px){.conversejs .modal-xl{max-width:1140px}}.conversejs #converse-modals .modal .modal-body{overflow-y:auto;max-height:75vh;margin-bottom:2em}.conversejs #converse-modals .modal .modal-body p{padding:.25rem 0}.conversejs #converse-modals .modal .modal-body .confirm .form-group p:first-child{font-size:110%;font-weight:700}.conversejs #converse-modals .modal .modal-body.fit-content{box-sizing:content-box}.conversejs #converse-modals .modal .modal-body.fit-content img{max-width:90vw}.conversejs #converse-modals .modal .modal-body--image .chat-image{max-height:99%;max-width:100%}.conversejs #converse-modals .modal .modal-footer{justify-content:flex-start}.conversejs #converse-modals .modal .roomid-policy-error{color:var(--error-color);font-size:var(--font-size-small);float:right}.conversejs #converse-modals .scrollable-container{max-height:45vh;overflow-y:auto}.conversejs #converse-modals .affiliation-form,.conversejs #converse-modals .role-form{padding:2em 0 1em 0}.conversejs #converse-modals .set-xmpp-status{margin:1em}.conversejs #converse-modals .set-xmpp-status .custom-control-label{padding-top:.25em}.conversejs #converse-modals #omemo-tabpanel{margin-top:1em}.conversejs #converse-modals .btn{font-weight:400}.conversejs #converse-modals #user-profile-modal .profile-form label{font-weight:700}.conversejs #converse-modals #user-profile-modal .fingerprint-removal label{display:flex;padding:.75rem 1.25rem}.conversejs #converse-modals #user-profile-modal .list-group-item{display:flex;justify-content:left;font-size:95%}.conversejs #converse-modals #user-profile-modal .list-group-item input[type=checkbox]{margin-right:1em}.conversejs #converse-modals .fingerprints{width:100%;margin-bottom:1em}.conversejs #converse-modals .fingerprint-trust{display:flex;justify-content:space-between;font-size:95%}.conversejs #converse-modals .fingerprint-trust .fingerprint{margin-left:1em}","converse-message-actions{margin-left:.5em}converse-message-actions .chat-msg__actions .dropdown-menu{min-width:5rem}converse-message-actions .chat-msg__actions i{color:var(--text-color-lighten-15-percent);font-size:70%}converse-message-actions .chat-msg__actions button{border:none;background:0 0;color:var(--text-color-lighten-15-percent);padding:0 .25em}converse-message-actions .chat-msg__actions .btn--standalone{opacity:0;margin-top:-.2em}converse-message-actions .chat-msg__actions .chat-msg__action{width:100%;padding:.5em 1em;text-align:left;white-space:nowrap}converse-message-actions .chat-msg__actions .chat-msg__action converse-icon{margin-right:.25em}converse-message-actions .chat-msg__actions .chat-msg__action:hover{color:var(--text-color);background-color:var(--list-item-hover-color)}","converse-gif{display:block}img.gif{visibility:hidden}.gif-canvas{cursor:pointer;max-width:100%;max-height:100%;display:block}.gifcontrol{cursor:pointer;transition:background .25s ease-in-out;z-index:100;display:contents;position:relative}.gifcontrol:after{transition:background .25s ease-in-out;position:absolute;content:\"\";display:block;left:calc(50% - 25px);top:calc(50% - 25px)}.gifcontrol.loading{background:rgba(255,255,255,.75)}.gifcontrol.loading:after{background:#fff;width:50px;height:50px;border-radius:50px}.gifcontrol.playing:after{opacity:0;transition:opacity .25s ease-in-out;border-left:20px solid #fff;border-right:20px solid #fff;width:50px;height:50px}.gifcontrol.playing:hover:after{opacity:1}.gifcontrol.paused{background:rgba(255,255,255,.5)}.gifcontrol.paused:after{width:0;height:0;border-style:solid;border-width:25px 0 25px 50px;border-color:transparent transparent transparent #fff}","converse-chat-message-body audio{display:block}@media(max-width:767.98px){converse-chat-message-body audio{max-width:95%}}@media(min-width:768px){converse-chat-message-body audio{max-width:70%}}@media(min-width:992px){converse-chat-message-body audio{max-width:50%}}@media(min-width:1200px){converse-chat-message-body audio{max-width:40%}}converse-chat-message-body video{display:block;max-height:25em}@media(max-width:767.98px){converse-chat-message-body video{max-width:95%}}@media(min-width:768px){converse-chat-message-body video{max-width:70%}}@media(min-width:992px){converse-chat-message-body video{max-width:50%}}@media(min-width:1200px){converse-chat-message-body video{max-width:40%}}.converse-overlayed converse-chat-message-body audio{display:block;max-width:100%}.converse-overlayed converse-chat-message-body video{display:block;max-width:100%}","converse-icon{display:inline-block;padding:0;margin:0;fill:var(--subdued-color)}converse-icon:hover{fill:var(--text-color)}",".conversejs .dropdown,.conversejs .dropleft,.conversejs .dropright,.conversejs .dropup{position:relative}.conversejs .dropdown-toggle{white-space:nowrap}.conversejs .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.conversejs .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.conversejs .dropdown-menu-left{right:auto;left:0}.conversejs .dropdown-menu-right{right:0;left:auto}@media(min-width:576px){.conversejs .dropdown-menu-sm-left{right:auto;left:0}.conversejs .dropdown-menu-sm-right{right:0;left:auto}}@media(min-width:768px){.conversejs .dropdown-menu-md-left{right:auto;left:0}.conversejs .dropdown-menu-md-right{right:0;left:auto}}@media(min-width:992px){.conversejs .dropdown-menu-lg-left{right:auto;left:0}.conversejs .dropdown-menu-lg-right{right:0;left:auto}}@media(min-width:1200px){.conversejs .dropdown-menu-xl-left{right:auto;left:0}.conversejs .dropdown-menu-xl-right{right:0;left:auto}}.conversejs .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.conversejs .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.conversejs .dropup .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.conversejs .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.conversejs .dropright .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropright .dropdown-toggle::after{vertical-align:0}.conversejs .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.conversejs .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.conversejs .dropleft .dropdown-toggle::after{display:none}.conversejs .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.conversejs .dropleft .dropdown-toggle:empty::after{margin-left:0}.conversejs .dropleft .dropdown-toggle::before{vertical-align:0}.conversejs .dropdown-menu[x-placement^=bottom],.conversejs .dropdown-menu[x-placement^=left],.conversejs .dropdown-menu[x-placement^=right],.conversejs .dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.conversejs .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.conversejs .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.conversejs .dropdown-item:focus,.conversejs .dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.conversejs .dropdown-item.active,.conversejs .dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.conversejs .dropdown-item.disabled,.conversejs .dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.conversejs .dropdown-menu.show{display:block}.conversejs .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.conversejs .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.conversejs converse-dropdown.dropup.dropup--left .dropdown-menu{right:100%;left:auto}.conversejs converse-dropdown .btn--standalone{padding:0 .2em;margin:0}.conversejs converse-dropdown .dropdown-menu{margin-top:-.2em!important}.conversejs converse-dropdown .dropdown-item{padding:.5rem 1rem}.conversejs converse-dropdown .dropdown-item .fa{width:1.25em;margin-right:.75rem}.conversejs converse-dropdown .dropdown-item.selected,.conversejs converse-dropdown .dropdown-item:active{color:#fff!important;background-color:var(--list-item-open-color)}.conversejs converse-dropdown .dropdown-item.selected .fa,.conversejs converse-dropdown .dropdown-item:active .fa{color:#fff!important}",".conversejs .card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.conversejs .card>hr{margin-right:0;margin-left:0}.conversejs .card>.list-group{border-top:inherit;border-bottom:inherit}.conversejs .card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card>.card-header+.list-group,.conversejs .card>.list-group+.card-footer{border-top:0}.conversejs .card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.conversejs .card-title{margin-bottom:.75rem}.conversejs .card-subtitle{margin-top:-.375rem;margin-bottom:0}.conversejs .card-text:last-child{margin-bottom:0}.conversejs .card-link:hover{text-decoration:none}.conversejs .card-link+.card-link{margin-left:1.25rem}.conversejs .card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.conversejs .card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.conversejs .card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.conversejs .card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.conversejs .card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.conversejs .card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.conversejs .card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom,.conversejs .card-img-top{flex-shrink:0;width:100%}.conversejs .card-img,.conversejs .card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.conversejs .card-img,.conversejs .card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.conversejs .card-deck .card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.conversejs .card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.conversejs .card-group>.card{margin-bottom:15px}@media(min-width:576px){.conversejs .card-group{display:flex;flex-flow:row wrap}.conversejs .card-group>.card{flex:1 0 0%;margin-bottom:0}.conversejs .card-group>.card+.card{margin-left:0;border-left:0}.conversejs .card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-header,.conversejs .card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.conversejs .card-group>.card:not(:last-child) .card-footer,.conversejs .card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.conversejs .card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-header,.conversejs .card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.conversejs .card-group>.card:not(:first-child) .card-footer,.conversejs .card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.conversejs .card-columns .card{margin-bottom:.75rem}@media(min-width:576px){.conversejs .card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.conversejs .card-columns .card{display:inline-block;width:100%}}.conversejs .accordion{overflow-anchor:none}.conversejs .accordion>.card{overflow:hidden}.conversejs .accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.conversejs .accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.conversejs .accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{margin:1em 0}@media(max-width:767.98px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:95%}}@media(min-width:768px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:75%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:66%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded .message .card--unfurl,.conversejs converse-chats.converse-fullscreen .message .card--unfurl{max-width:50%}}.conversejs converse-chats.converse-mobile .message .card--unfurl,.conversejs converse-chats.converse-overlayed .message .card--unfurl{margin:1em 0;max-width:95%}","converse-chat-message .message.chat-msg--retracted .chat-msg__message{color:var(--subdued-color)}","converse-chat-content{display:flex;flex-direction:column-reverse;height:100%;justify-content:space-between;overflow:auto}",".conversejs .media{display:flex;align-items:flex-start}.conversejs .media-body{flex:1}.conversejs .chatbox img.emoji{height:1.2em;width:1.2em;margin:0 .05em 0 .1em;vertical-align:-.1em}.conversejs .chatbox .sendXMPPMessage .toggle-smiley a.toggle-smiley{padding:0}.conversejs .chatbox converse-emoji-dropdown{display:inline-block}.conversejs .chatbox converse-emoji-dropdown .dropdown-menu{padding:0}.conversejs .chatbox converse-emoji-picker{width:100%;padding-top:0;padding-bottom:0;background-color:var(--chat-head-color);overflow-y:hidden;background:#fff}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists{height:8em;overflow-y:auto;display:flex;flex-direction:column}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-category__heading{clear:both;color:var(--subdued-color);cursor:auto;display:block;font-size:var(--font-size);margin:0;padding:.75em 0 0 .5em}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-lists__container{overflow-x:hidden}.conversejs .chatbox converse-emoji-picker .emoji-picker__lists .emoji-picker li{float:left}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker{display:flex;padding:.5em 0;background-color:var(--chat-head-color);width:100%;font-size:var(--font-size)}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker label{margin:0;padding:0 .5em;white-space:nowrap;font-size:var(--font-size-small);color:var(--heading-color)}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul{display:flex;flex-direction:row;flex-wrap:wrap}.conversejs .chatbox converse-emoji-picker .emoji-skintone-picker ul li{padding:0 .25em}.conversejs .chatbox converse-emoji-picker .emoji-picker{background-color:#fff;padding:.5em 0 0 .5em}.conversejs .chatbox converse-emoji-picker .emoji-picker:last-child{padding-bottom:.5em}.conversejs .chatbox converse-emoji-picker .emoji-picker li{display:inline-block;height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden;margin-left:0;list-style:none;position:relative}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji{padding:0 .2em;height:auto;width:auto;margin:0;display:block;text-align:center}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji.selected a{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji img{margin:0 auto;height:var(--font-size-huge);width:var(--font-size-huge);display:inline-block;vertical-align:baseline}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a{padding:3px;display:inline-block;font-size:var(--font-size-huge);line-height:calc(var(--font-size-huge) * 1.5);height:calc(var(--font-size-huge) * 1.5);width:calc(var(--font-size-huge) * 1.5);overflow:hidden}.conversejs .chatbox converse-emoji-picker .emoji-picker li.insert-emoji a:hover{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header{width:100%;display:flex;flex-direction:column;padding:.1em 0;background-color:var(--chat-head-color)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header .emoji-search{width:auto;margin:.25em;height:2em;font-size:var(--font-size-small)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul{display:flex;flex-direction:row;flex-wrap:wrap}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category{padding:.25em 0;font-size:var(--font-size-huge)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{background-color:#fff;border:1px var(--chat-head-color) solid;border-bottom:none}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category.selected a,.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category:hover a{background-color:var(--highlight-color-darker)}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category a{padding:.25em;display:inline-block}.conversejs .chatbox converse-emoji-picker .emoji-picker__header ul .emoji-category img{height:var(--font-size-huge);width:var(--font-size-huge)}.conversejs .chatroom converse-emoji-picker{background-color:var(--chatroom-head-bg-color);background:#fff}.conversejs .chatroom converse-emoji-picker .emoji-skintone-picker{background-color:var(--chatroom-head-bg-color)}.conversejs .chatroom converse-emoji-picker .emoji-picker__header{background-color:var(--chatroom-head-bg-color)}.conversejs .chatroom converse-emoji-picker .emoji-picker__header ul .emoji-category.picked{border:1px var(--chatroom-head-bg-color) solid;border-bottom:none}.conversejs converse-chats.converse-overlayed converse-emoji-dropdown .dropdown-menu{min-width:18em}.conversejs converse-chats.converse-overlayed .chatbox .emoji-picker__header .emoji-category img{height:var(--font-size)!important;width:var(--font-size)!important}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji a{font-size:var(--font-size);line-height:calc(var(--font-size) * 1.5);padding:0;height:calc(var(--font-size) * 1.5);width:calc(var(--font-size) * 1.5)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker .insert-emoji img{height:var(--font-size);width:var(--font-size)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-skintone-picker{font-size:var(--font-size-small)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__header .emoji-category{font-size:var(--font-size-small)}.conversejs converse-chats.converse-overlayed .chatbox converse-emoji-picker .emoji-picker__lists{height:7em}.conversejs converse-chats.converse-embedded converse-emoji-dropdown .dropdown-menu{min-width:20em}.conversejs converse-chats.converse-fullscreen converse-emoji-dropdown .dropdown-menu{min-width:22em}.conversejs converse-chats.converse-fullscreen .chatbox converse-emoji-picker .emoji-picker__lists{height:12em}.conversejs .chatbox converse-emoji-picker{max-width:40em}",".conversejs .send-button{border-radius:0;bottom:var(--send-button-bottom);color:var(--inverse-link-color)}.conversejs .chatbox .send-button{background-color:var(--chat-head-color)}.conversejs .chatroom .send-button{background-color:var(--muc-toolbar-btn-color)}.conversejs .chat-toolbar .toolbar-buttons{width:100%}.conversejs .chat-toolbar .toolbar-buttons .message-limit{padding:.5em;font-weight:700}.conversejs .chat-toolbar .toolbar-buttons *{float:left}.conversejs .chat-toolbar .toolbar-buttons .right{float:right}.conversejs .chat-toolbar .unverified,.conversejs .chat-toolbar .unverified a{color:#cf5300}.conversejs .chat-toolbar .private,.conversejs .chat-toolbar .private a{color:#4b7003}.conversejs .chat-toolbar li{cursor:pointer;display:inline-block;list-style:none;padding:0 .5em}.conversejs .chat-toolbar li:hover{cursor:pointer}.conversejs .chat-toolbar li .toolbar-menu{background-color:#fff;bottom:1.7rem;box-shadow:-1px -1px 2px 0 rgba(0,0,0,.4);height:auto;margin-bottom:0;min-width:21rem;position:absolute;right:0;top:auto;z-index:1000}.conversejs .chat-toolbar li .toolbar-menu.otr-menu{left:-6em;min-width:15rem}.conversejs .chat-toolbar li .toolbar-menu.otr-menu.show{display:flex;flex-direction:column}.conversejs .chat-toolbar li .toolbar-menu a{color:var(--link-color)}.conversejs .chat-toolbar li.toggle-otr ul{z-index:99}.conversejs .chat-toolbar li.toggle-otr ul li{display:block;padding:7px}.conversejs .chat-toolbar li.toggle-otr ul li:hover{background-color:var(--highlight-color)}.conversejs .chat-toolbar li.toggle-otr ul li a{display:block}.conversejs converse-chat-toolbar{background-color:#fff;box-sizing:border-box;display:flex;justify-content:space-between;margin:0;width:100%}.conversejs converse-chat-toolbar .fa,.conversejs converse-chat-toolbar .fa:hover,.conversejs converse-chat-toolbar .far,.conversejs converse-chat-toolbar .far:hover,.conversejs converse-chat-toolbar .fas,.conversejs converse-chat-toolbar .fas:hover{color:var(--chat-head-color);font-size:var(--font-size-large)}.conversejs converse-chat-toolbar .fa svg,.conversejs converse-chat-toolbar .fa:hover svg,.conversejs converse-chat-toolbar .far svg,.conversejs converse-chat-toolbar .far:hover svg,.conversejs converse-chat-toolbar .fas svg,.conversejs converse-chat-toolbar .fas:hover svg{fill:var(--chat-head-color)}.conversejs converse-chat-toolbar .unencrypted,.conversejs converse-chat-toolbar .unencrypted a{color:var(--text-color)}.conversejs converse-chat-toolbar .unencrypted .toolbar-menu a,.conversejs converse-chat-toolbar .unencrypted a .toolbar-menu a{color:var(--link-color)}.conversejs converse-chat-toolbar button{margin-top:.4em;border:1px transparent solid;background-color:transparent}.conversejs converse-chat-toolbar button.send-button{padding-top:.2em;padding-bottom:.2em;margin:0;margin-top:-1px}.conversejs .chatbox converse-chat-toolbar{border-top:var(--chatbox-message-input-border-top);color:var(--chat-toolbar-btn-color);background-color:#fff}.conversejs .chatbox converse-chat-toolbar .fa,.conversejs .chatbox converse-chat-toolbar .fa:hover,.conversejs .chatbox converse-chat-toolbar .far,.conversejs .chatbox converse-chat-toolbar .far:hover,.conversejs .chatbox converse-chat-toolbar .fas,.conversejs .chatbox converse-chat-toolbar .fas:hover{color:var(--chat-toolbar-btn-color)}.conversejs .chatbox converse-chat-toolbar button:focus{outline-color:var(--chat-toolbar-btn-color)!important}.conversejs .chatbox converse-chat-toolbar button:disabled .fa{color:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatbox converse-chat-toolbar button:disabled .fa:hover{color:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatbox converse-chat-toolbar button:disabled .fa svg,.conversejs .chatbox converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--chat-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar{border-top:var(--chatroom-message-input-border-top);color:var(--muc-toolbar-btn-color)}.conversejs .chatroom converse-chat-toolbar .fa,.conversejs .chatroom converse-chat-toolbar .fa:hover,.conversejs .chatroom converse-chat-toolbar .far,.conversejs .chatroom converse-chat-toolbar .far:hover,.conversejs .chatroom converse-chat-toolbar .fas,.conversejs .chatroom converse-chat-toolbar .fas:hover{color:var(--muc-toolbar-btn-color);font-size:var(--font-size-large)}.conversejs .chatroom converse-chat-toolbar .fa svg,.conversejs .chatroom converse-chat-toolbar .fa:hover svg,.conversejs .chatroom converse-chat-toolbar .far svg,.conversejs .chatroom converse-chat-toolbar .far:hover svg,.conversejs .chatroom converse-chat-toolbar .fas svg,.conversejs .chatroom converse-chat-toolbar .fas:hover svg{fill:var(--muc-toolbar-btn-color)}.conversejs .chatroom converse-chat-toolbar button:focus{outline-color:var(--muc-toolbar-btn-color)!important}.conversejs .chatroom converse-chat-toolbar button:disabled .fa{color:var(--muc-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar button:disabled .fa:hover{color:var(--muc-toolbar-btn-disabled-color)}.conversejs .chatroom converse-chat-toolbar button:disabled .fa svg,.conversejs .chatroom converse-chat-toolbar button:disabled .fa svg:hover{fill:var(--muc-toolbar-btn-disabled-color)}.conversejs converse-chats.converse-overlayed .chat-toolbar li .toolbar-menu{min-width:235px}.conversejs converse-chats.converse-overlayed .chatroom .chat-toolbar li .toolbar-menu{min-width:280px}",".conversejs .chatbox .chat-head{display:flex;flex-direction:row;color:#fff;font-size:100%;margin:0;padding:0;position:relative}.conversejs .chatbox .chat-head.chat-head-chatbox{background-color:var(--chat-head-color)}.conversejs .chatbox .chat-head .avatar{margin-right:.5em}.conversejs .chatbox .chat-head .show-msg-author-modal{color:#fff!important}.conversejs .chatbox .chat-head .chat-head__desc{color:var(--chat-head-color-lighten-50-percent);font-size:var(--font-size-small);margin:0;overflow:hidden;padding:.5rem 1rem .5rem 1rem;text-overflow:ellipsis;width:100%;max-height:5em}.conversejs .chatbox .chat-head .chatbox-title{padding:.75rem 1rem 0 1rem;display:flex;flex-direction:row;justify-content:space-between;width:100%}.conversejs .chatbox .chat-head .chatbox-title--no-desc{padding:.75rem 1rem}.conversejs .chatbox .chat-head .chatbox-title--row{display:flex;flex-direction:row;overflow:hidden}.conversejs .chatbox .chat-head .chatbox-title__text{overflow:hidden;text-overflow:ellipsis}.conversejs .chatbox .chat-head .chatbox-title__buttons{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;padding:0}.conversejs .chatbox .chat-head a.chatbox-btn.fa,.conversejs .chatbox .chat-head a.chatbox-btn.far,.conversejs .chatbox .chat-head a.chatbox-btn.fas,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fa,.conversejs .chatbox .chat-head a:hover.chatbox-btn.far,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fas,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.far,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fa,.conversejs .chatbox .chat-head a:visited.chatbox-btn.far,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fas{color:#fff}.conversejs .chatbox .chat-head a.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a.chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:hover.chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fa.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.far.button-on:before,.conversejs .chatbox .chat-head a:visited.chatbox-btn.fas.button-on:before{padding:.2em;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}.conversejs .chatbox .chat-head .chatbox-btn{color:#fff}.conversejs .chatbox .chat-head .chatbox-btn.fa,.conversejs .chatbox .chat-head .chatbox-btn.far,.conversejs .chatbox .chat-head .chatbox-btn.fas{color:#fff}.conversejs .chatbox .chat-head .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .chat-head .chatbox-btn.button-on:before{border-radius:5%;background-color:var(--chat-head-text-color);color:var(--chat-head-color)}","#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox .bottom-panel .chat-content-sendbutton{height:calc(100% - (var(--chat-textarea-height) + var(--send-button-height) + 2 * var(--send-button-margin)))}.conversejs .chatbox .bottom-panel .sendXMPPMessage{-moz-background-clip:padding;-webkit-background-clip:padding-box;border-bottom-radius:var(--chatbox-border-radius);background-clip:padding-box;background-color:#fff;border:0;margin:0;padding:0}@media screen and (max-height:450px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}@media screen and (max-width:480px){.conversejs .chatbox .bottom-panel .sendXMPPMessage{width:100%}}.conversejs .chatbox .bottom-panel .sendXMPPMessage .suggestion-box__results:after{display:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .spoiler-hint{width:100%}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea:focus,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:active,.conversejs .chatbox .bottom-panel .sendXMPPMessage input:focus{outline-color:var(--chat-head-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.correcting,.conversejs .chatbox .bottom-panel .sendXMPPMessage input.correcting{background-color:var(--chat-correcting-color)}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea{color:var(--chat-textarea-color);background-color:var(--chat-textarea-background-color);border-top-left-radius:0;border-top-right-radius:0;border-bottom-radius:var(--chatbox-border-radius);padding-left:.5em;padding-right:4.5em;padding-top:.5em;padding-bottom:.5em;width:100%;border:none;min-height:var(--chat-textarea-height);margin-bottom:-4px;resize:none}.conversejs .chatbox .bottom-panel .sendXMPPMessage .chat-textarea.spoiler{height:42px}","#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.media{display:flex;align-items:flex-start}.media-body{flex:1}.conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}.conversejs .chatbox converse-controlbox-navback{display:none}.conversejs .chatbox .flyout{position:absolute}@media screen and (max-height:450px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-height:450px){.conversejs .chatbox .flyout{bottom:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{bottom:0}}.conversejs .chatbox .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}.conversejs .chatbox .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}.conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}.conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-textarea-background-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}.conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}.conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}.conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}.conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}.conversejs .chatbox .chat-content .chat-content__help{max-height:100%}.conversejs .chatbox .chat-content .chat-content__help converse-chat-help{border-top:1px solid var(--chat-head-color);display:block;height:100%;overflow-y:auto;padding:.5em 0}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}.conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}.conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}.conversejs .chatbox .chat-content .chat-content__notifications:before{content:\" \"}.conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}.conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}.conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}.conversejs .chatbox .dragresize-left,.conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}.conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}.conversejs converse-chats.converse-embedded .controlbox-head,.conversejs converse-chats.converse-overlayed .controlbox-head{padding:.5em}.conversejs converse-chats.converse-embedded .chat-head,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-overlayed .chatbox{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-embedded .chatbox .box-flyout,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout{min-width:var(--overlayed-chat-width)!important;width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius)}@media screen and (max-height:450px){.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}@media screen and (max-width:480px){.conversejs converse-chats.converse-overlayed .box-flyout,.conversejs converse-chats.converse-overlayed .chat-head{border-top-left-radius:0;border-top-right-radius:0}}.conversejs converse-chats.converse-overlayed .flyout{bottom:var(--overlayed-chatbox-hover-height)}.conversejs converse-chats.converse-overlayed .box-flyout{height:var(--overlayed-chat-height);min-height:calc(var(--overlayed-chat-height)/ 2)}.conversejs converse-chats.converse-overlayed .chat-head{min-height:var(--overlayed-chat-head-height)}.conversejs converse-chats.converse-overlayed .minimized-chats-flyout .chat-head{cursor:default}.conversejs converse-chats.converse-overlayed .chat-textarea{max-height:var(--overlayed-max-chat-textarea-height)}.conversejs converse-chats.converse-overlayed .chatbox .chat-body{height:calc(100% - var(--overlayed-chat-head-height))}.conversejs converse-chats.converse-overlayed .chatbox .chatbox-title{padding:.5rem .75rem 0 .75rem}.conversejs converse-chats.converse-overlayed .chatbox .chatbox-title--no-desc{padding:.5rem .75rem}@media(max-width:767.98px){.conversejs.converse-overlayed>.row{flex-direction:column}.conversejs.converse-overlayed>.row.no-gutters{margin:-1em}}.conversejs converse-chats.converse-embedded .flyout,.conversejs converse-chats.converse-fullscreen .flyout{border-radius:0;border:none;bottom:0}.conversejs converse-chats.converse-embedded .chatbox,.conversejs converse-chats.converse-fullscreen .chatbox{margin:0;margin-left:15px}.conversejs converse-chats.converse-embedded .chatbox .box-flyout,.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout{box-shadow:none;overflow:hidden}.conversejs converse-chats.converse-embedded.converse-singleton .flyout,.conversejs converse-chats.converse-fullscreen.converse-singleton .flyout{border:none!important}.conversejs converse-chats.converse-embedded.converse-singleton .chat-head,.conversejs converse-chats.converse-fullscreen.converse-singleton .chat-head{padding:.5em}.conversejs converse-chats.converse-embedded.converse-singleton .chatbox,.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{margin:0;position:relative}.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{position:relative;width:100%;padding-right:15px;padding-left:15px}@media(min-width:768px){.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:992px){.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:1200px){.conversejs converse-chats.converse-fullscreen.converse-singleton .chatbox{flex:0 0 100%;max-width:100%}}@media(min-width:768px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox{flex:0 0 66.6666666667%;max-width:66.6666666667%}}@media(min-width:992px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox{flex:0 0 75%;max-width:75%}}@media(min-width:1200px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox{flex:0 0 83.3333333333%;max-width:83.3333333333%}}@media(min-width:768px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout{max-width:66.666667%}}@media(min-width:992px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout{max-width:75%}}@media(min-width:1200px){.conversejs converse-chats.converse-fullscreen:not(.converse-singleton) .chatbox:not(#controlbox) .box-flyout{max-width:83.333333%}}.conversejs converse-chats.converse-embedded .chat-head{font-size:var(--font-size-huge)}.conversejs converse-chats.converse-embedded .chatbox .box-flyout{bottom:0;height:100%;min-width:auto;width:100%}.conversejs converse-chats.converse-embedded .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}.conversejs converse-chats.converse-fullscreen .chatbox-btn{font-size:var(--fullpage-chatbox-button-size);margin:0 .3em}.conversejs converse-chats.converse-fullscreen .chat-head{font-size:var(--font-size-huge)}.conversejs converse-chats.converse-fullscreen .chat-textarea{max-height:var(--fullpage-max-chat-textarea-height)}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout{box-shadow:none;height:var(--fullpage-chat-height);min-height:calc(var(--fullpage-chat-height)/ 2);width:var(--fullpage-chat-width);overflow:hidden}.conversejs converse-chats.converse-fullscreen .chatbox .chat-body{height:inherit;overflow:hidden;background-color:var(--chat-background-color)}.conversejs converse-chats.converse-fullscreen .chatbox .chat-title{font-size:var(--font-size-huge);line-height:var(--line-height-huge)}.conversejs converse-chats.converse-fullscreen .chatbox .sendXMPPMessage ul{width:100%}@media(max-width:767.98px){.conversejs converse-chats:not(.converse-embedded)>.row{flex-direction:row-reverse}.conversejs converse-chats:not(.converse-embedded) #converse-login-panel .converse-form{padding:3em 2em 3em}.conversejs converse-chats:not(.converse-embedded) .chatbox{width:calc(100% - 50px)}.conversejs converse-chats:not(.converse-embedded) .chatbox .row .box-flyout{left:50px;bottom:0;height:var(--fullpage-chat-height);box-shadow:none}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout converse-controlbox-navback,.conversejs converse-chats.converse-mobile .chatbox .box-flyout converse-controlbox-navback,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout converse-controlbox-navback{margin:auto 0;margin-right:1em;display:flex}.conversejs converse-chats.converse-fullscreen .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before,.conversejs converse-chats.converse-mobile .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before,.conversejs converse-chats.converse-overlayed .chatbox .box-flyout converse-controlbox-navback .fa-arrow-left:before{color:var(--chat-head-text-color)}}","#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .oauth-providers{text-align:center}.conversejs .oauth-providers .oauth-provider{margin:1em 0}.conversejs .oauth-providers .oauth-provider .oauth-login{margin-left:0;color:var(--link-color);font-size:var(--font-size-large)}.conversejs .oauth-providers .oauth-provider .oauth-login:hover{color:var(--link-hover-color)}.conversejs .oauth-providers .oauth-provider .oauth-login i{color:var(--link-color);font-size:var(--font-size-huge);margin-right:.5em}.conversejs .set-xmpp-status .chat-status--online,.conversejs .xmpp-status .chat-status--online{color:var(--chat-status-online)}.conversejs .set-xmpp-status .chat-status--busy,.conversejs .xmpp-status .chat-status--busy{color:var(--chat-status-busy)}.conversejs .set-xmpp-status .chat-status--away,.conversejs .xmpp-status .chat-status--away{color:var(--chat-status-away)}.conversejs .set-xmpp-status .fa-times-circle,.conversejs .set-xmpp-status .far.fa-circle,.conversejs .xmpp-status .fa-times-circle,.conversejs .xmpp-status .far.fa-circle{color:var(--subdued-color)}.conversejs .set-xmpp-status .chat-status{padding-right:.5em}.conversejs .room-info{font-size:var(--font-size-small);font-style:normal;font-weight:400}.conversejs .room-info li.room-info{display:block;margin-left:5px}.conversejs .room-info p.room-info{line-height:var(--line-height);margin:0;display:block;white-space:normal}.conversejs div.room-info{padding:.3em 0;clear:left;width:100%}.conversejs #controlbox{order:-1;color:var(--controlbox-text-color);margin-right:calc(3 * var(--chat-gutter))}.conversejs #controlbox converse-brand-logo{width:100%;display:block}.conversejs #controlbox converse-brand-heading{width:100%;display:block}.conversejs #controlbox .brand-name-wrapper{font-size:200%}.conversejs #controlbox .brand-name-wrapper--fullscreen{font-size:100%}.conversejs #controlbox .open-rooms-toggle,.conversejs #controlbox .open-rooms-toggle .fa{color:var(--groupchats-header-color)!important}.conversejs #controlbox .open-rooms-toggle .fa:hover,.conversejs #controlbox .open-rooms-toggle:hover{color:var(--chatroom-head-bg-color-dark)!important}.conversejs #controlbox .box-flyout{background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox.logged-out .box-flyout .controlbox-pane{overflow-y:auto}.conversejs #controlbox form.search-xmpp-contact{margin:0;padding-left:5px;padding:0 0 5px 5px}.conversejs #controlbox form.search-xmpp-contact input{width:8em}.conversejs #controlbox .msgs-indicator{margin-right:.5em}.conversejs #controlbox a.subscribe-to-user{padding-left:2em;font-weight:700}.conversejs #controlbox #converse-register{opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;background-color:var(--controlbox-pane-background-color)}.conversejs #controlbox #converse-register .title{font-weight:700}.conversejs #controlbox #converse-register .info{color:green;font-size:90%;margin:1.5em 0}.conversejs #controlbox #converse-register .form-errors{color:var(--error-color);margin:1em 0}.conversejs #controlbox #converse-register .provider-title{font-size:var(--font-size-huge);margin:0}.conversejs #controlbox #converse-register .provider-score{width:178px;margin-bottom:8px}.conversejs #controlbox #converse-register .form-help .url{font-weight:700;color:var(--link-color)}.conversejs #controlbox #converse-register .input-group{display:table;margin:auto;width:100%}.conversejs #controlbox #converse-register .input-group span{overflow-x:hidden;text-overflow:ellipsis;max-width:110px}.conversejs #controlbox #converse-register .input-group input[name=username],.conversejs #controlbox #converse-register .input-group span{display:table-cell;text-align:left}.conversejs #controlbox #converse-register .instructions{color:gray;font-size:85%}.conversejs #controlbox #converse-register .instructions:hover{color:var(--controlbox-text-color)}.conversejs #controlbox .conn-feedback{color:var(--controlbox-head-color)}.conversejs #controlbox .conn-feedback.error{color:var(--error-color)}.conversejs #controlbox .conn-feedback p{padding-bottom:1em}.conversejs #controlbox .conn-feedback p.feedback-subject.error{font-weight:700}.conversejs #controlbox #converse-login-panel,.conversejs #controlbox #converse-register-panel{padding-top:0;padding-bottom:0}.conversejs #controlbox #converse-login-panel{flex-direction:row}.conversejs #controlbox .toggle-register-login{font-weight:700}.conversejs #controlbox .controlbox-pane .userinfo{padding-bottom:1em}.conversejs #controlbox .controlbox-pane .userinfo .username{margin-left:.5em;overflow:hidden;text-overflow:ellipsis}.conversejs #controlbox .controlbox-pane .userinfo .profile{margin-bottom:.75em}.conversejs #controlbox #chatrooms{padding:0}.conversejs #controlbox #chatrooms .add-chatroom{margin:0;padding:0}.conversejs #controlbox #chatrooms .add-chatroom input[type=button],.conversejs #controlbox #chatrooms .add-chatroom input[type=submit],.conversejs #controlbox #chatrooms .add-chatroom input[type=text]{width:100%}.conversejs #controlbox .controlbox-section .controlbox-heading{font-family:var(--heading-font);color:var(--controlbox-heading-color);font-weight:var(--controlbox-heading-font-weight);padding:0;font-size:1.1em;line-height:1.1em;text-transform:uppercase}.conversejs #controlbox .controlbox-section .controlbox-heading--groupchats{color:var(--groupchats-header-color)}.conversejs #controlbox .controlbox-section .controlbox-heading--contacts{color:var(--chat-head-color-dark)}.conversejs #controlbox .controlbox-section .controlbox-heading--headline{color:var(--headline-head-color)}.conversejs #controlbox .controlbox-section .controlbox-heading__btn{cursor:pointer;font-size:1em;padding:0;margin:var(--controlbox-heading-top-margin) 0 var(--inline-action-margin) 0;min-width:25px;text-align:center}.conversejs #controlbox .controlbox-section .controlbox-heading__btn.fa-vcard{margin-top:1em}.conversejs #controlbox .dropdown a{width:143px;display:inline-block}.conversejs #controlbox .dropdown li{list-style:none;padding-left:0}.conversejs #controlbox .dropdown dd ul{padding:0;list-style:none;position:absolute;left:0;top:0;width:100%;z-index:21;background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dd ul li:hover{background-color:var(--highlight-color)}.conversejs #controlbox .dropdown dd.search-xmpp{height:0}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container{position:absolute;z-index:22}.conversejs #controlbox .dropdown dd.search-xmpp .contact-form-container form{box-shadow:1px 4px 10px 1px rgba(0,0,0,.4);background-color:#fff}.conversejs #controlbox .dropdown dd.search-xmpp li:hover{background-color:var(--light-background-color)}.conversejs #controlbox .dropdown dt a span{cursor:pointer;display:block;padding:4px 7px 0 5px}.conversejs #controlbox .controlbox-panes{background-color:var(--controlbox-pane-background-color);border-right:.2143rem solid var(--panel-divider-color);height:100%;overflow-y:auto}.conversejs #controlbox .controlbox-subtitle{font-size:90%;padding:.5em;text-align:right}.conversejs #controlbox .controlbox-pane{background-color:var(--controlbox-pane-background-color);border:0;font-size:var(--font-size);left:0;text-align:left;overflow-x:hidden;padding:0 0 1em 0}.conversejs #controlbox .controlbox-pane .controlbox-padded{padding-left:1em;padding-right:1em;align-items:center;line-height:normal}.conversejs #controlbox .controlbox-pane .controlbox-padded .change-status{min-width:25px;text-align:center}.conversejs #controlbox .controlbox-pane .add-converse-contact{margin:0 0 .75em 0}.conversejs #controlbox .controlbox-pane .chatbox-btn{margin:0}.conversejs #controlbox .controlbox-pane .switch-form{text-align:center;padding:2em 0}.conversejs #controlbox .controlbox-pane dd{margin-left:0;margin-bottom:0}.conversejs #controlbox .controlbox-pane dd.odd{background-color:#dceac5}.conversejs #controlbox .add-xmpp-contact{padding:1em .5em}.conversejs #controlbox .add-xmpp-contact input{margin:0 0 1rem;width:100%}.conversejs #controlbox .add-xmpp-contact button{width:100%}.conversejs converse-chats.converse-overlayed{display:flex;flex-direction:row-reverse}.conversejs converse-chats.converse-overlayed .toggle-controlbox{order:-2;text-align:center;background-color:var(--link-color);border-top-left-radius:var(--button-border-radius);border-top-right-radius:var(--button-border-radius);color:#0a0a0a;float:right;height:100%;margin:0 var(--chat-gutter);padding:1em}.conversejs converse-chats.converse-overlayed .toggle-controlbox span{color:var(--inverse-link-color)}.conversejs converse-chats.converse-overlayed #controlbox{order:-1;min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .box-flyout{min-width:var(--controlbox-width)!important;width:var(--controlbox-width)}.conversejs converse-chats.converse-overlayed #controlbox .login-trusted{white-space:nowrap;font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-trusted{margin-top:.5em}.conversejs converse-chats.converse-overlayed #controlbox:not(.logged-out) .controlbox-head{height:15px}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head{display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:space-between;min-height:0}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .brand-heading{color:var(--controlbox-text-color);font-size:2em}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-head .chatbox-btn{color:var(--controlbox-head-color);margin:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-login,.conversejs converse-chats.converse-overlayed #controlbox #converse-register{flex:0 0 100%;max-width:100%;padding-bottom:0}.conversejs converse-chats.converse-overlayed #controlbox #converse-register .button-cancel{font-size:90%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{border-radius:var(--chatbox-border-radius)}.conversejs converse-chats.converse-embedded .toggle-controlbox,.conversejs converse-chats.converse-fullscreen .toggle-controlbox{display:none}.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{position:relative;width:100%;padding-right:15px;padding-left:15px;margin:0}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 33.3333333333%;max-width:33.3333333333%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 25%;max-width:25%}}@media(min-width:1200px){.conversejs converse-chats.converse-embedded #controlbox,.conversejs converse-chats.converse-fullscreen #controlbox,.conversejs converse-chats.converse-mobile #controlbox{flex:0 0 16.6666666667%;max-width:16.6666666667%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%}.conversejs converse-chats.converse-embedded #controlbox .flyout,.conversejs converse-chats.converse-fullscreen #controlbox .flyout,.conversejs converse-chats.converse-mobile #controlbox .flyout{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel{border-radius:0}.conversejs converse-chats.converse-embedded #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login-panel .converse-form,.conversejs converse-chats.converse-mobile #controlbox #converse-login-panel .converse-form{padding:3em 2em 3em}.conversejs converse-chats.converse-embedded #controlbox .toggle-register-login,.conversejs converse-chats.converse-fullscreen #controlbox .toggle-register-login,.conversejs converse-chats.converse-mobile #controlbox .toggle-register-login{line-height:var(--line-height-huge)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo{flex:0 0 100%;max-width:100%;margin-top:5em;margin-bottom:1em}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{width:100%;font-size:500%;padding:.7em 0 0 0;opacity:.8;color:var(--brand-heading-color)}.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-subtitle,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-subtitle{font-size:90%;padding:.5em}@media screen and (max-width:480px){.conversejs converse-chats.converse-embedded #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-fullscreen #controlbox converse-brand-logo .brand-heading,.conversejs converse-chats.converse-mobile #controlbox converse-brand-logo .brand-heading{font-size:300%}}.conversejs converse-chats.converse-embedded #controlbox.logged-out,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out,.conversejs converse-chats.converse-mobile #controlbox.logged-out{flex:0 0 100%;max-width:100%;opacity:0;-webkit-animation-name:fadein;animation-name:fadein;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease;animation-timing-function:ease;width:100%}.conversejs converse-chats.converse-embedded #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox.logged-out .box-flyout,.conversejs converse-chats.converse-mobile #controlbox.logged-out .box-flyout{width:100%}.conversejs converse-chats.converse-embedded #controlbox .box-flyout,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout,.conversejs converse-chats.converse-mobile #controlbox .box-flyout{border:0;width:100%;z-index:1;background-color:var(--controlbox-head-color)}.conversejs converse-chats.converse-embedded #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-fullscreen #controlbox .box-flyout .controlbox-head,.conversejs converse-chats.converse-mobile #controlbox .box-flyout .controlbox-head{display:none}.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{position:relative;width:100%;padding-right:15px;padding-left:15px;flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}@media(min-width:576px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:768px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 66.6666666667%;max-width:66.6666666667%;margin-left:16.6666666667%}}@media(min-width:992px){.conversejs converse-chats.converse-embedded #controlbox #converse-login,.conversejs converse-chats.converse-embedded #controlbox #converse-register,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register,.conversejs converse-chats.converse-mobile #controlbox #converse-login,.conversejs converse-chats.converse-mobile #controlbox #converse-register{flex:0 0 50%;max-width:50%;margin-left:25%}}.conversejs converse-chats.converse-embedded #controlbox #converse-login .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-login .title,.conversejs converse-chats.converse-embedded #controlbox #converse-register .instructions,.conversejs converse-chats.converse-embedded #controlbox #converse-register .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-login .title,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .instructions,.conversejs converse-chats.converse-fullscreen #controlbox #converse-register .title,.conversejs converse-chats.converse-mobile #controlbox #converse-login .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-login .title,.conversejs converse-chats.converse-mobile #controlbox #converse-register .instructions,.conversejs converse-chats.converse-mobile #controlbox #converse-register .title{margin:1em 0}.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-embedded #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-fullscreen #controlbox #converse-register input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-login input[type=submit],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=button],.conversejs converse-chats.converse-mobile #controlbox #converse-register input[type=submit]{width:auto}.conversejs converse-chats.converse-fullscreen #controlbox{margin-left:-15px}.conversejs converse-chats.converse-fullscreen .controlbox-panes{padding-top:2em}.conversejs converse-chats.converse-overlayed .brand-heading{padding-top:.8rem;padding-left:.8rem;width:100%}.conversejs converse-chats.converse-overlayed .converse-svg-logo{height:1em}.conversejs converse-chats.converse-overlayed #controlbox #converse-login-panel{height:100%}.conversejs converse-chats.converse-overlayed #controlbox .controlbox-panes{margin-top:.5em}@media(max-width:767.98px){.conversejs{left:0;right:0;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.conversejs .converse-chatboxes{margin:0!important;flex-direction:row!important;justify-content:space-between}.conversejs .converse-chatboxes .converse-chatroom{font-size:14px}.conversejs .converse-chatboxes .chatbox .box-flyout{margin-left:15px;left:0;bottom:0;border-radius:0;width:100vw!important;height:var(--fullpage-chat-height)}.conversejs .converse-chatboxes #controlbox{width:100vw!important}.conversejs .converse-chatboxes #controlbox .box-flyout{width:100vw!important;height:var(--fullpage-chat-height);margin-right:-15px}.conversejs .converse-chatboxes #controlbox .sidebar{display:block}.conversejs .converse-chatboxes.sidebar-open .chatbox:not(#controlbox){display:none}.conversejs .converse-chatboxes.sidebar-open #controlbox .controlbox-pane{display:block}}","body.converse-fullscreen{margin:0;background-color:var(--global-background-color);overflow:hidden}",".conversejs .chat-head-headline{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-body{background-color:var(--headline-head-color)}.conversejs .chatbox.headlines .chat-body .chat-message{color:var(--headline-message-color)}.conversejs .chatbox.headlines .chat-content{height:100%}.conversejs .message.chat-msg.headline .chat-msg__body{margin-left:0}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .box-flyout{background-color:var(--headline-head-color)}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .chat-head.chat-head-chatbox{background-color:var(--headline-head-color)}.conversejs converse-chats.converse-fullscreen .chatbox.headlines .flyout{border-color:var(--headline-head-color)}","converse-mam-placeholder .mam-placeholder{position:relative;height:2em;margin:.5em 0}converse-mam-placeholder .mam-placeholder:after,converse-mam-placeholder .mam-placeholder:before{content:\"\";display:block;position:absolute;left:0;right:0}converse-mam-placeholder .mam-placeholder:before{height:1em;top:1em;background:linear-gradient(-135deg,#d3d3d3 .5em,transparent 0) 0 .5em,linear-gradient(135deg,#d3d3d3 .5em,transparent 0) 0 .5em;background-position:top left;background-repeat:repeat-x;background-size:1em 1em}converse-mam-placeholder .mam-placeholder:after{height:1em;top:.75em;background:linear-gradient(-135deg,var(--chat-background-color) .5em,transparent 0) 0 .5em,linear-gradient(135deg,var(--chat-background-color) .5em,transparent 0) 0 .5em;background-position:top left;background-repeat:repeat-x;background-size:1em 1em}",".conversejs converse-chats.converse-overlayed converse-minimized-chats{order:100}.conversejs converse-chats.converse-overlayed #minimized-chats{width:var(--minimized-chats-width);margin-bottom:0;border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);color:var(--inverse-link-color);margin-right:var(--chat-gutter);padding:0}.conversejs converse-chats.converse-overlayed #minimized-chats .badge{bottom:8px;border:1px solid var(--overlayed-badge-color)}.conversejs converse-chats.converse-overlayed #minimized-chats #toggle-minimized-chats{border-top-left-radius:var(--chatbox-border-radius);border-top-right-radius:var(--chatbox-border-radius);background-color:var(--link-color);padding:1em 0 0 0;text-align:center;color:#fff;white-space:nowrap;overflow-y:hidden;text-overflow:ellipsis;display:block;height:45px;width:9em}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat{cursor:pointer;padding:1px 0 1px 5px;color:var(--chat-head-text-color);line-height:15px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:hover{text-decoration:none}.conversejs converse-chats.converse-overlayed #minimized-chats a.restore-chat:visited{color:var(--chat-head-text-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout{flex-direction:column-reverse;bottom:45px;width:var(--minimized-chats-width)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head{min-height:0;padding:.3em;border-radius:var(--chatbox-border-radius);height:35px;margin-bottom:.2em;width:100%;max-width:9em;flex-wrap:nowrap;background-color:var(--chat-head-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout .chat-head-chatroom{background-color:var(--chatroom-head-bg-color)}.conversejs converse-chats.converse-overlayed #minimized-chats .minimized-chats-flyout.minimized{height:auto}.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count{font-weight:700;background-color:#fff;border:1px solid;text-shadow:1px 1px 0 var(--text-shadow-color);color:var(--warning-color);border-radius:5px;padding:2px 4px;font-size:16px;text-align:center;position:absolute;right:116px;bottom:10px}.conversejs converse-chats.converse-overlayed #minimized-chats .chat-head-message-count-hidden,.conversejs converse-chats.converse-overlayed #minimized-chats .unread-message-count-hidden{display:none}",".conversejs [hidden]{display:none}.conversejs .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.conversejs .form-group .suggestion-box{width:100%}.conversejs .suggestion-box{position:relative}.conversejs .suggestion-box mark{background:var(--completion-light-color)}.conversejs .suggestion-box>input{display:block}.conversejs .suggestion-box .suggestion-box__results,.conversejs .suggestion-box>ul{border-radius:.3em;border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.1);box-sizing:border-box;left:0;list-style:none;margin:.2em 0 0;min-width:100%;padding:0;position:absolute;right:0;text-shadow:none;z-index:2}.conversejs .suggestion-box .suggestion-box__results:before,.conversejs .suggestion-box>ul:before{content:\"\";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;transform:rotate(45deg);z-index:-1}.conversejs .suggestion-box .suggestion-box__results>li,.conversejs .suggestion-box>ul>li{background:rgba(255,255,255,.9);background:linear-gradient(to bottom right,#fff,rgba(255,255,255,.9));color:var(--text-color);cursor:pointer;display:flex;overflow-x:hidden;padding:1em;position:relative;text-overflow:ellipsis}.conversejs .suggestion-box .suggestion-box__results--below{top:2em}.conversejs .suggestion-box .suggestion-box__results--above{bottom:4.5em}.conversejs .suggestion-box .suggestion-box__results--above:before{display:none}.conversejs .suggestion-box .suggestion-box__results--above:after{z-index:-1;content:\"\";position:absolute;bottom:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-left:0;border-top:0;transform:rotate(45deg)}.conversejs .suggestion-box>ul:empty,.conversejs .suggestion-box>ul[hidden]{display:none}@supports(transform:scale(0)){.conversejs .suggestion-box>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.conversejs .suggestion-box>ul:empty,.conversejs .suggestion-box>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.conversejs .suggestion-box>ul>li[aria-selected=true]{background:var(--completion-dark-color);color:var(--inverse-link-color)}.conversejs .suggestion-box li:hover mark{background:var(--completion-light-color);color:var(--inverse-link-color)}.conversejs .suggestion-box li[aria-selected=true] mark{background:var(--completion-normal-color);color:inherit}.conversejs.converse-fullscreen .suggestion-box__results--above{bottom:4.5em}.conversejs.converse-overlayed .suggestion-box__results--above{bottom:3.5em}",".conversejs converse-muc.chatroom converse-muc-bottom-panel{display:contents;height:3em;padding:.5em;text-align:center;font-size:var(--font-size-small);background-color:var(--chatroom-head-bg-color);color:#fff}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--muted{height:4em;width:100%}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--nickname{padding:0;height:16em}.conversejs converse-muc.chatroom converse-muc-bottom-panel.muc-bottom-panel--nickname .muc-form-container .chatroom-form{padding-top:2em;padding-bottom:0}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .suggestion-box__results--above{bottom:4.5em}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea:active,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea:focus,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input:active,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input:focus{outline-color:var(--chatroom-head-bg-color)!important}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea.correcting,.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage input.correcting{background-color:var(--chatroom-correcting-color)}.conversejs converse-muc.chatroom converse-muc-bottom-panel .sendXMPPMessage .chat-textarea{width:100%;border:none;border-bottom-right-radius:0}",".conversejs converse-muc.chatroom .box-flyout .occupants{display:flex;flex-direction:column;justify-content:space-between;overflow-x:hidden;overflow-y:hidden;vertical-align:top;background-color:var(--occupants-background-color);border-left:var(--occupants-border-left);padding:.5em;max-width:75%;min-width:20%;flex:0 0 25%}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header{display:flex;flex-direction:column}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header .hide-occupants{align-self:flex-end;cursor:pointer;font-size:var(--font-size-small)}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-header--title{margin-top:.5em;margin-bottom:.5em;display:flex;flex-direction:row}.conversejs converse-muc.chatroom .box-flyout .occupants .fa-user-plus{margin-right:.25em}.conversejs converse-muc.chatroom .box-flyout .occupants .occupants-heading{font-family:var(--heading-font);color:var(--groupchats-header-color-dark);padding-left:0;margin-right:1em}.conversejs converse-muc.chatroom .box-flyout .occupants .suggestion-box ul{padding:0}.conversejs converse-muc.chatroom .box-flyout .occupants .suggestion-box ul li{padding:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul{padding:0;margin-bottom:.5em;overflow-x:hidden;overflow-y:auto;list-style:none}.conversejs converse-muc.chatroom .box-flyout .occupants ul.occupant-list{overflow-y:auto;flex-basis:0;flex-grow:1}.conversejs converse-muc.chatroom .box-flyout .occupants ul li{cursor:default;display:block;font-size:var(--font-size-small);overflow:hidden;padding:.25em .25em .25em 0;text-overflow:ellipsis}.conversejs converse-muc.chatroom .box-flyout .occupants ul li .fa{margin-right:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.feature{font-size:var(--font-size-tiny)}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant{cursor:pointer}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge{display:flex;justify-content:space-between;flex-wrap:wrap}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge .occupant-badges{display:flex;justify-content:flex-end;flex-wrap:wrap;flex-direction:row}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-nick-badge .occupant-badges span{margin-right:.25rem}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant div.row.no-gutters{flex-wrap:nowrap;min-height:1.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .badge{margin-bottom:.125rem}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status{display:inline-block;margin:0 .5em .125em 0;width:.5em;height:.5em}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-chat,.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-online{background-color:#1a9707}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-dnd{background-color:red}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-away{background-color:#ff8c00}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-xa{background-color:orange}.conversejs converse-muc.chatroom .box-flyout .occupants ul li.occupant .occupant-status.occupant-offline{background-color:#a9a9a9}","converse-rich-text{display:block}.reason converse-rich-text{display:inline-block}",".conversejs converse-muc.chatroom .chat-head-chatroom{color:var(--chatroom-head-color);background-color:var(--chatroom-head-bg-color);border-bottom:var(--chatroom-head-border-bottom)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc{color:var(--chatroom-head-color);display:var(--chatroom-head-description-display)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc a{color:var(--chatroom-head-description-link-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chat-head__desc:hover button{display:inline-block}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title .btn--transparent i{color:var(--chatroom-head-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title .chatbox-title__text--bookmarked{margin-left:.5em;color:var(--chatroom-head-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__buttons{background-color:var(--chatroom-head-bg-color)}.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:hover.chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa,.conversejs converse-muc.chatroom .chat-head-chatroom a:visited.chatbox-btn.fa{color:var(--chat-head-text-color)}.conversejs converse-muc.chatroom .chat-head-chatroom a.chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:hover.chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:not([href]):not([tabindex]).chatbox-btn.fa.button-on:before,.conversejs converse-muc.chatroom .chat-head-chatroom a:visited.chatbox-btn.fa.button-on:before{color:var(--chatroom-head-button-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-btn.button-on:before{color:var(--chatroom-head-button-color)}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text{display:var(--heading-display);font-weight:var(--chatroom-head-title-font-weight);margin:auto 0;padding-right:var(--chatroom-head-title-padding-right);white-space:nowrap}.conversejs converse-muc.chatroom .chat-head-chatroom .chatbox-title__text .chatroom-jid{font-size:var(--font-size-small)}","converse-muc-nickname-form{width:100%}","#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}#conversejs-bg,.conversejs,.conversejs-bg,body.converse-fullscreen{--subdued-color:#A8ABA1;--green:#3AA569;--redder-orange:#E77051;--orange:#E7A151;--light-blue:#578EA9;--lighter-blue:#85B47B;--chat-status-online:var(--green);--chat-status-busy:var(--redder-orange);--chat-status-away:var(--orange);--brand-heading-color:#387592;--completion-light-color:#FFB9A7;--completion-normal-color:var(--redder-orange);--completion-dark-color:#D24E2B;--link-color:var(--light-blue);--link-hover-color:#345566;--link-color-lighten-10-percent:#79a5ba;--dark-link-color:#206485;--global-background-color:#397491;--inverse-link-color:white;--text-shadow-color:#FAFAFA;--text-color:#666;--controlbox-text-color:#666;--text-color-lighten-15-percent:#8c8c8c;--message-text-color:#555;--message-receipt-color:var(--green);--save-button-color:var(--green);--button-text-color:white;--message-avatar-width:36px;--message-avatar-height:36px;--chat-background-color:white;--chat-textarea-color:#666;--chat-textarea-background-color:white;--chat-textarea-height:60px;--send-button-height:27px;--send-button-margin:3px;--inline-action-margin:0.75em;--roster-height:194px;--chat-correcting-color:var(--chat-head-color-lighten-50-percent);--chat-head-color-dark:#1E9652;--chat-head-color-darker:#0E763B;--chat-head-color-lighten-50-percent:#e7f7ee;--chat-head-color:var(--green);--chat-head-text-color:white;--chat-toolbar-btn-color:var(--green);--chat-toolbar-btn-disabled-color:gray;--chat-content-background-color:white;--chat-info-color:var(--chatroom-head-bg-color);--highlight-color:#DCF9F6;--highlight-color-darker:#B0E8E2;--primary-color:var(--light-blue);--primary-color-dark:#397491;--secondary-color:#818479;--secondary-color-dark:#585B51;--warning-color:var(--orange);--warning-color-dark:#D2842B;--danger-color:#D24E2B;--danger-color-dark:#A93415;--light-background-color:#FCFDFD;--error-color:#D24E2B;--info-color:#1E9652;--button-border-radius:5px;--chatbox-border-radius:4px;--groupchats-header-color:var(--chatroom-head-bg-color);--groupchats-header-color-dark:var(--chatroom-head-bg-color-dark);--controlbox-width:250px;--controlbox-head-color:var(--light-blue);--controlbox-heading-color:inherit;--controlbox-heading-font-weight:bold;--controlbox-heading-top-margin:0.75em;--controlbox-pane-background-color:white;--controlbox-pane-bg-hover-color:#eff4f7;--panel-divider-color:#e7e7e7;--chat-gutter:0.5em;--minimized-chats-width:130px;--mobile-chat-width:100%;--mobile-chat-height:400px;--normal-font:\"Helvetica\",\"Arial\",sans-serif;--heading-font:\"Muli\",normal;--branding-font:\"Baumans\",cursive;--heading-display:block;--heading-color:white;--chatroom-color:var(--redder-orange);--chatroom-badge-color:var(--chatroom-head-bg-color);--chatroom-badge-hover-color:var(--chatroom-head-bg-color-dark);--chatroom-correcting-color:#fadfd7;--chatroom-head-bg-color-dark:#D24E2B;--chatroom-head-bg-color:var(--redder-orange);--chatroom-head-border-bottom:0px;--chatroom-head-button-color:var(--chatroom-head-bg-color);--chatroom-head-color:white;--chatroom-head-description-display:block;--chatroom-head-description-link-color:white;--chatroom-head-title-font-weight:normal;--chatroom-head-title-padding-right:0px;--chatroom-width:500px;--muc-toolbar-btn-color:var(--redder-orange);--muc-toolbar-btn-disabled-color:gray;--headline-head-color:var(--orange);--headline-message-color:#D2842B;--chatbox-button-size:14px;--fullpage-chatbox-button-size:16px;--font-size-tiny:10px;--font-size-small:12px;--font-size:14px;--font-size-large:16px;--font-size-huge:20px;--message-font-size:var(--font-size);--separator-text-color:var(--message-text-color);--chat-separator-border-bottom:2px solid var(--chat-head-color);--chatroom-separator-border-bottom:2px solid var(--chatroom-head-bg-color);--chatbox-message-input-border-top:4px solid var(--chat-head-color);--chatroom-message-input-border-top:4px solid var(--chatroom-head-bg-color);--line-height-small:14px;--line-height:16px;--line-height-large:20px;--line-height-huge:27px;--occupants-padding:1em;--occupants-background-color:white;--occupants-border-left:0.2143rem solid var(--panel-divider-color);--occupants-border-bottom:1px solid lightgrey;--embedded-emoji-picker-height:300px;--avatar-border-radius:10%;--avatar-border:1px solid lightgrey;--avatar-background-color:white;--fullpage-chat-height:calc(var(--vh, 1vh) * 100);--fullpage-chat-width:100%;--fullpage-emoji-picker-height:300px;--fullpage-max-chat-textarea-height:15em;--overlayed-chat-head-height:55px;--overlayed-chat-height:450px;--overlayed-chat-width:300px;--overlayed-chatbox-hover-height:1em;--overlayed-emoji-picker-height:200px;--overlayed-max-chat-textarea-height:200px;--overlayed-badge-color:#818479;--list-toggle-color:#818479;--list-toggle-hover-color:#585B51;--list-toggle-font-weight:normal;--list-item-hover-color:rgba(0, 0, 0, 0.035);--list-item-action-color:#e3eef3;--list-item-link-color:inherit;--list-item-link-hover-color:var(--dark-link-color);--list-item-open-color:var(--controlbox-head-color);--list-item-open-hover-color:var(--controlbox-head-color);--list-dot-circle-color:#f6dec1}.conversejs.theme-concord{--avatar-border-radius:10%;--avatar-border:0px;--avatar-background-color:none;--controlbox-pane-background-color:#333;--panel-divider-color:#333;--controlbox-pane-bg-hover-color:#464646;--controlbox-heading-color:#777;--controlbox-heading-font-weight:bold;--groupchats-header-color:var(--redder-orange);--chat-textarea-background-color:#F6F6F6;--chat-correcting-color:#FFFFC0;--controlbox-text-color:#DDD;--chat-info-color:var(--subdued-color);--chatbox-border-radius:0px;--heading-display:inline;--heading-color:#9B4D;--link-hover-color:var(--lighter-blue);--chatroom-badge-color:var(--redder-orange);--chatroom-badge-hover-color:#D24E2B;--chatroom-correcting-color:#FFFFC0;--chatroom-head-bg-color:white;--chatroom-head-border-bottom:1px solid #EEE;--chatroom-head-button-color:#999;--chatroom-head-color:#7E7E7E;--chatroom-head-description-border-left:1px solid #DDD;--chatroom-head-description-color:black;--chatroom-head-description-display:inline;--chatroom-head-description-link-color:#00b3f4;--chatroom-head-description-padding-left:12px;--chatroom-head-title-font-weight:bold;--chatroom-head-title-padding-right:12px;--muc-toolbar-btn-color:#7E7E7E;--muc-toolbar-btn-disabled-color:lightgray;--occupants-background-color:#F3F3F3;--occupants-border-left:0px;--occupants-border-bottom:0px;--separator-text-color:#AAA;--chat-separator-border-bottom:1px solid #AAA;--chatroom-separator-border-bottom:1px solid #AAA;--chatroom-message-input-border-top:1px solid #CCC;--chatbox-message-input-border-top:1px solid #CCC;--fullpage-chatbox-button-size:24px;--list-toggle-font-weight:bold;--list-item-link-color:#F1F1F1;--list-item-link-hover-color:#DDD;--list-item-open-color:#444;--list-item-open-hover-color:#444}.conversejs .chatbox{text-align:left;margin:0 var(--chat-gutter)}@media screen and (max-height:450px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatbox{margin:0;width:var(--mobile-chat-width)}}.conversejs .chatbox converse-controlbox-navback{display:none}.conversejs .chatbox .flyout{position:absolute}@media screen and (max-height:450px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{border-radius:0}}@media screen and (max-height:450px){.conversejs .chatbox .flyout{bottom:0}}@media screen and (max-width:480px){.conversejs .chatbox .flyout{bottom:0}}.conversejs .chatbox .chatbox-btn{border-radius:25%;border:none;cursor:pointer;font-size:var(--chatbox-button-size);margin:0 .2em;padding:0 0 0 .5em;text-decoration:none}.conversejs .chatbox .chatbox-btn:active{position:relative;top:1px}.conversejs .chatbox .box-flyout{display:flex;flex-direction:column;justify-content:space-between;box-shadow:1px 3px 5px 3px rgba(0,0,0,.4);z-index:2;overflow:hidden;width:100%}@media screen and (max-height:450px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatbox .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatbox .chat-title{display:var(--heading-display);font-family:var(--heading-font);color:var(--heading-color);display:block;line-height:var(--line-height-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conversejs .chatbox .chat-title.groupchat{padding-right:var(--chatroom-head-title-padding-right)}.conversejs .chatbox .chat-title a{color:var(--chat-head-text-color);width:100%}.conversejs .chatbox .chat-body{display:flex;flex-direction:column;justify-content:space-between;background-color:var(--chat-textarea-background-color);border-bottom-left-radius:var(--chatbox-border-radius);border-bottom-right-radius:var(--chatbox-border-radius);border-top:0}@media screen and (max-height:450px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media screen and (max-width:480px){.conversejs .chatbox .chat-body{border-bottom-left-radius:0;border-bottom-right-radius:0}}.conversejs .chatbox .chat-body p{color:var(--text-color);font-size:var(--message-font-size);margin:0;padding:5px}.conversejs .chatbox .new-msgs-indicator{position:relative;width:100%;cursor:pointer;background-color:var(--chat-head-color);color:var(--light-background-color);padding:.5em;font-size:.9em;text-align:center;z-index:20;white-space:nowrap;margin-bottom:.25em}.conversejs .chatbox .chat-content{background-color:var(--chat-content-background-color);border:0;color:var(--text-color);font-size:var(--message-font-size);height:100%;line-height:1.3em;overflow:hidden;padding:0;display:flex;flex-direction:column;justify-content:space-between}.conversejs .chatbox .chat-content converse-chat-message .spinner{width:100%;overflow-y:hidden}.conversejs .chatbox .chat-content .chat-content__help{max-height:100%}.conversejs .chatbox .chat-content .chat-content__help converse-chat-help{border-top:1px solid var(--chat-head-color);display:block;height:100%;overflow-y:auto;padding:.5em 0}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help{float:right;padding-right:1em;cursor:pointer;color:var(--chat-content-background-color)}.conversejs .chatbox .chat-content .chat-content__help .close-chat-help svg{fill:var(--chat-head-color)}.conversejs .chatbox .chat-content .chat-content__messages{overflow-x:hidden;overflow-y:auto;height:100%}.conversejs .chatbox .chat-content .chat-content__notifications{height:1.7em;white-space:pre;background-color:var(--chat-content-background-color);color:var(--subdued-color);font-size:90%;font-style:italic;line-height:var(--line-height-small);padding:0 1em .3em}.conversejs .chatbox .chat-content .chat-content__notifications:before{content:\" \"}.conversejs .chatbox .chat-content progress{margin:.5em 0;width:100%}.conversejs .chatbox .dragresize{background:0 0;border:0;margin:0;position:absolute;top:0;z-index:20}.conversejs .chatbox .dragresize-top{cursor:n-resize;height:5px;width:100%}.conversejs .chatbox .dragresize-left,.conversejs .chatbox .dragresize-occupants-left{cursor:w-resize;width:5px;height:100%;left:0}.conversejs .chatbox .dragresize-topleft{cursor:nw-resize;width:15px;height:15px;top:0;left:0}converse-muc-config-form{width:100%;overflow:auto}.conversejs .chatroom .box-flyout .muc-form-container{background-color:#fff;border:0;color:var(--text-color);font-size:var(--font-size);height:100%;width:100%;overflow-y:auto}.conversejs .chatroom .box-flyout .muc-form-container .validation-message{font-size:90%;color:var(--error-color)}.conversejs .chatroom .box-flyout .muc-form-container input[type=button],.conversejs .chatroom .box-flyout .muc-form-container input[type=submit]{margin:0 .5em}.conversejs .chatroom .box-flyout .muc-form-container .button-primary{background-color:var(--chatroom-head-button-color)}.conversejs .chatroom .box-flyout .chatroom-form{display:flex;flex-direction:column;justify-content:center;padding:2em}.conversejs .chatroom{width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom{width:var(--mobile-chat-width)}}@media screen and (max-width:480px){.conversejs .chatroom{width:var(--mobile-chat-width)}}.conversejs .chatroom .box-flyout{background-color:var(--chatroom-head-bg-color);overflow-y:hidden;width:var(--chatroom-width)}@media screen and (max-height:450px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}@media screen and (max-width:480px){.conversejs .chatroom .box-flyout{height:var(--mobile-chat-height);width:var(--mobile-chat-width);height:var(--fullpage-chat-height)}}.conversejs .chatroom .box-flyout .empty-history-feedback{position:relative}.conversejs .chatroom .box-flyout .empty-history-feedback span{width:100%;text-align:center;position:absolute;margin-top:50%}.conversejs .chatroom .box-flyout .chatroom-body{flex-direction:row;flex-flow:nowrap;background-color:#fff;border-top:0;height:100%;width:100%;overflow:hidden}.conversejs .chatroom .box-flyout .chatroom-body converse-muc-chatarea{width:100%;display:flex;flex-direction:row;flex-flow:nowrap}.conversejs .chatroom .box-flyout .chatroom-body .row{flex-direction:row}.conversejs .chatroom .box-flyout .chatroom-body .chat-topic{font-weight:700;color:var(--chatroom-head-bg-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info{color:var(--chat-info-color);line-height:normal}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.badge{color:var(--chat-head-text-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-info.chat-msg--retracted{color:var(--subdued-color)}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container{margin:1em;width:100%}.conversejs .chatroom .box-flyout .chatroom-body .disconnect-container h3.disconnect-msg{padding-bottom:1em}.conversejs .chatroom .box-flyout .chatroom-body .chat-area{display:flex;flex-direction:column;flex:0 1 100%;justify-content:flex-end;min-width:25%;word-wrap:break-word}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .new-msgs-indicator{background-color:var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content{height:100%}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help converse-chat-help{border-top:1px solid var(--chatroom-color)}.conversejs .chatroom .box-flyout .chatroom-body .chat-area .chat-content__help .close-chat-help svg{fill:var(--chatroom-color)}.conversejs .chatroom .room-invite .invited-contact{margin:-1px 0 0 -1px;width:100%;border:1px solid #999}#muc-details-modal .features-list{margin-left:1em}#muc-details-modal .chatroom-features{width:100%}#muc-details-modal .chatroom-features .features-list{padding-top:0}#muc-details-modal .chatroom-features .features-list .feature{width:100%;margin-right:.5em;padding-right:0;font-size:1em;cursor:help}#muc-details-modal .chatroom-features .features-list .feature .fa{margin-right:.5em;color:var(--text-color)}converse-muc-destroyed,converse-muc-disconnected{padding:2em;width:100%;height:100%}.conversejs .badge--muc,.conversejs.converse-embedded .badge--muc{background-color:var(--groupchats-header-color)}.conversejs .add-chatroom input[type=button],.conversejs .add-chatroom input[type=submit],.conversejs.converse-embedded .add-chatroom input[type=button],.conversejs.converse-embedded .add-chatroom input[type=submit]{margin:.3em 0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .box-flyout{min-width:var(--chatroom-width)!important;width:var(--chatroom-width)}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__text{flex:0 0 58.3333333333%;max-width:58.3333333333%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatbox-title__buttons{flex:0 0 41.6666666667%;max-width:41.6666666667%}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chat-head__desc{font-size:80%;margin-bottom:1em}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupants-heading{padding:0}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants .occupant-list{border-bottom:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-nick-badge .occupant-badges{display:none}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .occupants ul .occupant .occupant-status{margin-top:6px}.conversejs converse-chats.converse-overlayed .chatbox.chatroom .chatroom-body .chat-area{min-width:var(--overlayed-chat-width)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout,.conversejs converse-chats.converse-mobile .chatroom .box-flyout{width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .chat-area.full .new-msgs-indicator{max-width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants{padding:var(--occupants-padding)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants .occupants-heading,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants .occupants-heading{font-size:var(--font-size-large)}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-fullscreen .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li,.conversejs converse-chats.converse-mobile .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list li{font-size:var(--font-size-small)}.conversejs converse-chats.converse-embedded .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-fullscreen .chatroom .room-invite span .invited-contact,.conversejs converse-chats.converse-mobile .chatroom .room-invite span .invited-contact{margin:0 0 .5em -1px}.conversejs converse-chats.converse-embedded .chatroom{margin:0;width:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants-heading{font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chat-content .chat-message{margin:.5em;font-size:120%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .sendXMPPMessage .chat-textarea{padding:.5em;font-size:110%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body{height:100%}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .chatroom-body .muc-form-container{height:100%;position:relative}.conversejs converse-chats.converse-embedded .chatroom .box-flyout .occupants .occupant-list{padding-left:.3em}","converse-root.converse-js.converse-fullpage,converse-root.converse-js.converse-mobile,converse-root.converse-js.converse-overlayed{bottom:0;height:100%;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);position:fixed;z-index:1031}converse-root.converse-js.converse-embedded{position:relative}",".conversejs #converse-roster{text-align:left;width:100%;position:relative;margin:0;height:var(--roster-height);padding:0;overflow:hidden;height:calc(100% - 70px)}.conversejs #converse-roster #online-count{display:none}.conversejs #converse-roster .search-xmpp ul li.chat-info{padding-left:10px}.conversejs #converse-roster .roster-filter-form{width:100%}.conversejs #converse-roster .roster-filter-form .button-group{padding:.2em}.conversejs #converse-roster .roster-filter-form span{padding:.3em;cursor:pointer;min-width:25px;text-align:center}.conversejs #converse-roster .roster-filter-form .roster-filter{width:100%;margin:.2em;font-size:calc(var(--font-size) - 2px)}.conversejs #converse-roster .roster-filter-form .state-type{font-size:calc(var(--font-size) - 2px);width:100%}.conversejs #converse-roster .roster-contacts{padding:0;margin:0 0 .2em 0;height:100%;overflow-x:hidden;overflow-y:auto;color:var(--text-color)}.conversejs #converse-roster .roster-contacts converse-roster-contact{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;justify-content:space-between}.conversejs #converse-roster .roster-contacts .group-toggle{font-family:var(--heading-font);display:block;width:100%;margin:.75em 0 .25em 0}.conversejs #converse-roster .roster-contacts .group-toggle,.conversejs #converse-roster .roster-contacts .group-toggle .fa{color:var(--chat-head-color-dark)!important}.conversejs #converse-roster .roster-contacts .group-toggle .fa:hover,.conversejs #converse-roster .roster-contacts .group-toggle:hover{color:var(--chat-head-color-darker)!important}.conversejs #converse-roster .roster-contacts .current-xmpp-contact{margin:.25em 0}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status{vertical-align:middle;font-size:.6em;margin-right:0;margin-left:-.7em;margin-bottom:-1.5em;border-radius:50%;border:2px solid var(--occupants-background-color)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--offline{margin-right:.8em}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--online{color:var(--chat-status-online)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--busy{color:var(--chat-status-busy)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--away{color:var(--chat-status-away)}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .chat-status--offline{display:none}.conversejs #converse-roster .roster-contacts .current-xmpp-contact .fa-times-circle,.conversejs #converse-roster .roster-contacts .current-xmpp-contact .far.fa-circle{color:var(--subdued-color)}.conversejs #converse-roster .roster-contacts li.requesting-xmpp-contact a{line-height:var(--line-height)}.conversejs #converse-roster .roster-contacts li.requesting-xmpp-contact .req-contact-name{padding:0 .2em 0 0}.conversejs #converse-roster .roster-contacts li .open-chat{margin:0;padding:0}.conversejs #converse-roster .roster-contacts li .open-chat.unread-msgs{font-weight:700}.conversejs #converse-roster .roster-contacts li .open-chat.unread-msgs .contact-name{width:70%}.conversejs #converse-roster .roster-contacts li .open-chat .msgs-indicator{color:#fff;background-color:var(--chat-head-color);opacity:1;border-radius:10%;padding:.2em .4em;font-size:var(--font-size-small);margin-right:0}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name{padding:0;margin:0;max-width:85%;float:none;height:100%}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name.unread-msgs{max-width:60%}.conversejs #converse-roster .roster-contacts li .open-chat .contact-name.contact-name--offline{margin-left:.25em}.conversejs #converse-roster .roster-contacts li.odd{background-color:#dceac5}.conversejs #converse-roster .roster-contacts li a,.conversejs #converse-roster .roster-contacts li span{white-space:nowrap;text-overflow:ellipsis}.conversejs #converse-roster .roster-contacts li .span{display:inline-block}.conversejs #converse-roster .roster-contacts li .decline-xmpp-request{margin-left:5px}.conversejs #converse-roster .roster-contacts li:hover{background-color:var(controlbox-pane-bg-hover-color)}.conversejs #converse-roster span.pending-contact-name{line-height:var(--line-height);width:100%}"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/converse.js b/dist/converse.js index 9ad1cbc..1364119 100644 --- a/dist/converse.js +++ b/dist/converse.js @@ -470,7 +470,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! * URI.js - Mutating URLs * IPv6 Support * - * Version: 1.19.6 + * Version: 1.19.7 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ @@ -663,7 +663,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! * URI.js - Mutating URLs * Second Level Domain (SLD) Support * - * Version: 1.19.6 + * Version: 1.19.7 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ @@ -931,7 +931,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! * URI.js - Mutating URLs * - * Version: 1.19.6 + * Version: 1.19.7 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ @@ -1012,7 +1012,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ return /^[0-9]+$/.test(value); } - URI.version = '1.19.6'; + URI.version = '1.19.7'; var p = URI.prototype; var hasOwn = Object.prototype.hasOwnProperty; @@ -1455,9 +1455,11 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ // escaping? parts.query = string.substring(pos + 1) || null; string = string.substring(0, pos); - } // extract protocol + } // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws) + string = string.replace(/^(https?|ftp|wss?)?:[/\\]*/, '$1://'); // extract protocol + if (string.substring(0, 2) === '//') { // relative-scheme parts.protocol = null; @@ -1609,7 +1611,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null; - if (hasOwn.call(items, name)) { + if (name === '__proto__') { + // ignore attempt at exploiting JavaScript internals + continue; + } else if (hasOwn.call(items, name)) { if (typeof items[name] === 'string' || items[name] === null) { items[name] = [items[name]]; } @@ -1707,7 +1712,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ var unique, key, i, length; for (key in data) { - if (hasOwn.call(data, key)) { + if (key === '__proto__') { + // ignore attempt at exploiting JavaScript internals + continue; + } else if (hasOwn.call(data, key)) { if (isArray(data[key])) { unique = {}; @@ -3915,7 +3923,7 @@ var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.0 by @mathia /***/ }), -/***/ 9598: +/***/ 1566: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -3927,322 +3935,69 @@ __webpack_require__.d(__webpack_exports__, { "default": () => (/* binding */ src_converse) }); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isObject.js +// EXTERNAL MODULE: ./node_modules/urijs/src/URI.js +var URI = __webpack_require__(2369); +var URI_default = /*#__PURE__*/__webpack_require__.n(URI); +// EXTERNAL MODULE: ./node_modules/sprintf-js/src/sprintf.js +var sprintf = __webpack_require__(4457); +;// CONCATENATED MODULE: ./src/headless/shared/i18n.js + /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false + * @namespace i18n */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} -/* harmony default export */ const lodash_es_isObject = (isObject); +/* harmony default export */ const i18n = ({ + initialize() {}, -;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheClear.js + /** + * Overridable string wrapper method which can be used to provide i18n + * support. + * + * The default implementation in @converse/headless simply calls sprintf + * with the passed in arguments. + * + * If you install the full version of Converse, then this method gets + * overwritten in src/i18n/index.js to return a translated string. + * @method __ + * @private + * @memberOf i18n + * @param { String } str + */ + __(...args) { + return (0,sprintf.sprintf)(...args); + } + +}); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isObjectLike.js /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -/* harmony default export */ const _listCacheClear = (listCacheClear); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/eq.js -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); + * _.isObjectLike({}); * // => true * - * _.eq(object, other); + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); * // => false * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); + * _.isObjectLike(null); * // => false - * - * _.eq(NaN, NaN); - * // => true */ -function eq(value, other) { - return value === other || (value !== value && other !== other); +function isObjectLike(value) { + return value != null && typeof value == 'object'; } -/* harmony default export */ const lodash_es_eq = (eq); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_assocIndexOf.js - - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (lodash_es_eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -/* harmony default export */ const _assocIndexOf = (assocIndexOf); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheDelete.js - - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = _assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -/* harmony default export */ const _listCacheDelete = (listCacheDelete); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheGet.js - - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = _assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -/* harmony default export */ const _listCacheGet = (listCacheGet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheHas.js - - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return _assocIndexOf(this.__data__, key) > -1; -} - -/* harmony default export */ const _listCacheHas = (listCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheSet.js - - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = _assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -/* harmony default export */ const _listCacheSet = (listCacheSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_ListCache.js - - - - - - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = _listCacheClear; -ListCache.prototype['delete'] = _listCacheDelete; -ListCache.prototype.get = _listCacheGet; -ListCache.prototype.has = _listCacheHas; -ListCache.prototype.set = _listCacheSet; - -/* harmony default export */ const _ListCache = (ListCache); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js - - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new _ListCache; - this.size = 0; -} - -/* harmony default export */ const _stackClear = (stackClear); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; -} - -/* harmony default export */ const _stackDelete = (stackDelete); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -/* harmony default export */ const _stackGet = (stackGet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -/* harmony default export */ const _stackHas = (stackHas); +/* harmony default export */ const lodash_es_isObjectLike = (isObjectLike); ;// CONCATENATED MODULE: ./node_modules/lodash-es/_freeGlobal.js /** Detect free variable `global` from Node.js. */ @@ -4371,836 +4126,6 @@ function baseGetTag(value) { /* harmony default export */ const _baseGetTag = (baseGetTag); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isFunction.js - - - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!lodash_es_isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = _baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -/* harmony default export */ const lodash_es_isFunction = (isFunction); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_coreJsData.js - - -/** Used to detect overreaching core-js shims. */ -var coreJsData = _root["__core-js_shared__"]; - -/* harmony default export */ const _coreJsData = (coreJsData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isMasked.js - - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/* harmony default export */ const _isMasked = (isMasked); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_toSource.js -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/* harmony default export */ const _toSource = (toSource); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNative.js - - - - - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var _baseIsNative_funcProto = Function.prototype, - _baseIsNative_objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var _baseIsNative_funcToString = _baseIsNative_funcProto.toString; - -/** Used to check objects for own properties. */ -var _baseIsNative_hasOwnProperty = _baseIsNative_objectProto.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - _baseIsNative_funcToString.call(_baseIsNative_hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!lodash_es_isObject(value) || _isMasked(value)) { - return false; - } - var pattern = lodash_es_isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(_toSource(value)); -} - -/* harmony default export */ const _baseIsNative = (baseIsNative); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getValue.js -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/* harmony default export */ const _getValue = (getValue); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getNative.js - - - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = _getValue(object, key); - return _baseIsNative(value) ? value : undefined; -} - -/* harmony default export */ const _getNative = (getNative); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_Map.js - - - -/* Built-in method references that are verified to be native. */ -var _Map_Map = _getNative(_root, 'Map'); - -/* harmony default export */ const _Map = (_Map_Map); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeCreate.js - - -/* Built-in method references that are verified to be native. */ -var nativeCreate = _getNative(Object, 'create'); - -/* harmony default export */ const _nativeCreate = (nativeCreate); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashClear.js - - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; - this.size = 0; -} - -/* harmony default export */ const _hashClear = (hashClear); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashDelete.js -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -/* harmony default export */ const _hashDelete = (hashDelete); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashGet.js - - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var _hashGet_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _hashGet_hasOwnProperty = _hashGet_objectProto.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (_nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return _hashGet_hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -/* harmony default export */ const _hashGet = (hashGet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashHas.js - - -/** Used for built-in method references. */ -var _hashHas_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _hashHas_hasOwnProperty = _hashHas_objectProto.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return _nativeCreate ? (data[key] !== undefined) : _hashHas_hasOwnProperty.call(data, key); -} - -/* harmony default export */ const _hashHas = (hashHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashSet.js - - -/** Used to stand-in for `undefined` hash values. */ -var _hashSet_HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (_nativeCreate && value === undefined) ? _hashSet_HASH_UNDEFINED : value; - return this; -} - -/* harmony default export */ const _hashSet = (hashSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_Hash.js - - - - - - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = _hashClear; -Hash.prototype['delete'] = _hashDelete; -Hash.prototype.get = _hashGet; -Hash.prototype.has = _hashHas; -Hash.prototype.set = _hashSet; - -/* harmony default export */ const _Hash = (Hash); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheClear.js - - - - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new _Hash, - 'map': new (_Map || _ListCache), - 'string': new _Hash - }; -} - -/* harmony default export */ const _mapCacheClear = (mapCacheClear); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isKeyable.js -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -/* harmony default export */ const _isKeyable = (isKeyable); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMapData.js - - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return _isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -/* harmony default export */ const _getMapData = (getMapData); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheDelete.js - - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = _getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -/* harmony default export */ const _mapCacheDelete = (mapCacheDelete); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheGet.js - - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return _getMapData(this, key).get(key); -} - -/* harmony default export */ const _mapCacheGet = (mapCacheGet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheHas.js - - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return _getMapData(this, key).has(key); -} - -/* harmony default export */ const _mapCacheHas = (mapCacheHas); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheSet.js - - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = _getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -/* harmony default export */ const _mapCacheSet = (mapCacheSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_MapCache.js - - - - - - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = _mapCacheClear; -MapCache.prototype['delete'] = _mapCacheDelete; -MapCache.prototype.get = _mapCacheGet; -MapCache.prototype.has = _mapCacheHas; -MapCache.prototype.set = _mapCacheSet; - -/* harmony default export */ const _MapCache = (MapCache); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js - - - - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof _ListCache) { - var pairs = data.__data__; - if (!_Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new _MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} - -/* harmony default export */ const _stackSet = (stackSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js - - - - - - - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new _ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = _stackClear; -Stack.prototype['delete'] = _stackDelete; -Stack.prototype.get = _stackGet; -Stack.prototype.has = _stackHas; -Stack.prototype.set = _stackSet; - -/* harmony default export */ const _Stack = (Stack); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_defineProperty.js - - -var defineProperty = (function() { - try { - var func = _getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -/* harmony default export */ const _defineProperty = (defineProperty); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignValue.js - - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && _defineProperty) { - _defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/* harmony default export */ const _baseAssignValue = (baseAssignValue); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js - - - -/** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignMergeValue(object, key, value) { - if ((value !== undefined && !lodash_es_eq(object[key], value)) || - (value === undefined && !(key in object))) { - _baseAssignValue(object, key, value); - } -} - -/* harmony default export */ const _assignMergeValue = (assignMergeValue); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -/* harmony default export */ const _createBaseFor = (createBaseFor); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js - - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = _createBaseFor(); - -/* harmony default export */ const _baseFor = (baseFor); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneBuffer.js - - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? _root.Buffer : undefined, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; - -/** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; -} - -/* harmony default export */ const _cloneBuffer = (cloneBuffer); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_Uint8Array.js - - -/** Built-in value references. */ -var _Uint8Array_Uint8Array = _root.Uint8Array; - -/* harmony default export */ const _Uint8Array = (_Uint8Array_Uint8Array); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js - - -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new _Uint8Array(result).set(new _Uint8Array(arrayBuffer)); - return result; -} - -/* harmony default export */ const _cloneArrayBuffer = (cloneArrayBuffer); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneTypedArray.js - - -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? _cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} - -/* harmony default export */ const _cloneTypedArray = (cloneTypedArray); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copyArray.js -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -/* harmony default export */ const _copyArray = (copyArray); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js - - -/** Built-in value references. */ -var objectCreate = Object.create; - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ -var baseCreate = (function() { - function object() {} - return function(proto) { - if (!lodash_es_isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; -}()); - -/* harmony default export */ const _baseCreate = (baseCreate); - ;// CONCATENATED MODULE: ./node_modules/lodash-es/_overArg.js /** * Creates a unary function that invokes `func` with its argument transformed. @@ -5226,330 +4151,6 @@ var getPrototype = _overArg(Object.getPrototypeOf, Object); /* harmony default export */ const _getPrototype = (getPrototype); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isPrototype.js -/** Used for built-in method references. */ -var _isPrototype_objectProto = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || _isPrototype_objectProto; - - return value === proto; -} - -/* harmony default export */ const _isPrototype = (isPrototype); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js - - - - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !_isPrototype(object)) - ? _baseCreate(_getPrototype(object)) - : {}; -} - -/* harmony default export */ const _initCloneObject = (initCloneObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isObjectLike.js -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/* harmony default export */ const lodash_es_isObjectLike = (isObjectLike); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsArguments.js - - - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return lodash_es_isObjectLike(value) && _baseGetTag(value) == argsTag; -} - -/* harmony default export */ const _baseIsArguments = (baseIsArguments); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isArguments.js - - - -/** Used for built-in method references. */ -var isArguments_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var isArguments_hasOwnProperty = isArguments_objectProto.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = isArguments_objectProto.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { - return lodash_es_isObjectLike(value) && isArguments_hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -/* harmony default export */ const lodash_es_isArguments = (isArguments); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isArray.js -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/* harmony default export */ const lodash_es_isArray = (isArray); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isLength.js -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/* harmony default export */ const lodash_es_isLength = (isLength); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isArrayLike.js - - - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && lodash_es_isLength(value.length) && !lodash_es_isFunction(value); -} - -/* harmony default export */ const lodash_es_isArrayLike = (isArrayLike); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isArrayLikeObject.js - - - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return lodash_es_isObjectLike(value) && lodash_es_isArrayLike(value); -} - -/* harmony default export */ const lodash_es_isArrayLikeObject = (isArrayLikeObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/stubFalse.js -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -/* harmony default export */ const lodash_es_stubFalse = (stubFalse); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isBuffer.js - - - -/** Detect free variable `exports`. */ -var isBuffer_freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var isBuffer_freeModule = isBuffer_freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var isBuffer_moduleExports = isBuffer_freeModule && isBuffer_freeModule.exports === isBuffer_freeExports; - -/** Built-in value references. */ -var isBuffer_Buffer = isBuffer_moduleExports ? _root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = isBuffer_Buffer ? isBuffer_Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || lodash_es_stubFalse; - -/* harmony default export */ const lodash_es_isBuffer = (isBuffer); - ;// CONCATENATED MODULE: ./node_modules/lodash-es/isPlainObject.js @@ -5559,17 +4160,17 @@ var isBuffer = nativeIsBuffer || lodash_es_stubFalse; var objectTag = '[object Object]'; /** Used for built-in method references. */ -var isPlainObject_funcProto = Function.prototype, +var funcProto = Function.prototype, isPlainObject_objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ -var isPlainObject_funcToString = isPlainObject_funcProto.toString; +var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var isPlainObject_hasOwnProperty = isPlainObject_objectProto.hasOwnProperty; /** Used to infer the `Object` constructor. */ -var objectCtorString = isPlainObject_funcToString.call(Object); +var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the @@ -5609,3271 +4210,11 @@ function isPlainObject(value) { } var Ctor = isPlainObject_hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && - isPlainObject_funcToString.call(Ctor) == objectCtorString; + funcToString.call(Ctor) == objectCtorString; } /* harmony default export */ const lodash_es_isPlainObject = (isPlainObject); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsTypedArray.js - - - - -/** `Object#toString` result references. */ -var _baseIsTypedArray_argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - _baseIsTypedArray_funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - _baseIsTypedArray_objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[_baseIsTypedArray_argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[_baseIsTypedArray_funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[_baseIsTypedArray_objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return lodash_es_isObjectLike(value) && - lodash_es_isLength(value.length) && !!typedArrayTags[_baseGetTag(value)]; -} - -/* harmony default export */ const _baseIsTypedArray = (baseIsTypedArray); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUnary.js -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -/* harmony default export */ const _baseUnary = (baseUnary); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_nodeUtil.js - - -/** Detect free variable `exports`. */ -var _nodeUtil_freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var _nodeUtil_freeModule = _nodeUtil_freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var _nodeUtil_moduleExports = _nodeUtil_freeModule && _nodeUtil_freeModule.exports === _nodeUtil_freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = _nodeUtil_moduleExports && _freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = _nodeUtil_freeModule && _nodeUtil_freeModule.require && _nodeUtil_freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -/* harmony default export */ const _nodeUtil = (nodeUtil); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isTypedArray.js - - - - -/* Node.js helper references. */ -var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; - -/* harmony default export */ const lodash_es_isTypedArray = (isTypedArray); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js -/** - * Gets the value at `key`, unless `key` is "__proto__" or "constructor". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function safeGet(object, key) { - if (key === 'constructor' && typeof object[key] === 'function') { - return; - } - - if (key == '__proto__') { - return; - } - - return object[key]; -} - -/* harmony default export */ const _safeGet = (safeGet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignValue.js - - - -/** Used for built-in method references. */ -var _assignValue_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _assignValue_hasOwnProperty = _assignValue_objectProto.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(_assignValue_hasOwnProperty.call(object, key) && lodash_es_eq(objValue, value)) || - (value === undefined && !(key in object))) { - _baseAssignValue(object, key, value); - } -} - -/* harmony default export */ const _assignValue = (assignValue); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copyObject.js - - - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - _baseAssignValue(object, key, newValue); - } else { - _assignValue(object, key, newValue); - } - } - return object; -} - -/* harmony default export */ const _copyObject = (copyObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/* harmony default export */ const _baseTimes = (baseTimes); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isIndex.js -/** Used as references for various `Number` constants. */ -var _isIndex_MAX_SAFE_INTEGER = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? _isIndex_MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/* harmony default export */ const _isIndex = (isIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js - - - - - - - -/** Used for built-in method references. */ -var _arrayLikeKeys_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _arrayLikeKeys_hasOwnProperty = _arrayLikeKeys_objectProto.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = lodash_es_isArray(value), - isArg = !isArr && lodash_es_isArguments(value), - isBuff = !isArr && !isArg && lodash_es_isBuffer(value), - isType = !isArr && !isArg && !isBuff && lodash_es_isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? _baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - _isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js - - - - -/** Used for built-in method references. */ -var _baseKeysIn_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseKeysIn_hasOwnProperty = _baseKeysIn_objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!lodash_es_isObject(object)) { - return _nativeKeysIn(object); - } - var isProto = _isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -/* harmony default export */ const _baseKeysIn = (baseKeysIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js - - - - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return lodash_es_isArrayLike(object) ? _arrayLikeKeys(object, true) : _baseKeysIn(object); -} - -/* harmony default export */ const lodash_es_keysIn = (keysIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js - - - -/** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ -function toPlainObject(value) { - return _copyObject(value, lodash_es_keysIn(value)); -} - -/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js - - - - - - - - - - - - - - - - -/** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = _safeGet(object, key), - srcValue = _safeGet(source, key), - stacked = stack.get(srcValue); - - if (stacked) { - _assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = lodash_es_isArray(srcValue), - isBuff = !isArr && lodash_es_isBuffer(srcValue), - isTyped = !isArr && !isBuff && lodash_es_isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (lodash_es_isArray(objValue)) { - newValue = objValue; - } - else if (lodash_es_isArrayLikeObject(objValue)) { - newValue = _copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = _cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = _cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (lodash_es_isPlainObject(srcValue) || lodash_es_isArguments(srcValue)) { - newValue = objValue; - if (lodash_es_isArguments(objValue)) { - newValue = lodash_es_toPlainObject(objValue); - } - else if (!lodash_es_isObject(objValue) || lodash_es_isFunction(objValue)) { - newValue = _initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - _assignMergeValue(object, key, newValue); -} - -/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js - - - - - - - - -/** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - _baseFor(source, function(srcValue, key) { - stack || (stack = new _Stack); - if (lodash_es_isObject(srcValue)) { - _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - _assignMergeValue(object, key, newValue); - } - }, lodash_es_keysIn); -} - -/* harmony default export */ const _baseMerge = (baseMerge); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/identity.js -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -/* harmony default export */ const lodash_es_identity = (identity); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/* harmony default export */ const _apply = (apply); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return _apply(func, this, otherArgs); - }; -} - -/* harmony default export */ const _overRest = (overRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/constant.js -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -/* harmony default export */ const lodash_es_constant = (constant); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js - - - - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !_defineProperty ? lodash_es_identity : function(func, string) { - return _defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': lodash_es_constant(string), - 'writable': true - }); -}; - -/* harmony default export */ const _baseSetToString = (baseSetToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -/* harmony default export */ const _shortOut = (shortOut); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js - - - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = _shortOut(_baseSetToString); - -/* harmony default export */ const _setToString = (setToString); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRest.js - - - - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return _setToString(_overRest(func, start, lodash_es_identity), func + ''); -} - -/* harmony default export */ const _baseRest = (baseRest); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_isIterateeCall.js - - - - - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!lodash_es_isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (lodash_es_isArrayLike(object) && _isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return lodash_es_eq(object[index], value); - } - return false; -} - -/* harmony default export */ const _isIterateeCall = (isIterateeCall); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js - - - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return _baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && _isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/* harmony default export */ const _createAssigner = (createAssigner); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js - - - -/** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ -var merge = _createAssigner(function(object, source, srcIndex) { - _baseMerge(object, source, srcIndex); -}); - -/* harmony default export */ const lodash_es_merge = (merge); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/mergeWith.js - - - -/** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ -var mergeWith = _createAssigner(function(object, source, srcIndex, customizer) { - _baseMerge(object, source, srcIndex, customizer); -}); - -/* harmony default export */ const lodash_es_mergeWith = (mergeWith); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js - - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now = function() { - return _root.Date.now(); -}; - -/* harmony default export */ const lodash_es_now = (now); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js - - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/* harmony default export */ const _baseTrim = (baseTrim); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSymbol.js - - - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (lodash_es_isObjectLike(value) && _baseGetTag(value) == symbolTag); -} - -/* harmony default export */ const lodash_es_isSymbol = (isSymbol); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js - - - - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (lodash_es_isSymbol(value)) { - return NAN; - } - if (lodash_es_isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = lodash_es_isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = _baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/* harmony default export */ const lodash_es_toNumber = (toNumber); - -;// CONCATENATED MODULE: ./node_modules/@converse/openpromise/openpromise.js -function getOpenPromise() { - const wrapper = { - isResolved: false, - isPending: true, - isRejected: false - }; - const promise = new Promise((resolve, reject) => { - wrapper.resolve = resolve; - wrapper.reject = reject; - }); - Object.assign(promise, wrapper); - promise.then(function (v) { - promise.isResolved = true; - promise.isPending = false; - promise.isRejected = false; - return v; - }, function (e) { - promise.isResolved = false; - promise.isPending = false; - promise.isRejected = true; - throw e; - }); - return promise; -} -;// CONCATENATED MODULE: ./node_modules/mergebounce/mergebounce.js - - - - - - -/** Error message constants. */ - -const FUNC_ERROR_TEXT = 'Expected a function'; -/* Built-in method references for those with the same name as other `lodash` methods. */ - -const mergebounce_nativeMax = Math.max; -const nativeMin = Math.min; -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * - * This function differs from lodash's debounce by merging all passed objects - * before passing them to the final invoked function. - * - * Because of this, invoking can only happen on the trailing edge, since - * passed-in data would be discarded if invoking happened on the leading edge. - * - * If `wait` is `0`, `func` invocation is deferred until to the next tick, - * similar to `setTimeout` with a timeout of `0`. - * - * @static - * @category Function - * @param {Function} func The function to mergebounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.concatArrays=false] - * By default arrays will be treated as objects when being merged. When - * merging two arrays, the values in the 2nd arrray will replace the - * corresponding values (i.e. those with the same indexes) in the first array. - * When `concatArrays` is set to `true`, arrays will be concatenated instead. - * @param {boolean} [options.promise=false] - * By default, when calling a merge-debounced function that doesn't execute - * immediately, you'll receive the result from its previous execution, or - * `undefined` if it has never executed before. By setting the `promise` - * option to `true`, a promise will be returned instead of the previous - * execution result when the function is debounced. The promise will resolve - * with the result of the next execution, as soon as it happens. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * window.addEventListener('resize', mergebounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * element.addEventListner('click', mergebounce(sendMail, 300)); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * const mergebounced = mergebounce(batchLog, 250, { 'maxWait': 1000 }); - * const source = new EventSource('/stream'); - * jQuery(source).on('message', mergebounced); - * - * // Cancel the trailing debounced invocation. - * window.addEventListener('popstate', mergebounced.cancel); - */ - -function mergebounce(func, wait, options = {}) { - let lastArgs = [], - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - maxing = false; - let promise = options.promise ? getOpenPromise() : null; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - - wait = lodash_es_toNumber(wait) || 0; - - if (lodash_es_isObject(options)) { - maxing = 'maxWait' in options; - maxWait = maxing ? mergebounce_nativeMax(lodash_es_toNumber(options.maxWait) || 0, wait) : maxWait; - } - - function invokeFunc(time) { - const args = lastArgs; - const thisArg = lastThis; - lastArgs = []; - lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - - if (options.promise) { - promise.resolve(result); - promise = getOpenPromise(); - } - - return options.promise ? promise : result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; // Start the timer for the trailing edge. - - timerId = setTimeout(timerExpired, wait); - return options.promise ? promise : result; - } - - function remainingWait(time) { - const timeSinceLastCall = time - lastCallTime; - const timeSinceLastInvoke = time - lastInvokeTime; - const timeWaiting = wait - timeSinceLastCall; - return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; - } - - function shouldInvoke(time) { - const timeSinceLastCall = time - lastCallTime; - const timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - - return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; - } - - function timerExpired() { - const time = lodash_es_now(); - - if (shouldInvoke(time)) { - return trailingEdge(time); - } // Restart the timer. - - - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - - if (lastArgs) { - return invokeFunc(time); - } - - lastArgs = []; - lastThis = undefined; - return options.promise ? promise : result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - - lastInvokeTime = 0; - lastArgs = []; - lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(lodash_es_now()); - } - - function concatArrays(objValue, srcValue) { - if (Array.isArray(objValue) && Array.isArray(srcValue)) { - return objValue.concat(srcValue); - } - } - - function mergeArguments(args) { - if (lastArgs.length) { - if (!args.length) { - return lastArgs; - } - - if (options === null || options === void 0 ? void 0 : options.concatArrays) { - return lodash_es_mergeWith(lastArgs, args, concatArrays); - } else { - return lodash_es_merge(lastArgs, args); - } - } else if (args.length) { - return args; - } else { - return []; - } - } - - function debounced() { - const time = lodash_es_now(); - const isInvoking = shouldInvoke(time); - lastArgs = mergeArguments(Array.from(arguments)); - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - - if (maxing) { - // Handle invocations in a tight loop. - clearTimeout(timerId); - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - - return options.promise ? promise : result; - } - - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -/* harmony default export */ const mergebounce_mergebounce = (mergebounce); -// EXTERNAL MODULE: ./node_modules/localforage/dist/localforage.js -var localforage = __webpack_require__(9483); -// EXTERNAL MODULE: ./node_modules/localforage-driver-memory/_bundle/umd.js -var umd = __webpack_require__(3245); -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayEach.js -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -/* harmony default export */ const _arrayEach = (arrayEach); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeys.js - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = _overArg(Object.keys, Object); - -/* harmony default export */ const _nativeKeys = (nativeKeys); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeys.js - - - -/** Used for built-in method references. */ -var _baseKeys_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _baseKeys_hasOwnProperty = _baseKeys_objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!_isPrototype(object)) { - return _nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (_baseKeys_hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/* harmony default export */ const _baseKeys = (baseKeys); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/keys.js - - - - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return lodash_es_isArrayLike(object) ? _arrayLikeKeys(object) : _baseKeys(object); -} - -/* harmony default export */ const lodash_es_keys = (keys); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js - - - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && _copyObject(source, lodash_es_keys(source), object); -} - -/* harmony default export */ const _baseAssign = (baseAssign); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js - - - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && _copyObject(source, lodash_es_keysIn(source), object); -} - -/* harmony default export */ const _baseAssignIn = (baseAssignIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayFilter.js -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/* harmony default export */ const _arrayFilter = (arrayFilter); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/stubArray.js -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/* harmony default export */ const lodash_es_stubArray = (stubArray); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbols.js - - - -/** Used for built-in method references. */ -var _getSymbols_objectProto = Object.prototype; - -/** Built-in value references. */ -var _getSymbols_propertyIsEnumerable = _getSymbols_objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? lodash_es_stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return _arrayFilter(nativeGetSymbols(object), function(symbol) { - return _getSymbols_propertyIsEnumerable.call(object, symbol); - }); -}; - -/* harmony default export */ const _getSymbols = (getSymbols); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js - - - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return _copyObject(source, _getSymbols(source), object); -} - -/* harmony default export */ const _copySymbols = (copySymbols); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayPush.js -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/* harmony default export */ const _arrayPush = (arrayPush); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js - - - - - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var _getSymbolsIn_nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !_getSymbolsIn_nativeGetSymbols ? lodash_es_stubArray : function(object) { - var result = []; - while (object) { - _arrayPush(result, _getSymbols(object)); - object = _getPrototype(object); - } - return result; -}; - -/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js - - - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return _copyObject(source, _getSymbolsIn(source), object); -} - -/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js - - - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return lodash_es_isArray(object) ? result : _arrayPush(result, symbolsFunc(object)); -} - -/* harmony default export */ const _baseGetAllKeys = (baseGetAllKeys); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeys.js - - - - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return _baseGetAllKeys(object, lodash_es_keys, _getSymbols); -} - -/* harmony default export */ const _getAllKeys = (getAllKeys); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js - - - - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return _baseGetAllKeys(object, lodash_es_keysIn, _getSymbolsIn); -} - -/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_DataView.js - - - -/* Built-in method references that are verified to be native. */ -var DataView = _getNative(_root, 'DataView'); - -/* harmony default export */ const _DataView = (DataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_Promise.js - - - -/* Built-in method references that are verified to be native. */ -var _Promise_Promise = _getNative(_root, 'Promise'); - -/* harmony default export */ const _Promise = (_Promise_Promise); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_Set.js - - - -/* Built-in method references that are verified to be native. */ -var _Set_Set = _getNative(_root, 'Set'); - -/* harmony default export */ const _Set = (_Set_Set); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_WeakMap.js - - - -/* Built-in method references that are verified to be native. */ -var _WeakMap_WeakMap = _getNative(_root, 'WeakMap'); - -/* harmony default export */ const _WeakMap = (_WeakMap_WeakMap); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_getTag.js - - - - - - - - -/** `Object#toString` result references. */ -var _getTag_mapTag = '[object Map]', - _getTag_objectTag = '[object Object]', - promiseTag = '[object Promise]', - _getTag_setTag = '[object Set]', - _getTag_weakMapTag = '[object WeakMap]'; - -var _getTag_dataViewTag = '[object DataView]'; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = _toSource(_DataView), - mapCtorString = _toSource(_Map), - promiseCtorString = _toSource(_Promise), - setCtorString = _toSource(_Set), - weakMapCtorString = _toSource(_WeakMap); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = _baseGetTag; - -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != _getTag_dataViewTag) || - (_Map && getTag(new _Map) != _getTag_mapTag) || - (_Promise && getTag(_Promise.resolve()) != promiseTag) || - (_Set && getTag(new _Set) != _getTag_setTag) || - (_WeakMap && getTag(new _WeakMap) != _getTag_weakMapTag)) { - getTag = function(value) { - var result = _baseGetTag(value), - Ctor = result == _getTag_objectTag ? value.constructor : undefined, - ctorString = Ctor ? _toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return _getTag_dataViewTag; - case mapCtorString: return _getTag_mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return _getTag_setTag; - case weakMapCtorString: return _getTag_weakMapTag; - } - } - return result; - }; -} - -/* harmony default export */ const _getTag = (getTag); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js -/** Used for built-in method references. */ -var _initCloneArray_objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var _initCloneArray_hasOwnProperty = _initCloneArray_objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/* harmony default export */ const _initCloneArray = (initCloneArray); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js - - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? _cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/* harmony default export */ const _cloneDataView = (cloneDataView); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/* harmony default export */ const _cloneRegExp = (cloneRegExp); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js - - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = _Symbol ? _Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/* harmony default export */ const _cloneSymbol = (cloneSymbol); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js - - - - - - -/** `Object#toString` result references. */ -var _initCloneByTag_boolTag = '[object Boolean]', - _initCloneByTag_dateTag = '[object Date]', - _initCloneByTag_mapTag = '[object Map]', - _initCloneByTag_numberTag = '[object Number]', - _initCloneByTag_regexpTag = '[object RegExp]', - _initCloneByTag_setTag = '[object Set]', - _initCloneByTag_stringTag = '[object String]', - _initCloneByTag_symbolTag = '[object Symbol]'; - -var _initCloneByTag_arrayBufferTag = '[object ArrayBuffer]', - _initCloneByTag_dataViewTag = '[object DataView]', - _initCloneByTag_float32Tag = '[object Float32Array]', - _initCloneByTag_float64Tag = '[object Float64Array]', - _initCloneByTag_int8Tag = '[object Int8Array]', - _initCloneByTag_int16Tag = '[object Int16Array]', - _initCloneByTag_int32Tag = '[object Int32Array]', - _initCloneByTag_uint8Tag = '[object Uint8Array]', - _initCloneByTag_uint8ClampedTag = '[object Uint8ClampedArray]', - _initCloneByTag_uint16Tag = '[object Uint16Array]', - _initCloneByTag_uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case _initCloneByTag_arrayBufferTag: - return _cloneArrayBuffer(object); - - case _initCloneByTag_boolTag: - case _initCloneByTag_dateTag: - return new Ctor(+object); - - case _initCloneByTag_dataViewTag: - return _cloneDataView(object, isDeep); - - case _initCloneByTag_float32Tag: case _initCloneByTag_float64Tag: - case _initCloneByTag_int8Tag: case _initCloneByTag_int16Tag: case _initCloneByTag_int32Tag: - case _initCloneByTag_uint8Tag: case _initCloneByTag_uint8ClampedTag: case _initCloneByTag_uint16Tag: case _initCloneByTag_uint32Tag: - return _cloneTypedArray(object, isDeep); - - case _initCloneByTag_mapTag: - return new Ctor; - - case _initCloneByTag_numberTag: - case _initCloneByTag_stringTag: - return new Ctor(object); - - case _initCloneByTag_regexpTag: - return _cloneRegExp(object); - - case _initCloneByTag_setTag: - return new Ctor; - - case _initCloneByTag_symbolTag: - return _cloneSymbol(object); - } -} - -/* harmony default export */ const _initCloneByTag = (initCloneByTag); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js - - - -/** `Object#toString` result references. */ -var _baseIsMap_mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return lodash_es_isObjectLike(value) && _getTag(value) == _baseIsMap_mapTag; -} - -/* harmony default export */ const _baseIsMap = (baseIsMap); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js - - - - -/* Node.js helper references. */ -var nodeIsMap = _nodeUtil && _nodeUtil.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? _baseUnary(nodeIsMap) : _baseIsMap; - -/* harmony default export */ const lodash_es_isMap = (isMap); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js - - - -/** `Object#toString` result references. */ -var _baseIsSet_setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return lodash_es_isObjectLike(value) && _getTag(value) == _baseIsSet_setTag; -} - -/* harmony default export */ const _baseIsSet = (baseIsSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js - - - - -/* Node.js helper references. */ -var nodeIsSet = _nodeUtil && _nodeUtil.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? _baseUnary(nodeIsSet) : _baseIsSet; - -/* harmony default export */ const lodash_es_isSet = (isSet); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js - - - - - - - - - - - - - - - - - - - - - - - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var _baseClone_argsTag = '[object Arguments]', - _baseClone_arrayTag = '[object Array]', - _baseClone_boolTag = '[object Boolean]', - _baseClone_dateTag = '[object Date]', - _baseClone_errorTag = '[object Error]', - _baseClone_funcTag = '[object Function]', - _baseClone_genTag = '[object GeneratorFunction]', - _baseClone_mapTag = '[object Map]', - _baseClone_numberTag = '[object Number]', - _baseClone_objectTag = '[object Object]', - _baseClone_regexpTag = '[object RegExp]', - _baseClone_setTag = '[object Set]', - _baseClone_stringTag = '[object String]', - _baseClone_symbolTag = '[object Symbol]', - _baseClone_weakMapTag = '[object WeakMap]'; - -var _baseClone_arrayBufferTag = '[object ArrayBuffer]', - _baseClone_dataViewTag = '[object DataView]', - _baseClone_float32Tag = '[object Float32Array]', - _baseClone_float64Tag = '[object Float64Array]', - _baseClone_int8Tag = '[object Int8Array]', - _baseClone_int16Tag = '[object Int16Array]', - _baseClone_int32Tag = '[object Int32Array]', - _baseClone_uint8Tag = '[object Uint8Array]', - _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', - _baseClone_uint16Tag = '[object Uint16Array]', - _baseClone_uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[_baseClone_argsTag] = cloneableTags[_baseClone_arrayTag] = -cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = -cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = -cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = -cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = -cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = -cloneableTags[_baseClone_numberTag] = cloneableTags[_baseClone_objectTag] = -cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = -cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = -cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = -cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; -cloneableTags[_baseClone_errorTag] = cloneableTags[_baseClone_funcTag] = -cloneableTags[_baseClone_weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!lodash_es_isObject(value)) { - return value; - } - var isArr = lodash_es_isArray(value); - if (isArr) { - result = _initCloneArray(value); - if (!isDeep) { - return _copyArray(value, result); - } - } else { - var tag = _getTag(value), - isFunc = tag == _baseClone_funcTag || tag == _baseClone_genTag; - - if (lodash_es_isBuffer(value)) { - return _cloneBuffer(value, isDeep); - } - if (tag == _baseClone_objectTag || tag == _baseClone_argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : _initCloneObject(value); - if (!isDeep) { - return isFlat - ? _copySymbolsIn(value, _baseAssignIn(result, value)) - : _copySymbols(value, _baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = _initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new _Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (lodash_es_isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (lodash_es_isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } - - var keysFunc = isFull - ? (isFlat ? _getAllKeysIn : _getAllKeys) - : (isFlat ? lodash_es_keysIn : lodash_es_keys); - - var props = isArr ? undefined : keysFunc(value); - _arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - _assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/* harmony default export */ const _baseClone = (baseClone); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js - - -/** Used to compose bitmasks for cloning. */ -var cloneDeep_CLONE_DEEP_FLAG = 1, - cloneDeep_CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return _baseClone(value, cloneDeep_CLONE_DEEP_FLAG | cloneDeep_CLONE_SYMBOLS_FLAG); -} - -/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); - -;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js - - - - -/** `Object#toString` result references. */ -var isString_stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!lodash_es_isArray(value) && lodash_es_isObjectLike(value) && _baseGetTag(value) == isString_stringTag); -} - -/* harmony default export */ const lodash_es_isString = (isString); - -;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/executeCallback.js -function executeCallback(promise, callback) { - if (callback) { - promise.then(function (result) { - callback(null, result); - }, function (error) { - callback(error); - }); - } -} - -/* harmony default export */ const utils_executeCallback = (executeCallback); -;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/getCallback.js -function getCallback() { - if (arguments.length && typeof arguments[arguments.length - 1] === 'function') { - return arguments[arguments.length - 1]; - } -} -;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/normalizeKey.js -function normalizeKey(key) { - // Cast the key to a string, as that's all we can set as a key. - if (typeof key !== 'string') { - console.warn("".concat(key, " used as a key, but it is not a string.")); - key = String(key); - } - - return key; -} -;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/createBlob.js -// Abstracts constructing a Blob object, so it also works in older -// browsers that don't support the native Blob constructor. (i.e. -// old QtWebKit versions, at least). -// Abstracts constructing a Blob object, so it also works in older -// browsers that don't support the native Blob constructor. (i.e. -// old QtWebKit versions, at least). -function createBlob(parts, properties) { - /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */ - parts = parts || []; - properties = properties || {}; - - try { - return new Blob(parts, properties); - } catch (e) { - if (e.name !== 'TypeError') { - throw e; - } - - var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder; - var builder = new Builder(); - - for (var i = 0; i < parts.length; i += 1) { - builder.append(parts[i]); - } - - return builder.getBlob(properties.type); - } -} - -/* harmony default export */ const utils_createBlob = (createBlob); -;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/serializer.js -/* eslint-disable no-bitwise */ - // Sadly, the best way to save binary data in WebSQL/localStorage is serializing -// it to Base64, so this is how we store it to prevent very strange errors with less -// verbose ways of binary <-> string data storage. - -var BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -var BLOB_TYPE_PREFIX = '~~local_forage_type~'; -var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/; -var SERIALIZED_MARKER = '__lfsc__:'; -var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length; // OMG the serializations! - -var TYPE_ARRAYBUFFER = 'arbf'; -var TYPE_BLOB = 'blob'; -var TYPE_INT8ARRAY = 'si08'; -var TYPE_UINT8ARRAY = 'ui08'; -var TYPE_UINT8CLAMPEDARRAY = 'uic8'; -var TYPE_INT16ARRAY = 'si16'; -var TYPE_INT32ARRAY = 'si32'; -var TYPE_UINT16ARRAY = 'ur16'; -var TYPE_UINT32ARRAY = 'ui32'; -var TYPE_FLOAT32ARRAY = 'fl32'; -var TYPE_FLOAT64ARRAY = 'fl64'; -var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length; -var serializer_toString = Object.prototype.toString; - -function stringToBuffer(serializedString) { - // Fill the string into a ArrayBuffer. - var bufferLength = serializedString.length * 0.75; - var len = serializedString.length; - var i; - var p = 0; - var encoded1, encoded2, encoded3, encoded4; - - if (serializedString[serializedString.length - 1] === '=') { - bufferLength--; - - if (serializedString[serializedString.length - 2] === '=') { - bufferLength--; - } - } - - var buffer = new ArrayBuffer(bufferLength); - var bytes = new Uint8Array(buffer); - - for (i = 0; i < len; i += 4) { - encoded1 = BASE_CHARS.indexOf(serializedString[i]); - encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]); - encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]); - encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]); - /*jslint bitwise: true */ - - bytes[p++] = encoded1 << 2 | encoded2 >> 4; - bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; - bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; - } - - return buffer; -} // Converts a buffer to a string to store, serialized, in the backend -// storage library. - - -function bufferToString(buffer) { - // base64-arraybuffer - var bytes = new Uint8Array(buffer); - var base64String = ''; - var i; - - for (i = 0; i < bytes.length; i += 3) { - /*jslint bitwise: true */ - base64String += BASE_CHARS[bytes[i] >> 2]; - base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4]; - base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6]; - base64String += BASE_CHARS[bytes[i + 2] & 63]; - } - - if (bytes.length % 3 === 2) { - base64String = base64String.substring(0, base64String.length - 1) + '='; - } else if (bytes.length % 3 === 1) { - base64String = base64String.substring(0, base64String.length - 2) + '=='; - } - - return base64String; -} // Serialize a value, afterwards executing a callback (which usually -// instructs the `setItem()` callback/promise to be executed). This is how -// we store binary data with localStorage. - - -function serialize(value, callback) { - var valueType = ''; - - if (value) { - valueType = serializer_toString.call(value); - } // Cannot use `value instanceof ArrayBuffer` or such here, as these - // checks fail when running the tests using casper.js... - // - // TODO: See why those tests fail and use a better solution. - - - if (value && (valueType === '[object ArrayBuffer]' || value.buffer && serializer_toString.call(value.buffer) === '[object ArrayBuffer]')) { - // Convert binary arrays to a string and prefix the string with - // a special marker. - var buffer; - var marker = SERIALIZED_MARKER; - - if (value instanceof ArrayBuffer) { - buffer = value; - marker += TYPE_ARRAYBUFFER; - } else { - buffer = value.buffer; - - if (valueType === '[object Int8Array]') { - marker += TYPE_INT8ARRAY; - } else if (valueType === '[object Uint8Array]') { - marker += TYPE_UINT8ARRAY; - } else if (valueType === '[object Uint8ClampedArray]') { - marker += TYPE_UINT8CLAMPEDARRAY; - } else if (valueType === '[object Int16Array]') { - marker += TYPE_INT16ARRAY; - } else if (valueType === '[object Uint16Array]') { - marker += TYPE_UINT16ARRAY; - } else if (valueType === '[object Int32Array]') { - marker += TYPE_INT32ARRAY; - } else if (valueType === '[object Uint32Array]') { - marker += TYPE_UINT32ARRAY; - } else if (valueType === '[object Float32Array]') { - marker += TYPE_FLOAT32ARRAY; - } else if (valueType === '[object Float64Array]') { - marker += TYPE_FLOAT64ARRAY; - } else { - callback(new Error('Failed to get type for BinaryArray')); - } - } - - callback(marker + bufferToString(buffer)); - } else if (valueType === '[object Blob]') { - // Conver the blob to a binaryArray and then to a string. - var fileReader = new FileReader(); - - fileReader.onload = function () { - // Backwards-compatible prefix for the blob type. - var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result); - callback(SERIALIZED_MARKER + TYPE_BLOB + str); - }; - - fileReader.readAsArrayBuffer(value); - } else { - try { - callback(JSON.stringify(value)); - } catch (e) { - console.error("Couldn't convert value into a JSON string: ", value); - callback(null, e); - } - } -} // Deserialize data we've inserted into a value column/field. We place -// special markers into our strings to mark them as encoded; this isn't -// as nice as a meta field, but it's the only sane thing we can do whilst -// keeping localStorage support intact. -// -// Oftentimes this will just deserialize JSON content, but if we have a -// special marker (SERIALIZED_MARKER, defined above), we will extract -// some kind of arraybuffer/binary data/typed array out of the string. - - -function deserialize(value) { - // If we haven't marked this string as being specially serialized (i.e. - // something other than serialized JSON), we can just return it and be - // done with it. - if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) { - return JSON.parse(value); - } // The following code deals with deserializing some kind of Blob or - // TypedArray. First we separate out the type of data we're dealing - // with from the data itself. - - - var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH); - var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH); - var blobType; // Backwards-compatible blob type serialization strategy. - // DBs created with older versions of localForage will simply not have the blob type. - - if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) { - var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX); - blobType = matcher[1]; - serializedString = serializedString.substring(matcher[0].length); - } - - var buffer = stringToBuffer(serializedString); // Return the right type based on the code/type set during - // serialization. - - switch (type) { - case TYPE_ARRAYBUFFER: - return buffer; - - case TYPE_BLOB: - return utils_createBlob([buffer], { - type: blobType - }); - - case TYPE_INT8ARRAY: - return new Int8Array(buffer); - - case TYPE_UINT8ARRAY: - return new Uint8Array(buffer); - - case TYPE_UINT8CLAMPEDARRAY: - return new Uint8ClampedArray(buffer); - - case TYPE_INT16ARRAY: - return new Int16Array(buffer); - - case TYPE_UINT16ARRAY: - return new Uint16Array(buffer); - - case TYPE_INT32ARRAY: - return new Int32Array(buffer); - - case TYPE_UINT32ARRAY: - return new Uint32Array(buffer); - - case TYPE_FLOAT32ARRAY: - return new Float32Array(buffer); - - case TYPE_FLOAT64ARRAY: - return new Float64Array(buffer); - - default: - throw new Error('Unkown type: ' + type); - } -} - -var localforageSerializer = { - serialize: serialize, - deserialize: deserialize, - stringToBuffer: stringToBuffer, - bufferToString: bufferToString -}; -/* harmony default export */ const serializer = (localforageSerializer); -;// CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/drivers/sessionStorage.js -// Copyright 2014 Mozilla -// Copyright 2015 Thodoris Greasidis -// Copyright 2018 JC Brand -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - - - -const sessionStorage_serialize = serializer.serialize; -const sessionStorage_deserialize = serializer.deserialize; - -function isSessionStorageValid() { - // If the app is running inside a Google Chrome packaged webapp, or some - // other context where sessionStorage isn't available, we don't use - // sessionStorage. This feature detection is preferred over the old - // `if (window.chrome && window.chrome.runtime)` code. - // See: https://github.com/mozilla/localForage/issues/68 - try { - // If sessionStorage isn't available, we get outta here! - // This should be inside a try catch - if (sessionStorage && 'setItem' in sessionStorage) { - return true; - } - } catch (e) { - console.log(e); - } - - return false; -} - -function _getKeyPrefix(options, defaultConfig) { - let keyPrefix = options.name + '/'; - - if (options.storeName !== defaultConfig.storeName) { - keyPrefix += options.storeName + '/'; - } - - return keyPrefix; -} - -const dbInfo = { - 'serializer': { - 'serialize': sessionStorage_serialize, - 'deserialize': sessionStorage_deserialize - } -}; - -function _initStorage(options) { - dbInfo.keyPrefix = _getKeyPrefix(options, this._defaultConfig); - - if (options) { - for (const i in options) { - // eslint-disable-line guard-for-in - dbInfo[i] = options[i]; - } - } -} // Remove all keys from the datastore, effectively destroying all data in -// the app's key/value store! - - -function clear(callback) { - const promise = this.ready().then(function () { - const keyPrefix = dbInfo.keyPrefix; - - for (let i = sessionStorage.length - 1; i >= 0; i--) { - const key = sessionStorage.key(i); - - if (key.indexOf(keyPrefix) === 0) { - sessionStorage.removeItem(key); - } - } - }); - utils_executeCallback(promise, callback); - return promise; -} // Retrieve an item from the store. Unlike the original async_storage -// library in Gaia, we don't modify return values at all. If a key's value -// is `undefined`, we pass that value to the callback function. - - -function getItem(key, callback) { - key = normalizeKey(key); - const promise = this.ready().then(function () { - let result = sessionStorage.getItem(dbInfo.keyPrefix + key); // If a result was found, parse it from the serialized - // string into a JS object. If result isn't truthy, the key - // is likely undefined and we'll pass it straight to the - // callback. - - if (result) { - result = dbInfo.serializer.deserialize(result); - } - - return result; - }); - utils_executeCallback(promise, callback); - return promise; -} // Iterate over all items in the store. - - -function iterate(iterator, callback) { - const self = this; - const promise = self.ready().then(function () { - const keyPrefix = dbInfo.keyPrefix; - const keyPrefixLength = keyPrefix.length; - const length = sessionStorage.length; // We use a dedicated iterator instead of the `i` variable below - // so other keys we fetch in sessionStorage aren't counted in - // the `iterationNumber` argument passed to the `iterate()` - // callback. - // - // See: github.com/mozilla/localForage/pull/435#discussion_r38061530 - - let iterationNumber = 1; - - for (let i = 0; i < length; i++) { - const key = sessionStorage.key(i); - - if (key.indexOf(keyPrefix) !== 0) { - continue; - } - - let value = sessionStorage.getItem(key); // If a result was found, parse it from the serialized - // string into a JS object. If result isn't truthy, the - // key is likely undefined and we'll pass it straight - // to the iterator. - - if (value) { - value = dbInfo.serializer.deserialize(value); - } - - value = iterator(value, key.substring(keyPrefixLength), iterationNumber++); - - if (value !== void 0) { - // eslint-disable-line no-void - return value; - } - } - }); - utils_executeCallback(promise, callback); - return promise; -} // Same as sessionStorage's key() method, except takes a callback. - - -function key(n, callback) { - const self = this; - const promise = self.ready().then(function () { - let result; - - try { - result = sessionStorage.key(n); - } catch (error) { - result = null; - } // Remove the prefix from the key, if a key is found. - - - if (result) { - result = result.substring(dbInfo.keyPrefix.length); - } - - return result; - }); - utils_executeCallback(promise, callback); - return promise; -} - -function sessionStorage_keys(callback) { - const self = this; - const promise = self.ready().then(function () { - const length = sessionStorage.length; - const keys = []; - - for (let i = 0; i < length; i++) { - const itemKey = sessionStorage.key(i); - - if (itemKey.indexOf(dbInfo.keyPrefix) === 0) { - keys.push(itemKey.substring(dbInfo.keyPrefix.length)); - } - } - - return keys; - }); - utils_executeCallback(promise, callback); - return promise; -} // Supply the number of keys in the datastore to the callback function. - - -function sessionStorage_length(callback) { - const self = this; - const promise = self.keys().then(function (keys) { - return keys.length; - }); - utils_executeCallback(promise, callback); - return promise; -} // Remove an item from the store, nice and simple. - - -function removeItem(key, callback) { - key = normalizeKey(key); - const promise = this.ready().then(function () { - sessionStorage.removeItem(dbInfo.keyPrefix + key); - }); - utils_executeCallback(promise, callback); - return promise; -} // Set a key's value and run an optional callback once the value is set. -// Unlike Gaia's implementation, the callback function is passed the value, -// in case you want to operate on that value only after you're sure it -// saved, or something like that. - - -function setItem(key, value, callback) { - key = normalizeKey(key); - const promise = this.ready().then(function () { - // Convert undefined values to null. - // https://github.com/mozilla/localForage/pull/42 - if (value === undefined) { - value = null; - } // Save the original value to pass to the callback. - - - const originalValue = value; - return new Promise(function (resolve, reject) { - dbInfo.serializer.serialize(value, function (value, error) { - if (error) { - reject(error); - } else { - try { - sessionStorage.setItem(dbInfo.keyPrefix + key, value); - resolve(originalValue); - } catch (e) { - // sessionStorage capacity exceeded. - // TODO: Make this a specific error/event. - if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { - reject(e); - } - - reject(e); - } - } - }); - }); - }); - utils_executeCallback(promise, callback); - return promise; -} - -function dropInstance(options, callback) { - callback = getCallback.apply(this, arguments); - options = typeof options !== 'function' && options || {}; - - if (!options.name) { - const currentConfig = this.config(); - options.name = options.name || currentConfig.name; - options.storeName = options.storeName || currentConfig.storeName; - } - - const self = this; - let promise; - - if (!options.name) { - promise = Promise.reject(new Error('Invalid arguments')); - } else { - promise = new Promise(function (resolve) { - if (!options.storeName) { - resolve("".concat(options.name, "/")); - } else { - resolve(_getKeyPrefix(options, self._defaultConfig)); - } - }).then(function (keyPrefix) { - for (let i = sessionStorage.length - 1; i >= 0; i--) { - const key = sessionStorage.key(i); - - if (key.indexOf(keyPrefix) === 0) { - sessionStorage.removeItem(key); - } - } - }); - } - - utils_executeCallback(promise, callback); - return promise; -} - -const sessionStorageWrapper = { - _driver: 'sessionStorageWrapper', - _initStorage: _initStorage, - _support: isSessionStorageValid(), - iterate: iterate, - getItem: getItem, - setItem: setItem, - removeItem: removeItem, - clear: clear, - length: sessionStorage_length, - key: key, - keys: sessionStorage_keys, - dropInstance: dropInstance -}; -/* harmony default export */ const drivers_sessionStorage = (sessionStorageWrapper); -// EXTERNAL MODULE: ./node_modules/localforage-setitems/dist/localforage-setitems.js -var localforage_setitems = __webpack_require__(1459); -;// CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/storage.js -/** - * IndexedDB, localStorage and sessionStorage adapter - */ - - - - - - - -const IN_MEMORY = umd._driver; -localforage.defineDriver(umd); -(0,localforage_setitems.extendPrototype)(localforage); - -function S4() { - // Generate four random hex digits. - return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1); -} - -function guid() { - // Generate a pseudo-GUID by concatenating random hexadecimal. - return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); -} - -class Storage { - constructor(id, type, batchedWrites = false) { - if (type === 'local' && !window.localStorage) { - throw new Error("Skeletor.storage: Environment does not support localStorage."); - } else if (type === 'session' && !window.sessionStorage) { - throw new Error("Skeletor.storage: Environment does not support sessionStorage."); - } - - if (lodash_es_isString(type)) { - this.storeInitialized = this.initStore(type, batchedWrites); - } else { - this.store = type; - - if (batchedWrites) { - this.store.debouncedSetItems = mergebounce_mergebounce(items => this.store.setItems(items), 50, { - 'promise': true - }); - } - - this.storeInitialized = Promise.resolve(); - } - - this.name = id; - } - - async initStore(type, batchedWrites) { - if (type === 'session') { - localforage.setDriver(drivers_sessionStorage._driver); - } else if (type === 'local') { - await localforage.config({ - 'driver': localforage.LOCALSTORAGE - }); - } else if (type === 'in_memory') { - localforage.config({ - 'driver': IN_MEMORY - }); - } else if (type !== 'indexed') { - throw new Error("Skeletor.storage: No storage type was specified"); - } - - this.store = localforage; - - if (batchedWrites) { - this.store.debouncedSetItems = mergebounce_mergebounce(items => this.store.setItems(items), 50, { - 'promise': true - }); - } - } - - flush() { - var _this$store$debounced; - - return (_this$store$debounced = this.store.debouncedSetItems) === null || _this$store$debounced === void 0 ? void 0 : _this$store$debounced.flush(); - } - - async clear() { - await this.store.removeItem(this.name).catch(e => console.error(e)); - const re = new RegExp("^".concat(this.name, "-")); - const keys = await this.store.keys(); - const removed_keys = keys.filter(k => re.test(k)); - await Promise.all(removed_keys.map(k => this.store.removeItem(k).catch(e => console.error(e)))); - } - - sync(name) { - const that = this; - - async function localSync(method, model, options) { - let resp, errorMessage, promise, new_attributes; // We get the collection (and if necessary the model attribute. - // Waiting for storeInitialized will cause another iteration of - // the event loop, after which the collection reference will - // be removed from the model. - - const collection = model.collection; - - if (['patch', 'update'].includes(method)) { - new_attributes = lodash_es_cloneDeep(model.attributes); - } - - await that.storeInitialized; - - try { - const original_attributes = model.attributes; - - switch (method) { - case "read": - if (model.id !== undefined) { - resp = await that.find(model); - } else { - resp = await that.findAll(); - } - - break; - - case "create": - resp = await that.create(model, options); - break; - - case 'patch': - case "update": - if (options.wait) { - // When `wait` is set to true, Skeletor waits until - // confirmation of storage before setting the values on - // the model. - // However, the new attributes needs to be sent, so it - // sets them manually on the model and then removes - // them after calling `sync`. - // Because our `sync` method is asynchronous and we - // wait for `storeInitialized`, the attributes are - // already restored once we get here, so we need to do - // the attributes dance again. - model.attributes = new_attributes; - } - - promise = that.update(model, options); - - if (options.wait) { - model.attributes = original_attributes; - } - - resp = await promise; - break; - - case "delete": - resp = await that.destroy(model, collection); - break; - } - } catch (error) { - if (error.code === 22 && that.getStorageSize() === 0) { - errorMessage = "Private browsing is unsupported"; - } else { - errorMessage = error.message; - } - } - - if (resp) { - if (options && options.success) { - // When storing, we don't pass back the response (which is - // the set attributes returned from localforage because - // Skeletor sets them again on the model and due to the async - // nature of localforage it can cause stale attributes to be - // set on a model after it's been updated in the meantime. - const data = method === "read" ? resp : null; - options.success(data, options); - } - } else { - errorMessage = errorMessage ? errorMessage : "Record Not Found"; - - if (options && options.error) { - options.error(errorMessage); - } - } - } - - localSync.__name__ = 'localSync'; - return localSync; - } - - removeCollectionReference(model, collection) { - if (!collection) { - return; - } - - const ids = collection.filter(m => m.id !== model.id).map(m => this.getItemName(m.id)); - return this.store.setItem(this.name, ids); - } - - addCollectionReference(model, collection) { - if (!collection) { - return; - } - - const ids = collection.map(m => this.getItemName(m.id)); - const new_id = this.getItemName(model.id); - - if (!ids.includes(new_id)) { - ids.push(new_id); - } - - return this.store.setItem(this.name, ids); - } - - getCollectionReferenceData(model) { - if (!model.collection) { - return {}; - } - - const ids = model.collection.map(m => this.getItemName(m.id)); - const new_id = this.getItemName(model.id); - - if (!ids.includes(new_id)) { - ids.push(new_id); - } - - const result = {}; - result[this.name] = ids; - return result; - } - - async save(model) { - if (this.store.setItems) { - const items = {}; - items[this.getItemName(model.id)] = model.toJSON(); - Object.assign(items, this.getCollectionReferenceData(model)); - return this.store.debouncedSetItems ? this.store.debouncedSetItems(items) : this.store.setItems(items); - } else { - const key = this.getItemName(model.id); - const data = await this.store.setItem(key, model.toJSON()); - await this.addCollectionReference(model, model.collection); - return data; - } - } - - create(model, options) { - /* Add a model, giving it a (hopefully)-unique GUID, if it doesn't already - * have an id of it's own. - */ - if (!model.id) { - model.id = guid(); - model.set(model.idAttribute, model.id, options); - } - - return this.save(model); - } - - update(model) { - return this.save(model); - } - - find(model) { - return this.store.getItem(this.getItemName(model.id)); - } - - async findAll() { - /* Return the array of all models currently in storage. - */ - const data = await this.store.getItem(this.name); - - if (data && data.length) { - return Promise.all(data.map(item => this.store.getItem(item))); - } - - return []; - } - - async destroy(model, collection) { - await this.flush(); - await this.store.removeItem(this.getItemName(model.id)); - await this.removeCollectionReference(model, collection); - return model; - } - - getStorageSize() { - return this.store.length; - } - - getItemName(id) { - return this.name + "-" + id; - } - -} - -Storage.sessionStorageInitialized = localforage.defineDriver(drivers_sessionStorage); -Storage.localForage = localforage; -/* harmony default export */ const storage = (Storage); -// EXTERNAL MODULE: ./node_modules/sprintf-js/src/sprintf.js -var sprintf = __webpack_require__(4457); -;// CONCATENATED MODULE: ./src/headless/shared/i18n.js - -/** - * @namespace i18n - */ - -/* harmony default export */ const i18n = ({ - initialize() {}, - - /** - * Overridable string wrapper method which can be used to provide i18n - * support. - * - * The default implementation in @converse/headless simply calls sprintf - * with the passed in arguments. - * - * If you install the full version of Converse, then this method gets - * overwritten in src/i18n/index.js to return a translated string. - * @method __ - * @private - * @memberOf i18n - * @param { String } str - */ - __(...args) { - return (0,sprintf.sprintf)(...args); - } - -}); ;// CONCATENATED MODULE: ./node_modules/lodash-es/isElement.js @@ -8913,10 +4254,10 @@ const LEVELS = { 'fatal': 4 }; const logger = Object.assign({ - 'debug': ((_console = console) === null || _console === void 0 ? void 0 : _console.log) ? console.log.bind(console) : function noop() {}, - 'error': ((_console2 = console) === null || _console2 === void 0 ? void 0 : _console2.log) ? console.log.bind(console) : function noop() {}, - 'info': ((_console3 = console) === null || _console3 === void 0 ? void 0 : _console3.log) ? console.log.bind(console) : function noop() {}, - 'warn': ((_console4 = console) === null || _console4 === void 0 ? void 0 : _console4.log) ? console.log.bind(console) : function noop() {} + 'debug': (_console = console) !== null && _console !== void 0 && _console.log ? console.log.bind(console) : function noop() {}, + 'error': (_console2 = console) !== null && _console2 !== void 0 && _console2.log ? console.log.bind(console) : function noop() {}, + 'info': (_console3 = console) !== null && _console3 !== void 0 && _console3.log ? console.log.bind(console) : function noop() {}, + 'warn': (_console4 = console) !== null && _console4 !== void 0 && _console4.log ? console.log.bind(console) : function noop() {} }, console); /** * The log namespace @@ -8931,7 +4272,7 @@ const log = { */ setLogLevel(level) { if (!['debug', 'info', 'warn', 'error', 'fatal'].includes(level)) { - throw new Error("Invalid loglevel: ".concat(level)); + throw new Error(`Invalid loglevel: ${level}`); } this.loglevel = level; @@ -8967,15 +4308,15 @@ const log = { const prefix = style ? '%c' : ''; if (level === 'error') { - logger.error("".concat(prefix, " ERROR: ").concat(message), style); + logger.error(`${prefix} ERROR: ${message}`, style); } else if (level === 'warn') { - logger.warn("".concat(prefix, " ").concat(new Date().toISOString(), " WARNING: ").concat(message), style); + logger.warn(`${prefix} ${new Date().toISOString()} WARNING: ${message}`, style); } else if (level === 'fatal') { - logger.error("".concat(prefix, " FATAL: ").concat(message), style); + logger.error(`${prefix} FATAL: ${message}`, style); } else if (level === 'debug') { - logger.debug("".concat(prefix, " ").concat(new Date().toISOString(), " DEBUG: ").concat(message), style); + logger.debug(`${prefix} ${new Date().toISOString()} DEBUG: ${message}`, style); } else { - logger.info("".concat(prefix, " ").concat(new Date().toISOString(), " INFO: ").concat(message), style); + logger.info(`${prefix} ${new Date().toISOString()} INFO: ${message}`, style); } }, @@ -9661,7 +5002,7 @@ class SASLPlain extends SASLMechanism { // See: https://tools.ietf.org/html/rfc6120#section-6.3.8 - let auth_str = authzid !== "".concat(authcid, "@").concat(domain) ? authzid : ''; + let auth_str = authzid !== `${authcid}@${domain}` ? authzid : ''; auth_str = auth_str + "\u0000"; auth_str = auth_str + authcid; auth_str = auth_str + "\u0000"; @@ -9901,7 +5242,7 @@ class SASLSHA1 extends SASLMechanism { // eslint-disable-line class-methods-use-this let nonce, salt, iter, Hi, U, U_old, i, k; let responseText = "c=biws,"; - let authMessage = "".concat(connection._sasl_data["client-first-message-bare"], ",").concat(challenge, ","); + let authMessage = `${connection._sasl_data["client-first-message-bare"]},${challenge},`; const cnonce = connection._sasl_data.cnonce; const attribMatch = /([a-z]+)=([^,]+)(,|$)/; @@ -10878,7 +6219,7 @@ const Strophe = { const names = [...Array(elem.attributes.length).keys()].map(i => elem.attributes[i].nodeName); names.sort(); - let result = names.reduce((a, n) => "".concat(a, " ").concat(n, "=\"").concat(Strophe.xmlescape(elem.attributes.getNamedItem(n).value), "\""), "<".concat(elem.nodeName)); + let result = names.reduce((a, n) => `${a} ${n}="${Strophe.xmlescape(elem.attributes.getNamedItem(n).value)}"`, `<${elem.nodeName}`); if (elem.childNodes.length > 0) { result += ">"; @@ -12211,7 +7552,7 @@ Strophe.Connection = class Connection { errback(stanza); } } else { - const error = new Error("Got bad IQ type of ".concat(iqtype)); + const error = new Error(`Got bad IQ type of ${iqtype}`); error.name = "StropheError"; throw error; } @@ -12504,7 +7845,7 @@ Strophe.Connection = class Connection { try { plugin.statusChanged(status, condition); } catch (err) { - Strophe.error("".concat(k, " plugin caused an exception changing status: ").concat(err)); + Strophe.error(`${k} plugin caused an exception changing status: ${err}`); } } } @@ -12517,7 +7858,7 @@ Strophe.Connection = class Connection { } catch (e) { Strophe._handleError(e); - Strophe.error("User connection callback caused an exception: ".concat(e)); + Strophe.error(`User connection callback caused an exception: ${e}`); } } } @@ -13078,7 +8419,7 @@ Strophe.Connection = class Connection { bind() { if (!this.do_bind) { - Strophe.log(Strophe.LogLevel.INFO, "Strophe.Connection.prototype.bind called but \"do_bind\" is false"); + Strophe.log(Strophe.LogLevel.INFO, `Strophe.Connection.prototype.bind called but "do_bind" is false`); return; } @@ -13164,7 +8505,7 @@ Strophe.Connection = class Connection { _establishSession() { if (!this.do_session) { - throw new Error("Strophe.Connection.prototype._establishSession " + "called but apparently ".concat(Strophe.NS.SESSION, " wasn't advertised by the server")); + throw new Error(`Strophe.Connection.prototype._establishSession ` + `called but apparently ${Strophe.NS.SESSION} wasn't advertised by the server`); } this._addSysHandler(this._onSessionResultIQ.bind(this), null, null, null, "_session_auth_2"); @@ -14177,7 +9518,7 @@ Strophe.Bosh = class Bosh { if (primary_timeout || secondary_timeout || server_error) { if (secondary_timeout) { - Strophe.error("Request ".concat(this._requests[i].id, " timed out (secondary), restarting")); + Strophe.error(`Request ${this._requests[i].id} timed out (secondary), restarting`); } req.abort = true; @@ -15101,7 +10442,7 @@ Strophe.WorkerWebsocket = class WorkerWebsocket extends Strophe.Websocket { var _console; (_console = console) === null || _console === void 0 ? void 0 : _console.error(e); - Strophe.log(Strophe.LogLevel.ERROR, "Shared Worker Error: ".concat(e)); + Strophe.log(Strophe.LogLevel.ERROR, `Shared Worker Error: ${e}`); }; } @@ -15225,7 +10566,7 @@ Strophe.WorkerWebsocket = class WorkerWebsocket extends Strophe.Websocket { const msg = data[2]; Strophe.log(lmap[level], msg); } else { - Strophe.log(Strophe.LogLevel.ERROR, "Found unhandled service worker message: ".concat(data)); + Strophe.log(Strophe.LogLevel.ERROR, `Found unhandled service worker message: ${data}`); } } @@ -15258,7 +10599,1227 @@ CONNECTION_STATUS[Strophe.Status.DISCONNECTED] = 'DISCONNECTED'; CONNECTION_STATUS[Strophe.Status.DISCONNECTING] = 'DISCONNECTING'; CONNECTION_STATUS[Strophe.Status.ERROR] = 'ERROR'; CONNECTION_STATUS[Strophe.Status.RECONNECTING] = 'RECONNECTING'; -CONNECTION_STATUS[Strophe.Status.REDIRECT] = 'REDIRECT'; +CONNECTION_STATUS[Strophe.Status.REDIRECT] = 'REDIRECT'; // Core plugins are whitelisted automatically +// These are just the @converse/headless plugins, for the full converse, +// the other plugins are whitelisted in src/consts.js + +const CORE_PLUGINS = ['converse-adhoc', 'converse-bookmarks', 'converse-bosh', 'converse-caps', 'converse-carbons', 'converse-chat', 'converse-chatboxes', 'converse-disco', 'converse-emoji', 'converse-headlines', 'converse-mam', 'converse-muc', 'converse-ping', 'converse-pubsub', 'converse-roster', 'converse-smacks', 'converse-status', 'converse-vcard']; +const URL_PARSE_OPTIONS = { + 'start': /(\b|_)(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi +}; +;// CONCATENATED MODULE: ./node_modules/lodash-es/isObject.js +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/* harmony default export */ const lodash_es_isObject = (isObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isFunction.js + + + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!lodash_es_isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = _baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/* harmony default export */ const lodash_es_isFunction = (isFunction); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_coreJsData.js + + +/** Used to detect overreaching core-js shims. */ +var coreJsData = _root["__core-js_shared__"]; + +/* harmony default export */ const _coreJsData = (coreJsData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isMasked.js + + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/* harmony default export */ const _isMasked = (isMasked); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_toSource.js +/** Used for built-in method references. */ +var _toSource_funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var _toSource_funcToString = _toSource_funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return _toSource_funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/* harmony default export */ const _toSource = (toSource); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNative.js + + + + + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var _baseIsNative_funcProto = Function.prototype, + _baseIsNative_objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var _baseIsNative_funcToString = _baseIsNative_funcProto.toString; + +/** Used to check objects for own properties. */ +var _baseIsNative_hasOwnProperty = _baseIsNative_objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + _baseIsNative_funcToString.call(_baseIsNative_hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!lodash_es_isObject(value) || _isMasked(value)) { + return false; + } + var pattern = lodash_es_isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); +} + +/* harmony default export */ const _baseIsNative = (baseIsNative); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getValue.js +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/* harmony default export */ const _getValue = (getValue); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getNative.js + + + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; +} + +/* harmony default export */ const _getNative = (getNative); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_defineProperty.js + + +var defineProperty = (function() { + try { + var func = _getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* harmony default export */ const _defineProperty = (defineProperty); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignValue.js + + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && _defineProperty) { + _defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/* harmony default export */ const _baseAssignValue = (baseAssignValue); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/eq.js +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/* harmony default export */ const lodash_es_eq = (eq); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignValue.js + + + +/** Used for built-in method references. */ +var _assignValue_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _assignValue_hasOwnProperty = _assignValue_objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(_assignValue_hasOwnProperty.call(object, key) && lodash_es_eq(objValue, value)) || + (value === undefined && !(key in object))) { + _baseAssignValue(object, key, value); + } +} + +/* harmony default export */ const _assignValue = (assignValue); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copyObject.js + + + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + _baseAssignValue(object, key, newValue); + } else { + _assignValue(object, key, newValue); + } + } + return object; +} + +/* harmony default export */ const _copyObject = (copyObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/identity.js +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/* harmony default export */ const lodash_es_identity = (identity); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/* harmony default export */ const _apply = (apply); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return _apply(func, this, otherArgs); + }; +} + +/* harmony default export */ const _overRest = (overRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/constant.js +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +/* harmony default export */ const lodash_es_constant = (constant); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js + + + + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !_defineProperty ? lodash_es_identity : function(func, string) { + return _defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': lodash_es_constant(string), + 'writable': true + }); +}; + +/* harmony default export */ const _baseSetToString = (baseSetToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/* harmony default export */ const _shortOut = (shortOut); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js + + + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = _shortOut(_baseSetToString); + +/* harmony default export */ const _setToString = (setToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRest.js + + + + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return _setToString(_overRest(func, start, lodash_es_identity), func + ''); +} + +/* harmony default export */ const _baseRest = (baseRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isLength.js +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/* harmony default export */ const lodash_es_isLength = (isLength); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isArrayLike.js + + + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && lodash_es_isLength(value.length) && !lodash_es_isFunction(value); +} + +/* harmony default export */ const lodash_es_isArrayLike = (isArrayLike); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isIndex.js +/** Used as references for various `Number` constants. */ +var _isIndex_MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? _isIndex_MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/* harmony default export */ const _isIndex = (isIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isIterateeCall.js + + + + + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!lodash_es_isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (lodash_es_isArrayLike(object) && _isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return lodash_es_eq(object[index], value); + } + return false; +} + +/* harmony default export */ const _isIterateeCall = (isIterateeCall); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js + + + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return _baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && _isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/* harmony default export */ const _createAssigner = (createAssigner); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/* harmony default export */ const _baseTimes = (baseTimes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsArguments.js + + + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return lodash_es_isObjectLike(value) && _baseGetTag(value) == argsTag; +} + +/* harmony default export */ const _baseIsArguments = (baseIsArguments); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isArguments.js + + + +/** Used for built-in method references. */ +var isArguments_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var isArguments_hasOwnProperty = isArguments_objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = isArguments_objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { + return lodash_es_isObjectLike(value) && isArguments_hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/* harmony default export */ const lodash_es_isArguments = (isArguments); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isArray.js +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/* harmony default export */ const lodash_es_isArray = (isArray); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/stubFalse.js +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/* harmony default export */ const lodash_es_stubFalse = (stubFalse); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isBuffer.js + + + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? _root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || lodash_es_stubFalse; + +/* harmony default export */ const lodash_es_isBuffer = (isBuffer); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsTypedArray.js + + + + +/** `Object#toString` result references. */ +var _baseIsTypedArray_argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + _baseIsTypedArray_funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + _baseIsTypedArray_objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[_baseIsTypedArray_argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[_baseIsTypedArray_funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[_baseIsTypedArray_objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return lodash_es_isObjectLike(value) && + lodash_es_isLength(value.length) && !!typedArrayTags[_baseGetTag(value)]; +} + +/* harmony default export */ const _baseIsTypedArray = (baseIsTypedArray); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUnary.js +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/* harmony default export */ const _baseUnary = (baseUnary); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nodeUtil.js + + +/** Detect free variable `exports`. */ +var _nodeUtil_freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var _nodeUtil_freeModule = _nodeUtil_freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var _nodeUtil_moduleExports = _nodeUtil_freeModule && _nodeUtil_freeModule.exports === _nodeUtil_freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = _nodeUtil_moduleExports && _freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = _nodeUtil_freeModule && _nodeUtil_freeModule.require && _nodeUtil_freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* harmony default export */ const _nodeUtil = (nodeUtil); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isTypedArray.js + + + + +/* Node.js helper references. */ +var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; + +/* harmony default export */ const lodash_es_isTypedArray = (isTypedArray); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + + + + + + + +/** Used for built-in method references. */ +var _arrayLikeKeys_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _arrayLikeKeys_hasOwnProperty = _arrayLikeKeys_objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = lodash_es_isArray(value), + isArg = !isArr && lodash_es_isArguments(value), + isBuff = !isArr && !isArg && lodash_es_isBuffer(value), + isType = !isArr && !isArg && !isBuff && lodash_es_isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? _baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + _isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isPrototype.js +/** Used for built-in method references. */ +var _isPrototype_objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || _isPrototype_objectProto; + + return value === proto; +} + +/* harmony default export */ const _isPrototype = (isPrototype); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _nativeKeysIn = (nativeKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js + + + + +/** Used for built-in method references. */ +var _baseKeysIn_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeysIn_hasOwnProperty = _baseKeysIn_objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!lodash_es_isObject(object)) { + return _nativeKeysIn(object); + } + var isProto = _isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeysIn = (baseKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js + + + + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return lodash_es_isArrayLike(object) ? _arrayLikeKeys(object, true) : _baseKeysIn(object); +} + +/* harmony default export */ const lodash_es_keysIn = (keysIn); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/assignIn.js @@ -15326,6 +11887,659 @@ function arraySome(array, predicate) { /* harmony default export */ const _arraySome = (arraySome); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheClear.js +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +/* harmony default export */ const _listCacheClear = (listCacheClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assocIndexOf.js + + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (lodash_es_eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/* harmony default export */ const _assocIndexOf = (assocIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheDelete.js + + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +/* harmony default export */ const _listCacheDelete = (listCacheDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheGet.js + + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/* harmony default export */ const _listCacheGet = (listCacheGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheHas.js + + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return _assocIndexOf(this.__data__, key) > -1; +} + +/* harmony default export */ const _listCacheHas = (listCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheSet.js + + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = _assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +/* harmony default export */ const _listCacheSet = (listCacheSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_ListCache.js + + + + + + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = _listCacheClear; +ListCache.prototype['delete'] = _listCacheDelete; +ListCache.prototype.get = _listCacheGet; +ListCache.prototype.has = _listCacheHas; +ListCache.prototype.set = _listCacheSet; + +/* harmony default export */ const _ListCache = (ListCache); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js + + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new _ListCache; + this.size = 0; +} + +/* harmony default export */ const _stackClear = (stackClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/* harmony default export */ const _stackDelete = (stackDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/* harmony default export */ const _stackGet = (stackGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/* harmony default export */ const _stackHas = (stackHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Map.js + + + +/* Built-in method references that are verified to be native. */ +var _Map_Map = _getNative(_root, 'Map'); + +/* harmony default export */ const _Map = (_Map_Map); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeCreate.js + + +/* Built-in method references that are verified to be native. */ +var nativeCreate = _getNative(Object, 'create'); + +/* harmony default export */ const _nativeCreate = (nativeCreate); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashClear.js + + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; + this.size = 0; +} + +/* harmony default export */ const _hashClear = (hashClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashDelete.js +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +/* harmony default export */ const _hashDelete = (hashDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashGet.js + + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var _hashGet_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _hashGet_hasOwnProperty = _hashGet_objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (_nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return _hashGet_hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/* harmony default export */ const _hashGet = (hashGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashHas.js + + +/** Used for built-in method references. */ +var _hashHas_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _hashHas_hasOwnProperty = _hashHas_objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return _nativeCreate ? (data[key] !== undefined) : _hashHas_hasOwnProperty.call(data, key); +} + +/* harmony default export */ const _hashHas = (hashHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashSet.js + + +/** Used to stand-in for `undefined` hash values. */ +var _hashSet_HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (_nativeCreate && value === undefined) ? _hashSet_HASH_UNDEFINED : value; + return this; +} + +/* harmony default export */ const _hashSet = (hashSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Hash.js + + + + + + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = _hashClear; +Hash.prototype['delete'] = _hashDelete; +Hash.prototype.get = _hashGet; +Hash.prototype.has = _hashHas; +Hash.prototype.set = _hashSet; + +/* harmony default export */ const _Hash = (Hash); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheClear.js + + + + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new _Hash, + 'map': new (_Map || _ListCache), + 'string': new _Hash + }; +} + +/* harmony default export */ const _mapCacheClear = (mapCacheClear); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isKeyable.js +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/* harmony default export */ const _isKeyable = (isKeyable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMapData.js + + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return _isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/* harmony default export */ const _getMapData = (getMapData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheDelete.js + + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = _getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +/* harmony default export */ const _mapCacheDelete = (mapCacheDelete); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheGet.js + + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return _getMapData(this, key).get(key); +} + +/* harmony default export */ const _mapCacheGet = (mapCacheGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheHas.js + + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return _getMapData(this, key).has(key); +} + +/* harmony default export */ const _mapCacheHas = (mapCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheSet.js + + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = _getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +/* harmony default export */ const _mapCacheSet = (mapCacheSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_MapCache.js + + + + + + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = _mapCacheClear; +MapCache.prototype['delete'] = _mapCacheDelete; +MapCache.prototype.get = _mapCacheGet; +MapCache.prototype.has = _mapCacheHas; +MapCache.prototype.set = _mapCacheSet; + +/* harmony default export */ const _MapCache = (MapCache); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof _ListCache) { + var pairs = data.__data__; + if (!_Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new _MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/* harmony default export */ const _stackSet = (stackSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js + + + + + + + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new _ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = _stackClear; +Stack.prototype['delete'] = _stackDelete; +Stack.prototype.get = _stackGet; +Stack.prototype.has = _stackHas; +Stack.prototype.set = _stackSet; + +/* harmony default export */ const _Stack = (Stack); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js /** Used to stand-in for `undefined` hash values. */ var _setCacheAdd_HASH_UNDEFINED = '__lodash_hash_undefined__'; @@ -15493,6 +12707,14 @@ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { /* harmony default export */ const _equalArrays = (equalArrays); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Uint8Array.js + + +/** Built-in value references. */ +var _Uint8Array_Uint8Array = _root.Uint8Array; + +/* harmony default export */ const _Uint8Array = (_Uint8Array_Uint8Array); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js /** * Converts `map` to its key-value pairs. @@ -15554,14 +12776,14 @@ var _equalByTag_boolTag = '[object Boolean]', _equalByTag_regexpTag = '[object RegExp]', _equalByTag_setTag = '[object Set]', _equalByTag_stringTag = '[object String]', - _equalByTag_symbolTag = '[object Symbol]'; + symbolTag = '[object Symbol]'; var _equalByTag_arrayBufferTag = '[object ArrayBuffer]', _equalByTag_dataViewTag = '[object DataView]'; /** Used to convert symbols to primitives and strings. */ -var _equalByTag_symbolProto = _Symbol ? _Symbol.prototype : undefined, - _equalByTag_symbolValueOf = _equalByTag_symbolProto ? _equalByTag_symbolProto.valueOf : undefined; +var symbolProto = _Symbol ? _Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; /** * A specialized version of `baseIsEqualDeep` for comparing objects of @@ -15637,9 +12859,9 @@ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { stack['delete'](object); return result; - case _equalByTag_symbolTag: - if (_equalByTag_symbolValueOf) { - return _equalByTag_symbolValueOf.call(object) == _equalByTag_symbolValueOf.call(other); + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; @@ -15647,6 +12869,231 @@ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { /* harmony default export */ const _equalByTag = (equalByTag); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayPush.js +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const _arrayPush = (arrayPush); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return lodash_es_isArray(object) ? result : _arrayPush(result, symbolsFunc(object)); +} + +/* harmony default export */ const _baseGetAllKeys = (baseGetAllKeys); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayFilter.js +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const _arrayFilter = (arrayFilter); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/stubArray.js +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const lodash_es_stubArray = (stubArray); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbols.js + + + +/** Used for built-in method references. */ +var _getSymbols_objectProto = Object.prototype; + +/** Built-in value references. */ +var _getSymbols_propertyIsEnumerable = _getSymbols_objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? lodash_es_stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return _arrayFilter(nativeGetSymbols(object), function(symbol) { + return _getSymbols_propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const _getSymbols = (getSymbols); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeys.js + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = _overArg(Object.keys, Object); + +/* harmony default export */ const _nativeKeys = (nativeKeys); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeys.js + + + +/** Used for built-in method references. */ +var _baseKeys_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseKeys_hasOwnProperty = _baseKeys_objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!_isPrototype(object)) { + return _nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (_baseKeys_hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/* harmony default export */ const _baseKeys = (baseKeys); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/keys.js + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return lodash_es_isArrayLike(object) ? _arrayLikeKeys(object) : _baseKeys(object); +} + +/* harmony default export */ const lodash_es_keys = (keys); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeys.js + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return _baseGetAllKeys(object, lodash_es_keys, _getSymbols); +} + +/* harmony default export */ const _getAllKeys = (getAllKeys); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js @@ -15739,6 +13186,102 @@ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { /* harmony default export */ const _equalObjects = (equalObjects); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_DataView.js + + + +/* Built-in method references that are verified to be native. */ +var DataView = _getNative(_root, 'DataView'); + +/* harmony default export */ const _DataView = (DataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Promise.js + + + +/* Built-in method references that are verified to be native. */ +var _Promise_Promise = _getNative(_root, 'Promise'); + +/* harmony default export */ const _Promise = (_Promise_Promise); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_Set.js + + + +/* Built-in method references that are verified to be native. */ +var _Set_Set = _getNative(_root, 'Set'); + +/* harmony default export */ const _Set = (_Set_Set); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_WeakMap.js + + + +/* Built-in method references that are verified to be native. */ +var _WeakMap_WeakMap = _getNative(_root, 'WeakMap'); + +/* harmony default export */ const _WeakMap = (_WeakMap_WeakMap); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getTag.js + + + + + + + + +/** `Object#toString` result references. */ +var _getTag_mapTag = '[object Map]', + _getTag_objectTag = '[object Object]', + promiseTag = '[object Promise]', + _getTag_setTag = '[object Set]', + _getTag_weakMapTag = '[object WeakMap]'; + +var _getTag_dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = _toSource(_DataView), + mapCtorString = _toSource(_Map), + promiseCtorString = _toSource(_Promise), + setCtorString = _toSource(_Set), + weakMapCtorString = _toSource(_WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = _baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != _getTag_dataViewTag) || + (_Map && getTag(new _Map) != _getTag_mapTag) || + (_Promise && getTag(_Promise.resolve()) != promiseTag) || + (_Set && getTag(new _Set) != _getTag_setTag) || + (_WeakMap && getTag(new _WeakMap) != _getTag_weakMapTag)) { + getTag = function(value) { + var result = _baseGetTag(value), + Ctor = result == _getTag_objectTag ? value.constructor : undefined, + ctorString = Ctor ? _toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return _getTag_dataViewTag; + case mapCtorString: return _getTag_mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return _getTag_setTag; + case weakMapCtorString: return _getTag_weakMapTag; + } + } + return result; + }; +} + +/* harmony default export */ const _getTag = (getTag); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js @@ -16007,6 +13550,37 @@ function baseMatches(source) { /* harmony default export */ const _baseMatches = (baseMatches); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSymbol.js + + + +/** `Object#toString` result references. */ +var isSymbol_symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (lodash_es_isObjectLike(value) && _baseGetTag(value) == isSymbol_symbolTag); +} + +/* harmony default export */ const lodash_es_isSymbol = (isSymbol); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/_isKey.js @@ -16042,7 +13616,7 @@ function isKey(value, object) { /** Error message constants. */ -var memoize_FUNC_ERROR_TEXT = 'Expected a function'; +var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is @@ -16090,7 +13664,7 @@ var memoize_FUNC_ERROR_TEXT = 'Expected a function'; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(memoize_FUNC_ERROR_TEXT); + throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, @@ -16597,6 +14171,51 @@ function baseIteratee(value) { /* harmony default export */ const _baseIteratee = (baseIteratee); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/* harmony default export */ const _createBaseFor = (createBaseFor); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js + + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = _createBaseFor(); + +/* harmony default export */ const _baseFor = (baseFor); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseForOwn.js @@ -16821,6 +14440,114 @@ function isEmpty(value) { /* harmony default export */ const lodash_es_isEmpty = (isEmpty); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (lodash_es_isSymbol(value)) { + return NAN; + } + if (lodash_es_isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = lodash_es_isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js @@ -17354,6 +15081,57 @@ Listening.prototype.cleanup = function () { Events.bind = Events.on; Events.unbind = Events.off; +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && _copyObject(source, lodash_es_keys(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js + + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!lodash_es_isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/* harmony default export */ const _baseCreate = (baseCreate); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/create.js @@ -18097,12 +15875,4450 @@ Object.assign(Router.prototype, Events, { * @namespace _converse */ class TimeoutError extends Error {} -// EXTERNAL MODULE: ./node_modules/xss/dist/xss.js -var xss = __webpack_require__(6632); -;// CONCATENATED MODULE: ./src/headless/shared/utils.js +;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !lodash_es_eq(object[key], value)) || + (value === undefined && !(key in object))) { + _baseAssignValue(object, key, value); + } +} + +/* harmony default export */ const _assignMergeValue = (assignMergeValue); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneBuffer.js + + +/** Detect free variable `exports`. */ +var _cloneBuffer_freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var _cloneBuffer_freeModule = _cloneBuffer_freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var _cloneBuffer_moduleExports = _cloneBuffer_freeModule && _cloneBuffer_freeModule.exports === _cloneBuffer_freeExports; + +/** Built-in value references. */ +var _cloneBuffer_Buffer = _cloneBuffer_moduleExports ? _root.Buffer : undefined, + allocUnsafe = _cloneBuffer_Buffer ? _cloneBuffer_Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +/* harmony default export */ const _cloneBuffer = (cloneBuffer); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js + + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new _Uint8Array(result).set(new _Uint8Array(arrayBuffer)); + return result; +} + +/* harmony default export */ const _cloneArrayBuffer = (cloneArrayBuffer); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneTypedArray.js + + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? _cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +/* harmony default export */ const _cloneTypedArray = (cloneTypedArray); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copyArray.js +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/* harmony default export */ const _copyArray = (copyArray); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js + + + + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !_isPrototype(object)) + ? _baseCreate(_getPrototype(object)) + : {}; +} + +/* harmony default export */ const _initCloneObject = (initCloneObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isArrayLikeObject.js + + + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return lodash_es_isObjectLike(value) && lodash_es_isArrayLike(value); +} + +/* harmony default export */ const lodash_es_isArrayLikeObject = (isArrayLikeObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; +} + +/* harmony default export */ const _safeGet = (safeGet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js + + + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return _copyObject(value, lodash_es_keysIn(value)); +} + +/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js + + + + + + + + + + + + + + + + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = _safeGet(object, key), + srcValue = _safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + _assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = lodash_es_isArray(srcValue), + isBuff = !isArr && lodash_es_isBuffer(srcValue), + isTyped = !isArr && !isBuff && lodash_es_isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (lodash_es_isArray(objValue)) { + newValue = objValue; + } + else if (lodash_es_isArrayLikeObject(objValue)) { + newValue = _copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = _cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = _cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (lodash_es_isPlainObject(srcValue) || lodash_es_isArguments(srcValue)) { + newValue = objValue; + if (lodash_es_isArguments(objValue)) { + newValue = lodash_es_toPlainObject(objValue); + } + else if (!lodash_es_isObject(objValue) || lodash_es_isFunction(objValue)) { + newValue = _initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + _assignMergeValue(object, key, newValue); +} + +/* harmony default export */ const _baseMergeDeep = (baseMergeDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js + + + + + + + + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + _baseFor(source, function(srcValue, key) { + stack || (stack = new _Stack); + if (lodash_es_isObject(srcValue)) { + _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + _assignMergeValue(object, key, newValue); + } + }, lodash_es_keysIn); +} + +/* harmony default export */ const _baseMerge = (baseMerge); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js + + + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = _createAssigner(function(object, source, srcIndex) { + _baseMerge(object, source, srcIndex); +}); + +/* harmony default export */ const lodash_es_merge = (merge); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/mergeWith.js + + + +/** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ +var mergeWith = _createAssigner(function(object, source, srcIndex, customizer) { + _baseMerge(object, source, srcIndex, customizer); +}); + +/* harmony default export */ const lodash_es_mergeWith = (mergeWith); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/@converse/openpromise/openpromise.js +function getOpenPromise() { + const wrapper = { + isResolved: false, + isPending: true, + isRejected: false + }; + const promise = new Promise((resolve, reject) => { + wrapper.resolve = resolve; + wrapper.reject = reject; + }); + Object.assign(promise, wrapper); + promise.then(function (v) { + promise.isResolved = true; + promise.isPending = false; + promise.isRejected = false; + return v; + }, function (e) { + promise.isResolved = false; + promise.isPending = false; + promise.isRejected = true; + throw e; + }); + return promise; +} +;// CONCATENATED MODULE: ./node_modules/mergebounce/mergebounce.js + + + + + + +/** Error message constants. */ + +const mergebounce_FUNC_ERROR_TEXT = 'Expected a function'; +/* Built-in method references for those with the same name as other `lodash` methods. */ + +const mergebounce_nativeMax = Math.max; +const nativeMin = Math.min; +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * + * This function differs from lodash's debounce by merging all passed objects + * before passing them to the final invoked function. + * + * Because of this, invoking can only happen on the trailing edge, since + * passed-in data would be discarded if invoking happened on the leading edge. + * + * If `wait` is `0`, `func` invocation is deferred until to the next tick, + * similar to `setTimeout` with a timeout of `0`. + * + * @static + * @category Function + * @param {Function} func The function to mergebounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.concatArrays=false] + * By default arrays will be treated as objects when being merged. When + * merging two arrays, the values in the 2nd arrray will replace the + * corresponding values (i.e. those with the same indexes) in the first array. + * When `concatArrays` is set to `true`, arrays will be concatenated instead. + * @param {boolean} [options.dedupeArrays=false] + * This option is similar to `concatArrays`, except that the concatenated + * array will also be deduplicated. Thus any entries that are concatenated to the + * existing array, which are already contained in the existing array, will + * first be removed. + * @param {boolean} [options.promise=false] + * By default, when calling a merge-debounced function that doesn't execute + * immediately, you'll receive the result from its previous execution, or + * `undefined` if it has never executed before. By setting the `promise` + * option to `true`, a promise will be returned instead of the previous + * execution result when the function is debounced. The promise will resolve + * with the result of the next execution, as soon as it happens. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * window.addEventListener('resize', mergebounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * element.addEventListner('click', mergebounce(sendMail, 300)); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * const mergebounced = mergebounce(batchLog, 250, { 'maxWait': 1000 }); + * const source = new EventSource('/stream'); + * jQuery(source).on('message', mergebounced); + * + * // Cancel the trailing debounced invocation. + * window.addEventListener('popstate', mergebounced.cancel); + */ + +function mergebounce(func, wait, options = {}) { + let lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + maxing = false; + let promise = options.promise ? getOpenPromise() : null; + + if (typeof func != 'function') { + throw new TypeError(mergebounce_FUNC_ERROR_TEXT); + } + + wait = lodash_es_toNumber(wait) || 0; + + if (lodash_es_isObject(options)) { + maxing = 'maxWait' in options; + maxWait = maxing ? mergebounce_nativeMax(lodash_es_toNumber(options.maxWait) || 0, wait) : maxWait; + } + + function invokeFunc(time) { + const args = lastArgs; + const thisArg = lastThis; + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + + if (options.promise) { + promise.resolve(result); + promise = getOpenPromise(); + } + + return options.promise ? promise : result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; // Start the timer for the trailing edge. + + timerId = setTimeout(timerExpired, wait); + return options.promise ? promise : result; + } + + function remainingWait(time) { + const timeSinceLastCall = time - lastCallTime; + const timeSinceLastInvoke = time - lastInvokeTime; + const timeWaiting = wait - timeSinceLastCall; + return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; + } + + function shouldInvoke(time) { + const timeSinceLastCall = time - lastCallTime; + const timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + + return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; + } + + function timerExpired() { + const time = lodash_es_now(); + + if (shouldInvoke(time)) { + return trailingEdge(time); + } // Restart the timer. + + + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + + if (lastArgs) { + return invokeFunc(time); + } + + lastArgs = lastThis = undefined; + return options.promise ? promise : result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(lodash_es_now()); + } + + function concatArrays(objValue, srcValue) { + if (Array.isArray(objValue) && Array.isArray(srcValue)) { + if (options !== null && options !== void 0 && options.dedupeArrays) { + return objValue.concat(srcValue.filter(i => objValue.indexOf(i) === -1)); + } else { + return objValue.concat(srcValue); + } + } + } + + function mergeArguments(args) { + var _lastArgs; + + if ((_lastArgs = lastArgs) !== null && _lastArgs !== void 0 && _lastArgs.length) { + if (!args.length) { + return lastArgs; + } + + if (options !== null && options !== void 0 && options.concatArrays || options !== null && options !== void 0 && options.dedupeArrays) { + return lodash_es_mergeWith(lastArgs, args, concatArrays); + } else { + return lodash_es_merge(lastArgs, args); + } + } else { + return args || []; + } + } + + function debounced() { + const time = lodash_es_now(); + const isInvoking = shouldInvoke(time); + lastArgs = mergeArguments(Array.from(arguments)); + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + + return options.promise ? promise : result; + } + + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +/* harmony default export */ const mergebounce_mergebounce = (mergebounce); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/idb.js +function getIDB() { + /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */ + try { + if (typeof indexedDB !== 'undefined') { + return indexedDB; + } + + if (typeof webkitIndexedDB !== 'undefined') { + return webkitIndexedDB; + } + + if (typeof mozIndexedDB !== 'undefined') { + return mozIndexedDB; + } + + if (typeof OIndexedDB !== 'undefined') { + return OIndexedDB; + } + + if (typeof msIndexedDB !== 'undefined') { + return msIndexedDB; + } + } catch (e) { + return; + } +} + +var idb = getIDB(); +/* harmony default export */ const utils_idb = (idb); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/isIndexedDBValid.js + + +function isIndexedDBValid() { + try { + // Initialize IndexedDB; fall back to vendor-prefixed versions + // if needed. + if (!utils_idb || !utils_idb.open) { + return false; + } // We mimic PouchDB here; + // + // We test for openDatabase because IE Mobile identifies itself + // as Safari. Oh the lulz... + + + var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform); + var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1; // Safari <10.1 does not meet our requirements for IDB support + // (see: https://github.com/pouchdb/pouchdb/issues/5572). + // Safari 10.1 shipped with fetch, we can use that to detect it. + // Note: this creates issues with `window.fetch` polyfills and + // overrides; see: + // https://github.com/localForage/localForage/issues/856 + + return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' && // some outdated implementations of IDB that appear on Samsung + // and HTC Android devices <4.4 are missing IDBKeyRange + // See: https://github.com/mozilla/localForage/issues/128 + // See: https://github.com/mozilla/localForage/issues/272 + typeof IDBKeyRange !== 'undefined'; + } catch (e) { + return false; + } +} + +/* harmony default export */ const utils_isIndexedDBValid = (isIndexedDBValid); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/createBlob.js +// Abstracts constructing a Blob object, so it also works in older +// browsers that don't support the native Blob constructor. (i.e. +// old QtWebKit versions, at least). +// Abstracts constructing a Blob object, so it also works in older +// browsers that don't support the native Blob constructor. (i.e. +// old QtWebKit versions, at least). +function createBlob(parts, properties) { + /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */ + parts = parts || []; + properties = properties || {}; + + try { + return new Blob(parts, properties); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + + var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder; + var builder = new Builder(); + + for (var i = 0; i < parts.length; i += 1) { + builder.append(parts[i]); + } + + return builder.getBlob(properties.type); + } +} + +/* harmony default export */ const utils_createBlob = (createBlob); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/promise.js +// This is CommonJS because lie is an external dependency, so Rollup +// can just ignore it. +if (typeof Promise === 'undefined') { + // In the "nopromises" build this will just throw if you don't have + // a global promise object, but it would throw anyway later. + __webpack_require__(9236); +} + +/* harmony default export */ const utils_promise = (Promise); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/executeCallback.js +function executeCallback(promise, callback) { + if (callback) { + promise.then(function (result) { + callback(null, result); + }, function (error) { + callback(error); + }); + } +} + +/* harmony default export */ const utils_executeCallback = (executeCallback); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/executeTwoCallbacks.js +function executeTwoCallbacks(promise, callback, errorCallback) { + if (typeof callback === 'function') { + promise.then(callback); + } + + if (typeof errorCallback === 'function') { + promise.catch(errorCallback); + } +} + +/* harmony default export */ const utils_executeTwoCallbacks = (executeTwoCallbacks); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/normalizeKey.js +function normalizeKey(key) { + // Cast the key to a string, as that's all we can set as a key. + if (typeof key !== 'string') { + console.warn(`${key} used as a key, but it is not a string.`); + key = String(key); + } + + return key; +} +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/getCallback.js +function getCallback() { + if (arguments.length && typeof arguments[arguments.length - 1] === 'function') { + return arguments[arguments.length - 1]; + } +} +;// CONCATENATED MODULE: ./node_modules/localforage/src/drivers/indexeddb.js + + + + + + + + // Some code originally from async_storage.js in +// [Gaia](https://github.com/mozilla-b2g/gaia). + +const DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support'; +let supportsBlobs; +const dbContexts = {}; +const indexeddb_toString = Object.prototype.toString; // Transaction Modes + +const READ_ONLY = 'readonly'; +const READ_WRITE = 'readwrite'; // Transform a binary string to an array buffer, because otherwise +// weird stuff happens when you try to work with the binary string directly. +// It is known. +// From http://stackoverflow.com/questions/14967647/ (continues on next line) +// encode-decode-image-with-base64-breaks-image (2013-04-21) + +function _binStringToArrayBuffer(bin) { + var length = bin.length; + var buf = new ArrayBuffer(length); + var arr = new Uint8Array(buf); + + for (var i = 0; i < length; i++) { + arr[i] = bin.charCodeAt(i); + } + + return buf; +} // +// Blobs are not supported in all versions of IndexedDB, notably +// Chrome <37 and Android <5. In those versions, storing a blob will throw. +// +// Various other blob bugs exist in Chrome v37-42 (inclusive). +// Detecting them is expensive and confusing to users, and Chrome 37-42 +// is at very low usage worldwide, so we do a hacky userAgent check instead. +// +// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120 +// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916 +// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836 +// +// Code borrowed from PouchDB. See: +// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js +// + + +function _checkBlobSupportWithoutCaching(idb) { + return new utils_promise(function (resolve) { + var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE); + var blob = utils_createBlob(['']); + txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key'); + + txn.onabort = function (e) { + // If the transaction aborts now its due to not being able to + // write to the database, likely due to the disk being full + e.preventDefault(); + e.stopPropagation(); + resolve(false); + }; + + txn.oncomplete = function () { + var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/); + var matchedEdge = navigator.userAgent.match(/Edge\//); // MS Edge pretends to be Chrome 42: + // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx + + resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43); + }; + }).catch(function () { + return false; // error, so assume unsupported + }); +} + +function _checkBlobSupport(idb) { + if (typeof supportsBlobs === 'boolean') { + return utils_promise.resolve(supportsBlobs); + } + + return _checkBlobSupportWithoutCaching(idb).then(function (value) { + supportsBlobs = value; + return supportsBlobs; + }); +} + +function _deferReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; // Create a deferred object representing the current database operation. + + var deferredOperation = {}; + deferredOperation.promise = new utils_promise(function (resolve, reject) { + deferredOperation.resolve = resolve; + deferredOperation.reject = reject; + }); // Enqueue the deferred operation. + + dbContext.deferredOperations.push(deferredOperation); // Chain its promise to the database readiness. + + if (!dbContext.dbReady) { + dbContext.dbReady = deferredOperation.promise; + } else { + dbContext.dbReady = dbContext.dbReady.then(function () { + return deferredOperation.promise; + }); + } +} + +function _advanceReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; // Dequeue a deferred operation. + + var deferredOperation = dbContext.deferredOperations.pop(); // Resolve its promise (which is part of the database readiness + // chain of promises). + + if (deferredOperation) { + deferredOperation.resolve(); + return deferredOperation.promise; + } +} + +function _rejectReadiness(dbInfo, err) { + var dbContext = dbContexts[dbInfo.name]; // Dequeue a deferred operation. + + var deferredOperation = dbContext.deferredOperations.pop(); // Reject its promise (which is part of the database readiness + // chain of promises). + + if (deferredOperation) { + deferredOperation.reject(err); + return deferredOperation.promise; + } +} + +function _getConnection(dbInfo, upgradeNeeded) { + return new utils_promise(function (resolve, reject) { + dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext(); + + if (dbInfo.db) { + if (upgradeNeeded) { + _deferReadiness(dbInfo); + + dbInfo.db.close(); + } else { + return resolve(dbInfo.db); + } + } + + var dbArgs = [dbInfo.name]; + + if (upgradeNeeded) { + dbArgs.push(dbInfo.version); + } + + var openreq = utils_idb.open.apply(utils_idb, dbArgs); + + if (upgradeNeeded) { + openreq.onupgradeneeded = function (e) { + var db = openreq.result; + + try { + db.createObjectStore(dbInfo.storeName); + + if (e.oldVersion <= 1) { + // Added when support for blob shims was added + db.createObjectStore(DETECT_BLOB_SUPPORT_STORE); + } + } catch (ex) { + if (ex.name === 'ConstraintError') { + console.warn('The database "' + dbInfo.name + '"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage "' + dbInfo.storeName + '" already exists.'); + } else { + throw ex; + } + } + }; + } + + openreq.onerror = function (e) { + e.preventDefault(); + reject(openreq.error); + }; + + openreq.onsuccess = function () { + var db = openreq.result; + + db.onversionchange = function (e) { + // Triggered when the database is modified (e.g. adding an objectStore) or + // deleted (even when initiated by other sessions in different tabs). + // Closing the connection here prevents those operations from being blocked. + // If the database is accessed again later by this instance, the connection + // will be reopened or the database recreated as needed. + e.target.close(); + }; + + resolve(db); + + _advanceReadiness(dbInfo); + }; + }); +} + +function _getOriginalConnection(dbInfo) { + return _getConnection(dbInfo, false); +} + +function _getUpgradedConnection(dbInfo) { + return _getConnection(dbInfo, true); +} + +function _isUpgradeNeeded(dbInfo, defaultVersion) { + if (!dbInfo.db) { + return true; + } + + var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName); + var isDowngrade = dbInfo.version < dbInfo.db.version; + var isUpgrade = dbInfo.version > dbInfo.db.version; + + if (isDowngrade) { + // If the version is not the default one + // then warn for impossible downgrade. + if (dbInfo.version !== defaultVersion) { + console.warn('The database "' + dbInfo.name + '"' + " can't be downgraded from version " + dbInfo.db.version + ' to version ' + dbInfo.version + '.'); + } // Align the versions to prevent errors. + + + dbInfo.version = dbInfo.db.version; + } + + if (isUpgrade || isNewStore) { + // If the store is new then increment the version (if needed). + // This will trigger an "upgradeneeded" event which is required + // for creating a store. + if (isNewStore) { + var incVersion = dbInfo.db.version + 1; + + if (incVersion > dbInfo.version) { + dbInfo.version = incVersion; + } + } + + return true; + } + + return false; +} // encode a blob for indexeddb engines that don't support blobs + + +function _encodeBlob(blob) { + return new utils_promise(function (resolve, reject) { + var reader = new FileReader(); + reader.onerror = reject; + + reader.onloadend = function (e) { + var base64 = btoa(e.target.result || ''); + resolve({ + __local_forage_encoded_blob: true, + data: base64, + type: blob.type + }); + }; + + reader.readAsBinaryString(blob); + }); +} // decode an encoded blob + + +function _decodeBlob(encodedBlob) { + var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data)); + + return utils_createBlob([arrayBuff], { + type: encodedBlob.type + }); +} // is this one of our fancy encoded blobs? + + +function _isEncodedBlob(value) { + return value && value.__local_forage_encoded_blob; +} // Specialize the default `ready()` function by making it dependent +// on the current database operations. Thus, the driver will be actually +// ready when it's been initialized (default) *and* there are no pending +// operations on the database (initiated by some other instances). + + +function _fullyReady(callback) { + var self = this; + + var promise = self._initReady().then(function () { + var dbContext = dbContexts[self._dbInfo.name]; + + if (dbContext && dbContext.dbReady) { + return dbContext.dbReady; + } + }); + + utils_executeTwoCallbacks(promise, callback, callback); + return promise; +} // Try to establish a new db connection to replace the +// current one which is broken (i.e. experiencing +// InvalidStateError while creating a transaction). + + +function _tryReconnect(dbInfo) { + _deferReadiness(dbInfo); + + var dbContext = dbContexts[dbInfo.name]; + var forages = dbContext.forages; + + for (var i = 0; i < forages.length; i++) { + const forage = forages[i]; + + if (forage._dbInfo.db) { + forage._dbInfo.db.close(); + + forage._dbInfo.db = null; + } + } + + dbInfo.db = null; + return _getOriginalConnection(dbInfo).then(db => { + dbInfo.db = db; + + if (_isUpgradeNeeded(dbInfo)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + + return db; + }).then(db => { + // store the latest db reference + // in case the db was upgraded + dbInfo.db = dbContext.db = db; + + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + }).catch(err => { + _rejectReadiness(dbInfo, err); + + throw err; + }); +} // FF doesn't like Promises (micro-tasks) and IDDB store operations, +// so we have to do it with callbacks + + +function createTransaction(dbInfo, mode, callback, retries) { + if (retries === undefined) { + retries = 1; + } + + try { + var tx = dbInfo.db.transaction(dbInfo.storeName, mode); + callback(null, tx); + } catch (err) { + if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) { + return utils_promise.resolve().then(() => { + if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) { + // increase the db version, to create the new ObjectStore + if (dbInfo.db) { + dbInfo.version = dbInfo.db.version + 1; + } // Reopen the database for upgrading. + + + return _getUpgradedConnection(dbInfo); + } + }).then(() => { + return _tryReconnect(dbInfo).then(function () { + createTransaction(dbInfo, mode, callback, retries - 1); + }); + }).catch(callback); + } + + callback(err); + } +} + +function createDbContext() { + return { + // Running localForages sharing a database. + forages: [], + // Shared database. + db: null, + // Database readiness (promise). + dbReady: null, + // Deferred operations on the database. + deferredOperations: [] + }; +} // Open the IndexedDB database (automatically creates one if one didn't +// previously exist), using any options set in the config. + + +function _initStorage(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } // Get the current context of the database; + + + var dbContext = dbContexts[dbInfo.name]; // ...or create a new context. + + if (!dbContext) { + dbContext = createDbContext(); // Register the new context in the global container. + + dbContexts[dbInfo.name] = dbContext; + } // Register itself as a running localForage in the current context. + + + dbContext.forages.push(self); // Replace the default `ready()` function with the specialized one. + + if (!self._initReady) { + self._initReady = self.ready; + self.ready = _fullyReady; + } // Create an array of initialization states of the related localForages. + + + var initPromises = []; + + function ignoreErrors() { + // Don't handle errors here, + // just makes sure related localForages aren't pending. + return utils_promise.resolve(); + } + + for (var j = 0; j < dbContext.forages.length; j++) { + var forage = dbContext.forages[j]; + + if (forage !== self) { + // Don't wait for itself... + initPromises.push(forage._initReady().catch(ignoreErrors)); + } + } // Take a snapshot of the related localForages. + + + var forages = dbContext.forages.slice(0); // Initialize the connection process only when + // all the related localForages aren't pending. + + return utils_promise.all(initPromises).then(function () { + dbInfo.db = dbContext.db; // Get the connection or open a new one without upgrade. + + return _getOriginalConnection(dbInfo); + }).then(function (db) { + dbInfo.db = db; + + if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + + return db; + }).then(function (db) { + dbInfo.db = dbContext.db = db; + self._dbInfo = dbInfo; // Share the final connection amongst related localForages. + + for (var k = 0; k < forages.length; k++) { + var forage = forages[k]; + + if (forage !== self) { + // Self is already up-to-date. + forage._dbInfo.db = dbInfo.db; + forage._dbInfo.version = dbInfo.version; + } + } + }); +} + +function getItem(key, callback) { + var self = this; + key = normalizeKey(key); + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.get(key); + + req.onsuccess = function () { + var value = req.result; + + if (value === undefined) { + value = null; + } + + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + + resolve(value); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} // Iterate over all items stored in database. + + +function iterate(iterator, callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openCursor(); + var iterationNumber = 1; + + req.onsuccess = function () { + var cursor = req.result; + + if (cursor) { + var value = cursor.value; + + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + + var result = iterator(value, cursor.key, iterationNumber++); // when the iterator callback returns any + // (non-`undefined`) value, then we stop + // the iteration immediately + + if (result !== void 0) { + resolve(result); + } else { + cursor.continue(); + } + } else { + resolve(); + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function setItem(key, value, callback) { + var self = this; + key = normalizeKey(key); + var promise = new utils_promise(function (resolve, reject) { + var dbInfo; + self.ready().then(function () { + dbInfo = self._dbInfo; + + if (indexeddb_toString.call(value) === '[object Blob]') { + return _checkBlobSupport(dbInfo.db).then(function (blobSupport) { + if (blobSupport) { + return value; + } + + return _encodeBlob(value); + }); + } + + return value; + }).then(function (value) { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); // The reason we don't _save_ null is because IE 10 does + // not support saving the `null` type in IndexedDB. How + // ironic, given the bug below! + // See: https://github.com/mozilla/localForage/issues/161 + + if (value === null) { + value = undefined; + } + + var req = store.put(value, key); + + transaction.oncomplete = function () { + // Cast to undefined so the value passed to + // callback/promise is the same as what one would get out + // of `getItem()` later. This leads to some weirdness + // (setItem('foo', undefined) will return `null`), but + // it's not my fault localStorage is our baseline and that + // it's weird. + if (value === undefined) { + value = null; + } + + resolve(value); + }; + + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function removeItem(key, callback) { + var self = this; + key = normalizeKey(key); + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); // We use a Grunt task to make this safe for IE and some + // versions of Android (including those used by Cordova). + // Normally IE won't like `.delete()` and will insist on + // using `['delete']()`, but we have a build step that + // fixes this for us now. + + var req = store.delete(key); + + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onerror = function () { + reject(req.error); + }; // The request will be also be aborted if we've exceeded our storage + // space. + + + transaction.onabort = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function clear(callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.clear(); + + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function indexeddb_length(callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.count(); + + req.onsuccess = function () { + resolve(req.result); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function key(n, callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + if (n < 0) { + resolve(null); + return; + } + + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var advanced = false; + var req = store.openKeyCursor(); + + req.onsuccess = function () { + var cursor = req.result; + + if (!cursor) { + // this means there weren't enough keys + resolve(null); + return; + } + + if (n === 0) { + // We have the first key, return it if that's what they + // wanted. + resolve(cursor.key); + } else { + if (!advanced) { + // Otherwise, ask the cursor to skip ahead n + // records. + advanced = true; + cursor.advance(n); + } else { + // When we get here, we've got the nth key. + resolve(cursor.key); + } + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function indexeddb_keys(callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openKeyCursor(); + var keys = []; + + req.onsuccess = function () { + var cursor = req.result; + + if (!cursor) { + resolve(keys); + return; + } + + keys.push(cursor.key); + cursor.continue(); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function dropInstance(options, callback) { + callback = getCallback.apply(this, arguments); + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + + if (!options.name) { + promise = utils_promise.reject('Invalid arguments'); + } else { + const isCurrentDb = options.name === currentConfig.name && self._dbInfo.db; + const dbPromise = isCurrentDb ? utils_promise.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(db => { + const dbContext = dbContexts[options.name]; + const forages = dbContext.forages; + dbContext.db = db; + + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + + return db; + }); + + if (!options.storeName) { + promise = dbPromise.then(db => { + _deferReadiness(options); + + const dbContext = dbContexts[options.name]; + const forages = dbContext.forages; + db.close(); + + for (var i = 0; i < forages.length; i++) { + const forage = forages[i]; + forage._dbInfo.db = null; + } + + const dropDBPromise = new utils_promise((resolve, reject) => { + var req = utils_idb.deleteDatabase(options.name); + + req.onerror = () => { + const db = req.result; + + if (db) { + db.close(); + } + + reject(req.error); + }; + + req.onblocked = () => { + // Closing all open connections in onversionchange handler should prevent this situation, but if + // we do get here, it just means the request remains pending - eventually it will succeed or error + console.warn('dropInstance blocked for database "' + options.name + '" until all open connections are closed'); + }; + + req.onsuccess = () => { + const db = req.result; + + if (db) { + db.close(); + } + + resolve(db); + }; + }); + return dropDBPromise.then(db => { + dbContext.db = db; + + for (var i = 0; i < forages.length; i++) { + const forage = forages[i]; + + _advanceReadiness(forage._dbInfo); + } + }).catch(err => { + (_rejectReadiness(options, err) || utils_promise.resolve()).catch(() => {}); + throw err; + }); + }); + } else { + promise = dbPromise.then(db => { + if (!db.objectStoreNames.contains(options.storeName)) { + return; + } + + const newVersion = db.version + 1; + + _deferReadiness(options); + + const dbContext = dbContexts[options.name]; + const forages = dbContext.forages; + db.close(); + + for (let i = 0; i < forages.length; i++) { + const forage = forages[i]; + forage._dbInfo.db = null; + forage._dbInfo.version = newVersion; + } + + const dropObjectPromise = new utils_promise((resolve, reject) => { + const req = utils_idb.open(options.name, newVersion); + + req.onerror = err => { + const db = req.result; + db.close(); + reject(err); + }; + + req.onupgradeneeded = () => { + var db = req.result; + db.deleteObjectStore(options.storeName); + }; + + req.onsuccess = () => { + const db = req.result; + db.close(); + resolve(db); + }; + }); + return dropObjectPromise.then(db => { + dbContext.db = db; + + for (let j = 0; j < forages.length; j++) { + const forage = forages[j]; + forage._dbInfo.db = db; + + _advanceReadiness(forage._dbInfo); + } + }).catch(err => { + (_rejectReadiness(options, err) || utils_promise.resolve()).catch(() => {}); + throw err; + }); + }); + } + } + + utils_executeCallback(promise, callback); + return promise; +} + +var asyncStorage = { + _driver: 'asyncStorage', + _initStorage: _initStorage, + _support: utils_isIndexedDBValid(), + iterate: iterate, + getItem: getItem, + setItem: setItem, + removeItem: removeItem, + clear: clear, + length: indexeddb_length, + key: key, + keys: indexeddb_keys, + dropInstance: dropInstance +}; +/* harmony default export */ const indexeddb = (asyncStorage); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/isWebSQLValid.js +function isWebSQLValid() { + return typeof openDatabase === 'function'; +} + +/* harmony default export */ const utils_isWebSQLValid = (isWebSQLValid); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/serializer.js +/* eslint-disable no-bitwise */ + // Sadly, the best way to save binary data in WebSQL/localStorage is serializing +// it to Base64, so this is how we store it to prevent very strange errors with less +// verbose ways of binary <-> string data storage. + +var BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +var BLOB_TYPE_PREFIX = '~~local_forage_type~'; +var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/; +var SERIALIZED_MARKER = '__lfsc__:'; +var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length; // OMG the serializations! + +var TYPE_ARRAYBUFFER = 'arbf'; +var TYPE_BLOB = 'blob'; +var TYPE_INT8ARRAY = 'si08'; +var TYPE_UINT8ARRAY = 'ui08'; +var TYPE_UINT8CLAMPEDARRAY = 'uic8'; +var TYPE_INT16ARRAY = 'si16'; +var TYPE_INT32ARRAY = 'si32'; +var TYPE_UINT16ARRAY = 'ur16'; +var TYPE_UINT32ARRAY = 'ui32'; +var TYPE_FLOAT32ARRAY = 'fl32'; +var TYPE_FLOAT64ARRAY = 'fl64'; +var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length; +var serializer_toString = Object.prototype.toString; + +function stringToBuffer(serializedString) { + // Fill the string into a ArrayBuffer. + var bufferLength = serializedString.length * 0.75; + var len = serializedString.length; + var i; + var p = 0; + var encoded1, encoded2, encoded3, encoded4; + + if (serializedString[serializedString.length - 1] === '=') { + bufferLength--; + + if (serializedString[serializedString.length - 2] === '=') { + bufferLength--; + } + } + + var buffer = new ArrayBuffer(bufferLength); + var bytes = new Uint8Array(buffer); + + for (i = 0; i < len; i += 4) { + encoded1 = BASE_CHARS.indexOf(serializedString[i]); + encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]); + encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]); + encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]); + /*jslint bitwise: true */ + + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + + return buffer; +} // Converts a buffer to a string to store, serialized, in the backend +// storage library. + + +function bufferToString(buffer) { + // base64-arraybuffer + var bytes = new Uint8Array(buffer); + var base64String = ''; + var i; + + for (i = 0; i < bytes.length; i += 3) { + /*jslint bitwise: true */ + base64String += BASE_CHARS[bytes[i] >> 2]; + base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4]; + base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6]; + base64String += BASE_CHARS[bytes[i + 2] & 63]; + } + + if (bytes.length % 3 === 2) { + base64String = base64String.substring(0, base64String.length - 1) + '='; + } else if (bytes.length % 3 === 1) { + base64String = base64String.substring(0, base64String.length - 2) + '=='; + } + + return base64String; +} // Serialize a value, afterwards executing a callback (which usually +// instructs the `setItem()` callback/promise to be executed). This is how +// we store binary data with localStorage. + + +function serialize(value, callback) { + var valueType = ''; + + if (value) { + valueType = serializer_toString.call(value); + } // Cannot use `value instanceof ArrayBuffer` or such here, as these + // checks fail when running the tests using casper.js... + // + // TODO: See why those tests fail and use a better solution. + + + if (value && (valueType === '[object ArrayBuffer]' || value.buffer && serializer_toString.call(value.buffer) === '[object ArrayBuffer]')) { + // Convert binary arrays to a string and prefix the string with + // a special marker. + var buffer; + var marker = SERIALIZED_MARKER; + + if (value instanceof ArrayBuffer) { + buffer = value; + marker += TYPE_ARRAYBUFFER; + } else { + buffer = value.buffer; + + if (valueType === '[object Int8Array]') { + marker += TYPE_INT8ARRAY; + } else if (valueType === '[object Uint8Array]') { + marker += TYPE_UINT8ARRAY; + } else if (valueType === '[object Uint8ClampedArray]') { + marker += TYPE_UINT8CLAMPEDARRAY; + } else if (valueType === '[object Int16Array]') { + marker += TYPE_INT16ARRAY; + } else if (valueType === '[object Uint16Array]') { + marker += TYPE_UINT16ARRAY; + } else if (valueType === '[object Int32Array]') { + marker += TYPE_INT32ARRAY; + } else if (valueType === '[object Uint32Array]') { + marker += TYPE_UINT32ARRAY; + } else if (valueType === '[object Float32Array]') { + marker += TYPE_FLOAT32ARRAY; + } else if (valueType === '[object Float64Array]') { + marker += TYPE_FLOAT64ARRAY; + } else { + callback(new Error('Failed to get type for BinaryArray')); + } + } + + callback(marker + bufferToString(buffer)); + } else if (valueType === '[object Blob]') { + // Conver the blob to a binaryArray and then to a string. + var fileReader = new FileReader(); + + fileReader.onload = function () { + // Backwards-compatible prefix for the blob type. + var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result); + callback(SERIALIZED_MARKER + TYPE_BLOB + str); + }; + + fileReader.readAsArrayBuffer(value); + } else { + try { + callback(JSON.stringify(value)); + } catch (e) { + console.error("Couldn't convert value into a JSON string: ", value); + callback(null, e); + } + } +} // Deserialize data we've inserted into a value column/field. We place +// special markers into our strings to mark them as encoded; this isn't +// as nice as a meta field, but it's the only sane thing we can do whilst +// keeping localStorage support intact. +// +// Oftentimes this will just deserialize JSON content, but if we have a +// special marker (SERIALIZED_MARKER, defined above), we will extract +// some kind of arraybuffer/binary data/typed array out of the string. + + +function deserialize(value) { + // If we haven't marked this string as being specially serialized (i.e. + // something other than serialized JSON), we can just return it and be + // done with it. + if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) { + return JSON.parse(value); + } // The following code deals with deserializing some kind of Blob or + // TypedArray. First we separate out the type of data we're dealing + // with from the data itself. + + + var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH); + var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH); + var blobType; // Backwards-compatible blob type serialization strategy. + // DBs created with older versions of localForage will simply not have the blob type. + + if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) { + var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX); + blobType = matcher[1]; + serializedString = serializedString.substring(matcher[0].length); + } + + var buffer = stringToBuffer(serializedString); // Return the right type based on the code/type set during + // serialization. + + switch (type) { + case TYPE_ARRAYBUFFER: + return buffer; + + case TYPE_BLOB: + return utils_createBlob([buffer], { + type: blobType + }); + + case TYPE_INT8ARRAY: + return new Int8Array(buffer); + + case TYPE_UINT8ARRAY: + return new Uint8Array(buffer); + + case TYPE_UINT8CLAMPEDARRAY: + return new Uint8ClampedArray(buffer); + + case TYPE_INT16ARRAY: + return new Int16Array(buffer); + + case TYPE_UINT16ARRAY: + return new Uint16Array(buffer); + + case TYPE_INT32ARRAY: + return new Int32Array(buffer); + + case TYPE_UINT32ARRAY: + return new Uint32Array(buffer); + + case TYPE_FLOAT32ARRAY: + return new Float32Array(buffer); + + case TYPE_FLOAT64ARRAY: + return new Float64Array(buffer); + + default: + throw new Error('Unkown type: ' + type); + } +} + +var localforageSerializer = { + serialize: serialize, + deserialize: deserialize, + stringToBuffer: stringToBuffer, + bufferToString: bufferToString +}; +/* harmony default export */ const serializer = (localforageSerializer); +;// CONCATENATED MODULE: ./node_modules/localforage/src/drivers/websql.js + + + + + + +/* + * Includes code from: + * + * base64-arraybuffer + * https://github.com/niklasvh/base64-arraybuffer + * + * Copyright (c) 2012 Niklas von Hertzen + * Licensed under the MIT license. + */ + +function createDbTable(t, dbInfo, callback, errorCallback) { + t.executeSql(`CREATE TABLE IF NOT EXISTS ${dbInfo.storeName} ` + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback); +} // Open the WebSQL database (automatically creates one if one didn't +// previously exist), using any options set in the config. + + +function websql_initStorage(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i]; + } + } + + var dbInfoPromise = new utils_promise(function (resolve, reject) { + // Open the database; the openDatabase API will automatically + // create it for us if it doesn't exist. + try { + dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size); + } catch (e) { + return reject(e); + } // Create our key/value table if it doesn't exist. + + + dbInfo.db.transaction(function (t) { + createDbTable(t, dbInfo, function () { + self._dbInfo = dbInfo; + resolve(); + }, function (t, error) { + reject(error); + }); + }, reject); + }); + dbInfo.serializer = serializer; + return dbInfoPromise; +} + +function tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) { + t.executeSql(sqlStatement, args, callback, function (t, error) { + if (error.code === error.SYNTAX_ERR) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name = ?", [dbInfo.storeName], function (t, results) { + if (!results.rows.length) { + // if the table is missing (was deleted) + // re-create it table and retry + createDbTable(t, dbInfo, function () { + t.executeSql(sqlStatement, args, callback, errorCallback); + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); +} + +function websql_getItem(key, callback) { + var self = this; + key = normalizeKey(key); + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, `SELECT * FROM ${dbInfo.storeName} WHERE key = ? LIMIT 1`, [key], function (t, results) { + var result = results.rows.length ? results.rows.item(0).value : null; // Check to see if this is serialized content we need to + // unpack. + + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function websql_iterate(iterator, callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, `SELECT * FROM ${dbInfo.storeName}`, [], function (t, results) { + var rows = results.rows; + var length = rows.length; + + for (var i = 0; i < length; i++) { + var item = rows.item(i); + var result = item.value; // Check to see if this is serialized content + // we need to unpack. + + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + result = iterator(result, item.key, i + 1); // void(0) prevents problems with redefinition + // of `undefined`. + + if (result !== void 0) { + resolve(result); + return; + } + } + + resolve(); + }, function (t, error) { + reject(error); + }); + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function _setItem(key, value, callback, retriesLeft) { + var self = this; + key = normalizeKey(key); + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + // The localStorage API doesn't return undefined values in an + // "expected" way, so undefined is always cast to null in all + // drivers. See: https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } // Save the original value to pass to the callback. + + + var originalValue = value; + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, `INSERT OR REPLACE INTO ${dbInfo.storeName} ` + '(key, value) VALUES (?, ?)', [key, value], function () { + resolve(originalValue); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + // The transaction failed; check + // to see if it's a quota error. + if (sqlError.code === sqlError.QUOTA_ERR) { + // We reject the callback outright for now, but + // it's worth trying to re-run the transaction. + // Even if the user accepts the prompt to use + // more storage on Safari, this error will + // be called. + // + // Try to re-run the transaction. + if (retriesLeft > 0) { + resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1])); + return; + } + + reject(sqlError); + } + }); + } + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function websql_setItem(key, value, callback) { + return _setItem.apply(this, [key, value, callback, 1]); +} + +function websql_removeItem(key, callback) { + var self = this; + key = normalizeKey(key); + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, `DELETE FROM ${dbInfo.storeName} WHERE key = ?`, [key], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} // Deletes every item in the table. +// TODO: Find out if this resets the AUTO_INCREMENT number. + + +function websql_clear(callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, `DELETE FROM ${dbInfo.storeName}`, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} // Does a simple `COUNT(key)` to get the number of items stored in +// localForage. + + +function websql_length(callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + // Ahhh, SQL makes this one soooooo easy. + tryExecuteSql(t, dbInfo, `SELECT COUNT(key) as c FROM ${dbInfo.storeName}`, [], function (t, results) { + var result = results.rows.item(0).c; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} // Return the key located at key index X; essentially gets the key from a +// `WHERE id = ?`. This is the most efficient way I can think to implement +// this rarely-used (in my experience) part of the API, but it can seem +// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so +// the ID of each key will change every time it's updated. Perhaps a stored +// procedure for the `setItem()` SQL would solve this problem? +// TODO: Don't change ID on `setItem()`. + + +function websql_key(n, callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, `SELECT key FROM ${dbInfo.storeName} WHERE id = ? LIMIT 1`, [n + 1], function (t, results) { + var result = results.rows.length ? results.rows.item(0).key : null; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function websql_keys(callback) { + var self = this; + var promise = new utils_promise(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, `SELECT key FROM ${dbInfo.storeName}`, [], function (t, results) { + var keys = []; + + for (var i = 0; i < results.rows.length; i++) { + keys.push(results.rows.item(i).key); + } + + resolve(keys); + }, function (t, error) { + reject(error); + }); + }); + }).catch(reject); + }); + utils_executeCallback(promise, callback); + return promise; +} // https://www.w3.org/TR/webdatabase/#databases +// > There is no way to enumerate or delete the databases available for an origin from this API. + + +function getAllStoreNames(db) { + return new utils_promise(function (resolve, reject) { + db.transaction(function (t) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function (t, results) { + var storeNames = []; + + for (var i = 0; i < results.rows.length; i++) { + storeNames.push(results.rows.item(i).name); + } + + resolve({ + db, + storeNames + }); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); +} + +function websql_dropInstance(options, callback) { + callback = getCallback.apply(this, arguments); + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + + if (!options.name) { + promise = utils_promise.reject('Invalid arguments'); + } else { + promise = new utils_promise(function (resolve) { + var db; + + if (options.name === currentConfig.name) { + // use the db reference of the current instance + db = self._dbInfo.db; + } else { + db = openDatabase(options.name, '', '', 0); + } + + if (!options.storeName) { + // drop all database tables + resolve(getAllStoreNames(db)); + } else { + resolve({ + db, + storeNames: [options.storeName] + }); + } + }).then(function (operationInfo) { + return new utils_promise(function (resolve, reject) { + operationInfo.db.transaction(function (t) { + function dropTable(storeName) { + return new utils_promise(function (resolve, reject) { + t.executeSql(`DROP TABLE IF EXISTS ${storeName}`, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + } + + var operations = []; + + for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) { + operations.push(dropTable(operationInfo.storeNames[i])); + } + + utils_promise.all(operations).then(function () { + resolve(); + }).catch(function (e) { + reject(e); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); + }); + } + + utils_executeCallback(promise, callback); + return promise; +} + +var webSQLStorage = { + _driver: 'webSQLStorage', + _initStorage: websql_initStorage, + _support: utils_isWebSQLValid(), + iterate: websql_iterate, + getItem: websql_getItem, + setItem: websql_setItem, + removeItem: websql_removeItem, + clear: websql_clear, + length: websql_length, + key: websql_key, + keys: websql_keys, + dropInstance: websql_dropInstance +}; +/* harmony default export */ const websql = (webSQLStorage); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/isLocalStorageValid.js +function isLocalStorageValid() { + try { + return typeof localStorage !== 'undefined' && 'setItem' in localStorage && // in IE8 typeof localStorage.setItem === 'object' + !!localStorage.setItem; + } catch (e) { + return false; + } +} + +/* harmony default export */ const utils_isLocalStorageValid = (isLocalStorageValid); +;// CONCATENATED MODULE: ./node_modules/localforage/src/drivers/localstorage.js +// If IndexedDB isn't available, we'll fall back to localStorage. +// Note that this will have considerable performance and storage +// side-effects (all data will be serialized on save and only data that +// can be converted to a string via `JSON.stringify()` will be saved). + + + + + + + +function _getKeyPrefix(options, defaultConfig) { + var keyPrefix = options.name + '/'; + + if (options.storeName !== defaultConfig.storeName) { + keyPrefix += options.storeName + '/'; + } + + return keyPrefix; +} // Check if localStorage throws when saving an item + + +function checkIfLocalStorageThrows() { + var localStorageTestKey = '_localforage_support_test'; + + try { + localStorage.setItem(localStorageTestKey, true); + localStorage.removeItem(localStorageTestKey); + return false; + } catch (e) { + return true; + } +} // Check if localStorage is usable and allows to save an item +// This method checks if localStorage is usable in Safari Private Browsing +// mode, or in any other case where the available quota for localStorage +// is 0 and there wasn't any saved items yet. + + +function _isLocalStorageUsable() { + return !checkIfLocalStorageThrows() || localStorage.length > 0; +} // Config the localStorage backend, using options set in the config. + + +function localstorage_initStorage(options) { + var self = this; + var dbInfo = {}; + + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } + + dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig); + + if (!_isLocalStorageUsable()) { + return utils_promise.reject(); + } + + self._dbInfo = dbInfo; + dbInfo.serializer = serializer; + return utils_promise.resolve(); +} // Remove all keys from the datastore, effectively destroying all data in +// the app's key/value store! + + +function localstorage_clear(callback) { + var self = this; + var promise = self.ready().then(function () { + var keyPrefix = self._dbInfo.keyPrefix; + + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + utils_executeCallback(promise, callback); + return promise; +} // Retrieve an item from the store. Unlike the original async_storage +// library in Gaia, we don't modify return values at all. If a key's value +// is `undefined`, we pass that value to the callback function. + + +function localstorage_getItem(key, callback) { + var self = this; + key = normalizeKey(key); + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result = localStorage.getItem(dbInfo.keyPrefix + key); // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the key + // is likely undefined and we'll pass it straight to the + // callback. + + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + return result; + }); + utils_executeCallback(promise, callback); + return promise; +} // Iterate over all items in the store. + + +function localstorage_iterate(iterator, callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var keyPrefix = dbInfo.keyPrefix; + var keyPrefixLength = keyPrefix.length; + var length = localStorage.length; // We use a dedicated iterator instead of the `i` variable below + // so other keys we fetch in localStorage aren't counted in + // the `iterationNumber` argument passed to the `iterate()` + // callback. + // + // See: github.com/mozilla/localForage/pull/435#discussion_r38061530 + + var iterationNumber = 1; + + for (var i = 0; i < length; i++) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) !== 0) { + continue; + } + + var value = localStorage.getItem(key); // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the + // key is likely undefined and we'll pass it straight + // to the iterator. + + if (value) { + value = dbInfo.serializer.deserialize(value); + } + + value = iterator(value, key.substring(keyPrefixLength), iterationNumber++); + + if (value !== void 0) { + return value; + } + } + }); + utils_executeCallback(promise, callback); + return promise; +} // Same as localStorage's key() method, except takes a callback. + + +function localstorage_key(n, callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result; + + try { + result = localStorage.key(n); + } catch (error) { + result = null; + } // Remove the prefix from the key, if a key is found. + + + if (result) { + result = result.substring(dbInfo.keyPrefix.length); + } + + return result; + }); + utils_executeCallback(promise, callback); + return promise; +} + +function localstorage_keys(callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var length = localStorage.length; + var keys = []; + + for (var i = 0; i < length; i++) { + var itemKey = localStorage.key(i); + + if (itemKey.indexOf(dbInfo.keyPrefix) === 0) { + keys.push(itemKey.substring(dbInfo.keyPrefix.length)); + } + } + + return keys; + }); + utils_executeCallback(promise, callback); + return promise; +} // Supply the number of keys in the datastore to the callback function. + + +function localstorage_length(callback) { + var self = this; + var promise = self.keys().then(function (keys) { + return keys.length; + }); + utils_executeCallback(promise, callback); + return promise; +} // Remove an item from the store, nice and simple. + + +function localstorage_removeItem(key, callback) { + var self = this; + key = normalizeKey(key); + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + localStorage.removeItem(dbInfo.keyPrefix + key); + }); + utils_executeCallback(promise, callback); + return promise; +} // Set a key's value and run an optional callback once the value is set. +// Unlike Gaia's implementation, the callback function is passed the value, +// in case you want to operate on that value only after you're sure it +// saved, or something like that. + + +function localstorage_setItem(key, value, callback) { + var self = this; + key = normalizeKey(key); + var promise = self.ready().then(function () { + // Convert undefined values to null. + // https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } // Save the original value to pass to the callback. + + + var originalValue = value; + return new utils_promise(function (resolve, reject) { + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + try { + localStorage.setItem(dbInfo.keyPrefix + key, value); + resolve(originalValue); + } catch (e) { + // localStorage capacity exceeded. + // TODO: Make this a specific error/event. + if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { + reject(e); + } + + reject(e); + } + } + }); + }); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function localstorage_dropInstance(options, callback) { + callback = getCallback.apply(this, arguments); + options = typeof options !== 'function' && options || {}; + + if (!options.name) { + var currentConfig = this.config(); + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + + if (!options.name) { + promise = utils_promise.reject('Invalid arguments'); + } else { + promise = new utils_promise(function (resolve) { + if (!options.storeName) { + resolve(`${options.name}/`); + } else { + resolve(_getKeyPrefix(options, self._defaultConfig)); + } + }).then(function (keyPrefix) { + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + } + + utils_executeCallback(promise, callback); + return promise; +} + +var localStorageWrapper = { + _driver: 'localStorageWrapper', + _initStorage: localstorage_initStorage, + _support: utils_isLocalStorageValid(), + iterate: localstorage_iterate, + getItem: localstorage_getItem, + setItem: localstorage_setItem, + removeItem: localstorage_removeItem, + clear: localstorage_clear, + length: localstorage_length, + key: localstorage_key, + keys: localstorage_keys, + dropInstance: localstorage_dropInstance +}; +/* harmony default export */ const localstorage = (localStorageWrapper); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/includes.js +const sameValue = (x, y) => x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y); + +const includes = (array, searchElement) => { + const len = array.length; + let i = 0; + + while (i < len) { + if (sameValue(array[i], searchElement)) { + return true; + } + + i++; + } + + return false; +}; + +/* harmony default export */ const utils_includes = (includes); +;// CONCATENATED MODULE: ./node_modules/localforage/src/utils/isArray.js +const isArray_isArray = Array.isArray || function (arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; +}; + +/* harmony default export */ const utils_isArray = (isArray_isArray); +;// CONCATENATED MODULE: ./node_modules/localforage/src/localforage.js + + + + + + + + + // Drivers are stored here when `defineDriver()` is called. +// They are shared across all instances of localForage. + +const DefinedDrivers = {}; +const DriverSupport = {}; +const DefaultDrivers = { + INDEXEDDB: indexeddb, + WEBSQL: websql, + LOCALSTORAGE: localstorage +}; +const DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver]; +const OptionalDriverMethods = ['dropInstance']; +const LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods); +const DefaultConfig = { + description: '', + driver: DefaultDriverOrder.slice(), + name: 'localforage', + // Default DB size is _JUST UNDER_ 5MB, as it's the highest size + // we can use without a prompt. + size: 4980736, + storeName: 'keyvaluepairs', + version: 1.0 +}; + +function callWhenReady(localForageInstance, libraryMethod) { + localForageInstance[libraryMethod] = function () { + const _args = arguments; + return localForageInstance.ready().then(function () { + return localForageInstance[libraryMethod].apply(localForageInstance, _args); + }); + }; +} + +function extend() { + for (let i = 1; i < arguments.length; i++) { + const arg = arguments[i]; + + if (arg) { + for (let key in arg) { + if (arg.hasOwnProperty(key)) { + if (utils_isArray(arg[key])) { + arguments[0][key] = arg[key].slice(); + } else { + arguments[0][key] = arg[key]; + } + } + } + } + } + + return arguments[0]; +} + +class LocalForage { + constructor(options) { + for (let driverTypeKey in DefaultDrivers) { + if (DefaultDrivers.hasOwnProperty(driverTypeKey)) { + const driver = DefaultDrivers[driverTypeKey]; + const driverName = driver._driver; + this[driverTypeKey] = driverName; + + if (!DefinedDrivers[driverName]) { + // we don't need to wait for the promise, + // since the default drivers can be defined + // in a blocking manner + this.defineDriver(driver); + } + } + } + + this._defaultConfig = extend({}, DefaultConfig); + this._config = extend({}, this._defaultConfig, options); + this._driverSet = null; + this._initDriver = null; + this._ready = false; + this._dbInfo = null; + + this._wrapLibraryMethodsWithReady(); + + this.setDriver(this._config.driver).catch(() => {}); + } // Set any config values for localForage; can be called anytime before + // the first API call (e.g. `getItem`, `setItem`). + // We loop through options so we don't overwrite existing config + // values. + + + config(options) { + // If the options argument is an object, we use it to set values. + // Otherwise, we return either a specified config value or all + // config values. + if (typeof options === 'object') { + // If localforage is ready and fully initialized, we can't set + // any new configuration values. Instead, we return an error. + if (this._ready) { + return new Error("Can't call config() after localforage " + 'has been used.'); + } + + for (let i in options) { + if (i === 'storeName') { + options[i] = options[i].replace(/\W/g, '_'); + } + + if (i === 'version' && typeof options[i] !== 'number') { + return new Error('Database version must be a number.'); + } + + this._config[i] = options[i]; + } // after all config options are set and + // the driver option is used, try setting it + + + if ('driver' in options && options.driver) { + return this.setDriver(this._config.driver); + } + + return true; + } else if (typeof options === 'string') { + return this._config[options]; + } else { + return this._config; + } + } // Used to define a custom driver, shared across all instances of + // localForage. + + + defineDriver(driverObject, callback, errorCallback) { + const promise = new utils_promise(function (resolve, reject) { + try { + const driverName = driverObject._driver; + const complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver'); // A driver name should be defined and not overlap with the + // library-defined, default drivers. + + if (!driverObject._driver) { + reject(complianceError); + return; + } + + const driverMethods = LibraryMethods.concat('_initStorage'); + + for (let i = 0, len = driverMethods.length; i < len; i++) { + const driverMethodName = driverMethods[i]; // when the property is there, + // it should be a method even when optional + + const isRequired = !utils_includes(OptionalDriverMethods, driverMethodName); + + if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') { + reject(complianceError); + return; + } + } + + const configureMissingMethods = function () { + const methodNotImplementedFactory = function (methodName) { + return function () { + const error = new Error(`Method ${methodName} is not implemented by the current driver`); + const promise = utils_promise.reject(error); + utils_executeCallback(promise, arguments[arguments.length - 1]); + return promise; + }; + }; + + for (let i = 0, len = OptionalDriverMethods.length; i < len; i++) { + const optionalDriverMethod = OptionalDriverMethods[i]; + + if (!driverObject[optionalDriverMethod]) { + driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod); + } + } + }; + + configureMissingMethods(); + + const setDriverSupport = function (support) { + if (DefinedDrivers[driverName]) { + console.info(`Redefining LocalForage driver: ${driverName}`); + } + + DefinedDrivers[driverName] = driverObject; + DriverSupport[driverName] = support; // don't use a then, so that we can define + // drivers that have simple _support methods + // in a blocking manner + + resolve(); + }; + + if ('_support' in driverObject) { + if (driverObject._support && typeof driverObject._support === 'function') { + driverObject._support().then(setDriverSupport, reject); + } else { + setDriverSupport(!!driverObject._support); + } + } else { + setDriverSupport(true); + } + } catch (e) { + reject(e); + } + }); + utils_executeTwoCallbacks(promise, callback, errorCallback); + return promise; + } + + driver() { + return this._driver || null; + } + + getDriver(driverName, callback, errorCallback) { + const getDriverPromise = DefinedDrivers[driverName] ? utils_promise.resolve(DefinedDrivers[driverName]) : utils_promise.reject(new Error('Driver not found.')); + utils_executeTwoCallbacks(getDriverPromise, callback, errorCallback); + return getDriverPromise; + } + + getSerializer(callback) { + const serializerPromise = utils_promise.resolve(serializer); + utils_executeTwoCallbacks(serializerPromise, callback); + return serializerPromise; + } + + ready(callback) { + const self = this; + + const promise = self._driverSet.then(() => { + if (self._ready === null) { + self._ready = self._initDriver(); + } + + return self._ready; + }); + + utils_executeTwoCallbacks(promise, callback, callback); + return promise; + } + + setDriver(drivers, callback, errorCallback) { + const self = this; + + if (!utils_isArray(drivers)) { + drivers = [drivers]; + } + + const supportedDrivers = this._getSupportedDrivers(drivers); + + function setDriverToConfig() { + self._config.driver = self.driver(); + } + + function extendSelfWithDriver(driver) { + self._extend(driver); + + setDriverToConfig(); + self._ready = self._initStorage(self._config); + return self._ready; + } + + function initDriver(supportedDrivers) { + return function () { + let currentDriverIndex = 0; + + function driverPromiseLoop() { + while (currentDriverIndex < supportedDrivers.length) { + let driverName = supportedDrivers[currentDriverIndex]; + currentDriverIndex++; + self._dbInfo = null; + self._ready = null; + return self.getDriver(driverName).then(extendSelfWithDriver).catch(driverPromiseLoop); + } + + setDriverToConfig(); + const error = new Error('No available storage method found.'); + self._driverSet = utils_promise.reject(error); + return self._driverSet; + } + + return driverPromiseLoop(); + }; + } // There might be a driver initialization in progress + // so wait for it to finish in order to avoid a possible + // race condition to set _dbInfo + + + const oldDriverSetDone = this._driverSet !== null ? this._driverSet.catch(() => utils_promise.resolve()) : utils_promise.resolve(); + this._driverSet = oldDriverSetDone.then(() => { + const driverName = supportedDrivers[0]; + self._dbInfo = null; + self._ready = null; + return self.getDriver(driverName).then(driver => { + self._driver = driver._driver; + setDriverToConfig(); + + self._wrapLibraryMethodsWithReady(); + + self._initDriver = initDriver(supportedDrivers); + }); + }).catch(() => { + setDriverToConfig(); + const error = new Error('No available storage method found.'); + self._driverSet = utils_promise.reject(error); + return self._driverSet; + }); + utils_executeTwoCallbacks(this._driverSet, callback, errorCallback); + return this._driverSet; + } + + supports(driverName) { + return !!DriverSupport[driverName]; + } + + _extend(libraryMethodsAndProperties) { + extend(this, libraryMethodsAndProperties); + } + + _getSupportedDrivers(drivers) { + const supportedDrivers = []; + + for (let i = 0, len = drivers.length; i < len; i++) { + const driverName = drivers[i]; + + if (this.supports(driverName)) { + supportedDrivers.push(driverName); + } + } + + return supportedDrivers; + } + + _wrapLibraryMethodsWithReady() { + // Add a stub for each driver API method that delays the call to the + // corresponding driver method until localForage is ready. These stubs + // will be replaced by the driver methods as soon as the driver is + // loaded, so there is no performance impact. + for (let i = 0, len = LibraryMethods.length; i < len; i++) { + callWhenReady(this, LibraryMethods[i]); + } + } + + createInstance(options) { + return new LocalForage(options); + } + +} // The actual localForage object that we expose as a module or via a +// global. It's extended by pulling in one of our other libraries. + + +/* harmony default export */ const localforage = (new LocalForage()); +// EXTERNAL MODULE: ./node_modules/localforage-driver-memory/_bundle/umd.js +var umd = __webpack_require__(3245); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayEach.js +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const _arrayEach = (arrayEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && _copyObject(source, lodash_es_keysIn(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return _copyObject(source, _getSymbols(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var _getSymbolsIn_nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !_getSymbolsIn_nativeGetSymbols ? lodash_es_stubArray : function(object) { + var result = []; + while (object) { + _arrayPush(result, _getSymbols(object)); + object = _getPrototype(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return _copyObject(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return _baseGetAllKeys(object, lodash_es_keysIn, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var _initCloneArray_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = _initCloneArray_objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? _cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var _cloneSymbol_symbolProto = _Symbol ? _Symbol.prototype : undefined, + _cloneSymbol_symbolValueOf = _cloneSymbol_symbolProto ? _cloneSymbol_symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return _cloneSymbol_symbolValueOf ? Object(_cloneSymbol_symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var _initCloneByTag_boolTag = '[object Boolean]', + _initCloneByTag_dateTag = '[object Date]', + _initCloneByTag_mapTag = '[object Map]', + _initCloneByTag_numberTag = '[object Number]', + _initCloneByTag_regexpTag = '[object RegExp]', + _initCloneByTag_setTag = '[object Set]', + _initCloneByTag_stringTag = '[object String]', + _initCloneByTag_symbolTag = '[object Symbol]'; + +var _initCloneByTag_arrayBufferTag = '[object ArrayBuffer]', + _initCloneByTag_dataViewTag = '[object DataView]', + _initCloneByTag_float32Tag = '[object Float32Array]', + _initCloneByTag_float64Tag = '[object Float64Array]', + _initCloneByTag_int8Tag = '[object Int8Array]', + _initCloneByTag_int16Tag = '[object Int16Array]', + _initCloneByTag_int32Tag = '[object Int32Array]', + _initCloneByTag_uint8Tag = '[object Uint8Array]', + _initCloneByTag_uint8ClampedTag = '[object Uint8ClampedArray]', + _initCloneByTag_uint16Tag = '[object Uint16Array]', + _initCloneByTag_uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case _initCloneByTag_arrayBufferTag: + return _cloneArrayBuffer(object); + + case _initCloneByTag_boolTag: + case _initCloneByTag_dateTag: + return new Ctor(+object); + + case _initCloneByTag_dataViewTag: + return _cloneDataView(object, isDeep); + + case _initCloneByTag_float32Tag: case _initCloneByTag_float64Tag: + case _initCloneByTag_int8Tag: case _initCloneByTag_int16Tag: case _initCloneByTag_int32Tag: + case _initCloneByTag_uint8Tag: case _initCloneByTag_uint8ClampedTag: case _initCloneByTag_uint16Tag: case _initCloneByTag_uint32Tag: + return _cloneTypedArray(object, isDeep); + + case _initCloneByTag_mapTag: + return new Ctor; + + case _initCloneByTag_numberTag: + case _initCloneByTag_stringTag: + return new Ctor(object); + + case _initCloneByTag_regexpTag: + return _cloneRegExp(object); + + case _initCloneByTag_setTag: + return new Ctor; + + case _initCloneByTag_symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return lodash_es_isObjectLike(value) && _getTag(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil && _nodeUtil.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? _baseUnary(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return lodash_es_isObjectLike(value) && _getTag(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil && _nodeUtil.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? _baseUnary(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var _baseClone_argsTag = '[object Arguments]', + _baseClone_arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + _baseClone_errorTag = '[object Error]', + _baseClone_funcTag = '[object Function]', + _baseClone_genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + _baseClone_objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + _baseClone_weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[_baseClone_argsTag] = cloneableTags[_baseClone_arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[_baseClone_objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[_baseClone_errorTag] = cloneableTags[_baseClone_funcTag] = +cloneableTags[_baseClone_weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!lodash_es_isObject(value)) { + return value; + } + var isArr = lodash_es_isArray(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return _copyArray(value, result); + } + } else { + var tag = _getTag(value), + isFunc = tag == _baseClone_funcTag || tag == _baseClone_genTag; + + if (lodash_es_isBuffer(value)) { + return _cloneBuffer(value, isDeep); + } + if (tag == _baseClone_objectTag || tag == _baseClone_argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : _initCloneObject(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys) + : (isFlat ? lodash_es_keysIn : lodash_es_keys); + + var props = isArr ? undefined : keysFunc(value); + _arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + _assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var cloneDeep_CLONE_DEEP_FLAG = 1, + cloneDeep_CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return _baseClone(value, cloneDeep_CLONE_DEEP_FLAG | cloneDeep_CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var isString_stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!lodash_es_isArray(value) && lodash_es_isObjectLike(value) && _baseGetTag(value) == isString_stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +;// CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/drivers/sessionStorage.js +// Copyright 2014 Mozilla +// Copyright 2015 Thodoris Greasidis +// Copyright 2018 JC Brand +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + + +const sessionStorage_serialize = serializer.serialize; +const sessionStorage_deserialize = serializer.deserialize; + +function isSessionStorageValid() { + // If the app is running inside a Google Chrome packaged webapp, or some + // other context where sessionStorage isn't available, we don't use + // sessionStorage. This feature detection is preferred over the old + // `if (window.chrome && window.chrome.runtime)` code. + // See: https://github.com/mozilla/localForage/issues/68 + try { + // If sessionStorage isn't available, we get outta here! + // This should be inside a try catch + if (sessionStorage && 'setItem' in sessionStorage) { + return true; + } + } catch (e) { + console.log(e); + } + + return false; +} + +function sessionStorage_getKeyPrefix(options, defaultConfig) { + let keyPrefix = options.name + '/'; + + if (options.storeName !== defaultConfig.storeName) { + keyPrefix += options.storeName + '/'; + } + + return keyPrefix; +} + +const dbInfo = { + 'serializer': { + 'serialize': sessionStorage_serialize, + 'deserialize': sessionStorage_deserialize + } +}; + +function sessionStorage_initStorage(options) { + dbInfo.keyPrefix = sessionStorage_getKeyPrefix(options, this._defaultConfig); + + if (options) { + for (const i in options) { + // eslint-disable-line guard-for-in + dbInfo[i] = options[i]; + } + } +} // Remove all keys from the datastore, effectively destroying all data in +// the app's key/value store! + + +function sessionStorage_clear(callback) { + const promise = this.ready().then(function () { + const keyPrefix = dbInfo.keyPrefix; + + for (let i = sessionStorage.length - 1; i >= 0; i--) { + const key = sessionStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + sessionStorage.removeItem(key); + } + } + }); + utils_executeCallback(promise, callback); + return promise; +} // Retrieve an item from the store. Unlike the original async_storage +// library in Gaia, we don't modify return values at all. If a key's value +// is `undefined`, we pass that value to the callback function. + + +function sessionStorage_getItem(key, callback) { + key = normalizeKey(key); + const promise = this.ready().then(function () { + let result = sessionStorage.getItem(dbInfo.keyPrefix + key); // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the key + // is likely undefined and we'll pass it straight to the + // callback. + + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + return result; + }); + utils_executeCallback(promise, callback); + return promise; +} // Iterate over all items in the store. + + +function sessionStorage_iterate(iterator, callback) { + const self = this; + const promise = self.ready().then(function () { + const keyPrefix = dbInfo.keyPrefix; + const keyPrefixLength = keyPrefix.length; + const length = sessionStorage.length; // We use a dedicated iterator instead of the `i` variable below + // so other keys we fetch in sessionStorage aren't counted in + // the `iterationNumber` argument passed to the `iterate()` + // callback. + // + // See: github.com/mozilla/localForage/pull/435#discussion_r38061530 + + let iterationNumber = 1; + + for (let i = 0; i < length; i++) { + const key = sessionStorage.key(i); + + if (key.indexOf(keyPrefix) !== 0) { + continue; + } + + let value = sessionStorage.getItem(key); // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the + // key is likely undefined and we'll pass it straight + // to the iterator. + + if (value) { + value = dbInfo.serializer.deserialize(value); + } + + value = iterator(value, key.substring(keyPrefixLength), iterationNumber++); + + if (value !== void 0) { + // eslint-disable-line no-void + return value; + } + } + }); + utils_executeCallback(promise, callback); + return promise; +} // Same as sessionStorage's key() method, except takes a callback. + + +function sessionStorage_key(n, callback) { + const self = this; + const promise = self.ready().then(function () { + let result; + + try { + result = sessionStorage.key(n); + } catch (error) { + result = null; + } // Remove the prefix from the key, if a key is found. + + + if (result) { + result = result.substring(dbInfo.keyPrefix.length); + } + + return result; + }); + utils_executeCallback(promise, callback); + return promise; +} + +function sessionStorage_keys(callback) { + const self = this; + const promise = self.ready().then(function () { + const length = sessionStorage.length; + const keys = []; + + for (let i = 0; i < length; i++) { + const itemKey = sessionStorage.key(i); + + if (itemKey.indexOf(dbInfo.keyPrefix) === 0) { + keys.push(itemKey.substring(dbInfo.keyPrefix.length)); + } + } + + return keys; + }); + utils_executeCallback(promise, callback); + return promise; +} // Supply the number of keys in the datastore to the callback function. + + +function sessionStorage_length(callback) { + const self = this; + const promise = self.keys().then(function (keys) { + return keys.length; + }); + utils_executeCallback(promise, callback); + return promise; +} // Remove an item from the store, nice and simple. + + +function sessionStorage_removeItem(key, callback) { + key = normalizeKey(key); + const promise = this.ready().then(function () { + sessionStorage.removeItem(dbInfo.keyPrefix + key); + }); + utils_executeCallback(promise, callback); + return promise; +} // Set a key's value and run an optional callback once the value is set. +// Unlike Gaia's implementation, the callback function is passed the value, +// in case you want to operate on that value only after you're sure it +// saved, or something like that. + + +function sessionStorage_setItem(key, value, callback) { + key = normalizeKey(key); + const promise = this.ready().then(function () { + // Convert undefined values to null. + // https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } // Save the original value to pass to the callback. + + + const originalValue = value; + return new Promise(function (resolve, reject) { + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + try { + sessionStorage.setItem(dbInfo.keyPrefix + key, value); + resolve(originalValue); + } catch (e) { + // sessionStorage capacity exceeded. + // TODO: Make this a specific error/event. + if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { + reject(e); + } + + reject(e); + } + } + }); + }); + }); + utils_executeCallback(promise, callback); + return promise; +} + +function sessionStorage_dropInstance(options, callback) { + callback = getCallback.apply(this, arguments); + options = typeof options !== 'function' && options || {}; + + if (!options.name) { + const currentConfig = this.config(); + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + const self = this; + let promise; + + if (!options.name) { + promise = Promise.reject(new Error('Invalid arguments')); + } else { + promise = new Promise(function (resolve) { + if (!options.storeName) { + resolve(`${options.name}/`); + } else { + resolve(sessionStorage_getKeyPrefix(options, self._defaultConfig)); + } + }).then(function (keyPrefix) { + for (let i = sessionStorage.length - 1; i >= 0; i--) { + const key = sessionStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + sessionStorage.removeItem(key); + } + } + }); + } + + utils_executeCallback(promise, callback); + return promise; +} + +const sessionStorageWrapper = { + _driver: 'sessionStorageWrapper', + _initStorage: sessionStorage_initStorage, + _support: isSessionStorageValid(), + iterate: sessionStorage_iterate, + getItem: sessionStorage_getItem, + setItem: sessionStorage_setItem, + removeItem: sessionStorage_removeItem, + clear: sessionStorage_clear, + length: sessionStorage_length, + key: sessionStorage_key, + keys: sessionStorage_keys, + dropInstance: sessionStorage_dropInstance +}; +/* harmony default export */ const drivers_sessionStorage = (sessionStorageWrapper); +// EXTERNAL MODULE: ./node_modules/localforage-setitems/dist/localforage-setitems.js +var localforage_setitems = __webpack_require__(1459); +;// CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/storage.js +/** + * IndexedDB, localStorage and sessionStorage adapter + */ + + + + + + + +const IN_MEMORY = umd._driver; +localforage.defineDriver(umd); +(0,localforage_setitems.extendPrototype)(localforage); + +function S4() { + // Generate four random hex digits. + return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1); +} + +function guid() { + // Generate a pseudo-GUID by concatenating random hexadecimal. + return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); +} + +class Storage { + constructor(id, type, batchedWrites = false) { + if (type === 'local' && !window.localStorage) { + throw new Error("Skeletor.storage: Environment does not support localStorage."); + } else if (type === 'session' && !window.sessionStorage) { + throw new Error("Skeletor.storage: Environment does not support sessionStorage."); + } + + if (lodash_es_isString(type)) { + this.storeInitialized = this.initStore(type, batchedWrites); + } else { + this.store = type; + + if (batchedWrites) { + this.store.debouncedSetItems = mergebounce_mergebounce(items => this.store.setItems(items), 50, { + 'promise': true + }); + } + + this.storeInitialized = Promise.resolve(); + } + + this.name = id; + } + + async initStore(type, batchedWrites) { + if (type === 'session') { + localforage.setDriver(drivers_sessionStorage._driver); + } else if (type === 'local') { + await localforage.config({ + 'driver': localforage.LOCALSTORAGE + }); + } else if (type === 'in_memory') { + localforage.config({ + 'driver': IN_MEMORY + }); + } else if (type !== 'indexed') { + throw new Error("Skeletor.storage: No storage type was specified"); + } + + this.store = localforage; + + if (batchedWrites) { + this.store.debouncedSetItems = mergebounce_mergebounce(items => this.store.setItems(items), 50, { + 'promise': true + }); + } + } + + flush() { + var _this$store$debounced; + + return (_this$store$debounced = this.store.debouncedSetItems) === null || _this$store$debounced === void 0 ? void 0 : _this$store$debounced.flush(); + } + + async clear() { + await this.store.removeItem(this.name).catch(e => console.error(e)); + const re = new RegExp(`^${this.name}-`); + const keys = await this.store.keys(); + const removed_keys = keys.filter(k => re.test(k)); + await Promise.all(removed_keys.map(k => this.store.removeItem(k).catch(e => console.error(e)))); + } + + sync(name) { + const that = this; + + async function localSync(method, model, options) { + let resp, errorMessage, promise, new_attributes; // We get the collection (and if necessary the model attribute. + // Waiting for storeInitialized will cause another iteration of + // the event loop, after which the collection reference will + // be removed from the model. + + const collection = model.collection; + + if (['patch', 'update'].includes(method)) { + new_attributes = lodash_es_cloneDeep(model.attributes); + } + + await that.storeInitialized; + + try { + const original_attributes = model.attributes; + + switch (method) { + case "read": + if (model.id !== undefined) { + resp = await that.find(model); + } else { + resp = await that.findAll(); + } + + break; + + case "create": + resp = await that.create(model, options); + break; + + case 'patch': + case "update": + if (options.wait) { + // When `wait` is set to true, Skeletor waits until + // confirmation of storage before setting the values on + // the model. + // However, the new attributes needs to be sent, so it + // sets them manually on the model and then removes + // them after calling `sync`. + // Because our `sync` method is asynchronous and we + // wait for `storeInitialized`, the attributes are + // already restored once we get here, so we need to do + // the attributes dance again. + model.attributes = new_attributes; + } + + promise = that.update(model, options); + + if (options.wait) { + model.attributes = original_attributes; + } + + resp = await promise; + break; + + case "delete": + resp = await that.destroy(model, collection); + break; + } + } catch (error) { + if (error.code === 22 && that.getStorageSize() === 0) { + errorMessage = "Private browsing is unsupported"; + } else { + errorMessage = error.message; + } + } + + if (resp) { + if (options && options.success) { + // When storing, we don't pass back the response (which is + // the set attributes returned from localforage because + // Skeletor sets them again on the model and due to the async + // nature of localforage it can cause stale attributes to be + // set on a model after it's been updated in the meantime. + const data = method === "read" ? resp : null; + options.success(data, options); + } + } else { + errorMessage = errorMessage ? errorMessage : "Record Not Found"; + + if (options && options.error) { + options.error(errorMessage); + } + } + } + + localSync.__name__ = 'localSync'; + return localSync; + } + + removeCollectionReference(model, collection) { + if (!collection) { + return; + } + + const ids = collection.filter(m => m.id !== model.id).map(m => this.getItemName(m.id)); + return this.store.setItem(this.name, ids); + } + + addCollectionReference(model, collection) { + if (!collection) { + return; + } + + const ids = collection.map(m => this.getItemName(m.id)); + const new_id = this.getItemName(model.id); + + if (!ids.includes(new_id)) { + ids.push(new_id); + } + + return this.store.setItem(this.name, ids); + } + + getCollectionReferenceData(model) { + if (!model.collection) { + return {}; + } + + const ids = model.collection.map(m => this.getItemName(m.id)); + const new_id = this.getItemName(model.id); + + if (!ids.includes(new_id)) { + ids.push(new_id); + } + + const result = {}; + result[this.name] = ids; + return result; + } + + async save(model) { + if (this.store.setItems) { + const items = {}; + items[this.getItemName(model.id)] = model.toJSON(); + Object.assign(items, this.getCollectionReferenceData(model)); + return this.store.debouncedSetItems ? this.store.debouncedSetItems(items) : this.store.setItems(items); + } else { + const key = this.getItemName(model.id); + const data = await this.store.setItem(key, model.toJSON()); + await this.addCollectionReference(model, model.collection); + return data; + } + } + + create(model, options) { + /* Add a model, giving it a (hopefully)-unique GUID, if it doesn't already + * have an id of it's own. + */ + if (!model.id) { + model.id = guid(); + model.set(model.idAttribute, model.id, options); + } + + return this.save(model); + } + + update(model) { + return this.save(model); + } + + find(model) { + return this.store.getItem(this.getItemName(model.id)); + } + + async findAll() { + /* Return the array of all models currently in storage. + */ + const data = await this.store.getItem(this.name); + + if (data && data.length) { + return Promise.all(data.map(item => this.store.getItem(item))); + } + + return []; + } + + async destroy(model, collection) { + await this.flush(); + await this.store.removeItem(this.getItemName(model.id)); + await this.removeCollectionReference(model, collection); + return model; + } + + getStorageSize() { + return this.store.length; + } + + getItemName(id) { + return this.name + "-" + id; + } + +} + +Storage.sessionStorageInitialized = localforage.defineDriver(drivers_sessionStorage); +Storage.localForage = localforage; +/* harmony default export */ const storage = (Storage); +;// CONCATENATED MODULE: ./src/headless/utils/storage.js function getDefaultStore() { @@ -18113,21 +20329,26 @@ function getDefaultStore() { return 'session'; } } + +function storeUsesIndexedDB(store) { + return store === 'persistent' && api.settings.get('persistent_store') === 'IndexedDB'; +} + function createStore(id, store) { const name = store || getDefaultStore(); const s = shared_converse.storage[name]; if (typeof s === 'undefined') { - throw new TypeError("createStore: Could not find store for ".concat(id)); + throw new TypeError(`createStore: Could not find store for ${id}`); } - return new storage(id, s, api.settings.get('persistent_store') === 'IndexedDB'); + return new storage(id, s, storeUsesIndexedDB(store)); } function initStorage(model, id, type) { const store = type || getDefaultStore(); - model.browserStorage = shared_converse.createStore(id, store); + model.browserStorage = createStore(id, store); - if (store === 'persistent' && api.settings.get('persistent_store') === 'IndexedDB') { + if (storeUsesIndexedDB(store)) { const flush = () => model.browserStorage.flush(); window.addEventListener(shared_converse.unloadevent, flush); @@ -18135,31 +20356,43 @@ function initStorage(model, id, type) { model.listenTo(shared_converse, 'beforeLogout', flush); } } -function replacePromise(name) { - const existing_promise = shared_converse.promises[name]; +;// CONCATENATED MODULE: ./node_modules/lodash-es/isEqual.js - if (!existing_promise) { - throw new Error("Tried to replace non-existing promise: ".concat(name)); - } - if (existing_promise.replace) { - const promise = getOpenPromise(); - promise.replace = existing_promise.replace; - shared_converse.promises[name] = promise; - } else { - headless_log.debug("Not replacing promise \"".concat(name, "\"")); - } +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return _baseIsEqual(value, other); } -const utils_element = document.createElement('div'); -function decodeHTMLEntities(str) { - if (str && typeof str === 'string') { - utils_element.innerHTML = xss.filterXSS(str); - str = utils_element.textContent; - utils_element.textContent = ''; - } - return str; -} +/* harmony default export */ const lodash_es_isEqual = (isEqual); + ;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js @@ -18397,6 +20630,9 @@ var pick = _flatRest(function(object, paths) { /* harmony default export */ const lodash_es_pick = (pick); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.js +var purify = __webpack_require__(7856); +var purify_default = /*#__PURE__*/__webpack_require__.n(purify); ;// CONCATENATED MODULE: ./node_modules/lodash-es/compact.js /** * Creates an array with all falsey values removed. The values `false`, `null`, @@ -18780,43 +21016,6 @@ var invert = _createInverter(function(result, value, key) { /* harmony default export */ const lodash_es_invert = (invert); -;// CONCATENATED MODULE: ./node_modules/lodash-es/isEqual.js - - -/** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ -function isEqual(value, other) { - return _baseIsEqual(value, other); -} - -/* harmony default export */ const lodash_es_isEqual = (isEqual); - ;// CONCATENATED MODULE: ./node_modules/lodash-es/iteratee.js @@ -19432,9 +21631,190 @@ Object.assign(Model.prototype, Events, { return false; } }); +;// CONCATENATED MODULE: ./src/headless/shared/settings/api.js + + + +/** + * This grouping allows access to the + * [configuration settings](/docs/html/configuration.html#configuration-settings) + * of Converse. + * + * @namespace _converse.api.settings + * @memberOf _converse.api + */ + +const settings_api = { + /** + * Allows new configuration settings to be specified, or new default values for + * existing configuration settings to be specified. + * + * Note, calling this method *after* converse.initialize has been + * called will *not* change the initialization settings provided via + * `converse.initialize`. + * + * @method _converse.api.settings.extend + * @param {object} settings The configuration settings + * @example + * _converse.api.settings.extend({ + * 'enable_foo': true + * }); + * + * // The user can then override the default value of the configuration setting when + * // calling `converse.initialize`. + * converse.initialize({ + * 'enable_foo': false + * }); + */ + extend(settings) { + return extendAppSettings(settings); + }, + + update(settings) { + headless_log.warn('The api.settings.update method has been deprecated and will be removed. ' + 'Please use api.settings.extend instead.'); + return this.extend(settings); + }, + + /** + * @method _converse.api.settings.get + * @returns {*} Value of the particular configuration setting. + * @example _converse.api.settings.get("play_sounds"); + */ + get(key) { + return getAppSetting(key); + }, + + /** + * Set one or many configuration settings. + * + * Note, this is not an alternative to calling {@link converse.initialize}, which still needs + * to be called. Generally, you'd use this method after Converse is already + * running and you want to change the configuration on-the-fly. + * + * @method _converse.api.settings.set + * @param {Object} [settings] An object containing configuration settings. + * @param {string} [key] Alternatively to passing in an object, you can pass in a key and a value. + * @param {string} [value] + * @example _converse.api.settings.set("play_sounds", true); + * @example + * _converse.api.settings.set({ + * "play_sounds": true, + * "hide_offline_users": true + * }); + */ + set(key, val) { + updateAppSettings(key, val); + }, + + /** + * The `listen` namespace exposes methods for creating event listeners + * (aka handlers) for events related to settings. + * + * @namespace _converse.api.settings.listen + * @memberOf _converse.api.settings + */ + listen: { + /** + * Register an event listener for the passed in event. + * @method _converse.api.settings.listen.on + * @param { ('change') } name - The name of the event to listen for. + * Currently there is only the 'change' event. + * @param { Function } handler - The event handler function + * @param { Object } [context] - The context of the `this` attribute of the + * handler function. + * @example _converse.api.settings.listen.on('change', callback); + */ + on(name, handler, context) { + registerListener(name, handler, context); + }, + + /** + * To stop listening to an event, you can use the `not` method. + * @method _converse.api.settings.listen.not + * @param { String } name The event's name + * @param { Function } callback The callback method that is to no longer be called when the event fires + * @example _converse.api.settings.listen.not('change', callback); + */ + not(name, handler) { + unregisterListener(name, handler); + } + + } +}; +/** + * API for accessing and setting user settings. User settings are + * different from the application settings from {@link _converse.api.settings} + * because they are per-user and set via user action. + * @namespace _converse.api.user.settings + * @memberOf _converse.api.user + */ + +const user_settings_api = { + /** + * Returns the user settings model. Useful when you want to listen for change events. + * @async + * @method _converse.api.user.settings.getModel + * @returns {Promise} + * @example const settings = await _converse.api.user.settings.getModel(); + */ + getModel() { + return getUserSettings(); + }, + + /** + * Get the value of a particular user setting. + * @method _converse.api.user.settings.get + * @param {String} key - The setting name + * @param {*} [fallback] - An optional fallback value if the user setting is undefined + * @returns {Promise} Promise which resolves with the value of the particular configuration setting. + * @example _converse.api.user.settings.get("foo"); + */ + async get(key, fallback) { + const user_settings = await getUserSettings(); + return user_settings.get(key) === undefined ? fallback : user_settings.get(key); + }, + + /** + * Set one or many user settings. + * @async + * @method _converse.api.user.settings.set + * @param {Object} [settings] An object containing configuration settings. + * @param {string} [key] Alternatively to passing in an object, you can pass in a key and a value. + * @param {string} [value] + * @example _converse.api.user.settings.set("foo", "bar"); + * @example + * _converse.api.user.settings.set({ + * "foo": "bar", + * "baz": "buz" + * }); + */ + set(key, val) { + if (lodash_es_isObject(key)) { + return updateUserSettings(key, { + 'promise': true + }); + } else { + const o = {}; + o[key] = val; + return updateUserSettings(o, { + 'promise': true + }); + } + }, + + /** + * Clears all the user settings + * @async + * @method _converse.api.user.settings.clear + */ + clear() { + return clearUserSettings(); + } + +}; ;// CONCATENATED MODULE: ./src/headless/utils/core.js /** - * @copyright 2020, the Converse.js contributors + * @copyright The Converse.js contributors * @license Mozilla Public License (MPLv2) * @description This is the core utilities module. */ @@ -19447,6 +21827,25 @@ Object.assign(Model.prototype, Events, { + + + +function isEmptyMessage(attrs) { + if (attrs instanceof Model) { + attrs = attrs.attributes; + } + + return !attrs['oob_url'] && !attrs['file'] && !(attrs['is_encrypted'] && attrs['plaintext']) && !attrs['message']; +} +/* We distinguish between UniView and MultiView instances. + * + * UniView means that only one chat is visible, even though there might be multiple ongoing chats. + * MultiView means that multiple chats may be visible simultaneously. + */ + +function isUniView() { + return ['mobile', 'fullscreen', 'embedded'].includes(settings_api.get("view_mode")); +} /** * The utils object * @namespace u @@ -19475,7 +21874,7 @@ u.toStanza = function (string) { const node = parser.parseFromString(string, "text/xml"); if (node.getElementsByTagNameNS(parserErrorNS, 'parsererror').length) { - throw new Error("Parser Error: ".concat(string)); + throw new Error(`Parser Error: ${string}`); } return node.firstElementChild; @@ -19503,7 +21902,7 @@ u.prefixMentions = function (message) { */ let text = message.get('message'); (message.get('references') || []).sort((a, b) => b.begin - a.begin).forEach(ref => { - text = "".concat(text.slice(0, ref.begin), "@").concat(text.slice(ref.begin)); + text = `${text.slice(0, ref.begin)}@${text.slice(ref.begin)}`; }); return text; }; @@ -19541,7 +21940,7 @@ u.isNewMessage = function (message) { * message, i.e. not a MAM archived one. */ if (message instanceof Element) { - return !(sizzle_default()("result[xmlns=\"".concat(Strophe.NS.MAM, "\"]"), message).length && sizzle_default()("delay[xmlns=\"".concat(Strophe.NS.DELAY, "\"]"), message).length); + return !(sizzle_default()(`result[xmlns="${Strophe.NS.MAM}"]`, message).length && sizzle_default()(`delay[xmlns="${Strophe.NS.DELAY}"]`, message).length); } else if (message instanceof Model) { message = message.attributes; } @@ -19551,48 +21950,13 @@ u.isNewMessage = function (message) { u.shouldCreateMessage = function (attrs) { return attrs['retracted'] || // Retraction received *before* the message - !u.isEmptyMessage(attrs); + !isEmptyMessage(attrs); }; u.shouldCreateGroupchatMessage = function (attrs) { return attrs.nick && (u.shouldCreateMessage(attrs) || attrs.is_tombstone); }; -u.isEmptyMessage = function (attrs) { - if (attrs instanceof Model) { - attrs = attrs.attributes; - } - - return !attrs['oob_url'] && !attrs['file'] && !(attrs['is_encrypted'] && attrs['plaintext']) && !attrs['message']; -}; //TODO: Remove - - -u.isOnlyChatStateNotification = function (msg) { - if (msg instanceof Element) { - // See XEP-0085 Chat State Notification - return msg.querySelector('body') === null && (msg.querySelector('active') !== null || msg.querySelector('composing') !== null || msg.querySelector('inactive') !== null || msg.querySelector('paused') !== null || msg.querySelector('gone') !== null); - } - - if (msg instanceof Model) { - msg = msg.attributes; - } - - return msg['chat_state'] && u.isEmptyMessage(msg); -}; - -u.isOnlyMessageDeliveryReceipt = function (msg) { - if (msg instanceof Element) { - // See XEP-0184 Message Delivery Receipts - return msg.querySelector('body') === null && msg.querySelector('received') !== null; - } - - if (msg instanceof Model) { - msg = msg.attributes; - } - - return msg['received'] && u.isEmptyMessage(msg); -}; - u.isChatRoom = function (model) { return model && model.get('type') === 'chatroom'; }; @@ -19614,7 +21978,7 @@ u.isForbiddenError = function (stanza) { return false; } - return sizzle_default()("error[type=\"auth\"] forbidden[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), stanza).length > 0; + return sizzle_default()(`error[type="auth"] forbidden[xmlns="${Strophe.NS.STANZAS}"]`, stanza).length > 0; }; u.isServiceUnavailableError = function (stanza) { @@ -19622,7 +21986,7 @@ u.isServiceUnavailableError = function (stanza) { return false; } - return sizzle_default()("error[type=\"cancel\"] service-unavailable[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), stanza).length > 0; + return sizzle_default()(`error[type="cancel"] service-unavailable[xmlns="${Strophe.NS.STANZAS}"]`, stanza).length > 0; }; /** * Merge the second object into the first one. @@ -19835,14 +22199,14 @@ u.getCurrentWord = function (input, index, delineator) { return word; }; -u.isMentionBoundary = s => s !== '@' && RegExp("(\\p{Z}|\\p{P})", 'u').test(s); +u.isMentionBoundary = s => s !== '@' && RegExp(`(\\p{Z}|\\p{P})`, 'u').test(s); u.replaceCurrentWord = function (input, new_value) { const caret = input.selectionEnd || undefined; const current_word = lodash_es_last(input.value.slice(0, caret).split(/\s/)); const value = input.value; const mention_boundary = u.isMentionBoundary(current_word[0]) ? current_word[0] : ''; - input.value = value.slice(0, caret - current_word.length) + mention_boundary + "".concat(new_value, " ") + value.slice(caret); + input.value = value.slice(0, caret - current_word.length) + mention_boundary + `${new_value} ` + value.slice(caret); const selection_end = caret - current_word.length + new_value.length + 1; input.selectionEnd = mention_boundary ? selection_end + 1 : selection_end; }; @@ -19879,43 +22243,6 @@ u.formatFingerprint = function (fp) { return fp; }; -u.appendArrayBuffer = function (buffer1, buffer2) { - const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength); - tmp.set(new Uint8Array(buffer1), 0); - tmp.set(new Uint8Array(buffer2), buffer1.byteLength); - return tmp.buffer; -}; - -u.arrayBufferToHex = function (ab) { - // https://stackoverflow.com/questions/40031688/javascript-arraybuffer-to-hex#40031979 - return Array.prototype.map.call(new Uint8Array(ab), x => ('00' + x.toString(16)).slice(-2)).join(''); -}; - -u.arrayBufferToString = function (ab) { - return new TextDecoder("utf-8").decode(ab); -}; - -u.stringToArrayBuffer = function (string) { - const bytes = new TextEncoder("utf-8").encode(string); - return bytes.buffer; -}; - -u.arrayBufferToBase64 = function (ab) { - return btoa(new Uint8Array(ab).reduce((data, byte) => data + String.fromCharCode(byte), '')); -}; - -u.base64ToArrayBuffer = function (b64) { - const binary_string = window.atob(b64), - len = binary_string.length, - bytes = new Uint8Array(len); - - for (let i = 0; i < len; i++) { - bytes[i] = binary_string.charCodeAt(i); - } - - return bytes.buffer; -}; - u.getRandomInt = function (max) { return Math.floor(Math.random() * Math.floor(max)); }; @@ -19948,9 +22275,9 @@ u.getUniqueId = function (suffix) { } }; -u.httpToGeoUri = function (text, _converse) { +u.httpToGeoUri = function (text) { const replacement = 'geo:$1,$2'; - return text.replace(_converse.api.settings.get("geouri_regex"), replacement); + return text.replace(settings_api.get("geouri_regex"), replacement); }; /** * Clears the specified timeout and interval. @@ -20015,7 +22342,7 @@ u.waitUntil = function (func, max_wait = 300, check_delay = 3) { function handler() { clearTimers(max_wait_timeout, interval); - const err_msg = "Wait until promise timed out: \n\n".concat(timeout_err.stack); + const err_msg = `Wait until promise timed out: \n\n${timeout_err.stack}`; console.trace(); headless_log.error(err_msg); promise.reject(new Error(err_msg)); @@ -20025,23 +22352,67 @@ u.waitUntil = function (func, max_wait = 300, check_delay = 3) { return promise; }; -/* harmony default export */ const utils_core = (u); -;// CONCATENATED MODULE: ./src/headless/shared/settings.js +function setUnloadEvent() { + if ('onpagehide' in window) { + // Pagehide gets thrown in more cases than unload. Specifically it + // gets thrown when the page is cached and not just + // closed/destroyed. It's the only viable event on mobile Safari. + // https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/ + shared_converse.unloadevent = 'pagehide'; + } else if ('onbeforeunload' in window) { + shared_converse.unloadevent = 'beforeunload'; + } else if ('onunload' in window) { + shared_converse.unloadevent = 'unload'; + } +} +async function getLoginCredentialsFromBrowser() { + try { + const creds = await navigator.credentials.get({ + 'password': true + }); + if (creds && creds.type == 'password' && u.isValidJID(creds.id)) { + await shared_converse.setUserJID(creds.id); + return { + 'jid': creds.id, + 'password': creds.password + }; + } + } catch (e) { + headless_log.error(e); + } +} +function replacePromise(name) { + const existing_promise = shared_converse.promises[name]; + if (!existing_promise) { + throw new Error(`Tried to replace non-existing promise: ${name}`); + } + if (existing_promise.replace) { + const promise = getOpenPromise(); + promise.replace = existing_promise.replace; + shared_converse.promises[name] = promise; + } else { + headless_log.debug(`Not replacing promise "${name}"`); + } +} +const core_element = document.createElement('div'); +function decodeHTMLEntities(str) { + if (str && typeof str === 'string') { + core_element.innerHTML = purify_default().sanitize(str); + str = core_element.textContent; + core_element.textContent = ''; + } - - - - -let init_settings = {}; // Container for settings passed in via converse.initialize - -let app_settings = {}; -let user_settings; // User settings, populated via api.users.settings + return str; +} +/* harmony default export */ const utils_core = (Object.assign({ + isEmptyMessage +}, u)); +;// CONCATENATED MODULE: ./src/headless/shared/settings/constants.js // Default configuration values // ---------------------------- - const DEFAULT_SETTINGS = { allow_non_roster_messaging: false, allow_url_history_change: true, @@ -20068,7 +22439,7 @@ const DEFAULT_SETTINGS = { locales: ['af', 'ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'eo', 'es', 'eu', 'en', 'fa', 'fi', 'fr', 'gl', 'he', 'hi', 'hu', 'id', 'it', 'ja', 'lt', 'nb', 'nl', 'mr', 'oc', 'pl', 'pt', 'pt_BR', 'ro', 'ru', 'sv', 'th', 'tr', 'uk', 'vi', 'zh_CN', 'zh_TW'], nickname: undefined, password: undefined, - persistent_store: 'localStorage', + persistent_store: 'IndexedDB', rid: undefined, root: window.document, sid: undefined, @@ -20079,16 +22450,32 @@ const DEFAULT_SETTINGS = { websocket_url: undefined, whitelisted_plugins: [] }; +;// CONCATENATED MODULE: ./src/headless/shared/settings/utils.js + + + + + + + + + + + +let app_settings; +let init_settings = {}; // Container for settings passed in via converse.initialize + +let user_settings; // User settings, populated via api.users.settings + function getAppSettings() { return app_settings; } function initAppSettings(settings) { init_settings = settings; - app_settings = {}; // Allow only whitelisted settings to be overwritten via converse.initialize + app_settings = {}; + Object.assign(app_settings, Events); // Allow only whitelisted settings to be overwritten via converse.initialize const allowed_settings = lodash_es_pick(settings, Object.keys(DEFAULT_SETTINGS)); - lodash_es_assignIn(shared_converse, DEFAULT_SETTINGS, allowed_settings); // FIXME: remove - lodash_es_assignIn(app_settings, DEFAULT_SETTINGS, allowed_settings); } function getInitSettings() { @@ -20107,21 +22494,37 @@ function extendAppSettings(settings) { const allowed_site_settings = lodash_es_pick(init_settings, allowed_keys); const updated_settings = lodash_es_assignIn(lodash_es_pick(settings, allowed_keys), allowed_site_settings); utils_core.merge(app_settings, updated_settings); - utils_core.merge(shared_converse, updated_settings); // FIXME: remove +} +function registerListener(name, func, context) { + app_settings.on(name, func, context); +} +function unregisterListener(name, func) { + app_settings.off(name, func); } function updateAppSettings(key, val) { - const o = {}; + if (key == null) return this; // eslint-disable-line no-eq-null + + let attrs; if (lodash_es_isObject(key)) { - lodash_es_assignIn(shared_converse, lodash_es_pick(key, Object.keys(DEFAULT_SETTINGS))); // FIXME: remove - - lodash_es_assignIn(app_settings, lodash_es_pick(key, Object.keys(DEFAULT_SETTINGS))); + attrs = key; } else if (typeof key === 'string') { - o[key] = val; - lodash_es_assignIn(shared_converse, lodash_es_pick(o, Object.keys(DEFAULT_SETTINGS))); // FIXME: remove - - lodash_es_assignIn(app_settings, lodash_es_pick(o, Object.keys(DEFAULT_SETTINGS))); + attrs = {}; + attrs[key] = val; } + + const allowed_keys = Object.keys(lodash_es_pick(attrs, Object.keys(DEFAULT_SETTINGS))); + const changed = {}; + allowed_keys.forEach(k => { + const val = attrs[k]; + + if (!lodash_es_isEqual(app_settings[k], val)) { + changed[k] = val; + app_settings[k] = val; + } + }); + Object.keys(changed).forEach(k => app_settings.trigger('change:' + k, changed[k])); + app_settings.trigger('change', changed); } /** * @async @@ -20136,8 +22539,8 @@ function initUserSettings() { throw Error(msg); } - if (!((_user_settings = user_settings) === null || _user_settings === void 0 ? void 0 : _user_settings.fetched)) { - const id = "converse.user-settings.".concat(shared_converse.bare_jid); + if (!((_user_settings = user_settings) !== null && _user_settings !== void 0 && _user_settings.fetched)) { + const id = `converse.user-settings.${shared_converse.bare_jid}`; user_settings = new Model({ id }); @@ -20275,199 +22678,6 @@ var advancedFormat_default = /*#__PURE__*/__webpack_require__.n(advancedFormat); // EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js var dayjs_min = __webpack_require__(7484); var dayjs_min_default = /*#__PURE__*/__webpack_require__.n(dayjs_min); -;// CONCATENATED MODULE: ./node_modules/lodash-es/debounce.js - - - - -/** Error message constants. */ -var debounce_FUNC_ERROR_TEXT = 'Expected a function'; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var debounce_nativeMax = Math.max, - debounce_nativeMin = Math.min; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ -function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(debounce_FUNC_ERROR_TEXT); - } - wait = lodash_es_toNumber(wait) || 0; - if (lodash_es_isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? debounce_nativeMax(lodash_es_toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; - - return maxing - ? debounce_nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = lodash_es_now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(lodash_es_now()); - } - - function debounced() { - var time = lodash_es_now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - clearTimeout(timerId); - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -/* harmony default export */ const lodash_es_debounce = (debounce); - ;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseInvoke.js @@ -20520,9 +22730,7 @@ var invoke = _baseRest(_baseInvoke); /* harmony default export */ const lodash_es_invoke = (invoke); -// EXTERNAL MODULE: ./node_modules/localforage-webextensionstorage-driver/local.js -var local = __webpack_require__(7002); -;// CONCATENATED MODULE: ./src/headless/node_modules/pluggable.js/src/pluggable.js +;// CONCATENATED MODULE: ./node_modules/pluggable.js/src/pluggable.js /* ____ __ __ __ _ / __ \/ /_ __ ___ ___ ____ _/ /_ / /__ (_)____ @@ -20656,7 +22864,7 @@ class PluginSocket { if (dep) { var _dep$dependencies; - if ((_dep$dependencies = dep.dependencies) === null || _dep$dependencies === void 0 ? void 0 : _dep$dependencies.includes(plugin.__name__)) { + if ((_dep$dependencies = dep.dependencies) !== null && _dep$dependencies !== void 0 && _dep$dependencies.includes(plugin.__name__)) { /* FIXME: circular dependency checking is only one level deep. */ throw "Found a circular dependency between the plugins \"" + plugin.__name__ + "\" and \"" + name + "\""; } @@ -20689,7 +22897,7 @@ class PluginSocket { if (typeof override === "object") { if (typeof this.plugged[key] === 'undefined') { - this.throwUndefinedDependencyError("Plugin \"".concat(plugin.__name__, "\" tried to override \"").concat(key, "\" but it's not found.")); + this.throwUndefinedDependencyError(`Plugin "${plugin.__name__}" tried to override "${key}" but it's not found.`); } else { this._extendObject(this.plugged[key], override); } @@ -20716,7 +22924,7 @@ class PluginSocket { return; } - if (typeof plugin.enabled === 'boolean' && plugin.enabled || ((_plugin$enabled = plugin.enabled) === null || _plugin$enabled === void 0 ? void 0 : _plugin$enabled.call(plugin, this.plugged)) || plugin.enabled == null) { + if (typeof plugin.enabled === 'boolean' && plugin.enabled || (_plugin$enabled = plugin.enabled) !== null && _plugin$enabled !== void 0 && _plugin$enabled.call(plugin, this.plugged) || plugin.enabled == null) { // isNil Object.assign(plugin, this.properties); @@ -20796,8 +23004,6 @@ function enable(object, name, attrname) { /* harmony default export */ const pluggable = ({ enable }); -// EXTERNAL MODULE: ./node_modules/localforage-webextensionstorage-driver/sync.js -var localforage_webextensionstorage_driver_sync = __webpack_require__(1063); ;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayAggregator.js /** * A specialized version of `baseAggregator` for arrays. @@ -22504,6 +24710,199 @@ CollectionIterator.prototype.next = function () { done: true }; }; +;// CONCATENATED MODULE: ./node_modules/lodash-es/debounce.js + + + + +/** Error message constants. */ +var debounce_FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var debounce_nativeMax = Math.max, + debounce_nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(debounce_FUNC_ERROR_TEXT); + } + wait = lodash_es_toNumber(wait) || 0; + if (lodash_es_isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? debounce_nativeMax(lodash_es_toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? debounce_nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = lodash_es_now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(lodash_es_now()); + } + + function debounced() { + var time = lodash_es_now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +/* harmony default export */ const lodash_es_debounce = (debounce); + ;// CONCATENATED MODULE: ./src/headless/shared/connection.js @@ -22526,7 +24925,7 @@ class Connection extends Strophe.Connection { } static generateResource() { - return "/converse.js-".concat(Math.floor(Math.random() * 139749528).toString()); + return `/converse.js-${Math.floor(Math.random() * 139749528).toString()}`; } async bind() { @@ -22549,8 +24948,8 @@ class Connection extends Strophe.Connection { return headless_log.warn("Could not discover XEP-0156 connection methods"); } - const bosh_links = sizzle_default()("Link[rel=\"urn:xmpp:alt-connections:xbosh\"]", xrd); - const ws_links = sizzle_default()("Link[rel=\"urn:xmpp:alt-connections:websocket\"]", xrd); + const bosh_links = sizzle_default()(`Link[rel="urn:xmpp:alt-connections:xbosh"]`, xrd); + const ws_links = sizzle_default()(`Link[rel="urn:xmpp:alt-connections:websocket"]`, xrd); const bosh_methods = bosh_links.map(el => el.getAttribute('href')); const ws_methods = ws_links.map(el => el.getAttribute('href')); @@ -22581,13 +24980,13 @@ class Connection extends Strophe.Connection { 'Accept': 'application/xrd+xml, text/xml' } }; - const url = "https://".concat(domain, "/.well-known/host-meta"); + const url = `https://${domain}/.well-known/host-meta`; let response; try { response = await fetch(url, options); } catch (e) { - headless_log.error("Failed to discover alternative connection methods at ".concat(url)); + headless_log.error(`Failed to discover alternative connection methods at ${url}`); headless_log.error(e); return; } @@ -22770,7 +25169,7 @@ class Connection extends Strophe.Connection { const { __ } = shared_converse; - headless_log.debug("Status changed to: ".concat(shared_converse.CONNECTION_STATUS[status])); + headless_log.debug(`Status changed to: ${shared_converse.CONNECTION_STATUS[status]}`); if (status === Strophe.Status.ATTACHFAIL) { var _this$worker_attach_p; @@ -22780,7 +25179,7 @@ class Connection extends Strophe.Connection { } else if (status === Strophe.Status.CONNECTED || status === Strophe.Status.ATTACHED) { var _this$worker_attach_p2, _this$worker_attach_p3; - if (((_this$worker_attach_p2 = this.worker_attach_promise) === null || _this$worker_attach_p2 === void 0 ? void 0 : _this$worker_attach_p2.isResolved) && this.status === Strophe.Status.ATTACHED) { + if ((_this$worker_attach_p2 = this.worker_attach_promise) !== null && _this$worker_attach_p2 !== void 0 && _this$worker_attach_p2.isResolved && this.status === Strophe.Status.ATTACHED) { // A different tab must have attached, so nothing to do for us here. return; } @@ -22830,7 +25229,7 @@ class Connection extends Strophe.Connection { let feedback = message; if (message === "host-unknown" || message == "remote-connection-failed") { - feedback = __("Sorry, we could not connect to the XMPP host with domain: %1$s", "\"".concat(Strophe.getDomainFromJid(this.jid), "\"")); + feedback = __("Sorry, we could not connect to the XMPP host with domain: %1$s", `\"${Strophe.getDomainFromJid(this.jid)}\"`); } else if (message !== undefined && message === (Strophe === null || Strophe === void 0 ? void 0 : (_Strophe$ErrorConditi = Strophe.ErrorCondition) === null || _Strophe$ErrorConditi === void 0 ? void 0 : _Strophe$ErrorConditi.NO_AUTH_MECH)) { feedback = __("The XMPP server did not offer a supported authentication mechanism"); } @@ -22853,7 +25252,7 @@ class Connection extends Strophe.Connection { hasResumed() { var _api$settings$get; - if (((_api$settings$get = api.settings.get("connection_options")) === null || _api$settings$get === void 0 ? void 0 : _api$settings$get.worker) || this.isType('bosh')) { + if ((_api$settings$get = api.settings.get("connection_options")) !== null && _api$settings$get !== void 0 && _api$settings$get.worker || this.isType('bosh')) { return shared_converse.connfeedback.get('connection_status') === Strophe.Status.ATTACHED; } else { // Not binding means that the session was resumed. @@ -22879,7 +25278,7 @@ class MockConnection extends Connection { this.sent_stanzas = []; this.IQ_stanzas = []; this.IQ_ids = []; - this.features = Strophe.xmlHtmlNode('' + '' + '' + '' + '' + '' + '' + "" + '' + '' + '' + '').firstChild; + this.features = Strophe.xmlHtmlNode('' + '' + '' + '' + '' + '' + '' + `` + '' + '' + '' + '').firstChild; this._proto._processRequest = () => {}; @@ -22933,26 +25332,44 @@ class MockConnection extends Connection { } } +;// CONCATENATED MODULE: ./node_modules/@lit/reactive-element/css-tag.js +/** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ +const css_tag_t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,e=Symbol();class s{constructor(t,s){if(s!==e)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){return css_tag_t&&void 0===this.t&&(this.t=new CSSStyleSheet,this.t.replaceSync(this.cssText)),this.t}toString(){return this.cssText}}const n=new Map,o=t=>{let o=n.get(t);return void 0===o&&n.set(t,o=new s(t,e)),o},r=t=>o("string"==typeof t?t:t+""),i=(t,...e)=>{const n=1===t.length?t[0]:e.reduce(((e,n,o)=>e+(t=>{if(t instanceof s)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[o+1]),t[0]);return o(n)},S=(e,s)=>{css_tag_t?e.adoptedStyleSheets=s.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):s.forEach((t=>{const s=document.createElement("style");s.textContent=t.cssText,e.appendChild(s)}))},css_tag_u=css_tag_t?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t; +//# sourceMappingURL=css-tag.js.map + +;// CONCATENATED MODULE: ./node_modules/@lit/reactive-element/reactive-element.js + +/** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */var reactive_element_s,reactive_element_e,h,reactive_element_r;const reactive_element_o={toAttribute(t,i){switch(i){case Boolean:t=t?"":null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t)}catch(t){s=null}}return s}},reactive_element_n=(t,i)=>i!==t&&(i==i||t==t),l={attribute:!0,type:String,converter:reactive_element_o,reflect:!1,hasChanged:reactive_element_n};class a extends HTMLElement{constructor(){super(),this.Πi=new Map,this.Πo=void 0,this.Πl=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this.Πh=null,this.u()}static addInitializer(t){var i;null!==(i=this.v)&&void 0!==i||(this.v=[]),this.v.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this.Πp(s,i);void 0!==e&&(this.Πm.set(e,s),t.push(e))})),t}static createProperty(t,i=l){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s="symbol"==typeof t?Symbol():"__"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e)}}static getPropertyDescriptor(t,i,s){return{get(){return this[i]},set(e){const h=this[t];this[i]=e,this.requestUpdate(t,h,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||l}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this.Πm=new Map,this.hasOwnProperty("properties")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(css_tag_u(i))}else void 0!==i&&s.push(css_tag_u(i));return s}static Πp(t,i){const s=i.attribute;return!1===s?void 0:"string"==typeof s?s:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this.Πg=new Promise((t=>this.enableUpdating=t)),this.L=new Map,this.Π_(),this.requestUpdate(),null===(t=this.constructor.v)||void 0===t||t.forEach((t=>t(this)))}addController(t){var i,s;(null!==(i=this.ΠU)&&void 0!==i?i:this.ΠU=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t))}removeController(t){var i;null===(i=this.ΠU)||void 0===i||i.splice(this.ΠU.indexOf(t)>>>0,1)}Π_(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this.Πi.set(i,this[i]),delete this[i])}))}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return S(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)})),this.Πl&&(this.Πl(),this.Πo=this.Πl=void 0)}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)})),this.Πo=new Promise((t=>this.Πl=t))}attributeChangedCallback(t,i,s){this.K(t,s)}Πj(t,i,s=l){var e,h;const r=this.constructor.Πp(t,s);if(void 0!==r&&!0===s.reflect){const n=(null!==(h=null===(e=s.converter)||void 0===e?void 0:e.toAttribute)&&void 0!==h?h:reactive_element_o.toAttribute)(i,s.type);this.Πh=t,null==n?this.removeAttribute(r):this.setAttribute(r,n),this.Πh=null}}K(t,i){var s,e,h;const r=this.constructor,n=r.Πm.get(t);if(void 0!==n&&this.Πh!==n){const t=r.getPropertyOptions(n),l=t.converter,a=null!==(h=null!==(e=null===(s=l)||void 0===s?void 0:s.fromAttribute)&&void 0!==e?e:"function"==typeof l?l:null)&&void 0!==h?h:reactive_element_o.fromAttribute;this.Πh=n,this[n]=a(i,t.type),this.Πh=null}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||reactive_element_n)(this[t],i)?(this.L.has(t)||this.L.set(t,i),!0===s.reflect&&this.Πh!==t&&(void 0===this.Πk&&(this.Πk=new Map),this.Πk.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this.Πg=this.Πq())}async Πq(){this.isUpdatePending=!0;try{for(await this.Πg;this.Πo;)await this.Πo}catch(t){Promise.reject(t)}const t=this.performUpdate();return null!=t&&await t,!this.isUpdatePending}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this.Πi&&(this.Πi.forEach(((t,i)=>this[i]=t)),this.Πi=void 0);let i=!1;const s=this.L;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this.Π$()}catch(t){throw i=!1,this.Π$(),t}i&&this.E(s)}willUpdate(t){}E(t){var i;null===(i=this.ΠU)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}Π$(){this.L=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this.Πg}shouldUpdate(t){return!0}update(t){void 0!==this.Πk&&(this.Πk.forEach(((t,i)=>this.Πj(i,this[i],t))),this.Πk=void 0),this.Π$()}updated(t){}firstUpdated(t){}}a.finalized=!0,a.elementProperties=new Map,a.elementStyles=[],a.shadowRootOptions={mode:"open"},null===(reactive_element_e=(reactive_element_s=globalThis).reactiveElementPlatformSupport)||void 0===reactive_element_e||reactive_element_e.call(reactive_element_s,{ReactiveElement:a}),(null!==(h=(reactive_element_r=globalThis).reactiveElementVersions)&&void 0!==h?h:reactive_element_r.reactiveElementVersions=[]).push("1.0.0-rc.2"); +//# sourceMappingURL=reactive-element.js.map + ;// CONCATENATED MODULE: ./node_modules/lit-html/lit-html.js /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -var lit_html_t, i, s, e; +var lit_html_t, lit_html_i, lit_html_s, lit_html_e; -const o = globalThis.trustedTypes, - l = o ? o.createPolicy("lit-html", { +const lit_html_o = globalThis.trustedTypes, + lit_html_l = lit_html_o ? lit_html_o.createPolicy("lit-html", { createHTML: t => t }) : void 0, - n = "lit$".concat((Math.random() + "").slice(9), "$"), - h = "?" + n, - r = "<".concat(h, ">"), + lit_html_n = `lit$${(Math.random() + "").slice(9)}$`, + lit_html_h = "?" + lit_html_n, + lit_html_r = `<${lit_html_h}>`, lit_html_u = document, c = (t = "") => lit_html_u.createComment(t), d = t => null === t || "object" != typeof t && "function" != typeof t, v = Array.isArray, - a = t => { + lit_html_a = t => { var i; return v(t) || "function" == typeof (null === (i = t) || void 0 === i ? void 0 : i[Symbol.iterator]); }, @@ -23003,11 +25420,11 @@ const o = globalThis.trustedTypes, for (; v < s.length && (u.lastIndex = v, c = u.exec(s), null !== c);) v = u.lastIndex, u === f ? "!--" === c[1] ? u = _ : void 0 !== c[1] ? u = m : void 0 !== c[2] ? (y.test(c[2]) && (o = RegExp("" === c[0] ? (u = null != o ? o : f, d = -1) : void 0 === c[1] ? d = -2 : (d = u.lastIndex - c[2].length, l = c[1], u = void 0 === c[3] ? p : '"' === c[3] ? g : $) : u === g || u === $ ? u = p : u === _ || u === m ? u = f : (u = p, o = void 0); const a = u === p && t[i + 1].startsWith("/>") ? " " : ""; - h += u === f ? s + r : d >= 0 ? (e.push(l), s.slice(0, d) + "$lit$" + s.slice(d) + n + a) : s + n + (-2 === d ? (e.push(void 0), i) : a); + h += u === f ? s + lit_html_r : d >= 0 ? (e.push(l), s.slice(0, d) + "$lit$" + s.slice(d) + lit_html_n + a) : s + lit_html_n + (-2 === d ? (e.push(void 0), i) : a); } const c = h + (t[s] || "") + (2 === i ? "" : ""); - return [void 0 !== l ? l.createHTML(c) : c, e]; + return [void 0 !== lit_html_l ? lit_html_l.createHTML(c) : c, e]; }; class N { @@ -23034,11 +25451,11 @@ class N { if (e.hasAttributes()) { const t = []; - for (const i of e.getAttributeNames()) if (i.endsWith("$lit$") || i.startsWith(n)) { + for (const i of e.getAttributeNames()) if (i.endsWith("$lit$") || i.startsWith(lit_html_n)) { const s = a[r++]; if (t.push(i), void 0 !== s) { - const t = e.getAttribute(s.toLowerCase() + "$lit$").split(n), + const t = e.getAttribute(s.toLowerCase() + "$lit$").split(lit_html_n), i = /([.?@])?(.*)/.exec(s); d.push({ type: 1, @@ -23057,11 +25474,11 @@ class N { } if (y.test(e.tagName)) { - const t = e.textContent.split(n), + const t = e.textContent.split(lit_html_n), i = t.length - 1; if (i > 0) { - e.textContent = o ? o.emptyScript : ""; + e.textContent = lit_html_o ? lit_html_o.emptyScript : ""; for (let s = 0; s < i; s++) e.append(t[s], c()), E.nextNode(), d.push({ type: 2, @@ -23071,16 +25488,16 @@ class N { e.append(t[i], c()); } } - } else if (8 === e.nodeType) if (e.data === h) d.push({ + } else if (8 === e.nodeType) if (e.data === lit_html_h) d.push({ type: 2, index: l });else { let t = -1; - for (; -1 !== (t = e.data.indexOf(n, t + 1));) d.push({ + for (; -1 !== (t = e.data.indexOf(lit_html_n, t + 1));) d.push({ type: 7, index: l - }), t += n.length - 1; + }), t += lit_html_n.length - 1; } l++; @@ -23094,12 +25511,12 @@ class N { } -function S(t, i, s = t, e) { +function lit_html_S(t, i, s = t, e) { var o, l, n, h; if (i === lit_html_w) return i; let r = void 0 !== e ? null === (o = s.Σi) || void 0 === o ? void 0 : o[e] : s.Σo; const u = d(i) ? void 0 : i._$litDirective$; - return (null == r ? void 0 : r.constructor) !== u && (null === (l = null == r ? void 0 : r.O) || void 0 === l || l.call(r, !1), void 0 === u ? r = void 0 : (r = new u(t), r.T(t, s, e)), void 0 !== e ? (null !== (n = (h = s).Σi) && void 0 !== n ? n : h.Σi = [])[e] = r : s.Σo = r), void 0 !== r && (i = S(t, r.S(t, i.values), r, e)), i; + return (null == r ? void 0 : r.constructor) !== u && (null === (l = null == r ? void 0 : r.O) || void 0 === l || l.call(r, !1), void 0 === u ? r = void 0 : (r = new u(t), r.T(t, s, e)), void 0 !== e ? (null !== (n = (h = s).Σi) && void 0 !== n ? n : h.Σi = [])[e] = r : s.Σo = r), void 0 !== r && (i = lit_html_S(t, r.S(t, i.values), r, e)), i; } class k { @@ -23165,7 +25582,7 @@ class C { } I(t, i = this) { - t = S(this, t, i), d(t) ? t === A || null == t || "" === t ? (this.H !== A && this.R(), this.H = A) : t !== this.H && t !== lit_html_w && this.m(t) : void 0 !== t._$litType$ ? this._(t) : void 0 !== t.nodeType ? this.$(t) : a(t) ? this.g(t) : this.m(t); + t = lit_html_S(this, t, i), d(t) ? t === A || null == t || "" === t ? (this.H !== A && this.R(), this.H = A) : t !== this.H && t !== lit_html_w && this.m(t) : void 0 !== t._$litType$ ? this._(t) : void 0 !== t.nodeType ? this.$(t) : lit_html_a(t) ? this.g(t) : this.m(t); } k(t, i = this.B) { @@ -23234,11 +25651,11 @@ class H { I(t, i = this, s, e) { const o = this.strings; let l = !1; - if (void 0 === o) t = S(this, t, i, 0), l = !d(t) || t !== this.H && t !== lit_html_w, l && (this.H = t);else { + if (void 0 === o) t = lit_html_S(this, t, i, 0), l = !d(t) || t !== this.H && t !== lit_html_w, l && (this.H = t);else { const e = t; let n, h; - for (t = o[0], n = 0; n < o.length - 1; n++) h = S(this, e[s + n], i, n), h === lit_html_w && (h = this.H[n]), l || (l = !d(h) || h !== this.H[n]), h === A ? t = A : t !== A && (t += (null != h ? h : "") + o[n + 1]), this.H[n] = h; + for (t = o[0], n = 0; n < o.length - 1; n++) h = lit_html_S(this, e[s + n], i, n), h === lit_html_w && (h = this.H[n]), l || (l = !d(h) || h !== this.H[n]), h === A ? t = A : t !== A && (t += (null != h ? h : "") + o[n + 1]), this.H[n] = h; } l && !e && this.W(t); } @@ -23278,7 +25695,7 @@ class R extends H { I(t, i = this) { var s; - if ((t = null !== (s = S(this, t, i, 0)) && void 0 !== s ? s : A) === lit_html_w) return; + if ((t = null !== (s = lit_html_S(this, t, i, 0)) && void 0 !== s ? s : A) === lit_html_w) return; const e = this.H, o = t === A && e !== A || t.capture !== e.capture || t.once !== e.once || t.passive !== e.passive, l = t !== A && (e === A || o); @@ -23298,20 +25715,20 @@ class z { } I(t) { - S(this, t); + lit_html_S(this, t); } } const Z = { Z: "$lit$", - U: n, - Y: h, + U: lit_html_n, + Y: lit_html_h, q: 1, X: M, tt: k, - it: a, - st: S, + it: lit_html_a, + st: lit_html_S, et: C, ot: H, nt: L, @@ -23319,39 +25736,382 @@ const Z = { lt: I, ht: z }; -null === (i = (lit_html_t = globalThis).litHtmlPlatformSupport) || void 0 === i || i.call(lit_html_t, N, C), (null !== (s = (e = globalThis).litHtmlVersions) && void 0 !== s ? s : e.litHtmlVersions = []).push("2.0.0-rc.3"); +null === (lit_html_i = (lit_html_t = globalThis).litHtmlPlatformSupport) || void 0 === lit_html_i || lit_html_i.call(lit_html_t, N, C), (null !== (lit_html_s = (lit_html_e = globalThis).litHtmlVersions) && void 0 !== lit_html_s ? lit_html_s : lit_html_e.litHtmlVersions = []).push("2.0.0-rc.3"); -;// CONCATENATED MODULE: ./node_modules/@lit/reactive-element/css-tag.js -/** - * @license - * Copyright 2019 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */ -const css_tag_t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,css_tag_e=Symbol();class css_tag_n{constructor(t,n){if(n!==css_tag_e)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){return css_tag_t&&void 0===this.t&&(this.t=new CSSStyleSheet,this.t.replaceSync(this.cssText)),this.t}toString(){return this.cssText}}const css_tag_s=t=>new css_tag_n(t+"",css_tag_e),css_tag_o=new Map,css_tag_r=(t,...s)=>{const r=s.reduce(((e,s,o)=>e+(t=>{if(t instanceof css_tag_n)return t.cssText;if("number"==typeof t)return t;throw Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(s)+t[o+1]),t[0]);let i=css_tag_o.get(r);return void 0===i&&css_tag_o.set(r,i=new css_tag_n(r,css_tag_e)),i},css_tag_i=(e,n)=>{css_tag_t?e.adoptedStyleSheets=n.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):n.forEach((t=>{const n=document.createElement("style");n.textContent=t.cssText,e.appendChild(n)}))},css_tag_S=css_tag_t?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const n of t.cssRules)e+=n.cssText;return css_tag_s(e)})(t):t; -//# sourceMappingURL=css-tag.js.map - -;// CONCATENATED MODULE: ./node_modules/@lit/reactive-element/reactive-element.js +;// CONCATENATED MODULE: ./node_modules/lit-element/lit-element.js /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */var reactive_element_s,reactive_element_e,reactive_element_h,reactive_element_r;const reactive_element_o={toAttribute(t,i){switch(i){case Boolean:t=t?"":null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t)}catch(t){s=null}}return s}},reactive_element_n=(t,i)=>i!==t&&(i==i||t==t),reactive_element_l={attribute:!0,type:String,converter:reactive_element_o,reflect:!1,hasChanged:reactive_element_n};class reactive_element_a extends HTMLElement{constructor(){super(),this.Πi=new Map,this.Πo=void 0,this.Πl=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this.Πh=null,this.u()}static addInitializer(t){var i;null!==(i=this.v)&&void 0!==i||(this.v=[]),this.v.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this.Πp(s,i);void 0!==e&&(this.Πm.set(e,s),t.push(e))})),t}static createProperty(t,i=reactive_element_l){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s="symbol"==typeof t?Symbol():"__"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e)}}static getPropertyDescriptor(t,i,s){return{get(){return this[i]},set(e){const h=this[t];this[i]=e,this.requestUpdate(t,h,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||reactive_element_l}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this.Πm=new Map,this.hasOwnProperty("properties")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(css_tag_S(i))}else void 0!==i&&s.push(css_tag_S(i));return s}static Πp(t,i){const s=i.attribute;return!1===s?void 0:"string"==typeof s?s:"string"==typeof t?t.toLowerCase():void 0}u(){var t;this.Πg=new Promise((t=>this.enableUpdating=t)),this.L=new Map,this.Π_(),this.requestUpdate(),null===(t=this.constructor.v)||void 0===t||t.forEach((t=>t(this)))}addController(t){var i,s;(null!==(i=this.ΠU)&&void 0!==i?i:this.ΠU=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t))}removeController(t){var i;null===(i=this.ΠU)||void 0===i||i.splice(this.ΠU.indexOf(t)>>>0,1)}Π_(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this.Πi.set(i,this[i]),delete this[i])}))}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return css_tag_i(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)})),this.Πl&&(this.Πl(),this.Πo=this.Πl=void 0)}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)})),this.Πo=new Promise((t=>this.Πl=t))}attributeChangedCallback(t,i,s){this.K(t,s)}Πj(t,i,s=reactive_element_l){var e,h;const r=this.constructor.Πp(t,s);if(void 0!==r&&!0===s.reflect){const n=(null!==(h=null===(e=s.converter)||void 0===e?void 0:e.toAttribute)&&void 0!==h?h:reactive_element_o.toAttribute)(i,s.type);this.Πh=t,null==n?this.removeAttribute(r):this.setAttribute(r,n),this.Πh=null}}K(t,i){var s,e,h;const r=this.constructor,n=r.Πm.get(t);if(void 0!==n&&this.Πh!==n){const t=r.getPropertyOptions(n),l=t.converter,a=null!==(h=null!==(e=null===(s=l)||void 0===s?void 0:s.fromAttribute)&&void 0!==e?e:"function"==typeof l?l:null)&&void 0!==h?h:reactive_element_o.fromAttribute;this.Πh=n,this[n]=a(i,t.type),this.Πh=null}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||reactive_element_n)(this[t],i)?(this.L.has(t)||this.L.set(t,i),!0===s.reflect&&this.Πh!==t&&(void 0===this.Πk&&(this.Πk=new Map),this.Πk.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this.Πg=this.Πq())}async Πq(){this.isUpdatePending=!0;try{for(await this.Πg;this.Πo;)await this.Πo}catch(t){Promise.reject(t)}const t=this.performUpdate();return null!=t&&await t,!this.isUpdatePending}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this.Πi&&(this.Πi.forEach(((t,i)=>this[i]=t)),this.Πi=void 0);let i=!1;const s=this.L;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this.ΠU)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this.Π$()}catch(t){throw i=!1,this.Π$(),t}i&&this.E(s)}willUpdate(t){}E(t){var i;null===(i=this.ΠU)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}Π$(){this.L=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this.Πg}shouldUpdate(t){return!0}update(t){void 0!==this.Πk&&(this.Πk.forEach(((t,i)=>this.Πj(i,this[i],t))),this.Πk=void 0),this.Π$()}updated(t){}firstUpdated(t){}}reactive_element_a.finalized=!0,reactive_element_a.shadowRootOptions={mode:"open"},null===(reactive_element_e=(reactive_element_s=globalThis).reactiveElementPlatformSupport)||void 0===reactive_element_e||reactive_element_e.call(reactive_element_s,{ReactiveElement:reactive_element_a}),(null!==(reactive_element_h=(reactive_element_r=globalThis).reactiveElementVersions)&&void 0!==reactive_element_h?reactive_element_h:reactive_element_r.reactiveElementVersions=[]).push("1.0.0-rc.1"); -//# sourceMappingURL=reactive-element.js.map - -;// CONCATENATED MODULE: ./node_modules/lit/node_modules/lit-element/lit-element.js - -/** - * @license - * Copyright 2017 Google LLC - * SPDX-License-Identifier: BSD-3-Clause - */var lit_element_i,lit_element_l,lit_element_o,lit_element_s,lit_element_n,lit_element_a;const lit_element_c=(/* unused pure expression or super */ null && (t));(null!==(lit_element_i=(lit_element_a=globalThis).litElementVersions)&&void 0!==lit_element_i?lit_element_i:lit_element_a.litElementVersions=[]).push("3.0.0-rc.1");class lit_element_h extends reactive_element_a{constructor(){super(...arguments),this.renderOptions={host:this},this.Φt=void 0}createRenderRoot(){var t,e;const r=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=r.firstChild),r}update(t){const r=this.render();super.update(t),this.Φt=V(r,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!1)}render(){return lit_html_w}}lit_element_h.finalized=!0,lit_element_h._$litElement$=!0,null===(lit_element_o=(lit_element_l=globalThis).litElementHydrateSupport)||void 0===lit_element_o||lit_element_o.call(lit_element_l,{LitElement:lit_element_h}),null===(lit_element_n=(lit_element_s=globalThis).litElementPlatformSupport)||void 0===lit_element_n||lit_element_n.call(lit_element_s,{LitElement:lit_element_h});const lit_element_u={K:(t,e,r)=>{t.K(e,r)},L:t=>t.L}; + */var lit_element_i,lit_element_l,lit_element_o,lit_element_s,lit_element_n,lit_element_a;const lit_element_c=(/* unused pure expression or super */ null && (t));(null!==(lit_element_i=(lit_element_a=globalThis).litElementVersions)&&void 0!==lit_element_i?lit_element_i:lit_element_a.litElementVersions=[]).push("3.0.0-rc.2");class lit_element_h extends a{constructor(){super(...arguments),this.renderOptions={host:this},this.Φt=void 0}createRenderRoot(){var t,e;const r=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=r.firstChild),r}update(t){const r=this.render();super.update(t),this.Φt=V(r,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this.Φt)||void 0===t||t.setConnected(!1)}render(){return lit_html_w}}lit_element_h.finalized=!0,lit_element_h._$litElement$=!0,null===(lit_element_o=(lit_element_l=globalThis).litElementHydrateSupport)||void 0===lit_element_o||lit_element_o.call(lit_element_l,{LitElement:lit_element_h}),null===(lit_element_n=(lit_element_s=globalThis).litElementPlatformSupport)||void 0===lit_element_n||lit_element_n.call(lit_element_s,{LitElement:lit_element_h});const lit_element_u={K:(t,e,r)=>{t.K(e,r)},L:t=>t.L}; //# sourceMappingURL=lit-element.js.map ;// CONCATENATED MODULE: ./node_modules/lit/index.js //# sourceMappingURL=index.js.map +// EXTERNAL MODULE: ./node_modules/localforage-webextensionstorage-driver/local.js +var local = __webpack_require__(7002); +// EXTERNAL MODULE: ./node_modules/localforage-webextensionstorage-driver/sync.js +var localforage_webextensionstorage_driver_sync = __webpack_require__(1063); +;// CONCATENATED MODULE: ./src/headless/utils/init.js + + + + + + + + + + + + +function initPlugins(_converse) { + // If initialize gets called a second time (e.g. during tests), then we + // need to re-apply all plugins (for a new converse instance), and we + // therefore need to clear this array that prevents plugins from being + // initialized twice. + // If initialize is called for the first time, then this array is empty + // in any case. + _converse.pluggable.initialized_plugins = []; + const whitelist = CORE_PLUGINS.concat(_converse.api.settings.get("whitelisted_plugins")); + + if (_converse.api.settings.get("singleton")) { + ['converse-bookmarks', 'converse-controlbox', 'converse-headline', 'converse-register'].forEach(name => _converse.api.settings.get("blacklisted_plugins").push(name)); + } + + _converse.pluggable.initializePlugins({ + _converse + }, whitelist, _converse.api.settings.get("blacklisted_plugins")); + /** + * Triggered once all plugins have been initialized. This is a useful event if you want to + * register event handlers but would like your own handlers to be overridable by + * plugins. In that case, you need to first wait until all plugins have been + * initialized, so that their overrides are active. One example where this is used + * is in [converse-notifications.js](https://github.com/jcbrand/converse.js/blob/master/src/converse-notification.js)`. + * + * Also available as an [ES2015 Promise](http://es6-features.org/#PromiseUsage) + * which can be listened to with `_converse.api.waitUntil`. + * + * @event _converse#pluginsInitialized + * @memberOf _converse + * @example _converse.api.listen.on('pluginsInitialized', () => { ... }); + */ + + + _converse.api.trigger('pluginsInitialized'); +} +async function initClientConfig(_converse) { + /* The client config refers to configuration of the client which is + * independent of any particular user. + * What this means is that config values need to persist across + * user sessions. + */ + const id = 'converse.client-config'; + _converse.config = new Model({ + id, + 'trusted': true + }); + _converse.config.browserStorage = createStore(id, "session"); + await new Promise(r => _converse.config.fetch({ + 'success': r, + 'error': r + })); + /** + * Triggered once the XMPP-client configuration has been initialized. + * The client configuration is independent of any particular and its values + * persist across user sessions. + * + * @event _converse#clientConfigInitialized + * @example + * _converse.api.listen.on('clientConfigInitialized', () => { ... }); + */ + + _converse.api.trigger('clientConfigInitialized'); +} +async function initSessionStorage(_converse) { + await storage.sessionStorageInitialized; + _converse.storage = { + 'session': storage.localForage.createInstance({ + 'name': _converse.isTestEnv() ? 'converse-test-session' : 'converse-session', + 'description': 'sessionStorage instance', + 'driver': ['sessionStorageWrapper'] + }) + }; +} + +function initPersistentStorage(_converse, store_name) { + if (_converse.api.settings.get('persistent_store') === 'sessionStorage') { + return; + } else if (_converse.api.settings.get("persistent_store") === 'BrowserExtLocal') { + storage.localForage.defineDriver(local/* default */.Z).then(() => storage.localForage.setDriver('webExtensionLocalStorage')); + _converse.storage['persistent'] = storage.localForage; + return; + } else if (_converse.api.settings.get("persistent_store") === 'BrowserExtSync') { + storage.localForage.defineDriver(localforage_webextensionstorage_driver_sync/* default */.Z).then(() => storage.localForage.setDriver('webExtensionSyncStorage')); + _converse.storage['persistent'] = storage.localForage; + return; + } + + const config = { + 'name': _converse.isTestEnv() ? 'converse-test-persistent' : 'converse-persistent', + 'storeName': store_name + }; + + if (_converse.api.settings.get("persistent_store") === 'localStorage') { + config['description'] = 'localStorage instance'; + config['driver'] = [storage.localForage.LOCALSTORAGE]; + } else if (_converse.api.settings.get("persistent_store") === 'IndexedDB') { + config['description'] = 'indexedDB instance'; + config['driver'] = [storage.localForage.INDEXEDDB]; + } + + _converse.storage['persistent'] = storage.localForage.createInstance(config); +} + +function saveJIDtoSession(_converse, jid) { + jid = _converse.session.get('jid') || jid; + + if (_converse.api.settings.get("authentication") !== _converse.ANONYMOUS && !Strophe.getResourceFromJid(jid)) { + jid = jid.toLowerCase() + Connection.generateResource(); + } + + _converse.jid = jid; + _converse.bare_jid = Strophe.getBareJidFromJid(jid); + _converse.resource = Strophe.getResourceFromJid(jid); + _converse.domain = Strophe.getDomainFromJid(jid); + + _converse.session.save({ + 'jid': jid, + 'bare_jid': _converse.bare_jid, + 'resource': _converse.resource, + 'domain': _converse.domain, + // We use the `active` flag to determine whether we should use the values from sessionStorage. + // When "cloning" a tab (e.g. via middle-click), the `active` flag will be set and we'll create + // a new empty user session, otherwise it'll be false and we can re-use the user session. + 'active': true + }); // Set JID on the connection object so that when we call `connection.bind` + // the new resource is found by Strophe.js and sent to the XMPP server. + + + _converse.connection.jid = jid; +} + +async function initSession(_converse, jid) { + var _converse$session; + + const is_shared_session = _converse.api.settings.get('connection_options').worker; + + const bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase(); + const id = `converse.session-${bare_jid}`; + + if (((_converse$session = _converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.get('id')) !== id) { + initPersistentStorage(_converse, bare_jid); + _converse.session = new Model({ + id + }); + initStorage(_converse.session, id, is_shared_session ? "persistent" : "session"); + await new Promise(r => _converse.session.fetch({ + 'success': r, + 'error': r + })); + + if (!is_shared_session && _converse.session.get('active')) { + // If the `active` flag is set, it means this tab was cloned from + // another (e.g. via middle-click), and its session data was copied over. + _converse.session.clear(); + + _converse.session.save({ + id + }); + } + + saveJIDtoSession(_converse, jid); + /** + * Triggered once the user's session has been initialized. The session is a + * cache which stores information about the user's current session. + * @event _converse#userSessionInitialized + * @memberOf _converse + */ + + _converse.api.trigger('userSessionInitialized'); + } else { + saveJIDtoSession(_converse, jid); + } +} +function registerGlobalEventHandlers(_converse) { + document.addEventListener("visibilitychange", _converse.saveWindowState); + + _converse.saveWindowState({ + 'type': document.hidden ? "blur" : "focus" + }); // Set initial state + + /** + * Called once Converse has registered its global event handlers + * (for events such as window resize or unload). + * Plugins can listen to this event as cue to register their own + * global event handlers. + * @event _converse#registeredGlobalEventHandlers + * @example _converse.api.listen.on('registeredGlobalEventHandlers', () => { ... }); + */ + + + _converse.api.trigger('registeredGlobalEventHandlers'); +} + +function unregisterGlobalEventHandlers(_converse) { + const { + api + } = _converse; + document.removeEventListener("visibilitychange", _converse.saveWindowState); + api.trigger('unregisteredGlobalEventHandlers'); +} // Make sure everything is reset in case this is a subsequent call to +// converse.initialize (happens during tests). + + +async function cleanup(_converse) { + var _converse$connection; + + const { + api + } = _converse; + await api.trigger('cleanup', { + 'synchronous': true + }); + + _converse.router.history.stop(); + + unregisterGlobalEventHandlers(_converse); + (_converse$connection = _converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.reset(); + + _converse.stopListening(); + + _converse.off(); + + if (_converse.promises['initialized'].isResolved) { + api.promises.add('initialized'); + } +} + +async function getLoginCredentials() { + let credentials; + let wait = 0; + + while (!credentials) { + try { + credentials = await fetchLoginCredentials(wait); // eslint-disable-line no-await-in-loop + } catch (e) { + headless_log.error('Could not fetch login credentials'); + headless_log.error(e); + } // If unsuccessful, we wait 2 seconds between subsequent attempts to + // fetch the credentials. + + + wait = 2000; + } + + return credentials; +} + +function fetchLoginCredentials(wait = 0) { + return new Promise(lodash_es_debounce(async (resolve, reject) => { + let xhr = new XMLHttpRequest(); + xhr.open('GET', shared_converse.api.settings.get("credentials_url"), true); + xhr.setRequestHeader('Accept', 'application/json, text/javascript'); + + xhr.onload = () => { + if (xhr.status >= 200 && xhr.status < 400) { + const data = JSON.parse(xhr.responseText); + + shared_converse.setUserJID(data.jid).then(() => { + resolve({ + jid: data.jid, + password: data.password + }); + }); + } else { + reject(new Error(`${xhr.status}: ${xhr.responseText}`)); + } + }; + + xhr.onerror = reject; + /** + * *Hook* which allows modifying the server request + * @event _converse#beforeFetchLoginCredentials + */ + + xhr = await shared_converse.api.hook('beforeFetchLoginCredentials', this, xhr); + xhr.send(); + }, wait)); +} + +async function attemptNonPreboundSession(credentials, automatic) { + const { + api + } = shared_converse; + + if (api.settings.get("authentication") === shared_converse.LOGIN) { + // XXX: If EITHER ``keepalive`` or ``auto_login`` is ``true`` and + // ``authentication`` is set to ``login``, then Converse will try to log the user in, + // since we don't have a way to distinguish between wether we're + // restoring a previous session (``keepalive``) or whether we're + // automatically setting up a new session (``auto_login``). + // So we can't do the check (!automatic || _converse.api.settings.get("auto_login")) here. + if (credentials) { + connect(credentials); + } else if (shared_converse.api.settings.get("credentials_url")) { + // We give credentials_url preference, because + // _converse.connection.pass might be an expired token. + connect(await getLoginCredentials()); + } else if (shared_converse.jid && (shared_converse.api.settings.get("password") || shared_converse.connection.pass)) { + connect(); + } else if (!shared_converse.isTestEnv() && 'credentials' in navigator) { + connect(await getLoginCredentialsFromBrowser()); + } else { + !shared_converse.isTestEnv() && headless_log.warn("attemptNonPreboundSession: Couldn't find credentials to log in with"); + } + } else if ([shared_converse.ANONYMOUS, shared_converse.EXTERNAL].includes(shared_converse.api.settings.get("authentication")) && (!automatic || shared_converse.api.settings.get("auto_login"))) { + connect(); + } +} + +function connect(credentials) { + if ([shared_converse.ANONYMOUS, shared_converse.EXTERNAL].includes(shared_converse.api.settings.get("authentication"))) { + if (!shared_converse.jid) { + throw new Error("Config Error: when using anonymous login " + "you need to provide the server's domain via the 'jid' option. " + "Either when calling converse.initialize, or when calling " + "_converse.api.user.login."); + } + + if (!shared_converse.connection.reconnecting) { + shared_converse.connection.reset(); + } + + shared_converse.connection.connect(shared_converse.jid.toLowerCase()); + } else if (shared_converse.api.settings.get("authentication") === shared_converse.LOGIN) { + var _converse$connection2; + + const password = credentials ? credentials.password : ((_converse$connection2 = shared_converse.connection) === null || _converse$connection2 === void 0 ? void 0 : _converse$connection2.pass) || shared_converse.api.settings.get("password"); + + if (!password) { + if (shared_converse.api.settings.get("auto_login")) { + throw new Error("autoLogin: If you use auto_login and " + "authentication='login' then you also need to provide a password."); + } + + shared_converse.connection.setDisconnectionCause(Strophe.Status.AUTHFAIL, undefined, true); + + shared_converse.api.connection.disconnect(); + + return; + } + + if (!shared_converse.connection.reconnecting) { + shared_converse.connection.reset(); + } + + shared_converse.connection.connect(shared_converse.jid, password); + } +} ;// CONCATENATED MODULE: ./src/headless/core.js /** * @copyright The Converse.js contributors @@ -23377,10 +26137,6 @@ const css_tag_t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.na - - - - @@ -23388,10 +26144,12 @@ const css_tag_t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.na dayjs_min_default().extend((advancedFormat_default())); // Add Strophe Namespaces +Strophe.addNamespace('ACTIVITY', 'http://jabber.org/protocol/activity'); Strophe.addNamespace('CARBONS', 'urn:xmpp:carbons:2'); Strophe.addNamespace('CHATSTATES', 'http://jabber.org/protocol/chatstates'); Strophe.addNamespace('CSI', 'urn:xmpp:csi:0'); Strophe.addNamespace('DELAY', 'urn:xmpp:delay'); +Strophe.addNamespace('EME', 'urn:xmpp:eme:0'); Strophe.addNamespace('FASTEN', 'urn:xmpp:fasten:0'); Strophe.addNamespace('FORWARD', 'urn:xmpp:forward:0'); Strophe.addNamespace('HINTS', 'urn:xmpp:hints'); @@ -23420,12 +26178,8 @@ Strophe.addNamespace('STYLING', 'urn:xmpp:styling:0'); Strophe.addNamespace('VCARD', 'vcard-temp'); Strophe.addNamespace('VCARDUPDATE', 'vcard-temp:x:update'); Strophe.addNamespace('XFORM', 'jabber:x:data'); -Strophe.addNamespace('XHTML', 'http://www.w3.org/1999/xhtml'); // Core plugins are whitelisted automatically -// These are just the @converse/headless plugins, for the full converse, -// the other plugins are whitelisted in src/converse.js - -const CORE_PLUGINS = ['converse-adhoc', 'converse-bookmarks', 'converse-bosh', 'converse-caps', 'converse-carbons', 'converse-chat', 'converse-chatboxes', 'converse-disco', 'converse-emoji', 'converse-headlines', 'converse-mam', 'converse-muc', 'converse-ping', 'converse-pubsub', 'converse-roster', 'converse-smacks', 'converse-status', 'converse-vcard']; -shared_converse.VERSION_NAME = "v7.0.3dev"; +Strophe.addNamespace('XHTML', 'http://www.w3.org/1999/xhtml'); +shared_converse.VERSION_NAME = "v8.0.2dev"; Object.assign(shared_converse, Events); // Make converse pluggable pluggable.enable(shared_converse, '_converse', 'pluggable'); @@ -23529,7 +26283,7 @@ const api = shared_converse.api = { await shared_converse.setUserJID(api.settings.get("jid")); } - if ((_converse$connection2 = shared_converse.connection) === null || _converse$connection2 === void 0 ? void 0 : _converse$connection2.reconnecting) { + if ((_converse$connection2 = shared_converse.connection) !== null && _converse$connection2 !== void 0 && _converse$connection2.reconnecting) { shared_converse.connection.debouncedReconnect(); } else { return shared_converse.connection.reconnect(); @@ -23624,6 +26378,8 @@ const api = shared_converse.api = { * @memberOf _converse.api */ user: { + settings: user_settings_api, + /** * @method _converse.api.user.jid * @returns {string} The current user's full JID (Jabber ID) @@ -23653,13 +26409,13 @@ const api = shared_converse.api = { async login(jid, password, automatic = false) { var _converse$connection3, _api$settings$get; - jid = jid || shared_converse.jid; + jid = jid || api.settings.get('jid'); - if (!((_converse$connection3 = shared_converse.connection) === null || _converse$connection3 === void 0 ? void 0 : _converse$connection3.jid) || jid && !utils_core.isSameDomain(shared_converse.connection.jid, jid)) { + if (!((_converse$connection3 = shared_converse.connection) !== null && _converse$connection3 !== void 0 && _converse$connection3.jid) || jid && !utils_core.isSameDomain(shared_converse.connection.jid, jid)) { await shared_converse.initConnection(); } - if (((_api$settings$get = api.settings.get("connection_options")) === null || _api$settings$get === void 0 ? void 0 : _api$settings$get.worker) && (await shared_converse.connection.restoreWorkerSession())) { + if ((_api$settings$get = api.settings.get("connection_options")) !== null && _api$settings$get !== void 0 && _api$settings$get.worker && (await shared_converse.connection.restoreWorkerSession())) { return; } @@ -23725,151 +26481,10 @@ const api = shared_converse.api = { } return promise; - }, - - /** - * API for accessing and setting user settings. User settings are - * different from the application settings from {@link _converse.api.settings} - * because they are per-user and set via user action. - * @namespace _converse.api.user.settings - * @memberOf _converse.api.user - */ - settings: { - /** - * Returns the user settings model. Useful when you want to listen for change events. - * @async - * @method _converse.api.user.settings.getModel - * @returns {Promise} - * @example const settings = await _converse.api.user.settings.getModel(); - */ - getModel() { - return getUserSettings(); - }, - - /** - * Get the value of a particular user setting. - * @method _converse.api.user.settings.get - * @param {String} key - The setting name - * @param {*} [fallback] - An optional fallback value if the user setting is undefined - * @returns {Promise} Promise which resolves with the value of the particular configuration setting. - * @example _converse.api.user.settings.get("foo"); - */ - async get(key, fallback) { - const user_settings = await getUserSettings(); - return user_settings.get(key) === undefined ? fallback : user_settings.get(key); - }, - - /** - * Set one or many user settings. - * @async - * @method _converse.api.user.settings.set - * @param {Object} [settings] An object containing configuration settings. - * @param {string} [key] Alternatively to passing in an object, you can pass in a key and a value. - * @param {string} [value] - * @example _converse.api.user.settings.set("foo", "bar"); - * @example - * _converse.api.user.settings.set({ - * "foo": "bar", - * "baz": "buz" - * }); - */ - set(key, val) { - if (lodash_es_isObject(key)) { - return updateUserSettings(key, { - 'promise': true - }); - } else { - const o = {}; - o[key] = val; - return updateUserSettings(o, { - 'promise': true - }); - } - }, - - /** - * Clears all the user settings - * @async - * @method _converse.api.user.settings.clear - */ - clear() { - return clearUserSettings(); - } - - } - }, - - /** - * This grouping allows access to the - * [configuration settings](/docs/html/configuration.html#configuration-settings) - * of Converse. - * - * @namespace _converse.api.settings - * @memberOf _converse.api - */ - settings: { - /** - * Allows new configuration settings to be specified, or new default values for - * existing configuration settings to be specified. - * - * Note, calling this method *after* converse.initialize has been - * called will *not* change the initialization settings provided via - * `converse.initialize`. - * - * @method _converse.api.settings.extend - * @param {object} settings The configuration settings - * @example - * _converse.api.settings.extend({ - * 'enable_foo': true - * }); - * - * // The user can then override the default value of the configuration setting when - * // calling `converse.initialize`. - * converse.initialize({ - * 'enable_foo': false - * }); - */ - extend(settings) { - return extendAppSettings(settings); - }, - - update(settings) { - headless_log.warn("The api.settings.update method has been deprecated and will be removed. " + "Please use api.settings.extend instead."); - return this.extend(settings); - }, - - /** - * @method _converse.api.settings.get - * @returns {*} Value of the particular configuration setting. - * @example _converse.api.settings.get("play_sounds"); - */ - get(key) { - return getAppSetting(key); - }, - - /** - * Set one or many configuration settings. - * - * Note, this is not an alternative to calling {@link converse.initialize}, which still needs - * to be called. Generally, you'd use this method after Converse is already - * running and you want to change the configuration on-the-fly. - * - * @method _converse.api.settings.set - * @param {Object} [settings] An object containing configuration settings. - * @param {string} [key] Alternatively to passing in an object, you can pass in a key and a value. - * @param {string} [value] - * @example _converse.api.settings.set("play_sounds", true); - * @example - * _converse.api.settings.set({ - * "play_sounds": true, - * "hide_offline_users": true - * }); - */ - set(key, val) { - updateAppSettings(key, val); } }, + settings: settings_api, /** * Converse and its plugins trigger various events which you can listen to via the @@ -24033,7 +26648,7 @@ const api = shared_converse.api = { if (typeof stanza === 'string') { stanza = utils_core.toStanza(stanza); - } else if ((_stanza = stanza) === null || _stanza === void 0 ? void 0 : _stanza.nodeTree) { + } else if ((_stanza = stanza) !== null && _stanza !== void 0 && _stanza.nodeTree) { stanza = stanza.nodeTree; } @@ -24059,10 +26674,10 @@ const api = shared_converse.api = { * nothing to wait for, so an already resolved promise is returned. */ sendIQ(stanza, timeout = shared_converse.STANZA_TIMEOUT, reject = true) { - var _stanza$nodeTree, _stanza2; + var _stanza2; let promise; - stanza = (_stanza$nodeTree = (_stanza2 = stanza) === null || _stanza2 === void 0 ? void 0 : _stanza2.nodeTree) !== null && _stanza$nodeTree !== void 0 ? _stanza$nodeTree : stanza; + stanza = ((_stanza2 = stanza) === null || _stanza2 === void 0 ? void 0 : _stanza2.nodeTree) ?? stanza; if (['get', 'set'].includes(stanza.getAttribute('type'))) { timeout = timeout || shared_converse.STANZA_TIMEOUT; @@ -24071,7 +26686,7 @@ const api = shared_converse.api = { promise = new Promise((resolve, reject) => shared_converse.connection.sendIQ(stanza, resolve, reject, timeout)); promise.catch(e => { if (e === null) { - throw new TimeoutError("Timeout error after ".concat(timeout, "ms for the following IQ stanza: ").concat(Strophe.serialize(stanza))); + throw new TimeoutError(`Timeout error after ${timeout}ms for the following IQ stanza: ${Strophe.serialize(stanza)}`); } }); } else { @@ -24088,121 +26703,6 @@ const api = shared_converse.api = { } }; - -shared_converse.isUniView = function () { - /* We distinguish between UniView and MultiView instances. - * - * UniView means that only one chat is visible, even though there might be multiple ongoing chats. - * MultiView means that multiple chats may be visible simultaneously. - */ - return ['mobile', 'fullscreen', 'embedded'].includes(api.settings.get("view_mode")); -}; - -async function initSessionStorage() { - await storage.sessionStorageInitialized; - shared_converse.storage = { - 'session': storage.localForage.createInstance({ - 'name': shared_converse.isTestEnv() ? 'converse-test-session' : 'converse-session', - 'description': 'sessionStorage instance', - 'driver': ['sessionStorageWrapper'] - }) - }; -} - -function initPersistentStorage() { - if (api.settings.get('persistent_store') === 'sessionStorage') { - return; - } else if (shared_converse.api.settings.get("persistent_store") === 'BrowserExtLocal') { - storage.localForage.defineDriver(local/* default */.Z).then(() => storage.localForage.setDriver('webExtensionLocalStorage')); - shared_converse.storage.persistent = storage.localForage; - return; - } else if (shared_converse.api.settings.get("persistent_store") === 'BrowserExtSync') { - storage.localForage.defineDriver(localforage_webextensionstorage_driver_sync/* default */.Z).then(() => storage.localForage.setDriver('webExtensionSyncStorage')); - shared_converse.storage.persistent = storage.localForage; - return; - } - - const config = { - 'name': shared_converse.isTestEnv() ? 'converse-test-persistent' : 'converse-persistent', - 'storeName': shared_converse.bare_jid - }; - - if (shared_converse.api.settings.get("persistent_store") === 'localStorage') { - config['description'] = 'localStorage instance'; - config['driver'] = [storage.localForage.LOCALSTORAGE]; - } else if (shared_converse.api.settings.get("persistent_store") === 'IndexedDB') { - config['description'] = 'indexedDB instance'; - config['driver'] = [storage.localForage.INDEXEDDB]; - } - - shared_converse.storage.persistent = storage.localForage.createInstance(config); -} - -function initPlugins() { - // If initialize gets called a second time (e.g. during tests), then we - // need to re-apply all plugins (for a new converse instance), and we - // therefore need to clear this array that prevents plugins from being - // initialized twice. - // If initialize is called for the first time, then this array is empty - // in any case. - shared_converse.pluggable.initialized_plugins = []; - const whitelist = CORE_PLUGINS.concat(shared_converse.api.settings.get("whitelisted_plugins")); - - if (shared_converse.api.settings.get("singleton")) { - ['converse-bookmarks', 'converse-controlbox', 'converse-headline', 'converse-register'].forEach(name => shared_converse.api.settings.get("blacklisted_plugins").push(name)); - } - - shared_converse.pluggable.initializePlugins({ - _converse: shared_converse - }, whitelist, shared_converse.api.settings.get("blacklisted_plugins")); - /** - * Triggered once all plugins have been initialized. This is a useful event if you want to - * register event handlers but would like your own handlers to be overridable by - * plugins. In that case, you need to first wait until all plugins have been - * initialized, so that their overrides are active. One example where this is used - * is in [converse-notifications.js](https://github.com/jcbrand/converse.js/blob/master/src/converse-notification.js)`. - * - * Also available as an [ES2015 Promise](http://es6-features.org/#PromiseUsage) - * which can be listened to with `_converse.api.waitUntil`. - * - * @event _converse#pluginsInitialized - * @memberOf _converse - * @example _converse.api.listen.on('pluginsInitialized', () => { ... }); - */ - - - shared_converse.api.trigger('pluginsInitialized'); -} - -async function initClientConfig() { - /* The client config refers to configuration of the client which is - * independent of any particular user. - * What this means is that config values need to persist across - * user sessions. - */ - const id = 'converse.client-config'; - shared_converse.config = new Model({ - id, - 'trusted': true - }); - shared_converse.config.browserStorage = createStore(id, "session"); - await new Promise(r => shared_converse.config.fetch({ - 'success': r, - 'error': r - })); - /** - * Triggered once the XMPP-client configuration has been initialized. - * The client configuration is independent of any particular and its values - * persist across user sessions. - * - * @event _converse#clientConfigInitialized - * @example - * _converse.api.listen.on('clientConfigInitialized', () => { ... }); - */ - - shared_converse.api.trigger('clientConfigInitialized'); -} - async function tearDown() { await shared_converse.api.trigger('beforeTearDown', { 'synchronous': true @@ -24219,72 +26719,6 @@ async function tearDown() { return shared_converse; } -async function attemptNonPreboundSession(credentials, automatic) { - const { - api - } = shared_converse; - - if (api.settings.get("authentication") === shared_converse.LOGIN) { - // XXX: If EITHER ``keepalive`` or ``auto_login`` is ``true`` and - // ``authentication`` is set to ``login``, then Converse will try to log the user in, - // since we don't have a way to distinguish between wether we're - // restoring a previous session (``keepalive``) or whether we're - // automatically setting up a new session (``auto_login``). - // So we can't do the check (!automatic || _converse.api.settings.get("auto_login")) here. - if (credentials) { - connect(credentials); - } else if (shared_converse.api.settings.get("credentials_url")) { - // We give credentials_url preference, because - // _converse.connection.pass might be an expired token. - connect(await getLoginCredentials()); - } else if (shared_converse.jid && (shared_converse.api.settings.get("password") || shared_converse.connection.pass)) { - connect(); - } else if (!shared_converse.isTestEnv() && 'credentials' in navigator) { - connect(await getLoginCredentialsFromBrowser()); - } else { - !shared_converse.isTestEnv() && headless_log.warn("attemptNonPreboundSession: Couldn't find credentials to log in with"); - } - } else if ([shared_converse.ANONYMOUS, shared_converse.EXTERNAL].includes(shared_converse.api.settings.get("authentication")) && (!automatic || shared_converse.api.settings.get("auto_login"))) { - connect(); - } -} - -function connect(credentials) { - if ([shared_converse.ANONYMOUS, shared_converse.EXTERNAL].includes(shared_converse.api.settings.get("authentication"))) { - if (!shared_converse.jid) { - throw new Error("Config Error: when using anonymous login " + "you need to provide the server's domain via the 'jid' option. " + "Either when calling converse.initialize, or when calling " + "_converse.api.user.login."); - } - - if (!shared_converse.connection.reconnecting) { - shared_converse.connection.reset(); - } - - shared_converse.connection.connect(shared_converse.jid.toLowerCase()); - } else if (shared_converse.api.settings.get("authentication") === shared_converse.LOGIN) { - var _converse$connection4; - - const password = credentials ? credentials.password : ((_converse$connection4 = shared_converse.connection) === null || _converse$connection4 === void 0 ? void 0 : _converse$connection4.pass) || shared_converse.api.settings.get("password"); - - if (!password) { - if (shared_converse.api.settings.get("auto_login")) { - throw new Error("autoLogin: If you use auto_login and " + "authentication='login' then you also need to provide a password."); - } - - shared_converse.connection.setDisconnectionCause(Strophe.Status.AUTHFAIL, undefined, true); - - shared_converse.api.connection.disconnect(); - - return; - } - - if (!shared_converse.connection.reconnecting) { - shared_converse.connection.reset(); - } - - shared_converse.connection.connect(shared_converse.jid, password); - } -} - shared_converse.shouldClearCache = () => !shared_converse.config.get('trusted') || api.settings.get('clear_cache_on_logout') || shared_converse.isTestEnv(); function clearSession() { @@ -24340,76 +26774,6 @@ shared_converse.initConnection = function () { api.trigger('connectionInitialized'); }; - -async function initSession(jid) { - var _converse$session2; - - const is_shared_session = api.settings.get('connection_options').worker; - const bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase(); - const id = "converse.session-".concat(bare_jid); - - if (((_converse$session2 = shared_converse.session) === null || _converse$session2 === void 0 ? void 0 : _converse$session2.get('id')) !== id) { - initPersistentStorage(); - shared_converse.session = new Model({ - id - }); - initStorage(shared_converse.session, id, is_shared_session ? "persistent" : "session"); - await new Promise(r => shared_converse.session.fetch({ - 'success': r, - 'error': r - })); - - if (!is_shared_session && shared_converse.session.get('active')) { - // If the `active` flag is set, it means this tab was cloned from - // another (e.g. via middle-click), and its session data was copied over. - shared_converse.session.clear(); - - shared_converse.session.save({ - id - }); - } - - saveJIDtoSession(jid); - /** - * Triggered once the user's session has been initialized. The session is a - * cache which stores information about the user's current session. - * @event _converse#userSessionInitialized - * @memberOf _converse - */ - - shared_converse.api.trigger('userSessionInitialized'); - } else { - saveJIDtoSession(jid); - } -} - -function saveJIDtoSession(jid) { - jid = shared_converse.session.get('jid') || jid; - - if (shared_converse.api.settings.get("authentication") !== shared_converse.ANONYMOUS && !Strophe.getResourceFromJid(jid)) { - jid = jid.toLowerCase() + Connection.generateResource(); - } - - shared_converse.jid = jid; - shared_converse.bare_jid = Strophe.getBareJidFromJid(jid); - shared_converse.resource = Strophe.getResourceFromJid(jid); - shared_converse.domain = Strophe.getDomainFromJid(jid); - - shared_converse.session.save({ - 'jid': jid, - 'bare_jid': shared_converse.bare_jid, - 'resource': shared_converse.resource, - 'domain': shared_converse.domain, - // We use the `active` flag to determine whether we should use the values from sessionStorage. - // When "cloning" a tab (e.g. via middle-click), the `active` flag will be set and we'll create - // a new empty user session, otherwise it'll be false and we can re-use the user session. - 'active': true - }); // Set JID on the connection object so that when we call `connection.bind` - // the new resource is found by Strophe.js and sent to the XMPP server. - - - shared_converse.connection.jid = jid; -} /** * Stores the passed in JID for the current user, potentially creating a * resource if the JID is bare. @@ -24426,7 +26790,7 @@ function saveJIDtoSession(jid) { shared_converse.setUserJID = async function (jid) { - await initSession(jid); + await initSession(shared_converse, jid); /** * Triggered whenever the user's JID has been updated * @event _converse#setUserJID @@ -24454,93 +26818,6 @@ function setUpXMLLogging() { shared_converse.connection.xmlOutput = body => headless_log.debug(body.outerHTML, 'color: darkcyan'); } -async function getLoginCredentials() { - let credentials; - let wait = 0; - - while (!credentials) { - try { - credentials = await fetchLoginCredentials(wait); // eslint-disable-line no-await-in-loop - } catch (e) { - headless_log.error('Could not fetch login credentials'); - headless_log.error(e); - } // If unsuccessful, we wait 2 seconds between subsequent attempts to - // fetch the credentials. - - - wait = 2000; - } - - return credentials; -} - -async function getLoginCredentialsFromBrowser() { - try { - const creds = await navigator.credentials.get({ - 'password': true - }); - - if (creds && creds.type == 'password' && utils_core.isValidJID(creds.id)) { - await shared_converse.setUserJID(creds.id); - return { - 'jid': creds.id, - 'password': creds.password - }; - } - } catch (e) { - headless_log.error(e); - } -} // Make sure everything is reset in case this is a subsequent call to -// converse.initialize (happens during tests). - - -async function cleanup() { - var _converse$connection5; - - await api.trigger('cleanup', { - 'synchronous': true - }); - - shared_converse.router.history.stop(); - - unregisterGlobalEventHandlers(); - (_converse$connection5 = shared_converse.connection) === null || _converse$connection5 === void 0 ? void 0 : _converse$connection5.reset(); - - shared_converse.stopListening(); - - shared_converse.off(); - - if (shared_converse.promises.initialized.isResolved) { - api.promises.add('initialized'); - } -} - -function fetchLoginCredentials(wait = 0) { - return new Promise(lodash_es_debounce((resolve, reject) => { - const xhr = new XMLHttpRequest(); - xhr.open('GET', api.settings.get("credentials_url"), true); - xhr.setRequestHeader('Accept', 'application/json, text/javascript'); - - xhr.onload = () => { - if (xhr.status >= 200 && xhr.status < 400) { - const data = JSON.parse(xhr.responseText); - - shared_converse.setUserJID(data.jid).then(() => { - resolve({ - jid: data.jid, - password: data.password - }); - }); - } else { - reject(new Error("".concat(xhr.status, ": ").concat(xhr.responseText))); - } - }; - - xhr.onerror = reject; - xhr.send(); - }, wait)); -} - shared_converse.saveWindowState = function (ev) { // XXX: eventually we should be able to just use // document.visibilityState (when we drop support for older @@ -24577,31 +26854,6 @@ shared_converse.saveWindowState = function (ev) { }); }; -function registerGlobalEventHandlers() { - document.addEventListener("visibilitychange", shared_converse.saveWindowState); - - shared_converse.saveWindowState({ - 'type': document.hidden ? "blur" : "focus" - }); // Set initial state - - /** - * Called once Converse has registered its global event handlers - * (for events such as window resize or unload). - * Plugins can listen to this event as cue to register their own - * global event handlers. - * @event _converse#registeredGlobalEventHandlers - * @example _converse.api.listen.on('registeredGlobalEventHandlers', () => { ... }); - */ - - - api.trigger('registeredGlobalEventHandlers'); -} - -function unregisterGlobalEventHandlers() { - document.removeEventListener("visibilitychange", shared_converse.saveWindowState); - api.trigger('unregisteredGlobalEventHandlers'); -} - shared_converse.ConnectionFeedback = Model.extend({ defaults: { 'connection_status': Strophe.Status.DISCONNECTED, @@ -24613,21 +26865,6 @@ shared_converse.ConnectionFeedback = Model.extend({ } }); - -function setUnloadEvent() { - if ('onpagehide' in window) { - // Pagehide gets thrown in more cases than unload. Specifically it - // gets thrown when the page is cached and not just - // closed/destroyed. It's the only viable event on mobile Safari. - // https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/ - shared_converse.unloadevent = 'pagehide'; - } else if ('onbeforeunload' in window) { - shared_converse.unloadevent = 'beforeunload'; - } else if ('onunload' in window) { - shared_converse.unloadevent = 'unload'; - } -} - const core_converse = window.converse || {}; /** * ### The Public API @@ -24683,7 +26920,7 @@ Object.assign(core_converse, { * }); */ async initialize(settings) { - await cleanup(); + await cleanup(shared_converse); setUnloadEvent(); initAppSettings(settings); shared_converse.strict_plugin_dependencies = settings.strict_plugin_dependencies; // Needed by pluggable.js @@ -24708,11 +26945,13 @@ Object.assign(core_converse, { */ shared_converse.send_initial_presence = true; - await initSessionStorage(); - await initClientConfig(); + await initSessionStorage(shared_converse); + await initClientConfig(shared_converse); await i18n.initialize(); - initPlugins(); - registerGlobalEventHandlers(); + initPlugins(shared_converse); // Register all custom elements + + api.elements.register(); + registerGlobalEventHandlers(shared_converse); try { !History.started && shared_converse.router.history.start(); @@ -24774,7 +27013,7 @@ Object.assign(core_converse, { plugin.__name__ = name; if (shared_converse.pluggable.plugins[name] !== undefined) { - throw new TypeError("Error: plugin with name \"".concat(name, "\" has already been ") + 'registered!'); + throw new TypeError(`Error: plugin with name "${name}" has already been ` + 'registered!'); } else { shared_converse.pluggable.plugins[name] = plugin; } @@ -24809,6 +27048,7 @@ Object.assign(core_converse, { Model: Model, Promise, Strophe: Strophe, + URI: (URI_default()), dayjs: (dayjs_min_default()), html: T, log: headless_log, @@ -24835,7 +27075,7 @@ function rejectMessage(stanza, text) { }).up().c('text', { xmlns: 'urn:ietf:params:xml:ns:xmpp-stanzas' }).t(text)); - headless_log.warn("Rejecting message stanza with the following reason: ".concat(text)); + headless_log.warn(`Rejecting message stanza with the following reason: ${text}`); headless_log.warn(stanza); } /** @@ -24858,6 +27098,102 @@ function sendMarker(to_jid, id, type, msg_type) { }); api.send(stanza); } +;// CONCATENATED MODULE: ./src/headless/utils/url.js + + + + +function checkTLS(uri) { + const uri_protocol = uri.protocol().toLowerCase(); + return window.location.protocol === 'http:' || window.location.protocol === 'https:' && ['https', 'aesgcm'].includes(uri_protocol); +} + +function getURI(url) { + try { + return url instanceof (URI_default()) ? url : new (URI_default())(url); + } catch (error) { + headless_log.debug(error); + return null; + } +} + +function checkFileTypes(types, url) { + const uri = getURI(url); + + if (uri === null || !checkTLS(uri)) { + return false; + } + + const filename = uri.filename().toLowerCase(); + return !!types.filter(ext => filename.endsWith(ext)).length; +} + +function isDomainWhitelisted(whitelist, url) { + const uri = getURI(url); + const subdomain = uri.subdomain(); + const domain = uri.domain(); + const fulldomain = `${subdomain ? `${subdomain}.` : ''}${domain}`; + return whitelist.includes(domain) || whitelist.includes(fulldomain); +} +function shouldRenderMediaFromURL(url_text, type) { + const may_render = api.settings.get('render_media'); + const is_domain_allowed = isDomainAllowed(url_text, `allowed_${type}_domains`); + + if (Array.isArray(may_render)) { + return is_domain_allowed && isDomainWhitelisted(may_render, url_text); + } else { + return is_domain_allowed && may_render; + } +} +function filterQueryParamsFromURL(url) { + const paramsArray = api.settings.get('filter_url_query_params'); + if (!paramsArray) return url; + const parsed_uri = getURI(url); + return parsed_uri.removeQuery(paramsArray).toString(); +} +function isDomainAllowed(url, setting) { + const allowed_domains = api.settings.get(setting); + + if (!Array.isArray(allowed_domains)) { + return true; + } + + try { + return isDomainWhitelisted(allowed_domains, url); + } catch (error) { + headless_log.debug(error); + return false; + } +} +/** + * Accepts a {@link MediaURL} object and then checks whether its domain is + * allowed for rendering in the chat. + * @param { MediaURL } o + * @returns { Bool } + */ + +function isMediaURLDomainAllowed(o) { + return o.is_audio && isDomainAllowed(o.url, 'allowed_audio_domains') || o.is_video && isDomainAllowed(o.url, 'allowed_video_domains') || o.is_image && isDomainAllowed(o.url, 'allowed_image_domains'); +} +function isURLWithImageExtension(url) { + return checkFileTypes(['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.svg'], url); +} +function isGIFURL(url) { + return checkFileTypes(['.gif'], url); +} +function isAudioURL(url) { + return checkFileTypes(['.ogg', '.mp3', '.m4a'], url); +} +function isVideoURL(url) { + return checkFileTypes(['.mp4', '.webm'], url); +} +function isImageURL(url) { + const regex = api.settings.get('image_urls_regex'); + return (regex === null || regex === void 0 ? void 0 : regex.test(url)) || isURLWithImageExtension(url); +} +function isEncryptedFileURL(url) { + return url.startsWith('aesgcm://'); +} ;// CONCATENATED MODULE: ./src/headless/shared/parsers.js @@ -24865,6 +27201,10 @@ function sendMarker(to_jid, id, type, msg_type) { + + + + const { NS } = Strophe; @@ -24887,23 +27227,23 @@ class StanzaParseError extends Error { function getStanzaIDs(stanza, original_stanza) { const attrs = {}; // Store generic stanza ids - const sids = sizzle_default()("stanza-id[xmlns=\"".concat(Strophe.NS.SID, "\"]"), stanza); + const sids = sizzle_default()(`stanza-id[xmlns="${Strophe.NS.SID}"]`, stanza); const sid_attrs = sids.reduce((acc, s) => { - acc["stanza_id ".concat(s.getAttribute('by'))] = s.getAttribute('id'); + acc[`stanza_id ${s.getAttribute('by')}`] = s.getAttribute('id'); return acc; }, {}); Object.assign(attrs, sid_attrs); // Store the archive id - const result = sizzle_default()("message > result[xmlns=\"".concat(Strophe.NS.MAM, "\"]"), original_stanza).pop(); + const result = sizzle_default()(`message > result[xmlns="${Strophe.NS.MAM}"]`, original_stanza).pop(); if (result) { const by_jid = original_stanza.getAttribute('from') || shared_converse.bare_jid; - attrs["stanza_id ".concat(by_jid)] = result.getAttribute('id'); + attrs[`stanza_id ${by_jid}`] = result.getAttribute('id'); } // Store the origin id - const origin_id = sizzle_default()("origin-id[xmlns=\"".concat(Strophe.NS.SID, "\"]"), stanza).pop(); + const origin_id = sizzle_default()(`origin-id[xmlns="${Strophe.NS.SID}"]`, stanza).pop(); if (origin_id) { attrs['origin_id'] = origin_id.getAttribute('id'); @@ -24914,21 +27254,36 @@ function getStanzaIDs(stanza, original_stanza) { function getEncryptionAttributes(stanza, _converse) { var _converse$omemo_store; - const encrypted = sizzle_default()("encrypted[xmlns=\"".concat(Strophe.NS.OMEMO, "\"]"), stanza).pop(); - const attrs = { - 'is_encrypted': !!encrypted - }; + const eme_tag = sizzle_default()(`encryption[xmlns="${Strophe.NS.EME}"]`, stanza).pop(); + const namespace = eme_tag === null || eme_tag === void 0 ? void 0 : eme_tag.getAttribute('namespace'); + const attrs = {}; + + if (namespace) { + attrs.is_encrypted = true; + attrs.encryption_namespace = namespace; + + if (namespace !== Strophe.NS.OMEMO) { + // Found an encrypted message, but it's not OMEMO + return attrs; + } + } + + const encrypted = sizzle_default()(`encrypted[xmlns="${Strophe.NS.OMEMO}"]`, stanza).pop(); + + if (!eme_tag) { + attrs.is_encrypted = !!encrypted; + } if (!encrypted || api.settings.get('clear_cache_on_logout')) { return attrs; } const header = encrypted.querySelector('header'); - attrs['encrypted'] = { + attrs.encrypted = { 'device_id': header.getAttribute('sid') }; const device_id = (_converse$omemo_store = _converse.omemo_store) === null || _converse$omemo_store === void 0 ? void 0 : _converse$omemo_store.get('device_id'); - const key = device_id && sizzle_default()("key[rid=\"".concat(device_id, "\"]"), encrypted).pop(); + const key = device_id && sizzle_default()(`key[rid="${device_id}"]`, encrypted).pop(); if (key) { var _encrypted$querySelec; @@ -24952,14 +27307,14 @@ function getEncryptionAttributes(stanza, _converse) { */ function getRetractionAttributes(stanza, original_stanza) { - const fastening = sizzle_default()("> apply-to[xmlns=\"".concat(Strophe.NS.FASTEN, "\"]"), stanza).pop(); + const fastening = sizzle_default()(`> apply-to[xmlns="${Strophe.NS.FASTEN}"]`, stanza).pop(); if (fastening) { const applies_to_id = fastening.getAttribute('id'); - const retracted = sizzle_default()("> retract[xmlns=\"".concat(Strophe.NS.RETRACT, "\"]"), fastening).pop(); + const retracted = sizzle_default()(`> retract[xmlns="${Strophe.NS.RETRACT}"]`, fastening).pop(); if (retracted) { - const delay = sizzle_default()("delay[xmlns=\"".concat(Strophe.NS.DELAY, "\"]"), original_stanza).pop(); + const delay = sizzle_default()(`delay[xmlns="${Strophe.NS.DELAY}"]`, original_stanza).pop(); const time = delay ? dayjs_min_default()(delay.getAttribute('stamp')).toISOString() : new Date().toISOString(); return { 'editable': false, @@ -24968,7 +27323,7 @@ function getRetractionAttributes(stanza, original_stanza) { }; } } else { - const tombstone = sizzle_default()("> retracted[xmlns=\"".concat(Strophe.NS.RETRACT, "\"]"), stanza).pop(); + const tombstone = sizzle_default()(`> retracted[xmlns="${Strophe.NS.RETRACT}"]`, stanza).pop(); if (tombstone) { return { @@ -24982,14 +27337,14 @@ function getRetractionAttributes(stanza, original_stanza) { return {}; } function getCorrectionAttributes(stanza, original_stanza) { - const el = sizzle_default()("replace[xmlns=\"".concat(Strophe.NS.MESSAGE_CORRECT, "\"]"), stanza).pop(); + const el = sizzle_default()(`replace[xmlns="${Strophe.NS.MESSAGE_CORRECT}"]`, stanza).pop(); if (el) { const replace_id = el.getAttribute('id'); const msgid = replace_id; if (replace_id) { - const delay = sizzle_default()("delay[xmlns=\"".concat(Strophe.NS.DELAY, "\"]"), original_stanza).pop(); + const delay = sizzle_default()(`delay[xmlns="${Strophe.NS.DELAY}"]`, original_stanza).pop(); const time = delay ? dayjs_min_default()(delay.getAttribute('stamp')).toISOString() : new Date().toISOString(); return { msgid, @@ -25002,11 +27357,11 @@ function getCorrectionAttributes(stanza, original_stanza) { return {}; } function getOpenGraphMetadata(stanza) { - const fastening = sizzle_default()("> apply-to[xmlns=\"".concat(Strophe.NS.FASTEN, "\"]"), stanza).pop(); + const fastening = sizzle_default()(`> apply-to[xmlns="${Strophe.NS.FASTEN}"]`, stanza).pop(); if (fastening) { const applies_to_id = fastening.getAttribute('id'); - const meta = sizzle_default()("> meta[xmlns=\"".concat(Strophe.NS.XHTML, "\"]"), fastening); + const meta = sizzle_default()(`> meta[xmlns="${Strophe.NS.XHTML}"]`, fastening); if (meta.length) { const msg_limit = api.settings.get('message_limit'); @@ -25017,7 +27372,7 @@ function getOpenGraphMetadata(stanza) { let value = decodeHTMLEntities(el.getAttribute('content') || ''); if (msg_limit && property === 'og:description' && value.length >= msg_limit) { - value = "".concat(value.slice(0, msg_limit)).concat(decodeHTMLEntities('…')); + value = `${value.slice(0, msg_limit)}${decodeHTMLEntities('…')}`; } acc[property] = value; @@ -25036,15 +27391,68 @@ function getOpenGraphMetadata(stanza) { return {}; } +function getMediaURLsMetadata(text) { + const objs = []; + + if (!text) { + return {}; + } + + try { + URI_default().withinString(text, (url, start, end) => { + if (url.startsWith('_')) { + url = url.slice(1); + start += 1; + } + + if (url.endsWith('_')) { + url = url.slice(0, url.length - 1); + end -= 1; + } + + objs.push({ + url, + start, + end + }); + return url; + }, URL_PARSE_OPTIONS); + } catch (error) { + headless_log.debug(error); + } + /** + * @typedef { Object } MediaURLMetadata + * An object representing the metadata of a URL found in a chat message + * The actual URL is not saved, it can be extracted via the `start` and `end` indexes. + * @property { Boolean } is_audio + * @property { Boolean } is_image + * @property { Boolean } is_video + * @property { String } end + * @property { String } start + */ + + + const media_urls = objs.map(o => ({ + 'end': o.end, + 'is_audio': isAudioURL(o.url), + 'is_image': isImageURL(o.url), + 'is_video': isVideoURL(o.url), + 'is_encrypted': isEncryptedFileURL(o.url), + 'start': o.start + })); + return media_urls.length ? { + media_urls + } : {}; +} function getSpoilerAttributes(stanza) { - const spoiler = sizzle_default()("spoiler[xmlns=\"".concat(Strophe.NS.SPOILER, "\"]"), stanza).pop(); + const spoiler = sizzle_default()(`spoiler[xmlns="${Strophe.NS.SPOILER}"]`, stanza).pop(); return { 'is_spoiler': !!spoiler, 'spoiler_hint': spoiler === null || spoiler === void 0 ? void 0 : spoiler.textContent }; } function getOutOfBandAttributes(stanza) { - const xform = sizzle_default()("x[xmlns=\"".concat(Strophe.NS.OUTOFBAND, "\"]"), stanza).pop(); + const xform = sizzle_default()(`x[xmlns="${Strophe.NS.OUTOFBAND}"]`, stanza).pop(); if (xform) { var _xform$querySelector, _xform$querySelector2; @@ -25066,7 +27474,7 @@ function getOutOfBandAttributes(stanza) { function getErrorAttributes(stanza) { if (stanza.getAttribute('type') === 'error') { const error = stanza.querySelector('error'); - const text = sizzle_default()("text[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), error).pop(); + const text = sizzle_default()(`text[xmlns="${Strophe.NS.STANZAS}"]`, error).pop(); return { 'is_error': true, 'error_text': text === null || text === void 0 ? void 0 : text.textContent, @@ -25078,10 +27486,17 @@ function getErrorAttributes(stanza) { return {}; } function getReferences(stanza) { - var _stanza$querySelector; + return sizzle_default()(`reference[xmlns="${Strophe.NS.REFERENCE}"]`, stanza).map(ref => { + var _stanza$querySelector; + + const anchor = ref.getAttribute('anchor'); + const text = (_stanza$querySelector = stanza.querySelector(anchor ? `#${anchor}` : 'body')) === null || _stanza$querySelector === void 0 ? void 0 : _stanza$querySelector.textContent; + + if (!text) { + headless_log.warn(`Could not find referenced text for ${ref}`); + return null; + } - const text = (_stanza$querySelector = stanza.querySelector('body')) === null || _stanza$querySelector === void 0 ? void 0 : _stanza$querySelector.textContent; - return sizzle_default()("reference[xmlns=\"".concat(Strophe.NS.REFERENCE, "\"]"), stanza).map(ref => { const begin = ref.getAttribute('begin'); const end = ref.getAttribute('end'); return { @@ -25091,10 +27506,10 @@ function getReferences(stanza) { 'value': text.slice(begin, end), 'uri': ref.getAttribute('uri') }; - }); + }).filter(r => r); } function getReceiptId(stanza) { - const receipt = sizzle_default()("received[xmlns=\"".concat(Strophe.NS.RECEIPTS, "\"]"), stanza).pop(); + const receipt = sizzle_default()(`received[xmlns="${Strophe.NS.RECEIPTS}"]`, stanza).pop(); return receipt === null || receipt === void 0 ? void 0 : receipt.getAttribute('id'); } /** @@ -25106,7 +27521,7 @@ function getReceiptId(stanza) { function isCarbon(stanza) { const xmlns = Strophe.NS.CARBONS; - return sizzle_default()("message > received[xmlns=\"".concat(xmlns, "\"]"), stanza).length > 0 || sizzle_default()("message > sent[xmlns=\"".concat(xmlns, "\"]"), stanza).length > 0; + return sizzle_default()(`message > received[xmlns="${xmlns}"]`, stanza).length > 0 || sizzle_default()(`message > sent[xmlns="${xmlns}"]`, stanza).length > 0; } /** * Returns the XEP-0085 chat state contained in a message stanza @@ -25117,18 +27532,29 @@ function isCarbon(stanza) { function getChatState(stanza) { var _sizzle$pop; - return (_sizzle$pop = sizzle_default()("\n composing[xmlns=\"".concat(NS.CHATSTATES, "\"],\n paused[xmlns=\"").concat(NS.CHATSTATES, "\"],\n inactive[xmlns=\"").concat(NS.CHATSTATES, "\"],\n active[xmlns=\"").concat(NS.CHATSTATES, "\"],\n gone[xmlns=\"").concat(NS.CHATSTATES, "\"]"), stanza).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.nodeName; + return (_sizzle$pop = sizzle_default()(` + composing[xmlns="${NS.CHATSTATES}"], + paused[xmlns="${NS.CHATSTATES}"], + inactive[xmlns="${NS.CHATSTATES}"], + active[xmlns="${NS.CHATSTATES}"], + gone[xmlns="${NS.CHATSTATES}"]`, stanza).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.nodeName; } function isValidReceiptRequest(stanza, attrs) { - return attrs.sender !== 'me' && !attrs.is_carbon && !attrs.is_archived && sizzle_default()("request[xmlns=\"".concat(Strophe.NS.RECEIPTS, "\"]"), stanza).length; + return attrs.sender !== 'me' && !attrs.is_carbon && !attrs.is_archived && sizzle_default()(`request[xmlns="${Strophe.NS.RECEIPTS}"]`, stanza).length; } -function rejectUnencapsulatedForward(stanza) { - const bare_forward = sizzle_default()("message > forwarded[xmlns=\"".concat(Strophe.NS.FORWARD, "\"]"), stanza).length; +/** + * Check whether the passed-in stanza is a forwarded message that is "bare", + * i.e. it's not forwarded as part of a larger protocol, like MAM. + * @param { XMLElement } stanza + */ + +function throwErrorIfInvalidForward(stanza) { + const bare_forward = sizzle_default()(`message > forwarded[xmlns="${Strophe.NS.FORWARD}"]`, stanza).length; if (bare_forward) { rejectMessage(stanza, 'Forwarded messages not part of an encapsulating protocol are not supported'); const from_jid = stanza.getAttribute('from'); - return new StanzaParseError("Ignoring unencapsulated forwarded message from ".concat(from_jid), stanza); + throw new StanzaParseError(`Ignoring unencapsulated forwarded message from ${from_jid}`, stanza); } } /** @@ -25142,13 +27568,16 @@ function rejectUnencapsulatedForward(stanza) { function getChatMarker(stanza) { // If we receive more than one marker (which shouldn't happen), we take // the highest level of acknowledgement. - return sizzle_default()("\n acknowledged[xmlns=\"".concat(Strophe.NS.MARKERS, "\"],\n displayed[xmlns=\"").concat(Strophe.NS.MARKERS, "\"],\n received[xmlns=\"").concat(Strophe.NS.MARKERS, "\"]"), stanza).pop(); + return sizzle_default()(` + acknowledged[xmlns="${Strophe.NS.MARKERS}"], + displayed[xmlns="${Strophe.NS.MARKERS}"], + received[xmlns="${Strophe.NS.MARKERS}"]`, stanza).pop(); } function isHeadline(stanza) { return stanza.getAttribute('type') === 'headline'; } function isServerMessage(stanza) { - if (sizzle_default()("mentions[xmlns=\"".concat(Strophe.NS.MENTIONS, "\"]"), stanza).pop()) { + if (sizzle_default()(`mentions[xmlns="${Strophe.NS.MENTIONS}"]`, stanza).pop()) { return false; } @@ -25173,7 +27602,7 @@ function isServerMessage(stanza) { */ function isArchived(original_stanza) { - return !!sizzle_default()("message > result[xmlns=\"".concat(Strophe.NS.MAM, "\"]"), original_stanza).pop(); + return !!sizzle_default()(`message > result[xmlns="${Strophe.NS.MAM}"]`, original_stanza).pop(); } /** * Returns an object containing all attribute names and values for a particular element. @@ -25202,7 +27631,7 @@ let adhoc_converse, adhoc_api; adhoc_Strophe.addNamespace('ADHOC', 'http://jabber.org/protocol/commands'); function parseForCommands(stanza) { - const items = sizzle_default()("query[xmlns=\"".concat(adhoc_Strophe.NS.DISCO_ITEMS, "\"][node=\"").concat(adhoc_Strophe.NS.ADHOC, "\"] item"), stanza); + const items = sizzle_default()(`query[xmlns="${adhoc_Strophe.NS.DISCO_ITEMS}"][node="${adhoc_Strophe.NS.ADHOC}"] item`, stanza); return items.map(getAttributes); } @@ -25227,9 +27656,9 @@ const adhoc_adhoc_api = { commands = parseForCommands(await adhoc_api.disco.items(to_jid, adhoc_Strophe.NS.ADHOC)); } catch (e) { if (e === null) { - headless_log.error("Error: timeout while fetching ad-hoc commands for ".concat(to_jid)); + headless_log.error(`Error: timeout while fetching ad-hoc commands for ${to_jid}`); } else { - headless_log.error("Error while fetching ad-hoc commands for ".concat(to_jid)); + headless_log.error(`Error while fetching ad-hoc commands for ${to_jid}`); headless_log.error(e); } } @@ -25271,8 +27700,8 @@ const ModelWithContact = Model.extend({ }); /* harmony default export */ const model_with_contact = (ModelWithContact); -// EXTERNAL MODULE: ./src/headless/node_modules/filesize/lib/filesize.min.js -var filesize_min = __webpack_require__(4009); +// EXTERNAL MODULE: ./node_modules/filesize/lib/filesize.min.js +var filesize_min = __webpack_require__(6755); var filesize_min_default = /*#__PURE__*/__webpack_require__.n(filesize_min); ;// CONCATENATED MODULE: ./node_modules/lodash-es/isMatch.js @@ -25312,6 +27741,73 @@ function isMatch(object, source) { /* harmony default export */ const lodash_es_isMatch = (isMatch); +;// CONCATENATED MODULE: ./src/headless/shared/chat/utils.js + + +const { + u: utils_u +} = core_converse.env; +function pruneHistory(model) { + const max_history = api.settings.get('prune_messages_above'); + + if (max_history && typeof max_history === 'number') { + if (model.messages.length > max_history) { + const non_empty_messages = model.messages.filter(m => !utils_u.isEmptyMessage(m)); + + if (non_empty_messages.length > max_history) { + while (non_empty_messages.length > max_history) { + non_empty_messages.shift().destroy(); + } + /** + * Triggered once the message history has been pruned, i.e. + * once older messages have been removed to keep the + * number of messages below the value set in `prune_messages_above`. + * @event _converse#historyPruned + * @type { _converse.ChatBox | _converse.ChatRoom } + * @example _converse.api.listen.on('historyPruned', this => { ... }); + */ + + + api.trigger('historyPruned', model); + } + } + } +} +/** + * Given an array of {@link MediaURLMetadata} objects and text, return an + * array of {@link MediaURL} objects. + * @param { Array } arr + * @param { String } text + * @returns{ Array } + */ + +function getMediaURLs(arr, text, offset = 0) { + /** + * @typedef { Object } MediaURLData + * An object representing a URL found in a chat message + * @property { Boolean } is_audio + * @property { Boolean } is_image + * @property { Boolean } is_video + * @property { String } end + * @property { String } start + * @property { String } url + */ + return arr.map(o => { + const start = o.start - offset; + const end = o.end - offset; + + if (start < 0 || start >= text.length) { + return null; + } + + return Object.assign({}, o, { + start, + end, + 'url': text.substring(o.start - offset, o.end - offset) + }); + }).filter(o => o); +} +const debouncedPruneHistory = lodash_es_debounce(pruneHistory, 250); ;// CONCATENATED MODULE: ./src/headless/plugins/chat/parsers.js @@ -25334,17 +27830,12 @@ const { async function parseMessage(stanza, _converse) { var _stanza$querySelector, _stanza$querySelector2, _contact, _contact$attributes, _stanza$querySelector3, _stanza$querySelector4; - const err = rejectUnencapsulatedForward(stanza); - - if (err) { - return err; - } - + throwErrorIfInvalidForward(stanza); let to_jid = stanza.getAttribute('to'); const to_resource = parsers_Strophe.getResourceFromJid(to_jid); if (api.settings.get('filter_by_resource') && to_resource && to_resource !== _converse.resource) { - return new StanzaParseError("Ignoring incoming message intended for a different resource: ".concat(to_jid), stanza); + return new StanzaParseError(`Ignoring incoming message intended for a different resource: ${to_jid}`, stanza); } const original_stanza = stanza; @@ -25353,14 +27844,14 @@ async function parseMessage(stanza, _converse) { if (isCarbon(stanza)) { if (from_jid === _converse.bare_jid) { - const selector = "[xmlns=\"".concat(parsers_Strophe.NS.CARBONS, "\"] > forwarded[xmlns=\"").concat(parsers_Strophe.NS.FORWARD, "\"] > message"); + const selector = `[xmlns="${parsers_Strophe.NS.CARBONS}"] > forwarded[xmlns="${parsers_Strophe.NS.FORWARD}"] > message`; stanza = parsers_sizzle(selector, stanza).pop(); to_jid = stanza.getAttribute('to'); from_jid = stanza.getAttribute('from'); } else { // Prevent message forging via carbons: https://xmpp.org/extensions/xep-0280.html#security rejectMessage(stanza, 'Rejecting carbon from invalid JID'); - return new StanzaParseError("Rejecting carbon from invalid JID ".concat(to_jid), stanza); + return new StanzaParseError(`Rejecting carbon from invalid JID ${to_jid}`, stanza); } } @@ -25368,12 +27859,12 @@ async function parseMessage(stanza, _converse) { if (is_archived) { if (from_jid === _converse.bare_jid) { - const selector = "[xmlns=\"".concat(parsers_Strophe.NS.MAM, "\"] > forwarded[xmlns=\"").concat(parsers_Strophe.NS.FORWARD, "\"] > message"); + const selector = `[xmlns="${parsers_Strophe.NS.MAM}"] > forwarded[xmlns="${parsers_Strophe.NS.FORWARD}"] > message`; stanza = parsers_sizzle(selector, stanza).pop(); to_jid = stanza.getAttribute('to'); from_jid = stanza.getAttribute('from'); } else { - return new StanzaParseError("Invalid Stanza: alleged MAM message from ".concat(stanza.getAttribute('from')), stanza); + return new StanzaParseError(`Invalid Stanza: alleged MAM message from ${stanza.getAttribute('from')}`, stanza); } } @@ -25381,7 +27872,7 @@ async function parseMessage(stanza, _converse) { const is_me = from_bare_jid === _converse.bare_jid; if (is_me && to_jid === null) { - return new StanzaParseError("Don't know how to handle message stanza without 'to' attribute. ".concat(stanza.outerHTML), stanza); + return new StanzaParseError(`Don't know how to handle message stanza without 'to' attribute. ${stanza.outerHTML}`, stanza); } const is_headline = isHeadline(stanza); @@ -25394,7 +27885,7 @@ async function parseMessage(stanza, _converse) { if (contact === undefined && !api.settings.get('allow_non_roster_messaging')) { headless_log.error(stanza); - return new StanzaParseError("Blocking messaging with a JID not in our roster because allow_non_roster_messaging is false.", stanza); + return new StanzaParseError(`Blocking messaging with a JID not in our roster because allow_non_roster_messaging is false.`, stanza); } } /** @@ -25448,7 +27939,7 @@ async function parseMessage(stanza, _converse) { */ - const delay = parsers_sizzle("delay[xmlns=\"".concat(parsers_Strophe.NS.DELAY, "\"]"), original_stanza).pop(); + const delay = parsers_sizzle(`delay[xmlns="${parsers_Strophe.NS.DELAY}"]`, original_stanza).pop(); const marker = getChatMarker(stanza); const now = new Date().toISOString(); let attrs = Object.assign({ @@ -25461,9 +27952,9 @@ async function parseMessage(stanza, _converse) { 'from': parsers_Strophe.getBareJidFromJid(stanza.getAttribute('from')), 'is_carbon': isCarbon(original_stanza), 'is_delayed': !!delay, - 'is_markable': !!parsers_sizzle("markable[xmlns=\"".concat(parsers_Strophe.NS.MARKERS, "\"]"), stanza).length, + 'is_markable': !!parsers_sizzle(`markable[xmlns="${parsers_Strophe.NS.MARKERS}"]`, stanza).length, 'is_marker': !!marker, - 'is_unstyled': !!parsers_sizzle("unstyled[xmlns=\"".concat(parsers_Strophe.NS.STYLING, "\"]"), stanza).length, + 'is_unstyled': !!parsers_sizzle(`unstyled[xmlns="${parsers_Strophe.NS.STYLING}"]`, stanza).length, 'marker_id': marker && marker.getAttribute('id'), 'msgid': stanza.getAttribute('id') || original_stanza.getAttribute('id'), 'nick': (_contact = contact) === null || _contact === void 0 ? void 0 : (_contact$attributes = _contact.attributes) === null || _contact$attributes === void 0 ? void 0 : _contact$attributes.nickname, @@ -25482,7 +27973,7 @@ async function parseMessage(stanza, _converse) { const from = original_stanza.getAttribute('from'); if (from && from !== _converse.bare_jid) { - return new StanzaParseError("Invalid Stanza: Forged MAM message from ".concat(from), stanza); + return new StanzaParseError(`Invalid Stanza: Forged MAM message from ${from}`, stanza); } } @@ -25495,13 +27986,17 @@ async function parseMessage(stanza, _converse) { }, attrs); // We prefer to use one of the XEP-0359 unique and stable stanza IDs // as the Model id, to avoid duplicates. - attrs['id'] = attrs['origin_id'] || attrs["stanza_id ".concat(attrs.from)] || utils_core.getUniqueId(); + attrs['id'] = attrs['origin_id'] || attrs[`stanza_id ${attrs.from}`] || utils_core.getUniqueId(); /** * *Hook* which allows plugins to add additional parsing * @event _converse#parseMessage */ - return api.hook('parseMessage', stanza, attrs); + attrs = await api.hook('parseMessage', stanza, attrs); // We call this after the hook, to allow plugins to decrypt encrypted + // messages, since we need to parse the message text to determine whether + // there are media urls. + + return Object.assign(attrs, getMediaURLsMetadata(attrs.is_encrypted ? attrs.plaintext : attrs.body)); } ;// CONCATENATED MODULE: ./src/headless/plugins/chat/model.js @@ -25516,6 +28011,9 @@ async function parseMessage(stanza, _converse) { + + + const { Strophe: model_Strophe, $msg: model_$msg @@ -25534,12 +28032,12 @@ const ChatBox = model_with_contact.extend({ return { 'bookmarked': false, 'chat_state': undefined, - 'hidden': shared_converse.isUniView() && !api.settings.get('singleton'), + 'hidden': isUniView() && !api.settings.get('singleton'), 'message_type': 'chat', 'nickname': undefined, 'num_unread': 0, - 'time_sent': new Date(0).toISOString(), 'time_opened': this.get('time_opened') || new Date().getTime(), + 'time_sent': new Date(0).toISOString(), 'type': shared_converse.PRIVATE_CHAT_TYPE, 'url': '' }; @@ -25561,11 +28059,11 @@ const ChatBox = model_with_contact.extend({ } this.set({ - 'box_id': "box-".concat(jid) + 'box_id': `box-${jid}` }); this.initNotifications(); - this.initMessages(); this.initUI(); + this.initMessages(); if (this.get('type') === shared_converse.PRIVATE_CHAT_TYPE) { this.presence = shared_converse.presences.findWhere({ @@ -25578,7 +28076,7 @@ const ChatBox = model_with_contact.extend({ } this.on('change:chat_state', this.sendChatState, this); - this.on('change:scrolled', () => !this.get('scrolled') && this.clearUnreadMsgCounter()); + this.ui.on('change:scrolled', this.onScrolledChanged, this); await this.fetchMessages(); /** * Triggered once a {@link _converse.ChatBox} has been created and initialized. @@ -25598,13 +28096,14 @@ const ChatBox = model_with_contact.extend({ }, getMessagesCacheKey() { - return "converse.messages-".concat(this.get('jid'), "-").concat(shared_converse.bare_jid); + return `converse.messages-${this.get('jid')}-${shared_converse.bare_jid}`; }, initMessages() { this.messages = this.getMessagesCollection(); this.messages.fetched = getOpenPromise(); this.messages.fetched.then(() => { + this.pruneHistoryWhenScrolledDown(); /** * Triggered whenever a `_converse.ChatBox` instance has fetched its messages from * `sessionStorage` but **NOT** from the server. @@ -25612,15 +28111,13 @@ const ChatBox = model_with_contact.extend({ * @type {_converse.ChatBoxView | _converse.ChatRoomView} * @example _converse.api.listen.on('afterMessagesFetched', view => { ... }); */ + api.trigger('afterMessagesFetched', this); }); this.messages.chatbox = this; initStorage(this.messages, this.getMessagesCacheKey()); - this.listenTo(this.messages, 'change:upload', message => { - if (message.get('upload') === shared_converse.SUCCESS) { - api.send(this.createMessageStanza(message)); - } - }); + this.listenTo(this.messages, 'change:upload', this.onMessageUploadChanged, this); + this.listenTo(this.messages, 'add', this.onMessageAdded, this); }, initUI() { @@ -25664,7 +28161,7 @@ const ChatBox = model_with_contact.extend({ fetchMessages() { if (this.messages.fetched_flag) { - headless_log.info("Not re-fetching messages for ".concat(this.get('jid'))); + headless_log.info(`Not re-fetching messages for ${this.get('jid')}`); return; } @@ -25778,6 +28275,24 @@ const ChatBox = model_with_contact.extend({ } }, + async onMessageUploadChanged(message) { + if (message.get('upload') === shared_converse.SUCCESS) { + const attrs = { + 'body': message.get('message'), + 'spoiler_hint': message.get('spoiler_hint'), + 'oob_url': message.get('oob_url') + }; + await this.sendMessage(attrs); + message.destroy(); + } + }, + + onMessageAdded(message) { + if (api.settings.get('prune_messages_above') && (api.settings.get('pruning_behavior') === 'scrolled' || !this.ui.get('scrolled')) && !model_u.isEmptyMessage(message)) { + debouncedPruneHistory(this); + } + }, + async clearMessages() { try { await this.messages.clearStore(); @@ -25866,6 +28381,19 @@ const ChatBox = model_with_contact.extend({ }); }, + onScrolledChanged() { + if (!this.ui.get('scrolled')) { + this.clearUnreadMsgCounter(); + this.pruneHistoryWhenScrolledDown(); + } + }, + + pruneHistoryWhenScrolledDown() { + if (api.settings.get('prune_messages_above') && api.settings.get('pruning_behavior') === 'unscrolled' && !this.ui.get('scrolled')) { + pruneHistory(this); + } + }, + validate(attrs) { if (!attrs.jid) { return 'Ignored ChatBox without JID'; @@ -25875,7 +28403,7 @@ const ChatBox = model_with_contact.extend({ const auto_join = api.settings.get('auto_join_private_chats').concat(room_jids); if (api.settings.get("singleton") && !auto_join.includes(attrs.jid) && !api.settings.get('auto_join_on_invite')) { - const msg = "".concat(attrs.jid, " is not allowed because singleton is true and it's not being auto_joined"); + const msg = `${attrs.jid} is not allowed because singleton is true and it's not being auto_joined`; headless_log.warn(msg); return msg; } @@ -26206,7 +28734,7 @@ const ChatBox = model_with_contact.extend({ return keys.map(key => { const by_jid = key.replace(/^stanza_id /, ''); const query = {}; - query["stanza_id ".concat(by_jid)] = attrs[key]; + query[`stanza_id ${by_jid}`] = attrs[key]; return query; }); }, @@ -26298,7 +28826,7 @@ const ChatBox = model_with_contact.extend({ return; } - if ((msg === null || msg === void 0 ? void 0 : msg.get('is_markable')) || force) { + if (msg !== null && msg !== void 0 && msg.get('is_markable') || force) { const from_jid = model_Strophe.getBareJidFromJid(msg.get('from')); sendMarker(from_jid, msg.get('msgid'), type, msg.get('type')); } @@ -26321,7 +28849,7 @@ const ChatBox = model_with_contact.extend({ const message = this.messages.findWhere({ 'msgid': attrs.marker_id }); - const field_name = "marker_".concat(attrs.marker); + const field_name = `marker_${attrs.marker}`; if (message && !message.get(field_name)) { message.save({ @@ -26442,11 +28970,12 @@ const ChatBox = model_with_contact.extend({ return stanza; }, - getOutgoingMessageAttributes(text, spoiler_hint) { - const is_spoiler = this.get('composing_spoiler'); + getOutgoingMessageAttributes(attrs) { + const is_spoiler = !!this.get('composing_spoiler'); const origin_id = model_u.getUniqueId(); + const text = attrs === null || attrs === void 0 ? void 0 : attrs.body; const body = text ? model_u.httpToGeoUri(model_u.shortnamesToUnicode(text), shared_converse) : undefined; - return { + return Object.assign({}, attrs, { 'from': shared_converse.bare_jid, 'fullname': shared_converse.xmppstatus.get('fullname'), 'id': origin_id, @@ -26456,13 +28985,12 @@ const ChatBox = model_with_contact.extend({ 'msgid': origin_id, 'nickname': this.get('nickname'), 'sender': 'me', - 'spoiler_hint': is_spoiler ? spoiler_hint : undefined, 'time': new Date().toISOString(), 'type': this.get('message_type'), body, is_spoiler, origin_id - }; + }, getMediaURLsMetadata(text)); }, /** @@ -26520,15 +29048,14 @@ const ChatBox = model_with_contact.extend({ * @private * @method _converse.ChatBox#sendMessage * @memberOf _converse.ChatBox - * @param { String } text - The chat message text - * @param { String } spoiler_hint - An optional hint, if the message being sent is a spoiler + * @param { Object } [attrs] - A map of attributes to be saved on the message * @returns { _converse.Message } * @example - * const chat = api.chats.get('buddy1@example.com'); - * chat.sendMessage('hello world'); + * const chat = api.chats.get('buddy1@example.org'); + * chat.sendMessage({'body': 'hello world'}); */ - async sendMessage(text, spoiler_hint) { - const attrs = this.getOutgoingMessageAttributes(text, spoiler_hint); + async sendMessage(attrs) { + attrs = this.getOutgoingMessageAttributes(attrs); let message = this.messages.findWhere('correcting'); if (message) { @@ -26631,6 +29158,13 @@ const ChatBox = model_with_contact.extend({ } Array.from(files).forEach(async file => { + /** + * *Hook* which allows plugins to transform files before they'll be + * uploaded. The main use-case is to encrypt the files. + * @event _converse#beforeFileUpload + */ + file = await api.hook('beforeFileUpload', this, file); + if (!window.isNaN(max_file_size) && window.parseInt(file.size) > max_file_size) { return this.createMessage({ 'message': __('The size of your file, %1$s, exceeds the maximum allowed by your server, which is %2$s.', file.name, filesize_min_default()(max_file_size)), @@ -26655,7 +29189,7 @@ const ChatBox = model_with_contact.extend({ }, maybeShow(force) { - if (shared_converse.isUniView()) { + if (isUniView()) { const filter = c => !c.get('hidden') && c.get('jid') !== this.get('jid') && c.get('id') !== 'controlbox'; const other_chats = shared_converse.chatboxes.filter(filter); @@ -26689,8 +29223,7 @@ const ChatBox = model_with_contact.extend({ */ isHidden() { // Note: This methods gets overridden by converse-minimize - const hidden = shared_converse.isUniView() && this.get('hidden'); - return hidden || this.isScrolledUp() || shared_converse.windowState === 'hidden'; + return this.get('hidden') || this.isScrolledUp() || shared_converse.windowState === 'hidden'; }, /** @@ -26701,7 +29234,7 @@ const ChatBox = model_with_contact.extend({ * @param {_converse.Message} message */ handleUnreadMessage(message) { - if (!(message === null || message === void 0 ? void 0 : message.get('body'))) { + if (!(message !== null && message !== void 0 && message.get('body'))) { return; } @@ -26711,23 +29244,27 @@ const ChatBox = model_with_contact.extend({ // gets scrolled down. We always want to scroll down // when the user writes a message as opposed to when a // message is received. - this.model.set('scrolled', false); - } else if (this.isHidden() || this.get('scrolled')) { - const settings = { - 'num_unread': this.get('num_unread') + 1 - }; - - if (this.get('num_unread') === 0) { - settings['first_unread_id'] = message.get('id'); - } - - this.save(settings); + this.ui.set('scrolled', false); + } else if (this.isHidden()) { + this.incrementUnreadMsgsCounter(message); } else { this.sendMarkerForMessage(message); } } }, + incrementUnreadMsgsCounter(message) { + const settings = { + 'num_unread': this.get('num_unread') + 1 + }; + + if (this.get('num_unread') === 0) { + settings['first_unread_id'] = message.get('id'); + } + + this.save(settings); + }, + clearUnreadMsgCounter() { if (this.get('num_unread') > 0) { this.sendMarkerForMessage(this.messages.last()); @@ -26739,7 +29276,7 @@ const ChatBox = model_with_contact.extend({ }, isScrolledUp() { - return this.get('scrolled'); + return this.ui.get('scrolled'); } }); @@ -26749,6 +29286,7 @@ const ChatBox = model_with_contact.extend({ + const message_u = core_converse.env.utils; const { Strophe: message_Strophe @@ -26856,10 +29394,50 @@ const MessageMixin = { } }, + /** + * Returns a boolean indicating whether this message is ephemeral, + * meaning it will get automatically removed after ten seconds. + * @returns { boolean } + */ isEphemeral() { return this.get('is_ephemeral'); }, + /** + * Returns a boolean indicating whether this message is a XEP-0245 /me command. + * @returns { boolean } + */ + isMeCommand() { + const text = this.getMessageText(); + + if (!text) { + return false; + } + + return text.startsWith('/me '); + }, + + /** + * Returns a boolean indicating whether this message is considered a followup + * message from the previous one. Followup messages are shown grouped together + * under one author heading. + * A message is considered a followup of it's predecessor when it's a chat + * message from the same author, within 10 minutes. + * @returns { boolean } + */ + isFollowup() { + const messages = this.collection.models; + const idx = messages.indexOf(this); + const prev_model = idx ? messages[idx - 1] : null; + + if (prev_model === null) { + return false; + } + + const date = dayjs_min_default()(this.get('time')); + return this.get('from') === prev_model.get('from') && !this.isMeCommand() && !prev_model.isMeCommand() && this.get('type') !== 'info' && prev_model.get('type') !== 'info' && date.isBefore(dayjs_min_default()(prev_model.get('time')).add(10, 'minutes')) && !!this.get('is_encrypted') === !!prev_model.get('is_encrypted'); + }, + getDisplayName() { if (this.get('type') === 'groupchat') { return this.get('nick'); @@ -26884,16 +29462,6 @@ const MessageMixin = { return this.get('message'); }, - isMeCommand() { - const text = this.getMessageText(); - - if (!text) { - return false; - } - - return text.startsWith('/me '); - }, - /** * Send out an IQ stanza to request a file upload slot. * https://xmpp.org/extensions/xep-0363.html#request @@ -26954,16 +29522,25 @@ const MessageMixin = { uploadFile() { const xhr = new XMLHttpRequest(); - xhr.onreadystatechange = () => { + xhr.onreadystatechange = async () => { if (xhr.readyState === XMLHttpRequest.DONE) { headless_log.info('Status: ' + xhr.status); if (xhr.status === 200 || xhr.status === 201) { - this.save({ + let attrs = { 'upload': shared_converse.SUCCESS, 'oob_url': this.get('get'), - 'message': this.get('get') - }); + 'message': this.get('get'), + 'body': this.get('get') + }; + /** + * *Hook* which allows plugins to change the attributes + * saved on the message once a file has been uploaded. + * @event _converse#afterFileUploaded + */ + + attrs = await api.hook('afterFileUploaded', this, attrs); + this.save(attrs); } else { xhr.onerror(); } @@ -27021,7 +29598,7 @@ const MessageMixin = { */ async create(jids, attrs) { if (typeof jids === 'string') { - if (attrs && !(attrs === null || attrs === void 0 ? void 0 : attrs.fullname)) { + if (attrs && !(attrs !== null && attrs !== void 0 && attrs.fullname)) { var _contact$attributes; const contact = await api.contacts.get(jids); @@ -27163,9 +29740,163 @@ const MessageMixin = { } }); +;// CONCATENATED MODULE: ./src/headless/plugins/chat/utils.js + + + + +const { + Strophe: utils_Strophe, + sizzle: utils_sizzle, + u: chat_utils_u +} = core_converse.env; +function openChat(jid) { + if (!chat_utils_u.isValidJID(jid)) { + return headless_log.warn(`Invalid JID "${jid}" provided in URL fragment`); + } + + api.chats.open(jid); +} +async function onClearSession() { + if (shared_converse.shouldClearCache()) { + await Promise.all(shared_converse.chatboxes.map(c => c.messages && c.messages.clearStore({ + 'silent': true + }))); + + const filter = o => o.get('type') !== shared_converse.CONTROLBOX_TYPE; + + shared_converse.chatboxes.clearStore({ + 'silent': true + }, filter); + } +} + +async function handleErrorMessage(stanza) { + const from_jid = utils_Strophe.getBareJidFromJid(stanza.getAttribute('from')); + + if (chat_utils_u.isSameBareJID(from_jid, shared_converse.bare_jid)) { + return; + } + + const chatbox = await api.chatboxes.get(from_jid); + + if (chatbox.get('type') === shared_converse.PRIVATE_CHAT_TYPE) { + chatbox === null || chatbox === void 0 ? void 0 : chatbox.handleErrorMessageStanza(stanza); + } +} + +function autoJoinChats() { + // Automatically join private chats, based on the + // "auto_join_private_chats" configuration setting. + api.settings.get('auto_join_private_chats').forEach(jid => { + if (shared_converse.chatboxes.where({ + 'jid': jid + }).length) { + return; + } + + if (typeof jid === 'string') { + api.chats.open(jid); + } else { + headless_log.error('Invalid jid criteria specified for "auto_join_private_chats"'); + } + }); + /** + * Triggered once any private chats have been automatically joined as + * specified by the `auto_join_private_chats` setting. + * See: https://conversejs.org/docs/html/configuration.html#auto-join-private-chats + * @event _converse#privateChatsAutoJoined + * @example _converse.api.listen.on('privateChatsAutoJoined', () => { ... }); + * @example _converse.api.waitUntil('privateChatsAutoJoined').then(() => { ... }); + */ + + api.trigger('privateChatsAutoJoined'); +} +function registerMessageHandlers() { + shared_converse.connection.addHandler(stanza => { + if (utils_sizzle(`message > result[xmlns="${utils_Strophe.NS.MAM}"]`, stanza).pop()) { + // MAM messages are handled in converse-mam. + // We shouldn't get MAM messages here because + // they shouldn't have a `type` attribute. + headless_log.warn(`Received a MAM message with type "chat".`); + return true; + } + + shared_converse.handleMessageStanza(stanza); + + return true; + }, null, 'message', 'chat'); + + shared_converse.connection.addHandler(stanza => { + // Message receipts are usually without the `type` attribute. See #1353 + if (stanza.getAttribute('type') !== null) { + // TODO: currently Strophe has no way to register a handler + // for stanzas without a `type` attribute. + // We could update it to accept null to mean no attribute, + // but that would be a backward-incompatible change + return true; // Gets handled above. + } + + shared_converse.handleMessageStanza(stanza); + + return true; + }, utils_Strophe.NS.RECEIPTS, 'message'); + + shared_converse.connection.addHandler(stanza => { + handleErrorMessage(stanza); + return true; + }, null, 'message', 'error'); +} +/** + * Handler method for all incoming single-user chat "message" stanzas. + * @private + * @param { MessageAttributes } attrs - The message attributes + */ + +async function handleMessageStanza(stanza) { + if (isServerMessage(stanza)) { + // Prosody sends headline messages with type `chat`, so we need to filter them out here. + const from = stanza.getAttribute('from'); + return headless_log.info(`handleMessageStanza: Ignoring incoming server message from JID: ${from}`); + } + + const attrs = await parseMessage(stanza, shared_converse); + + if (chat_utils_u.isErrorObject(attrs)) { + attrs.stanza && headless_log.error(attrs.stanza); + return headless_log.error(attrs.message); + } + + const has_body = !!utils_sizzle(`body, encrypted[xmlns="${utils_Strophe.NS.OMEMO}"]`, stanza).length; + const chatbox = await api.chats.get(attrs.contact_jid, { + 'nickname': attrs.nick + }, has_body); + await (chatbox === null || chatbox === void 0 ? void 0 : chatbox.queueMessage(attrs)); + /** + * @typedef { Object } MessageData + * An object containing the original message stanza, as well as the + * parsed attributes. + * @property { XMLElement } stanza + * @property { MessageAttributes } stanza + * @property { ChatBox } chatbox + */ + + const data = { + stanza, + attrs, + chatbox + }; + /** + * Triggered when a message stanza is been received and processed. + * @event _converse#message + * @type { object } + * @property { module:converse-chat~MessageData } data + */ + + api.trigger('message', data); +} ;// CONCATENATED MODULE: ./src/headless/plugins/chat/index.js /** - * @module converse-chat * @copyright 2020, the Converse.js contributors * @license Mozilla Public License (MPLv2) */ @@ -27176,26 +29907,6 @@ const MessageMixin = { - - -const { - Strophe: chat_Strophe, - sizzle: chat_sizzle, - utils: chat_utils -} = core_converse.env; -const chat_u = core_converse.env.utils; - -async function handleErrorMessage(stanza) { - const from_jid = chat_Strophe.getBareJidFromJid(stanza.getAttribute('from')); - - if (chat_utils.isSameBareJID(from_jid, shared_converse.bare_jid)) { - return; - } - - const chatbox = await api.chatboxes.get(from_jid); - chatbox === null || chatbox === void 0 ? void 0 : chatbox.handleErrorMessageStanza(stanza); -} - core_converse.plugins.add('converse-chat', { /* Optional dependencies are other plugins which might be * overridden or relied upon, and therefore need to be loaded before @@ -27212,14 +29923,10 @@ core_converse.plugins.add('converse-chat', { dependencies: ['converse-chatboxes', 'converse-disco'], initialize() { - /* The initialize function gets called as soon as the plugin is - * loaded by converse.js's plugin machinery. - */ - Object.assign(api, chat_api); // Configuration values for this plugin + // Configuration values for this plugin // ==================================== // Refer to docs/source/configuration.rst for explanations of these // configuration settings. - api.settings.extend({ 'allow_message_corrections': 'all', 'allow_message_retraction': 'all', @@ -27227,6 +29934,8 @@ core_converse.plugins.add('converse-chat', { 'auto_join_private_chats': [], 'clear_messages_on_reconnection': false, 'filter_by_resource': false, + 'prune_messages_above': undefined, + 'pruning_behavior': 'unscrolled', 'send_chat_markers': ["received", "displayed", "acknowledged"], 'send_chat_state_notifications': true }); @@ -27235,153 +29944,17 @@ core_converse.plugins.add('converse-chat', { model: shared_converse.Message, comparator: 'time' }); - shared_converse.ChatBox = model; - /** - * Handler method for all incoming single-user chat "message" stanzas. - * @private - * @method _converse#handleMessageStanza - * @param { MessageAttributes } attrs - The message attributes - */ - - shared_converse.handleMessageStanza = async function (stanza) { - if (isServerMessage(stanza)) { - // Prosody sends headline messages with type `chat`, so we need to filter them out here. - const from = stanza.getAttribute('from'); - return headless_log.info("handleMessageStanza: Ignoring incoming server message from JID: ".concat(from)); - } - - const attrs = await parseMessage(stanza, shared_converse); - - if (chat_u.isErrorObject(attrs)) { - attrs.stanza && headless_log.error(attrs.stanza); - return headless_log.error(attrs.message); - } - - const has_body = !!chat_sizzle("body, encrypted[xmlns=\"".concat(chat_Strophe.NS.OMEMO, "\"]"), stanza).length; - const chatbox = await api.chats.get(attrs.contact_jid, { - 'nickname': attrs.nick - }, has_body); - await (chatbox === null || chatbox === void 0 ? void 0 : chatbox.queueMessage(attrs)); - /** - * @typedef { Object } MessageData - * An object containing the original message stanza, as well as the - * parsed attributes. - * @property { XMLElement } stanza - * @property { MessageAttributes } stanza - * @property { ChatBox } chatbox - */ - - const data = { - stanza, - attrs, - chatbox - }; - /** - * Triggered when a message stanza is been received and processed. - * @event _converse#message - * @type { object } - * @property { module:converse-chat~MessageData } data - */ - - api.trigger('message', data); - }; - - function registerMessageHandlers() { - shared_converse.connection.addHandler(stanza => { - if (chat_sizzle("message > result[xmlns=\"".concat(chat_Strophe.NS.MAM, "\"]"), stanza).pop()) { - // MAM messages are handled in converse-mam. - // We shouldn't get MAM messages here because - // they shouldn't have a `type` attribute. - headless_log.warn("Received a MAM message with type \"chat\"."); - return true; - } - - shared_converse.handleMessageStanza(stanza); - - return true; - }, null, 'message', 'chat'); - - shared_converse.connection.addHandler(stanza => { - // Message receipts are usually without the `type` attribute. See #1353 - if (stanza.getAttribute('type') !== null) { - // TODO: currently Strophe has no way to register a handler - // for stanzas without a `type` attribute. - // We could update it to accept null to mean no attribute, - // but that would be a backward-incompatible change - return true; // Gets handled above. - } - - shared_converse.handleMessageStanza(stanza); - - return true; - }, chat_Strophe.NS.RECEIPTS, 'message'); - - shared_converse.connection.addHandler(stanza => { - handleErrorMessage(stanza); - return true; - }, null, 'message', 'error'); - } - - function autoJoinChats() { - // Automatically join private chats, based on the - // "auto_join_private_chats" configuration setting. - api.settings.get('auto_join_private_chats').forEach(jid => { - if (shared_converse.chatboxes.where({ - 'jid': jid - }).length) { - return; - } - - if (typeof jid === 'string') { - api.chats.open(jid); - } else { - headless_log.error('Invalid jid criteria specified for "auto_join_private_chats"'); - } - }); - /** - * Triggered once any private chats have been automatically joined as - * specified by the `auto_join_private_chats` setting. - * See: https://conversejs.org/docs/html/configuration.html#auto-join-private-chats - * @event _converse#privateChatsAutoJoined - * @example _converse.api.listen.on('privateChatsAutoJoined', () => { ... }); - * @example _converse.api.waitUntil('privateChatsAutoJoined').then(() => { ... }); - */ - - api.trigger('privateChatsAutoJoined'); - } - /************************ BEGIN Route Handlers ************************/ - - - function openChat(jid) { - if (!chat_utils.isValidJID(jid)) { - return headless_log.warn("Invalid JID \"".concat(jid, "\" provided in URL fragment")); - } - - api.chats.open(jid); - } + Object.assign(shared_converse, { + ChatBox: model, + handleMessageStanza: handleMessageStanza + }); + Object.assign(api, chat_api); shared_converse.router.route('converse/chat?jid=:jid', openChat); - /************************ END Route Handlers ************************/ - - /************************ BEGIN Event Handlers ************************/ - api.listen.on('chatBoxesFetched', autoJoinChats); api.listen.on('presencesInitialized', registerMessageHandlers); - api.listen.on('clearSession', async () => { - if (shared_converse.shouldClearCache()) { - await Promise.all(shared_converse.chatboxes.map(c => c.messages && c.messages.clearStore({ - 'silent': true - }))); - - const filter = o => o.get('type') !== shared_converse.CONTROLBOX_TYPE; - - shared_converse.chatboxes.clearStore({ - 'silent': true - }, filter); - } - }); - /************************ END Event Handlers ************************/ + api.listen.on('clearSession', onClearSession); } }); @@ -27411,22 +29984,22 @@ const DiscoEntity = Model.extend({ initialize(attrs, options) { this.waitUntilFeaturesDiscovered = getOpenPromise(); this.dataforms = new Collection(); - let id = "converse.dataforms-".concat(this.get('jid')); + let id = `converse.dataforms-${this.get('jid')}`; this.dataforms.browserStorage = shared_converse.createStore(id, 'session'); this.features = new Collection(); - id = "converse.features-".concat(this.get('jid')); + id = `converse.features-${this.get('jid')}`; this.features.browserStorage = shared_converse.createStore(id, 'session'); this.listenTo(this.features, 'add', this.onFeatureAdded); this.fields = new Collection(); - id = "converse.fields-".concat(this.get('jid')); + id = `converse.fields-${this.get('jid')}`; this.fields.browserStorage = shared_converse.createStore(id, 'session'); this.listenTo(this.fields, 'add', this.onFieldAdded); this.identities = new Collection(); - id = "converse.identities-".concat(this.get('jid')); + id = `converse.identities-${this.get('jid')}`; this.identities.browserStorage = shared_converse.createStore(id, 'session'); this.fetchFeatures(options); this.items = new shared_converse.DiscoEntities(); - id = "converse.disco-items-".concat(this.get('jid')); + id = `converse.disco-items-${this.get('jid')}`; this.items.browserStorage = shared_converse.createStore(id, 'session'); this.items.fetch(); }, @@ -27519,7 +30092,7 @@ const DiscoEntity = Model.extend({ try { stanza = await api.disco.info(this.get('jid'), null); } catch (iq) { - iq === null ? headless_log.error("Timeout for disco#info query for ".concat(this.get('jid'))) : headless_log.error(iq); + iq === null ? headless_log.error(`Timeout for disco#info query for ${this.get('jid')}`) : headless_log.error(iq); this.waitUntilFeaturesDiscovered.resolve(this); return; } @@ -27528,7 +30101,7 @@ const DiscoEntity = Model.extend({ }, onDiscoItems(stanza) { - sizzle_default()("query[xmlns=\"".concat(entity_Strophe.NS.DISCO_ITEMS, "\"] item"), stanza).forEach(item => { + sizzle_default()(`query[xmlns="${entity_Strophe.NS.DISCO_ITEMS}"] item`, stanza).forEach(item => { if (item.getAttribute("node")) { // XXX: Ignore nodes for now. // See: https://xmpp.org/extensions/xep-0030.html#items-nodes @@ -27572,7 +30145,7 @@ const DiscoEntity = Model.extend({ 'name': identity.getAttribute('name') }); }); - sizzle_default()("x[type=\"result\"][xmlns=\"".concat(entity_Strophe.NS.XFORM, "\"]"), stanza).forEach(form => { + sizzle_default()(`x[type="result"][xmlns="${entity_Strophe.NS.XFORM}"]`, stanza).forEach(form => { const data = {}; sizzle_default()('field', form).forEach(field => { var _field$querySelector; @@ -27585,7 +30158,7 @@ const DiscoEntity = Model.extend({ this.dataforms.create(data); }); - if (stanza.querySelector("feature[var=\"".concat(entity_Strophe.NS.DISCO_ITEMS, "\"]"))) { + if (stanza.querySelector(`feature[var="${entity_Strophe.NS.DISCO_ITEMS}"]`)) { this.queryForItems(); } @@ -27639,14 +30212,14 @@ const DiscoEntities = Collection.extend({ const { - Strophe: utils_Strophe, + Strophe: disco_utils_Strophe, $iq: utils_$iq } = core_converse.env; function onDiscoInfoRequest(stanza) { const node = stanza.getElementsByTagName('query')[0].getAttribute('node'); const attrs = { - xmlns: utils_Strophe.NS.DISCO_INFO + xmlns: disco_utils_Strophe.NS.DISCO_INFO }; if (node) { @@ -27695,12 +30268,12 @@ function onDiscoInfoRequest(stanza) { function addClientFeatures() { // See https://xmpp.org/registrar/disco-categories.html api.disco.own.identities.add('client', 'web', 'Converse'); - api.disco.own.features.add(utils_Strophe.NS.CHATSTATES); - api.disco.own.features.add(utils_Strophe.NS.DISCO_INFO); - api.disco.own.features.add(utils_Strophe.NS.ROSTERX); // Limited support + api.disco.own.features.add(disco_utils_Strophe.NS.CHATSTATES); + api.disco.own.features.add(disco_utils_Strophe.NS.DISCO_INFO); + api.disco.own.features.add(disco_utils_Strophe.NS.ROSTERX); // Limited support if (api.settings.get("message_carbons")) { - api.disco.own.features.add(utils_Strophe.NS.CARBONS); + api.disco.own.features.add(disco_utils_Strophe.NS.CARBONS); } /** * Triggered in converse-disco once the core disco features of @@ -27717,10 +30290,10 @@ function addClientFeatures() { async function initializeDisco() { addClientFeatures(); - shared_converse.connection.addHandler(stanza => onDiscoInfoRequest(stanza), utils_Strophe.NS.DISCO_INFO, 'iq', 'get', null, null); + shared_converse.connection.addHandler(stanza => onDiscoInfoRequest(stanza), disco_utils_Strophe.NS.DISCO_INFO, 'iq', 'get', null, null); shared_converse.disco_entities = new shared_converse.DiscoEntities(); - const id = "converse.disco-entities-".concat(shared_converse.bare_jid); + const id = `converse.disco-entities-${shared_converse.bare_jid}`; shared_converse.disco_entities.browserStorage = shared_converse.createStore(id, 'session'); const collection = await shared_converse.disco_entities.fetchEntities(); @@ -27749,8 +30322,8 @@ function initStreamFeatures() { // Otherwise the features will be created once we've received them // from the server (see populateStreamFeatures). if (!shared_converse.stream_features) { - const bare_jid = utils_Strophe.getBareJidFromJid(shared_converse.jid); - const id = "converse.stream-features-".concat(bare_jid); + const bare_jid = disco_utils_Strophe.getBareJidFromJid(shared_converse.jid); + const id = `converse.stream-features-${bare_jid}`; api.promises.add('streamFeaturesAdded'); shared_converse.stream_features = new Collection(); shared_converse.stream_features.browserStorage = shared_converse.createStore(id, "session"); @@ -27770,7 +30343,7 @@ function populateStreamFeatures() { // Strophe.js sets the element on the // Strophe.Connection instance (_converse.connection). // - // Once this is done, we populate the _converse.stream_features collection + // Once this is we populate the _converse.stream_features collection // and trigger streamFeaturesAdded. initStreamFeatures(); Array.from(shared_converse.connection.features.childNodes).forEach(feature => { @@ -27781,6 +30354,16 @@ function populateStreamFeatures() { }); notifyStreamFeaturesAdded(); } +function utils_clearSession() { + var _converse$disco_entit, _converse$disco_entit2, _converse$disco_entit3, _converse$disco_entit4, _converse$disco_entit5; + + (_converse$disco_entit = shared_converse.disco_entities) === null || _converse$disco_entit === void 0 ? void 0 : _converse$disco_entit.forEach(e => e.features.clearStore()); + (_converse$disco_entit2 = shared_converse.disco_entities) === null || _converse$disco_entit2 === void 0 ? void 0 : _converse$disco_entit2.forEach(e => e.identities.clearStore()); + (_converse$disco_entit3 = shared_converse.disco_entities) === null || _converse$disco_entit3 === void 0 ? void 0 : _converse$disco_entit3.forEach(e => e.dataforms.clearStore()); + (_converse$disco_entit4 = shared_converse.disco_entities) === null || _converse$disco_entit4 === void 0 ? void 0 : _converse$disco_entit4.forEach(e => e.fields.clearStore()); + (_converse$disco_entit5 = shared_converse.disco_entities) === null || _converse$disco_entit5 === void 0 ? void 0 : _converse$disco_entit5.clearStore(); + delete shared_converse.disco_entities; +} ;// CONCATENATED MODULE: ./src/headless/plugins/disco/api.js @@ -27821,7 +30404,7 @@ const { if (shared_converse.stream_features === undefined && !api.connection.connected()) { // Happens during tests when disco lookups happen asynchronously after teardown. - const msg = "Tried to get feature ".concat(name, " ").concat(xmlns, " but _converse.stream_features has been torn down"); + const msg = `Tried to get feature ${name} ${xmlns} but _converse.stream_features has been torn down`; headless_log.warn(msg); return; } @@ -28004,9 +30587,9 @@ const { return shared_converse.disco_entities; } - if (shared_converse.disco_entities === undefined && !api.connection.connected()) { + if (shared_converse.disco_entities === undefined) { // Happens during tests when disco lookups happen asynchronously after teardown. - const msg = "Tried to look up entity ".concat(jid, " but _converse.disco_entities has been torn down"); + const msg = `Tried to look up entity ${jid} but _converse.disco_entities has been torn down`; headless_log.warn(msg); return; } @@ -28075,7 +30658,7 @@ const { if (shared_converse.disco_entities === undefined && !api.connection.connected()) { // Happens during tests when disco lookups happen asynchronously after teardown. - const msg = "Tried to get feature ".concat(feature, " for ").concat(jid, " but _converse.disco_entities has been torn down"); + const msg = `Tried to get feature ${feature} for ${jid} but _converse.disco_entities has been torn down`; headless_log.warn(msg); return; } @@ -28107,7 +30690,7 @@ const { * } */ async supports(feature, jid) { - const features = await api.disco.features.get(feature, jid); + const features = (await api.disco.features.get(feature, jid)) || []; return features.length > 0; }, @@ -28234,7 +30817,7 @@ const { if (e === undefined && !api.connection.connected()) { // Happens during tests when disco lookups happen asynchronously after teardown. - const msg = "Tried to look up category ".concat(category, " for ").concat(jid, " but _converse.disco_entities has been torn down"); + const msg = `Tried to look up category ${category} for ${jid} but _converse.disco_entities has been torn down`; headless_log.warn(msg); return; } @@ -28291,19 +30874,12 @@ core_converse.plugins.add('converse-disco', { await shared_converse.stream_features.clearStore(); delete shared_converse.stream_features; } - }); - api.listen.on('clearSession', () => { - if (shared_converse.shouldClearCache() && shared_converse.disco_entities) { - Array.from(shared_converse.disco_entities.models).forEach(e => e.features.clearStore()); - Array.from(shared_converse.disco_entities.models).forEach(e => e.identities.clearStore()); - Array.from(shared_converse.disco_entities.models).forEach(e => e.dataforms.clearStore()); - Array.from(shared_converse.disco_entities.models).forEach(e => e.fields.clearStore()); + }); // All disco entities stored in sessionStorage and are refetched + // upon login or reconnection and then stored with new ids, so to + // avoid sessionStorage filling up, we remove them. - shared_converse.disco_entities.clearStore(); - - delete shared_converse.disco_entities; - } - }); + api.listen.on('will-reconnect', utils_clearSession); + api.listen.on('clearSession', utils_clearSession); } }); @@ -28312,38 +30888,6 @@ const ASCII_REGEX = '(\\*\\\\0\\/\\*|\\*\\\\O\\/\\*|\\-___\\-|\\:\'\\-\\)|\'\\:\ const ASCII_REPLACE_REGEX = new RegExp("]*>.*?<\/object>|]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|((\\s|^)" + ASCII_REGEX + "(?=\\s|$|[!,.?]))", "gi"); const CODEPOINTS_REGEX = /(?:\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5\udeeb\udeec\udef4-\udefa\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd71\udd73-\udd76\udd7a-\udda2\udda5-\uddaa\uddae-\uddb4\uddb7\uddba\uddbc-\uddca\uddd0\uddde-\uddff\ude70-\ude73\ude78-\ude7a\ude80-\ude82\ude90-\ude95]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g; ;// CONCATENATED MODULE: ./src/headless/plugins/emoji/index.js -function _templateObject3() { - const data = _taggedTemplateLiteral(["\"","]); - - _templateObject3 = function () { - return data; - }; - - return data; -} - -function _templateObject2() { - const data = _taggedTemplateLiteral(["\"","]); - - _templateObject2 = function () { - return data; - }; - - return data; -} - -function _templateObject() { - const data = _taggedTemplateLiteral(["", ""]); - - _templateObject = function () { - return data; - }; - - return data; -} - -function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /** * @module converse-emoji * @copyright 2020, the Converse.js contributors @@ -28572,18 +31116,26 @@ function getEmojiMarkup(data, options = { return emoji; } else if (api.settings.get('use_system_emojis')) { if (options.add_title_wrapper) { - return shortname ? T(_templateObject(), shortname, emoji) : emoji; + return shortname ? T`${emoji}` : emoji; } else { return emoji; } } else { const path = api.settings.get('emoji_image_path'); - return T(_templateObject2(), shortname, emoji, path, data.cp); + return T`${emoji}`; } } else if (options.unicode_only) { return shortname; } else { - return T(_templateObject3(), shortname, shortname, core_converse.emojis.by_sn[shortname].url); + return T`${shortname}`; } } function getShortnameReferences(text) { @@ -28881,7 +31433,13 @@ const ChatRoomMessageMixin = { * @returns { Boolean } */ mayBeModerated() { - return ['all', 'moderator'].includes(api.settings.get('allow_message_retraction')) && this.collection.chatbox.canModerateMessages(); + if (typeof this.get('from_muc') === 'undefined') { + // If from_muc is not defined, then this message hasn't been + // reflected yet, which means we won't have a XEP-0359 stanza id. + return; + } + + return ['all', 'moderator'].includes(api.settings.get('allow_message_retraction')) && this.get(`stanza_id ${this.get('from_muc')}`) && this.collection.chatbox.canModerateMessages(); }, checkValidity() { @@ -28899,7 +31457,7 @@ const ChatRoomMessageMixin = { const chatbox = this === null || this === void 0 ? void 0 : (_this$collection = this.collection) === null || _this$collection === void 0 ? void 0 : _this$collection.chatbox; if (!chatbox) { - return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON()))); + return headless_log.error(`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`); } this.listenTo(chatbox.occupants, 'add', this.onOccupantAdded); @@ -28915,7 +31473,7 @@ const ChatRoomMessageMixin = { const chatbox = this === null || this === void 0 ? void 0 : (_this$collection2 = this.collection) === null || _this$collection2 === void 0 ? void 0 : _this$collection2.chatbox; if (!chatbox) { - return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON()))); + return headless_log.error(`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`); } this.stopListening(chatbox.occupants, 'add', this.onOccupantAdded); @@ -28932,7 +31490,7 @@ const ChatRoomMessageMixin = { const chatbox = this === null || this === void 0 ? void 0 : (_this$collection3 = this.collection) === null || _this$collection3 === void 0 ? void 0 : _this$collection3.chatbox; if (!chatbox) { - return headless_log.error("Could not get collection.chatbox for message: ".concat(JSON.stringify(this.toJSON()))); + return headless_log.error(`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`); } const nick = Strophe.getResourceFromJid(this.get('from')); @@ -28945,7 +31503,7 @@ const ChatRoomMessageMixin = { nick, 'type': 'unavailable' }); - const jid = "".concat(chatbox.get('jid'), "/").concat(nick); + const jid = `${chatbox.get('jid')}/${nick}`; api.user.presence.send('probe', jid); } @@ -28997,7 +31555,7 @@ const reduceReferences = ([text, refs], ref, index) => { begin = begin - index; end = end - index - 1; // -1 to compensate for the removed @ - updated_text = "".concat(updated_text.slice(0, begin)).concat(value).concat(updated_text.slice(end + 1)); + updated_text = `${updated_text.slice(0, begin)}${value}${updated_text.slice(end + 1)}`; return [updated_text, [...refs, { ...ref, begin, end @@ -29040,7 +31598,10 @@ utils_core.webForm2xForm = function (field) { value = field.value; } - return utils_core.toStanza("\n \n ").concat(value.constructor === Array ? value.map(v => "".concat(v, "")) : "".concat(value, ""), "\n ")); + return utils_core.toStanza(` + + ${value.constructor === Array ? value.map(v => `${v}`) : `${value}`} + `); }; /* harmony default export */ const utils_form = (utils_core); @@ -29107,6 +31668,45 @@ const { const { NS: parsers_NS } = muc_parsers_Strophe; +/** + * Parses a message stanza for XEP-0317 MEP notification data + * @param { XMLElement } stanza - The message stanza + * @returns { Array } Returns an array of objects representing elements. + */ + +function getMEPActivities(stanza) { + const items_el = muc_parsers_sizzle(`items[node="${muc_parsers_Strophe.NS.CONFINFO}"]`, stanza).pop(); + + if (!items_el) { + return null; + } + + const from = stanza.getAttribute('from'); + const msgid = stanza.getAttribute('id'); + const selector = `item ` + `conference-info[xmlns="${muc_parsers_Strophe.NS.CONFINFO}"] ` + `activity[xmlns="${muc_parsers_Strophe.NS.ACTIVITY}"]`; + return muc_parsers_sizzle(selector, items_el).map(el => { + var _el$querySelector; + + const message = (_el$querySelector = el.querySelector('text')) === null || _el$querySelector === void 0 ? void 0 : _el$querySelector.textContent; + + if (message) { + var _el$querySelector2; + + const references = getReferences(stanza); + const reason = (_el$querySelector2 = el.querySelector('reason')) === null || _el$querySelector2 === void 0 ? void 0 : _el$querySelector2.textContent; + return { + from, + msgid, + message, + reason, + references, + 'type': 'mep' + }; + } + + return {}; + }); +} /** * @private * @param { XMLElement } stanza - The message stanza @@ -29116,14 +31716,14 @@ const { */ function getModerationAttributes(stanza) { - const fastening = muc_parsers_sizzle("apply-to[xmlns=\"".concat(muc_parsers_Strophe.NS.FASTEN, "\"]"), stanza).pop(); + const fastening = muc_parsers_sizzle(`apply-to[xmlns="${muc_parsers_Strophe.NS.FASTEN}"]`, stanza).pop(); if (fastening) { const applies_to_id = fastening.getAttribute('id'); - const moderated = muc_parsers_sizzle("moderated[xmlns=\"".concat(muc_parsers_Strophe.NS.MODERATE, "\"]"), fastening).pop(); + const moderated = muc_parsers_sizzle(`moderated[xmlns="${muc_parsers_Strophe.NS.MODERATE}"]`, fastening).pop(); if (moderated) { - const retracted = muc_parsers_sizzle("retract[xmlns=\"".concat(muc_parsers_Strophe.NS.RETRACT, "\"]"), moderated).pop(); + const retracted = muc_parsers_sizzle(`retract[xmlns="${muc_parsers_Strophe.NS.RETRACT}"]`, moderated).pop(); if (retracted) { var _moderated$querySelec; @@ -29138,10 +31738,10 @@ function getModerationAttributes(stanza) { } } } else { - const tombstone = muc_parsers_sizzle("> moderated[xmlns=\"".concat(muc_parsers_Strophe.NS.MODERATE, "\"]"), stanza).pop(); + const tombstone = muc_parsers_sizzle(`> moderated[xmlns="${muc_parsers_Strophe.NS.MODERATE}"]`, stanza).pop(); if (tombstone) { - const retracted = muc_parsers_sizzle("retracted[xmlns=\"".concat(muc_parsers_Strophe.NS.RETRACT, "\"]"), tombstone).pop(); + const retracted = muc_parsers_sizzle(`retracted[xmlns="${muc_parsers_Strophe.NS.RETRACT}"]`, tombstone).pop(); if (retracted) { var _tombstone$querySelec; @@ -29171,23 +31771,18 @@ function getModerationAttributes(stanza) { async function parseMUCMessage(stanza, chatbox, _converse) { - var _stanza$querySelector, _stanza$querySelector2, _chatbox$occupants$fi, _stanza$querySelector3, _stanza$querySelector4; + var _stanza, _stanza$querySelector, _stanza$querySelector2, _chatbox$occupants$fi, _stanza$querySelector3, _stanza$querySelector4; - const err = rejectUnencapsulatedForward(stanza); - - if (err) { - return err; - } - - const selector = "[xmlns=\"".concat(parsers_NS.MAM, "\"] > forwarded[xmlns=\"").concat(parsers_NS.FORWARD, "\"] > message"); + throwErrorIfInvalidForward(stanza); + const selector = `[xmlns="${parsers_NS.MAM}"] > forwarded[xmlns="${parsers_NS.FORWARD}"] > message`; const original_stanza = stanza; stanza = muc_parsers_sizzle(selector, stanza).pop() || stanza; - if (muc_parsers_sizzle("message > forwarded[xmlns=\"".concat(muc_parsers_Strophe.NS.FORWARD, "\"]"), stanza).length) { - return new StanzaParseError("Invalid Stanza: Forged MAM groupchat message from ".concat(stanza.getAttribute('from')), stanza); + if (muc_parsers_sizzle(`message > forwarded[xmlns="${muc_parsers_Strophe.NS.FORWARD}"]`, stanza).length) { + return new StanzaParseError(`Invalid Stanza: Forged MAM groupchat message from ${stanza.getAttribute('from')}`, stanza); } - const delay = muc_parsers_sizzle("delay[xmlns=\"".concat(muc_parsers_Strophe.NS.DELAY, "\"]"), original_stanza).pop(); + const delay = muc_parsers_sizzle(`delay[xmlns="${muc_parsers_Strophe.NS.DELAY}"]`, original_stanza).pop(); const from = stanza.getAttribute('from'); const nick = muc_parsers_Strophe.unescapeNode(muc_parsers_Strophe.getResourceFromJid(from)); const marker = getChatMarker(stanza); @@ -29196,6 +31791,7 @@ async function parseMUCMessage(stanza, chatbox, _converse) { * @typedef { Object } MUCMessageAttributes * The object which {@link parseMUCMessage} returns * @property { ('me'|'them') } sender - Whether the message was sent by the current user or someone else + * @property { Array } activities - A list of objects representing XEP-0316 MEP notification data * @property { Array } references - A list of objects representing XEP-0372 references * @property { Boolean } editable - Is this message editable via XEP-0308? * @property { Boolean } is_archived - Is this message from a XEP-0313 MAM archive? @@ -29250,6 +31846,8 @@ async function parseMUCMessage(stanza, chatbox, _converse) { let attrs = Object.assign({ from, nick, + 'is_forwarded': !!((_stanza = stanza) !== null && _stanza !== void 0 && _stanza.querySelector('forwarded')), + 'activities': getMEPActivities(stanza), 'body': (_stanza$querySelector = stanza.querySelector('body')) === null || _stanza$querySelector === void 0 ? void 0 : (_stanza$querySelector2 = _stanza$querySelector.textContent) === null || _stanza$querySelector2 === void 0 ? void 0 : _stanza$querySelector2.trim(), 'chat_state': getChatState(stanza), 'from_muc': muc_parsers_Strophe.getBareJidFromJid(from), @@ -29260,9 +31858,9 @@ async function parseMUCMessage(stanza, chatbox, _converse) { 'is_carbon': isCarbon(original_stanza), 'is_delayed': !!delay, 'is_headline': isHeadline(stanza), - 'is_markable': !!muc_parsers_sizzle("markable[xmlns=\"".concat(muc_parsers_Strophe.NS.MARKERS, "\"]"), stanza).length, + 'is_markable': !!muc_parsers_sizzle(`markable[xmlns="${muc_parsers_Strophe.NS.MARKERS}"]`, stanza).length, 'is_marker': !!marker, - 'is_unstyled': !!muc_parsers_sizzle("unstyled[xmlns=\"".concat(muc_parsers_Strophe.NS.STYLING, "\"]"), stanza).length, + 'is_unstyled': !!muc_parsers_sizzle(`unstyled[xmlns="${muc_parsers_Strophe.NS.STYLING}"]`, stanza).length, 'marker_id': marker && marker.getAttribute('id'), 'msgid': stanza.getAttribute('id') || original_stanza.getAttribute('id'), 'receipt_id': getReceiptId(stanza), @@ -29284,21 +31882,25 @@ async function parseMUCMessage(stanza, chatbox, _converse) { }, attrs); if (attrs.is_archived && original_stanza.getAttribute('from') !== attrs.from_muc) { - return new StanzaParseError("Invalid Stanza: Forged MAM message from ".concat(original_stanza.getAttribute('from')), stanza); + return new StanzaParseError(`Invalid Stanza: Forged MAM message from ${original_stanza.getAttribute('from')}`, stanza); } else if (attrs.is_archived && original_stanza.getAttribute('from') !== chatbox.get('jid')) { - return new StanzaParseError("Invalid Stanza: Forged MAM groupchat message from ".concat(stanza.getAttribute('from')), stanza); + return new StanzaParseError(`Invalid Stanza: Forged MAM groupchat message from ${stanza.getAttribute('from')}`, stanza); } else if (attrs.is_carbon) { return new StanzaParseError('Invalid Stanza: MUC messages SHOULD NOT be XEP-0280 carbon copied', stanza); } // We prefer to use one of the XEP-0359 unique and stable stanza IDs as the Model id, to avoid duplicates. - attrs['id'] = attrs['origin_id'] || attrs["stanza_id ".concat(attrs.from_muc || attrs.from)] || parsers_u.getUniqueId(); + attrs['id'] = attrs['origin_id'] || attrs[`stanza_id ${attrs.from_muc || attrs.from}`] || parsers_u.getUniqueId(); /** * *Hook* which allows plugins to add additional parsing * @event _converse#parseMUCMessage */ - return api.hook('parseMUCMessage', stanza, attrs); + attrs = await api.hook('parseMUCMessage', stanza, attrs); // We call this after the hook, to allow plugins to decrypt encrypted + // messages, since we need to parse the message text to determine whether + // there are media urls. + + return Object.assign(attrs, getMediaURLsMetadata(attrs.is_encrypted ? attrs.plaintext : attrs.body)); } /** * Given an IQ stanza with a member list, create an array of objects containing @@ -29309,7 +31911,7 @@ async function parseMUCMessage(stanza, chatbox, _converse) { */ function parseMemberListIQ(iq) { - return muc_parsers_sizzle("query[xmlns=\"".concat(muc_parsers_Strophe.NS.MUC_ADMIN, "\"] item"), iq).map(item => { + return muc_parsers_sizzle(`query[xmlns="${muc_parsers_Strophe.NS.MUC_ADMIN}"] item`, iq).map(item => { /** * @typedef {Object} MemberListItem * Either the JID or the nickname (or both) will be available. @@ -29403,10 +32005,11 @@ function parseMUCPresence(stanza) { + const { Strophe: affiliations_utils_Strophe, $iq: affiliations_utils_$iq, - u: utils_u + u: affiliations_utils_u } = core_converse.env; /** * Sends an IQ stanza to the server, asking it for the relevant affiliation list . @@ -29419,6 +32022,9 @@ const { */ async function getAffiliationList(affiliation, muc_jid) { + const { + __ + } = shared_converse; const iq = affiliations_utils_$iq({ 'to': muc_jid, 'type': 'get' @@ -29430,15 +32036,17 @@ async function getAffiliationList(affiliation, muc_jid) { const result = await api.sendIQ(iq, null, false); if (result === null) { - const err_msg = "Error: timeout while fetching ".concat(affiliation, " list for MUC ").concat(muc_jid); + const err_msg = __('Error: timeout while fetching %1s list for MUC %2s', affiliation, muc_jid); + const err = new Error(err_msg); headless_log.warn(err_msg); headless_log.warn(result); return err; } - if (utils_u.isErrorStanza(result)) { - const err_msg = "Error: not allowed to fetch ".concat(affiliation, " list for MUC ").concat(muc_jid); + if (affiliations_utils_u.isErrorStanza(result)) { + const err_msg = __('Error: not allowed to fetch %1s list for MUC %2s', affiliation, muc_jid); + const err = new Error(err_msg); headless_log.warn(err_msg); headless_log.warn(result); @@ -29447,10 +32055,33 @@ async function getAffiliationList(affiliation, muc_jid) { return parseMemberListIQ(result).filter(p => p).sort((a, b) => a.nick < b.nick ? -1 : a.nick > b.nick ? 1 : 0); } +/** + * Given an occupant model, see which affiliations may be assigned to that user. + * @param { Model } occupant + * @returns { Array<('owner'|'admin'|'member'|'outcast'|'none')> } - An array of assignable affiliations + */ + +function getAssignableAffiliations(occupant) { + let disabled = api.settings.get('modtools_disable_assign'); + + if (!Array.isArray(disabled)) { + disabled = disabled ? AFFILIATIONS : []; + } + + if (occupant.get('affiliation') === 'owner') { + return AFFILIATIONS.filter(a => !disabled.includes(a)); + } else if (occupant.get('affiliation') === 'admin') { + return AFFILIATIONS.filter(a => !['owner', 'admin', ...disabled].includes(a)); + } else { + return []; + } +} // Necessary for tests + +shared_converse.getAssignableAffiliations = getAssignableAffiliations; /** * Send IQ stanzas to the server to modify affiliations for users in this groupchat. * See: https://xmpp.org/extensions/xep-0045.html#modifymember - * @param { Object[] } users + * @param { Array } users * @param { string } users[].jid - The JID of the user whose affiliation will change * @param { Array } users[].affiliation - The new affiliation for this user * @param { string } [users[].reason] - An optional reason for the affiliation change @@ -29585,6 +32216,7 @@ function computeAffiliationsDelta(exclude_existing, remove_absentees, new_list, + const OWNER_COMMANDS = ['owner']; const ADMIN_COMMANDS = ['admin', 'ban', 'deop', 'destroy', 'member', 'op', 'revoke']; const MODERATOR_COMMANDS = ['kick', 'mute', 'voice', 'modtools']; @@ -29613,7 +32245,7 @@ const ChatRoomMixin = { 'chat_state': undefined, 'has_activity': false, // XEP-437 - 'hidden': shared_converse.isUniView() && !api.settings.get('singleton'), + 'hidden': isUniView() && !api.settings.get('singleton'), 'hidden_occupants': !!api.settings.get('hide_muc_participants'), 'message_type': 'groupchat', 'name': '', @@ -29637,7 +32269,7 @@ const ChatRoomMixin = { async initialize() { this.initialized = getOpenPromise(); this.debouncedRejoin = lodash_es_debounce(this.rejoin, 250); - this.set('box_id', "box-".concat(this.get('jid'))); + this.set('box_id', `box-${this.get('jid')}`); this.initNotifications(); this.initMessages(); this.initUI(); @@ -29647,8 +32279,8 @@ const ChatRoomMixin = { this.registerHandlers(); this.on('change:chat_state', this.sendChatState, this); this.on('change:hidden', this.onHiddenChange, this); - this.on('change:scrolled', () => !this.get('scrolled') && this.clearUnreadMsgCounter()); this.on('destroy', this.removeHandlers, this); + this.ui.on('change:scrolled', this.onScrolledChanged, this); await this.restoreSession(); this.session.on('change:connection_status', this.onConnectionStatusChanged, this); this.listenTo(this.occupants, 'add', this.onOccupantAdded); @@ -29692,7 +32324,8 @@ const ChatRoomMixin = { await this.fetchMessages().catch(e => headless_log.error(e)); return true; } else { - this.clearCache(); + this.session.save('connection_status', core_converse.ROOMSTATUS.DISCONNECTED); + this.clearOccupantsCache(); return false; } }, @@ -29730,7 +32363,24 @@ const ChatRoomMixin = { return this; } - const stanza = $pres({ + api.send(await this.constructPresence(password)); + return this; + }, + + /** + * Clear stale cache and re-join a MUC we've been in before. + * @private + * @method _converse.ChatRoom#rejoin + */ + rejoin() { + this.session.save('connection_status', core_converse.ROOMSTATUS.DISCONNECTED); + this.registerHandlers(); + this.clearOccupantsCache(); + return this.join(); + }, + + async constructPresence(password) { + let stanza = $pres({ 'from': shared_converse.connection.jid, 'to': this.getRoomJIDAndNick() }).c('x', { @@ -29744,24 +32394,11 @@ const ChatRoomMixin = { stanza.cnode(Strophe.xmlElement('password', [], password)); } - api.send(stanza); - return this; + stanza = await api.hook('constructedMUCPresence', null, stanza); + return stanza; }, - /** - * Clear stale cache and re-join a MUC we've been in before. - * @private - * @method _converse.ChatRoom#rejoin - */ - rejoin() { - this.registerHandlers(); - this.clearCache(); - return this.join(); - }, - - clearCache() { - this.session.save('connection_status', core_converse.ROOMSTATUS.DISCONNECTED); - + clearOccupantsCache() { if (this.occupants.length) { // Remove non-members when reconnecting this.occupants.filter(o => !o.isMember()).forEach(o => o.destroy()); @@ -29779,16 +32416,16 @@ const ChatRoomMixin = { * message, even if it didn't include a `markable` element. */ sendMarkerForMessage(msg, type = 'displayed', force = false) { - if (!msg || !api.settings.get('send_chat_markers').includes(type)) { + if (!msg || !api.settings.get('send_chat_markers').includes(type) || (msg === null || msg === void 0 ? void 0 : msg.get('type')) !== 'groupchat') { return; } - if ((msg === null || msg === void 0 ? void 0 : msg.get('is_markable')) || force) { - const key = "stanza_id ".concat(this.get('jid')); + if (msg !== null && msg !== void 0 && msg.get('is_markable') || force) { + const key = `stanza_id ${this.get('jid')}`; const id = msg.get(key); if (!id) { - headless_log.error("Can't send marker for message without stanza ID: ".concat(key)); + headless_log.error(`Can't send marker for message without stanza ID: ${key}`); return; } @@ -29824,8 +32461,8 @@ const ChatRoomMixin = { async onHiddenChange() { const conn_status = this.session.get('connection_status'); - if (this.get('hidden') && conn_status === core_converse.ROOMSTATUS.ENTERED) { - if (api.settings.get('muc_subscribe_to_rai') && this.getOwnAffiliation() !== 'none') { + if (this.get('hidden')) { + if (conn_status === core_converse.ROOMSTATUS.ENTERED && api.settings.get('muc_subscribe_to_rai') && this.getOwnAffiliation() !== 'none') { if (conn_status !== core_converse.ROOMSTATUS.DISCONNECTED) { this.sendMarkerForLastMessage('received', true); await this.leave(); @@ -29833,8 +32470,12 @@ const ChatRoomMixin = { this.enableRAI(); } - } else if (conn_status === core_converse.ROOMSTATUS.DISCONNECTED) { - this.rejoin(); + } else { + if (conn_status === core_converse.ROOMSTATUS.DISCONNECTED) { + this.rejoin(); + } + + this.clearUnreadMsgCounter(); } }, @@ -29911,7 +32552,7 @@ const ChatRoomMixin = { }, restoreSession() { - const id = "muc.session-".concat(shared_converse.bare_jid, "-").concat(this.get('jid')); + const id = `muc.session-${shared_converse.bare_jid}-${this.get('jid')}`; this.session = new MUCSession({ id }); @@ -29923,13 +32564,13 @@ const ChatRoomMixin = { }, initDiscoModels() { - let id = "converse.muc-features-".concat(shared_converse.bare_jid, "-").concat(this.get('jid')); + let id = `converse.muc-features-${shared_converse.bare_jid}-${this.get('jid')}`; this.features = new Model(Object.assign({ id }, lodash_es_zipObject(core_converse.ROOM_FEATURES, core_converse.ROOM_FEATURES.map(() => false)))); this.features.browserStorage = shared_converse.createStore(id, 'session'); this.features.listenTo(shared_converse, 'beforeLogout', () => this.features.browserStorage.flush()); - id = "converse.muc-config-{_converse.bare_jid}-".concat(this.get('jid')); + id = `converse.muc-config-{_converse.bare_jid}-${this.get('jid')}`; this.config = new Model(); this.config.browserStorage = shared_converse.createStore(id, 'session'); this.config.listenTo(shared_converse, 'beforeLogout', () => this.config.browserStorage.flush()); @@ -29937,7 +32578,7 @@ const ChatRoomMixin = { initOccupants() { this.occupants = new shared_converse.ChatRoomOccupants(); - const id = "converse.occupants-".concat(shared_converse.bare_jid).concat(this.get('jid')); + const id = `converse.occupants-${shared_converse.bare_jid}${this.get('jid')}`; this.occupants.browserStorage = shared_converse.createStore(id, 'session'); this.occupants.chatroom = this; this.occupants.listenTo(shared_converse, 'beforeLogout', () => this.occupants.browserStorage.flush()); @@ -29956,7 +32597,7 @@ const ChatRoomMixin = { }, handleAffiliationChangedMessage(stanza) { - const item = sizzle_default()("x[xmlns=\"".concat(Strophe.NS.MUC_USER, "\"] item"), stanza).pop(); + const item = sizzle_default()(`x[xmlns="${Strophe.NS.MUC_USER}"] item`, stanza).pop(); if (item) { const from = stanza.getAttribute('from'); @@ -30008,7 +32649,9 @@ const ChatRoomMixin = { if (attrs.msgid === message.get('retraction_id')) { // The error message refers to a retraction + new_attrs.retracted = undefined; new_attrs.retraction_id = undefined; + new_attrs.retracted_id = undefined; if (!attrs.error) { if (attrs.error_condition === 'forbidden') { @@ -30049,7 +32692,7 @@ const ChatRoomMixin = { return; } - const rai = sizzle_default()("rai[xmlns=\"".concat(Strophe.NS.RAI, "\"]"), stanza).pop(); + const rai = sizzle_default()(`rai[xmlns="${Strophe.NS.RAI}"]`, stanza).pop(); const active_mucs = Array.from((rai === null || rai === void 0 ? void 0 : rai.querySelectorAll('activity')) || []).map(m => m.textContent); if (active_mucs.includes(this.get('jid'))) { @@ -30073,7 +32716,7 @@ const ChatRoomMixin = { return; } - const msgs = sizzle_default()("mentions[xmlns=\"".concat(Strophe.NS.MENTIONS, "\"] forwarded[xmlns=\"").concat(Strophe.NS.FORWARD, "\"] message[type=\"groupchat\"]"), stanza); + const msgs = sizzle_default()(`mentions[xmlns="${Strophe.NS.MENTIONS}"] forwarded[xmlns="${Strophe.NS.FORWARD}"] message[type="groupchat"]`, stanza); const muc_jid = this.get('jid'); const mentions = msgs.filter(m => Strophe.getBareJidFromJid(m.getAttribute('from')) === muc_jid); @@ -30101,28 +32744,42 @@ const ChatRoomMixin = { * @param { XMLElement } stanza */ async handleMessageStanza(stanza) { - if (stanza.getAttribute('type') !== 'groupchat') { - this.handleForwardedMentions(stanza); - return; - } else if (isArchived(stanza)) { - // MAM messages are handled in converse-mam. - // We shouldn't get MAM messages here because - // they shouldn't have a `type` attribute. - return headless_log.warn("Received a MAM message with type \"groupchat\""); + const type = stanza.getAttribute('type'); + + if (type === 'error') { + return this.handleErrorMessageStanza(stanza); } - this.createInfoMessages(stanza); - this.fetchFeaturesIfConfigurationChanged(stanza); + if (type === 'groupchat') { + if (isArchived(stanza)) { + // MAM messages are handled in converse-mam. + // We shouldn't get MAM messages here because + // they shouldn't have a `type` attribute. + return headless_log.warn(`Received a MAM message with type "groupchat"`); + } + + this.createInfoMessages(stanza); + this.fetchFeaturesIfConfigurationChanged(stanza); + } else if (!type) { + return this.handleForwardedMentions(stanza); + } /** * @typedef { Object } MUCMessageData - * An object containing the original groupchat message stanza, - * as well as the parsed attributes. - * @property { XMLElement } stanza + * An object containing the parsed {@link MUCMessageAttributes} and + * current {@link ChatRoom}. * @property { MUCMessageAttributes } attrs * @property { ChatRoom } chatbox */ - const attrs = await parseMUCMessage(stanza, this, shared_converse); + + let attrs; + + try { + attrs = await parseMUCMessage(stanza, this, shared_converse); + } catch (e) { + return headless_log.error(e.message); + } + const data = { stanza, attrs, @@ -30214,8 +32871,7 @@ const ChatRoomMixin = { * @method _converse.ChatRoom#sendTimedMessage * @param { _converse.Message|XMLElement } message * @returns { Promise|Promise<_converse.TimeoutError> } Returns a promise - * which resolves with the reflected message stanza or rejects - * with an error stanza or with a {@link _converse.TimeoutError}. + * which resolves with the reflected message stanza or with an error stanza or {@link _converse.TimeoutError}. */ sendTimedMessage(el) { if (typeof el.tree === 'function') { @@ -30235,18 +32891,14 @@ const ChatRoomMixin = { const timeoutHandler = shared_converse.connection.addTimedHandler(shared_converse.STANZA_TIMEOUT, () => { shared_converse.connection.deleteHandler(handler); - promise.reject(new shared_converse.TimeoutError('Timeout Error: No response from server')); + const err = new shared_converse.TimeoutError('Timeout Error: No response from server'); + promise.resolve(err); return false; }); const handler = shared_converse.connection.addHandler(stanza => { timeoutHandler && shared_converse.connection.deleteTimedHandler(timeoutHandler); - - if (stanza.getAttribute('type') === 'groupchat') { - promise.resolve(stanza); - } else { - promise.reject(stanza); - } + promise.resolve(stanza); }, null, 'message', ['error', 'groupchat'], id); api.send(el); @@ -30287,18 +32939,20 @@ const ChatRoomMixin = { 'retraction_id': stanza.nodeTree.getAttribute('id'), 'editable': false }); + const result = await this.sendTimedMessage(stanza); - try { - await this.sendTimedMessage(stanza); - } catch (e) { + if (utils_form.isErrorStanza(result)) { + headless_log.error(result); + } else if (result instanceof shared_converse.TimeoutError) { + headless_log.error(result); message.save({ editable, 'error_type': 'timeout', 'error': __('A timeout happened while while trying to retract your message.'), 'retracted': undefined, - 'retracted_id': undefined + 'retracted_id': undefined, + 'retraction_id': undefined }); - throw e; } }, @@ -30351,7 +33005,7 @@ const ChatRoomMixin = { 'to': this.get('jid'), 'type': 'set' }).c('apply-to', { - 'id': message.get("stanza_id ".concat(this.get('jid'))), + 'id': message.get(`stanza_id ${this.get('jid')}`), 'xmlns': Strophe.NS.FASTEN }).c('moderate', { xmlns: Strophe.NS.MODERATE @@ -30470,7 +33124,7 @@ const ChatRoomMixin = { getAllKnownNicknamesRegex() { const longNickString = this.getAllKnownNicknames().map(n => parse_helpers.escapeRegexString(n)).join('|'); - return RegExp("(?:\\p{P}|\\p{Z}|^)@(".concat(longNickString, ")(?![\\w@-])"), 'uig'); + return RegExp(`(?:\\p{P}|\\p{Z}|^)@(${longNickString})(?![\\w@-])`, 'uig'); }, getOccupantByJID(jid) { @@ -30502,8 +33156,8 @@ const ChatRoomMixin = { const uriFromNickname = nickname => { const jid = this.get('jid'); const occupant = this.getOccupant(nickname) || this.getOccupant(jid); - const uri = this.features.get('nonanonymous') && (occupant === null || occupant === void 0 ? void 0 : occupant.get('jid')) || "".concat(jid, "/").concat(nickname); - return encodeURI("xmpp:".concat(uri)); + const uri = this.features.get('nonanonymous') && (occupant === null || occupant === void 0 ? void 0 : occupant.get('jid')) || `${jid}/${nickname}`; + return encodeURI(`xmpp:${uri}`); }; const matchToReference = match => { @@ -30535,27 +33189,32 @@ const ChatRoomMixin = { return [updated_message, updated_references]; }, - getOutgoingMessageAttributes(original_message, spoiler_hint) { + getOutgoingMessageAttributes(attrs) { const is_spoiler = this.get('composing_spoiler'); - const [text, references] = this.parseTextForReferences(original_message); + let text = '', + references; + + if (attrs !== null && attrs !== void 0 && attrs.body) { + [text, references] = this.parseTextForReferences(attrs.body); + } + const origin_id = utils_form.getUniqueId(); const body = text ? utils_form.httpToGeoUri(utils_form.shortnamesToUnicode(text), shared_converse) : undefined; - return { + return Object.assign({}, attrs, { body, is_spoiler, origin_id, references, 'id': origin_id, 'msgid': origin_id, - 'from': "".concat(this.get('jid'), "/").concat(this.get('nick')), + 'from': `${this.get('jid')}/${this.get('nick')}`, 'fullname': this.get('nick'), 'is_only_emojis': text ? utils_form.isOnlyEmojis(text) : false, 'message': body, 'nick': this.get('nick'), 'sender': 'me', - 'spoiler_hint': is_spoiler ? spoiler_hint : undefined, 'type': 'groupchat' - }; + }, getMediaURLsMetadata(text)); }, /** @@ -30568,7 +33227,7 @@ const ChatRoomMixin = { getRoomJIDAndNick() { const nick = this.get('nick'); const jid = Strophe.getBareJidFromJid(this.get('jid')); - return jid + (nick !== null ? "/".concat(nick) : ''); + return jid + (nick !== null ? `/${nick}` : ''); }, /** @@ -31061,6 +33720,42 @@ const ChatRoomMixin = { }); }, + async setNickname(nick) { + if (api.settings.get('auto_register_muc_nickname') && (await api.disco.supports(Strophe.NS.MUC_REGISTER, this.get('jid')))) { + const old_nick = this.get('nick'); + this.set({ + nick + }); + + try { + await this.registerNickname(); + } catch (e) { + const { + __ + } = shared_converse; + headless_log.error(e); + + const message = __("Error: couldn't register new nickname in members only room"); + + this.createMessage({ + message, + 'type': 'error' + }); + this.set({ + 'nick': old_nick + }); + return; + } + } + + const jid = Strophe.getBareJidFromJid(this.get('jid')); + api.send($pres({ + from: shared_converse.connection.jid, + to: `${jid}/${nick}`, + id: utils_form.getUniqueId() + }).tree()); + }, + /** * Send an IQ stanza to modify an occupant's role * @private @@ -31210,14 +33905,23 @@ const ChatRoomMixin = { if (utils_form.isErrorObject(result)) { throw result; - } + } // Result might be undefined due to a timeout - const identity_el = result.querySelector('query[node="x-roomuser-item"] identity'); + + const identity_el = result === null || result === void 0 ? void 0 : result.querySelector('query[node="x-roomuser-item"] identity'); return identity_el ? identity_el.getAttribute('name') : null; }, + /** + * Send an IQ stanza to the MUC to register this user's nickname. + * This sets the user's affiliation to 'member' (if they weren't affiliated + * before) and reserves the nickname for this user, thereby preventing other + * users from using it in this MUC. + * See https://xmpp.org/extensions/xep-0045.html#register + * @private + * @method _converse.ChatRoom#registerNickname + */ async registerNickname() { - // See https://xmpp.org/extensions/xep-0045.html#register const { __ } = shared_converse; @@ -31233,9 +33937,9 @@ const ChatRoomMixin = { 'xmlns': Strophe.NS.MUC_REGISTER })); } catch (e) { - if (sizzle_default()("not-allowed[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), e).length) { + if (sizzle_default()(`not-allowed[xmlns="${Strophe.NS.STANZAS}"]`, e).length) { err_msg = __("You're not allowed to register yourself in this groupchat."); - } else if (sizzle_default()("registration-required[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), e).length) { + } else if (sizzle_default()(`registration-required[xmlns="${Strophe.NS.STANZAS}"]`, e).length) { err_msg = __("You're not allowed to register in this groupchat because it's members-only."); } @@ -31246,7 +33950,7 @@ const ChatRoomMixin = { const required_fields = sizzle_default()('field required', iq).map(f => f.parentElement); if (required_fields.length > 1 && required_fields[0].getAttribute('var') !== 'muc#register_roomnick') { - return headless_log.error("Can't register the user register in the groupchat ".concat(jid, " due to the required fields")); + return headless_log.error(`Can't register the user register in the groupchat ${jid} due to the required fields`); } try { @@ -31264,9 +33968,9 @@ const ChatRoomMixin = { 'var': 'muc#register_roomnick' }).c('value').t(nick)); } catch (e) { - if (sizzle_default()("service-unavailable[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), e).length) { + if (sizzle_default()(`service-unavailable[xmlns="${Strophe.NS.STANZAS}"]`, e).length) { err_msg = __("Can't register your nickname in this groupchat, it doesn't support registration."); - } else if (sizzle_default()("bad-request[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), e).length) { + } else if (sizzle_default()(`bad-request[xmlns="${Strophe.NS.STANZAS}"]`, e).length) { err_msg = __("Can't register your nickname in this groupchat, invalid data form supplied."); } @@ -31276,31 +33980,22 @@ const ChatRoomMixin = { } }, - async unregisterNickname() { - const jid = this.get('jid'); - let iq; - - try { - iq = await api.sendIQ($iq({ - 'to': jid, - 'type': 'set' - }).c('query', { - 'xmlns': Strophe.NS.MUC_REGISTER - })); - } catch (e) { - headless_log.error(e); - return e; - } - - if (sizzle_default()("query[xmlns=\"".concat(Strophe.NS.MUC_REGISTER, "\"] registered"), iq).pop()) { - const iq = $iq({ - 'to': jid, - 'type': 'set' - }).c('query', { - 'xmlns': Strophe.NS.MUC_REGISTER - }).c('remove'); - return api.sendIQ(iq).catch(e => headless_log.error(e)); - } + /** + * Send an IQ stanza to the MUC to unregister this user's nickname. + * If the user had a 'member' affiliation, it'll be removed and their + * nickname will no longer be reserved and can instead be used (and + * registered) by other users. + * @private + * @method _converse.ChatRoom#unregisterNickname + */ + unregisterNickname() { + const iq = $iq({ + 'to': this.get('jid'), + 'type': 'set' + }).c('query', { + 'xmlns': Strophe.NS.MUC_REGISTER + }).c('remove'); + return api.sendIQ(iq).catch(e => headless_log.error(e)); }, /** @@ -31507,6 +34202,8 @@ const ChatRoomMixin = { getUpdatedMessageAttributes(message, attrs) { const new_attrs = shared_converse.ChatBox.prototype.getUpdatedMessageAttributes.call(this, message, attrs); + new_attrs['from_muc'] = attrs['from_muc']; + if (this.isOwnMessage(attrs)) { const stanza_id_keys = Object.keys(attrs).filter(k => k.startsWith('stanza_id')); Object.assign(new_attrs, lodash_es_pick(attrs, stanza_id_keys)); @@ -31530,7 +34227,7 @@ const ChatRoomMixin = { async isJoined() { const jid = this.get('jid'); const ping = $iq({ - 'to': "".concat(jid, "/").concat(this.get('nick')), + 'to': `${jid}/${this.get('nick')}`, 'type': 'get' }).c('ping', { 'xmlns': Strophe.NS.PING @@ -31540,9 +34237,9 @@ const ChatRoomMixin = { await api.sendIQ(ping); } catch (e) { if (e === null) { - headless_log.warn("isJoined: Timeout error while checking whether we're joined to MUC: ".concat(jid)); + headless_log.warn(`isJoined: Timeout error while checking whether we're joined to MUC: ${jid}`); } else { - headless_log.warn("isJoined: Apparently we're no longer connected to MUC: ".concat(jid)); + headless_log.warn(`isJoined: Apparently we're no longer connected to MUC: ${jid}`); } return false; @@ -31598,7 +34295,7 @@ const ChatRoomMixin = { if (this.messages.last().get('time') > attrs.time) { // Search from latest backwards const messages = Array.from(this.messages.models); - const stanza_id = attrs["stanza_id ".concat(this.get('jid'))]; + const stanza_id = attrs[`stanza_id ${this.get('jid')}`]; if (!stanza_id) { return null; @@ -31625,7 +34322,7 @@ const ChatRoomMixin = { if (attrs.moderated === 'retracted') { const query = {}; - const key = "stanza_id ".concat(this.get('jid')); + const key = `stanza_id ${this.get('jid')}`; query[key] = attrs.moderated_id; const message = this.messages.findWhere(query); @@ -31667,7 +34364,7 @@ const ChatRoomMixin = { return states.reduce((result, state) => { const existing_actors = actors_per_state[state]; - if (!(existing_actors === null || existing_actors === void 0 ? void 0 : existing_actors.length)) { + if (!(existing_actors !== null && existing_actors !== void 0 && existing_actors.length)) { return result; } @@ -31679,52 +34376,52 @@ const ChatRoomMixin = { if (actors.length === 1) { if (state === 'composing') { - return "".concat(result).concat(__('%1$s is typing', actors[0]), "\n"); + return `${result}${__('%1$s is typing', actors[0])}\n`; } else if (state === 'paused') { - return "".concat(result).concat(__('%1$s has stopped typing', actors[0]), "\n"); + return `${result}${__('%1$s has stopped typing', actors[0])}\n`; } else if (state === shared_converse.GONE) { - return "".concat(result).concat(__('%1$s has gone away', actors[0]), "\n"); + return `${result}${__('%1$s has gone away', actors[0])}\n`; } else if (state === 'entered') { - return "".concat(result).concat(__('%1$s has entered the groupchat', actors[0]), "\n"); + return `${result}${__('%1$s has entered the groupchat', actors[0])}\n`; } else if (state === 'exited') { - return "".concat(result).concat(__('%1$s has left the groupchat', actors[0]), "\n"); + return `${result}${__('%1$s has left the groupchat', actors[0])}\n`; } else if (state === 'op') { - return "".concat(result).concat(__('%1$s is now a moderator', actors[0]), "\n"); + return `${result}${__('%1$s is now a moderator', actors[0])}\n`; } else if (state === 'deop') { - return "".concat(result).concat(__('%1$s is no longer a moderator', actors[0]), "\n"); + return `${result}${__('%1$s is no longer a moderator', actors[0])}\n`; } else if (state === 'voice') { - return "".concat(result).concat(__('%1$s has been given a voice', actors[0]), "\n"); + return `${result}${__('%1$s has been given a voice', actors[0])}\n`; } else if (state === 'mute') { - return "".concat(result).concat(__('%1$s has been muted', actors[0]), "\n"); + return `${result}${__('%1$s has been muted', actors[0])}\n`; } } else if (actors.length > 1) { let actors_str; if (actors.length > 3) { - actors_str = "".concat(Array.from(actors).slice(0, 2).join(', '), " and others"); + actors_str = `${Array.from(actors).slice(0, 2).join(', ')} and others`; } else { const last_actor = actors.pop(); actors_str = __('%1$s and %2$s', actors.join(', '), last_actor); } if (state === 'composing') { - return "".concat(result).concat(__('%1$s are typing', actors_str), "\n"); + return `${result}${__('%1$s are typing', actors_str)}\n`; } else if (state === 'paused') { - return "".concat(result).concat(__('%1$s have stopped typing', actors_str), "\n"); + return `${result}${__('%1$s have stopped typing', actors_str)}\n`; } else if (state === shared_converse.GONE) { - return "".concat(result).concat(__('%1$s have gone away', actors_str), "\n"); + return `${result}${__('%1$s have gone away', actors_str)}\n`; } else if (state === 'entered') { - return "".concat(result).concat(__('%1$s have entered the groupchat', actors_str), "\n"); + return `${result}${__('%1$s have entered the groupchat', actors_str)}\n`; } else if (state === 'exited') { - return "".concat(result).concat(__('%1$s have left the groupchat', actors_str), "\n"); + return `${result}${__('%1$s have left the groupchat', actors_str)}\n`; } else if (state === 'op') { - return "".concat(result).concat(__('%1$s are now moderators', actors[0]), "\n"); + return `${result}${__('%1$s are now moderators', actors[0])}\n`; } else if (state === 'deop') { - return "".concat(result).concat(__('%1$s are no longer moderators', actors[0]), "\n"); + return `${result}${__('%1$s are no longer moderators', actors[0])}\n`; } else if (state === 'voice') { - return "".concat(result).concat(__('%1$s have been given voices', actors[0]), "\n"); + return `${result}${__('%1$s have been given voices', actors[0])}\n`; } else if (state === 'mute') { - return "".concat(result).concat(__('%1$s have been muted', actors[0]), "\n"); + return `${result}${__('%1$s have been muted', actors[0])}\n`; } } @@ -31787,10 +34484,6 @@ const ChatRoomMixin = { }, handleMetadataFastening(attrs) { - if (!api.settings.get('muc_show_ogp_unfurls')) { - return false; - } - if (attrs.ogp_for_id) { if (attrs.from !== this.get('jid')) { // For now we only allow metadata from the MUC itself and not @@ -31819,11 +34512,55 @@ const ChatRoomMixin = { return false; }, + /** + * Given {@link MessageAttributes} look for XEP-0316 Room Notifications and create info + * messages for them. + * @param { XMLElement } stanza + */ + handleMEPNotification(attrs) { + var _attrs$activities; + + if (attrs.from !== this.get('jid') || !attrs.activities) { + return false; + } + + (_attrs$activities = attrs.activities) === null || _attrs$activities === void 0 ? void 0 : _attrs$activities.forEach(activity_attrs => { + const data = Object.assign(attrs, activity_attrs); + this.createMessage(data); // Trigger so that notifications are shown + + api.trigger('message', { + 'attrs': data, + 'chatbox': this + }); + }); + return !!attrs.activities.length; + }, + + /** + * Returns an already cached message (if it exists) based on the + * passed in attributes map. + * @method _converse.ChatRoom#getDuplicateMessage + * @param { object } attrs - Attributes representing a received + * message, as returned by {@link parseMUCMessage} + * @returns {Promise<_converse.Message>} + */ + getDuplicateMessage(attrs) { + var _attrs$activities2; + + if ((_attrs$activities2 = attrs.activities) !== null && _attrs$activities2 !== void 0 && _attrs$activities2.length) { + return this.messages.findWhere({ + 'type': 'mep', + 'msgid': attrs.msgid + }); + } else { + return shared_converse.ChatBox.prototype.getDuplicateMessage.call(this, attrs); + } + }, + /** * Handler for all MUC messages sent to this groupchat. This method * shouldn't be called directly, instead {@link _converse.ChatRoom#queueMessage} * should be called. - * @private * @method _converse.ChatRoom#onMessage * @param { MessageAttributes } attrs - A promise which resolves to the message attributes. */ @@ -31838,12 +34575,13 @@ const ChatRoomMixin = { const message = this.getDuplicateMessage(attrs); if (message) { - return this.updateMessage(message, attrs); + message.get('type') === 'groupchat' && this.updateMessage(message, attrs); + return; } else if (attrs.is_valid_receipt_request || attrs.is_marker || this.ignorableCSN(attrs)) { return; } - if (this.handleMetadataFastening(attrs) || (await this.handleRetraction(attrs)) || (await this.handleModeration(attrs)) || (await this.handleSubjectChange(attrs))) { + if (this.handleMetadataFastening(attrs) || this.handleMEPNotification(attrs) || (await this.handleRetraction(attrs)) || (await this.handleModeration(attrs)) || (await this.handleSubjectChange(attrs))) { attrs.nick && this.removeNotification(attrs.nick, ['composing', 'paused']); return; } @@ -31888,7 +34626,7 @@ const ChatRoomMixin = { var _item$querySelector; const is_self = stanza.querySelector("status[code='110']") !== null; - const x = sizzle_default()("x[xmlns=\"".concat(Strophe.NS.MUC_USER, "\"]"), stanza).pop(); + const x = sizzle_default()(`x[xmlns="${Strophe.NS.MUC_USER}"]`, stanza).pop(); if (!x) { return; @@ -32034,7 +34772,7 @@ const ChatRoomMixin = { var _item$querySelector2, _item$querySelector3; const nick = Strophe.getResourceFromJid(stanza.getAttribute('from')); - const item = sizzle_default()("x[xmlns=\"".concat(Strophe.NS.MUC_USER, "\"] item"), stanza).pop(); + const item = sizzle_default()(`x[xmlns="${Strophe.NS.MUC_USER}"] item`, stanza).pop(); data.actor = item ? (_item$querySelector2 = item.querySelector('actor')) === null || _item$querySelector2 === void 0 ? void 0 : _item$querySelector2.getAttribute('nick') : undefined; data.reason = item ? (_item$querySelector3 = item.querySelector('reason')) === null || _item$querySelector3 === void 0 ? void 0 : _item$querySelector3.textContent : undefined; data.message = this.getActionInfoMessage(code, nick, data.actor); @@ -32045,7 +34783,7 @@ const ChatRoomMixin = { if (is_self && code === '210') { nick = Strophe.getResourceFromJid(stanza.getAttribute('from')); } else if (is_self && code === '303') { - nick = sizzle_default()("x[xmlns=\"".concat(Strophe.NS.MUC_USER, "\"] item"), stanza).pop().getAttribute('nick'); + nick = sizzle_default()(`x[xmlns="${Strophe.NS.MUC_USER}"] item`, stanza).pop().getAttribute('nick'); } this.save('nick', nick); @@ -32071,7 +34809,7 @@ const ChatRoomMixin = { * @param { XMLElement } stanza */ createInfoMessages(stanza) { - const codes = sizzle_default()("x[xmlns=\"".concat(Strophe.NS.MUC_USER, "\"] status"), stanza).map(s => s.getAttribute('code')); + const codes = sizzle_default()(`x[xmlns="${Strophe.NS.MUC_USER}"] status`, stanza).map(s => s.getAttribute('code')); if (codes.includes('333') && codes.includes('307')) { // See: https://github.com/xsf/xeps/pull/969/files#diff-ac5113766e59219806793c1f7d967f1bR4966 @@ -32136,12 +34874,12 @@ const ChatRoomMixin = { const __ = shared_converse.__; const error = stanza.querySelector('error'); const error_type = error.getAttribute('type'); - const reason = (_sizzle$pop = sizzle_default()("text[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), error).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent; + const reason = (_sizzle$pop = sizzle_default()(`text[xmlns="${Strophe.NS.STANZAS}"]`, error).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent; if (error_type === 'modify') { this.handleModifyError(stanza); } else if (error_type === 'auth') { - if (sizzle_default()("not-authorized[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), error).length) { + if (sizzle_default()(`not-authorized[xmlns="${Strophe.NS.STANZAS}"]`, error).length) { this.save({ 'password_validation_message': reason || __('Password incorrect') }); @@ -32166,10 +34904,10 @@ const ChatRoomMixin = { const message = __("Your nickname doesn't conform to this groupchat's policies."); this.setDisconnectionState(message, reason); - } else if (sizzle_default()("gone[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), error).length) { + } else if (sizzle_default()(`gone[xmlns="${Strophe.NS.STANZAS}"]`, error).length) { var _sizzle$pop2; - const moved_jid = (_sizzle$pop2 = sizzle_default()("gone[xmlns=\"".concat(Strophe.NS.STANZAS, "\"]"), error).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent.replace(/^xmpp:/, '').replace(/\?join$/, ''); + const moved_jid = (_sizzle$pop2 = sizzle_default()(`gone[xmlns="${Strophe.NS.STANZAS}"]`, error).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent.replace(/^xmpp:/, '').replace(/\?join$/, ''); this.save({ moved_jid, 'destroyed_reason': reason @@ -32206,7 +34944,7 @@ const ChatRoomMixin = { if (stanza.getAttribute('type') === 'error') { const error = stanza.querySelector('error'); - if ((error === null || error === void 0 ? void 0 : error.getAttribute('type')) === 'wait' && (error === null || error === void 0 ? void 0 : error.querySelector('resource-constraint'))) { + if ((error === null || error === void 0 ? void 0 : error.getAttribute('type')) === 'wait' && error !== null && error !== void 0 && error.querySelector('resource-constraint')) { // If we get a error, we assume it's in context of XEP-0437 RAI. // We remove this MUC's host from the list of enabled domains and rejoin the MUC. if (this.session.get('connection_status') === core_converse.ROOMSTATUS.DISCONNECTED) { @@ -32323,47 +35061,24 @@ const ChatRoomMixin = { const mentions = message.get('references').filter(ref => ref.type === 'mention').map(ref => ref.value); return mentions.includes(nick); } else { - return new RegExp("\\b".concat(nick, "\\b")).test(message.get('message')); + return new RegExp(`\\b${nick}\\b`).test(message.get('message')); } }, - /** - * Given a newly received {@link _converse.Message} instance, - * update the unread counter if necessary. - * @private - * @method _converse.ChatRoom#handleUnreadMessage - * @param { XMLElement } - The stanza - */ - handleUnreadMessage(message) { - if (!(message === null || message === void 0 ? void 0 : message.get('body'))) { - return; + incrementUnreadMsgsCounter(message) { + const settings = { + 'num_unread_general': this.get('num_unread_general') + 1 + }; + + if (this.get('num_unread_general') === 0) { + settings['first_unread_id'] = message.get('id'); } - if (utils_form.isNewMessage(message)) { - if (message.get('sender') === 'me') { - // We remove the "scrolled" flag so that the chat area - // gets scrolled down. We always want to scroll down - // when the user writes a message as opposed to when a - // message is received. - this.model.set('scrolled', false); - } else if (this.isHidden() || this.get('scrolled')) { - const settings = { - 'num_unread_general': this.get('num_unread_general') + 1 - }; - - if (this.get('num_unread_general') === 0) { - settings['first_unread_id'] = message.get('id'); - } - - if (this.isUserMentioned(message)) { - settings.num_unread = this.get('num_unread') + 1; - } - - this.save(settings); - } else { - this.sendMarkerForMessage(message); - } + if (this.isUserMentioned(message)) { + settings.num_unread = this.get('num_unread') + 1; } + + this.save(settings); }, clearUnreadMsgCounter() { @@ -32766,6 +35481,239 @@ const ChatRoomOccupants = Collection.extend({ } }); +;// CONCATENATED MODULE: ./src/headless/plugins/muc/utils.js + + + + + +const { + Strophe: muc_utils_Strophe, + sizzle: muc_utils_sizzle, + u: muc_utils_u +} = core_converse.env; +/** + * Given an occupant model, see which roles may be assigned to that user. + * @param { Model } occupant + * @returns { Array<('moderator'|'participant'|'visitor')> } - An array of assignable roles + */ + +function getAssignableRoles(occupant) { + let disabled = api.settings.get('modtools_disable_assign'); + + if (!Array.isArray(disabled)) { + disabled = disabled ? ROLES : []; + } + + if (occupant.get('role') === 'moderator') { + return ROLES.filter(r => !disabled.includes(r)); + } else { + return []; + } +} +function registerDirectInvitationHandler() { + shared_converse.connection.addHandler(message => { + shared_converse.onDirectMUCInvitation(message); + + return true; + }, 'jabber:x:conference', 'message'); +} +function disconnectChatRooms() { + /* When disconnecting, mark all groupchats as + * disconnected, so that they will be properly entered again + * when fetched from session storage. + */ + return shared_converse.chatboxes.filter(m => m.get('type') === shared_converse.CHATROOMS_TYPE).forEach(m => m.session.save({ + 'connection_status': core_converse.ROOMSTATUS.DISCONNECTED + })); +} +async function onWindowStateChanged(data) { + if (data.state === 'visible' && api.connection.connected()) { + const rooms = await api.rooms.get(); + rooms.forEach(room => room.rejoinIfNecessary()); + } +} +async function routeToRoom(jid) { + if (!muc_utils_u.isValidMUCJID(jid)) { + return headless_log.warn(`invalid jid "${jid}" provided in url fragment`); + } + + await api.waitUntil('roomsAutoJoined'); + + if (api.settings.get('allow_bookmarks')) { + await api.waitUntil('bookmarksInitialized'); + } + + api.rooms.open(jid); +} +/* Opens a groupchat, making sure that certain attributes + * are correct, for example that the "type" is set to + * "chatroom". + */ + +async function openChatRoom(jid, settings) { + settings.type = shared_converse.CHATROOMS_TYPE; + settings.id = jid; + const chatbox = await api.rooms.get(jid, settings, true); + chatbox.maybeShow(true); + return chatbox; +} +/** + * A direct MUC invitation to join a groupchat has been received + * See XEP-0249: Direct MUC invitations. + * @private + * @method _converse.ChatRoom#onDirectMUCInvitation + * @param { XMLElement } message - The message stanza containing the invitation. + */ + +async function onDirectMUCInvitation(message) { + const { + __ + } = shared_converse; + const x_el = muc_utils_sizzle('x[xmlns="jabber:x:conference"]', message).pop(), + from = muc_utils_Strophe.getBareJidFromJid(message.getAttribute('from')), + room_jid = x_el.getAttribute('jid'), + reason = x_el.getAttribute('reason'); + let result; + + if (api.settings.get('auto_join_on_invite')) { + result = true; + } else { + // Invite request might come from someone not your roster list + let contact = shared_converse.roster.get(from); + + contact = contact ? contact.getDisplayName() : from; + + if (!reason) { + result = confirm(__('%1$s has invited you to join a groupchat: %2$s', contact, room_jid)); + } else { + result = confirm(__('%1$s has invited you to join a groupchat: %2$s, and left the following reason: "%3$s"', contact, room_jid, reason)); + } + } + + if (result === true) { + const chatroom = await openChatRoom(room_jid, { + 'password': x_el.getAttribute('password') + }); + + if (chatroom.session.get('connection_status') === core_converse.ROOMSTATUS.DISCONNECTED) { + shared_converse.chatboxes.get(room_jid).rejoin(); + } + } +} +function getDefaultMUCNickname() { + // XXX: if anything changes here, update the docs for the + // locked_muc_nickname setting. + if (!shared_converse.xmppstatus) { + throw new Error("Can't call _converse.getDefaultMUCNickname before the statusInitialized has been fired."); + } + + const nick = shared_converse.xmppstatus.getNickname(); + + if (nick) { + return nick; + } else if (api.settings.get('muc_nickname_from_jid')) { + return muc_utils_Strophe.unescapeNode(muc_utils_Strophe.getNodeFromJid(shared_converse.bare_jid)); + } +} +/** + * Determines info message visibility based on + * muc_show_info_messages configuration setting + * @param {*} code + * @memberOf _converse + */ + +function isInfoVisible(code) { + const info_messages = api.settings.get('muc_show_info_messages'); + + if (info_messages.includes(code)) { + return true; + } + + return false; +} +/* Automatically join groupchats, based on the + * "auto_join_rooms" configuration setting, which is an array + * of strings (groupchat JIDs) or objects (with groupchat JID and other settings). + */ + +async function autoJoinRooms() { + await Promise.all(api.settings.get('auto_join_rooms').map(muc => { + if (typeof muc === 'string') { + if (shared_converse.chatboxes.where({ + 'jid': muc + }).length) { + return Promise.resolve(); + } + + return api.rooms.open(muc); + } else if (lodash_es_isObject(muc)) { + return api.rooms.open(muc.jid, { ...muc + }); + } else { + headless_log.error('Invalid muc criteria specified for "auto_join_rooms"'); + return Promise.resolve(); + } + })); + /** + * Triggered once any rooms that have been configured to be automatically joined, + * specified via the _`auto_join_rooms` setting, have been entered. + * @event _converse#roomsAutoJoined + * @example _converse.api.listen.on('roomsAutoJoined', () => { ... }); + * @example _converse.api.waitUntil('roomsAutoJoined').then(() => { ... }); + */ + + api.trigger('roomsAutoJoined'); +} +function onAddClientFeatures() { + if (api.settings.get('allow_muc')) { + api.disco.own.features.add(muc_utils_Strophe.NS.MUC); + } + + if (api.settings.get('allow_muc_invitations')) { + api.disco.own.features.add('jabber:x:conference'); // Invites + } +} +function onBeforeTearDown() { + shared_converse.chatboxes.where({ + 'type': shared_converse.CHATROOMS_TYPE + }).forEach(muc => safeSave(muc.session, { + 'connection_status': core_converse.ROOMSTATUS.DISCONNECTED + })); +} +function onStatusInitialized() { + window.addEventListener(shared_converse.unloadevent, () => { + const using_websocket = api.connection.isType('websocket'); + + if (using_websocket && (!api.settings.get('enable_smacks') || !shared_converse.session.get('smacks_stream_id'))) { + // For non-SMACKS websocket connections, or non-resumeable + // connections, we disconnect all chatrooms when the page unloads. + // See issue #1111 + disconnectChatRooms(); + } + }); +} +function onBeforeResourceBinding() { + shared_converse.connection.addHandler(stanza => { + const muc_jid = muc_utils_Strophe.getBareJidFromJid(stanza.getAttribute('from')); + + if (!shared_converse.chatboxes.get(muc_jid)) { + api.waitUntil('chatBoxesFetched').then(async () => { + const muc = shared_converse.chatboxes.get(muc_jid); + + if (muc) { + await muc.initialized; + muc.message_handler.run(stanza); + } + }); + } + + return true; + }, null, 'message', 'groupchat'); +} +Object.assign(shared_converse, { + getAssignableRoles +}); ;// CONCATENATED MODULE: ./src/headless/plugins/muc/index.js /** * @copyright The Converse.js contributors @@ -32785,8 +35733,6 @@ const ChatRoomOccupants = Collection.extend({ - - const ROLES = ['moderator', 'participant', 'visitor']; const AFFILIATIONS = ['owner', 'admin', 'member', 'outcast', 'none']; core_converse.AFFILIATION_CHANGES = { @@ -32824,8 +35770,7 @@ core_converse.MUC.INFO_CODES = { 'role_changes': [...core_converse.MUC_ROLE_CHANGES_LIST] }; const { - Strophe: muc_Strophe, - sizzle: muc_sizzle + Strophe: muc_Strophe } = core_converse.env; // Add Strophe Namespaces muc_Strophe.addNamespace('MUC_ADMIN', muc_Strophe.NS.MUC + '#admin'); @@ -32834,6 +35779,7 @@ muc_Strophe.addNamespace('MUC_REGISTER', 'jabber:iq:register'); muc_Strophe.addNamespace('MUC_ROOMCONF', muc_Strophe.NS.MUC + '#roomconfig'); muc_Strophe.addNamespace('MUC_USER', muc_Strophe.NS.MUC + '#user'); muc_Strophe.addNamespace('MUC_HATS', 'xmpp:prosody.im/protocol/hats:1'); +muc_Strophe.addNamespace('CONFINFO', 'urn:ietf:params:xml:ns:conference-info'); core_converse.MUC_NICK_CHANGED_CODE = '303'; core_converse.ROOM_FEATURES = ['passwordprotected', 'unsecured', 'hidden', 'publicroom', 'membersonly', 'open', 'persistent', 'temporary', 'nonanonymous', 'semianonymous', 'moderated', 'unmoderated', 'mam_enabled']; // No longer used in code, but useful as reference. // @@ -32862,93 +35808,6 @@ core_converse.ROOMSTATUS = { DESTROYED: 6, BANNED: 7 }; - -function registerDirectInvitationHandler() { - shared_converse.connection.addHandler(message => { - shared_converse.onDirectMUCInvitation(message); - - return true; - }, 'jabber:x:conference', 'message'); -} - -function disconnectChatRooms() { - /* When disconnecting, mark all groupchats as - * disconnected, so that they will be properly entered again - * when fetched from session storage. - */ - return shared_converse.chatboxes.filter(m => m.get('type') === shared_converse.CHATROOMS_TYPE).forEach(m => m.session.save({ - 'connection_status': core_converse.ROOMSTATUS.DISCONNECTED - })); -} - -async function onWindowStateChanged(data) { - if (data.state === 'visible' && api.connection.connected()) { - const rooms = await api.rooms.get(); - rooms.forEach(room => room.rejoinIfNecessary()); - } -} - -async function routeToRoom(jid) { - if (!utils_form.isValidMUCJID(jid)) { - return headless_log.warn("invalid jid \"".concat(jid, "\" provided in url fragment")); - } - - await api.waitUntil('roomsAutoJoined'); - - if (api.settings.get('allow_bookmarks')) { - await api.waitUntil('bookmarksInitialized'); - } - - api.rooms.open(jid); -} -/* Opens a groupchat, making sure that certain attributes - * are correct, for example that the "type" is set to - * "chatroom". - */ - - -async function openChatRoom(jid, settings) { - settings.type = shared_converse.CHATROOMS_TYPE; - settings.id = jid; - const chatbox = await api.rooms.get(jid, settings, true); - chatbox.maybeShow(true); - return chatbox; -} -/* Automatically join groupchats, based on the - * "auto_join_rooms" configuration setting, which is an array - * of strings (groupchat JIDs) or objects (with groupchat JID and other settings). - */ - - -async function autoJoinRooms() { - await Promise.all(api.settings.get('auto_join_rooms').map(muc => { - if (typeof muc === 'string') { - if (shared_converse.chatboxes.where({ - 'jid': muc - }).length) { - return Promise.resolve(); - } - - return api.rooms.open(muc); - } else if (lodash_es_isObject(muc)) { - return api.rooms.open(muc.jid, { ...muc - }); - } else { - headless_log.error('Invalid muc criteria specified for "auto_join_rooms"'); - return Promise.resolve(); - } - })); - /** - * Triggered once any rooms that have been configured to be automatically joined, - * specified via the _`auto_join_rooms` setting, have been entered. - * @event _converse#roomsAutoJoined - * @example _converse.api.listen.on('roomsAutoJoined', () => { ... }); - * @example _converse.api.waitUntil('roomsAutoJoined').then(() => { ... }); - */ - - api.trigger('roomsAutoJoined'); -} - core_converse.plugins.add('converse-muc', { /* Optional dependencies are other plugins which might be * overridden or relied upon, and therefore need to be loaded before @@ -33000,6 +35859,7 @@ core_converse.plugins.add('converse-muc', { 'auto_register_muc_nickname': false, 'hide_muc_participants': false, 'locked_muc_domain': false, + 'modtools_disable_assign': false, 'muc_clear_messages_on_leave': true, 'muc_domain': undefined, 'muc_fetch_members': true, @@ -33009,7 +35869,6 @@ core_converse.plugins.add('converse-muc', { 'muc_send_probes': false, 'muc_show_info_messages': [...core_converse.MUC.INFO_CODES.visibility_changes, ...core_converse.MUC.INFO_CODES.self, ...core_converse.MUC.INFO_CODES.non_privacy_changes, ...core_converse.MUC.INFO_CODES.muc_logging_changes, ...core_converse.MUC.INFO_CODES.nickname_changes, ...core_converse.MUC.INFO_CODES.disconnected, ...core_converse.MUC.INFO_CODES.affiliation_changes, ...core_converse.MUC.INFO_CODES.join_leave_events, ...core_converse.MUC.INFO_CODES.role_changes], 'muc_show_logs_before_join': false, - 'muc_show_ogp_unfurls': true, 'muc_subscribe_to_rai': false }); api.promises.add(['roomsAutoJoined']); @@ -33074,22 +35933,6 @@ core_converse.plugins.add('converse-muc', { 332: __('You have been removed from this groupchat because the service hosting it is being shut down') } }; - /** - * Determines info message visibility based on - * muc_show_info_messages configuration setting - * @param {*} code - * @memberOf _converse - */ - - shared_converse.isInfoVisible = function (code) { - const info_messages = api.settings.get('muc_show_info_messages'); - - if (info_messages.includes(code)) { - return true; - } - - return false; - }; shared_converse.router.route('converse/room?jid=:jid', routeToRoom); @@ -33097,22 +35940,6 @@ core_converse.plugins.add('converse-muc', { shared_converse.ChatRoomMessage = shared_converse.Message.extend(muc_message); shared_converse.ChatRoomOccupants = occupants; shared_converse.ChatRoomOccupant = occupant; - - shared_converse.getDefaultMUCNickname = function () { - // XXX: if anything changes here, update the docs for the - // locked_muc_nickname setting. - if (!shared_converse.xmppstatus) { - throw new Error("Can't call _converse.getDefaultMUCNickname before the statusInitialized has been fired."); - } - - const nick = shared_converse.xmppstatus.getNickname(); - - if (nick) { - return nick; - } else if (api.settings.get('muc_nickname_from_jid')) { - return muc_Strophe.unescapeNode(muc_Strophe.getNodeFromJid(shared_converse.bare_jid)); - } - }; /** * Collection which stores MUC messages * @class @@ -33120,110 +35947,30 @@ core_converse.plugins.add('converse-muc', { * @memberOf _converse */ - shared_converse.ChatRoomMessages = Collection.extend({ model: shared_converse.ChatRoomMessage, comparator: 'time' }); - /** - * A direct MUC invitation to join a groupchat has been received - * See XEP-0249: Direct MUC invitations. - * @private - * @method _converse.ChatRoom#onDirectMUCInvitation - * @param { XMLElement } message - The message stanza containing the invitation. - */ - - shared_converse.onDirectMUCInvitation = async function (message) { - const x_el = muc_sizzle('x[xmlns="jabber:x:conference"]', message).pop(), - from = muc_Strophe.getBareJidFromJid(message.getAttribute('from')), - room_jid = x_el.getAttribute('jid'), - reason = x_el.getAttribute('reason'); - let result; - - if (api.settings.get('auto_join_on_invite')) { - result = true; - } else { - // Invite request might come from someone not your roster list - let contact = shared_converse.roster.get(from); - - contact = contact ? contact.getDisplayName() : from; - - if (!reason) { - result = confirm(__('%1$s has invited you to join a groupchat: %2$s', contact, room_jid)); - } else { - result = confirm(__('%1$s has invited you to join a groupchat: %2$s, and left the following reason: "%3$s"', contact, room_jid, reason)); - } - } - - if (result === true) { - const chatroom = await openChatRoom(room_jid, { - 'password': x_el.getAttribute('password') - }); - - if (chatroom.session.get('connection_status') === core_converse.ROOMSTATUS.DISCONNECTED) { - shared_converse.chatboxes.get(room_jid).rejoin(); - } - } - }; + Object.assign(shared_converse, { + getDefaultMUCNickname: getDefaultMUCNickname, + isInfoVisible: isInfoVisible, + onDirectMUCInvitation: onDirectMUCInvitation + }); /************************ BEGIN Event Handlers ************************/ - if (api.settings.get('allow_muc_invitations')) { api.listen.on('connected', registerDirectInvitationHandler); api.listen.on('reconnected', registerDirectInvitationHandler); } - api.listen.on('beforeTearDown', () => { - const groupchats = shared_converse.chatboxes.where({ - 'type': shared_converse.CHATROOMS_TYPE - }); - - groupchats.forEach(muc => utils_form.safeSave(muc.session, { - 'connection_status': core_converse.ROOMSTATUS.DISCONNECTED - })); - }); - api.listen.on('windowStateChanged', onWindowStateChanged); - api.listen.on('addClientFeatures', () => { - if (api.settings.get('allow_muc')) { - api.disco.own.features.add(muc_Strophe.NS.MUC); - } - - if (api.settings.get('allow_muc_invitations')) { - api.disco.own.features.add('jabber:x:conference'); // Invites - } - }); + api.listen.on('addClientFeatures', () => api.disco.own.features.add(`${muc_Strophe.NS.CONFINFO}+notify`)); + api.listen.on('addClientFeatures', onAddClientFeatures); + api.listen.on('beforeResourceBinding', onBeforeResourceBinding); + api.listen.on('beforeTearDown', onBeforeTearDown); api.listen.on('chatBoxesFetched', autoJoinRooms); - api.listen.on('beforeResourceBinding', () => { - shared_converse.connection.addHandler(stanza => { - const muc_jid = muc_Strophe.getBareJidFromJid(stanza.getAttribute('from')); - - if (!shared_converse.chatboxes.get(muc_jid)) { - api.waitUntil('chatBoxesFetched').then(async () => { - const muc = shared_converse.chatboxes.get(muc_jid); - - if (muc) { - await muc.initialized; - muc.message_handler.run(stanza); - } - }); - } - - return true; - }, null, 'message', 'groupchat'); - }); api.listen.on('disconnected', disconnectChatRooms); - api.listen.on('statusInitialized', () => { - window.addEventListener(shared_converse.unloadevent, () => { - const using_websocket = api.connection.isType('websocket'); - - if (using_websocket && (!api.settings.get('enable_smacks') || !shared_converse.session.get('smacks_stream_id'))) { - // For non-SMACKS websocket connections, or non-resumeable - // connections, we disconnect all chatrooms when the page unloads. - // See issue #1111 - disconnectChatRooms(); - } - }); - }); + api.listen.on('statusInitialized', onStatusInitialized); + api.listen.on('windowStateChanged', onWindowStateChanged); } }); @@ -33255,7 +36002,9 @@ var jed_default = /*#__PURE__*/__webpack_require__.n(jed); - +const { + dayjs +} = core_converse.env; function detectLocale(library_check) { /* Determine which locale is supported by the user's system as well @@ -33340,9 +36089,9 @@ async function fetchTranslations(_converse) { const { default: data - } = await __webpack_require__(7521)("./".concat(locale, "/LC_MESSAGES/converse.po")); - await __webpack_require__(9434)("./".concat(dayjs_locale, ".js")); - dayjs_min_default().locale(getLocale(dayjs_locale, l => dayjs_min_default().locale(l))); + } = await __webpack_require__(7521)(`./${locale}/LC_MESSAGES/converse.po`); + await __webpack_require__(9434)(`./${dayjs_locale}.js`); + dayjs.locale(getLocale(dayjs_locale, l => dayjs.locale(l))); jed_instance = new (jed_default())(data); } @@ -33412,7 +36161,7 @@ const Bookmarks = { this.on('add', bm => this.openBookmarkedRoom(bm).then(bm => this.markRoomAsBookmarked(bm)).catch(e => headless_log.fatal(e))); this.on('remove', this.markRoomAsUnbookmarked, this); this.on('remove', this.sendBookmarkStanza, this); - const cache_key = "converse.room-bookmarks".concat(shared_converse.bare_jid); + const cache_key = `converse.room-bookmarks${shared_converse.bare_jid}`; this.fetched_flag = cache_key + 'fetched'; initStorage(this, cache_key); }, @@ -33522,7 +36271,7 @@ const Bookmarks = { createBookmarksFromStanza(stanza) { const xmlns = collection_Strophe.NS.BOOKMARKS; - const sel = "items[node=\"".concat(xmlns, "\"] item storage[xmlns=\"").concat(xmlns, "\"] conference"); + const sel = `items[node="${xmlns}"] item storage[xmlns="${xmlns}"] conference`; collection_sizzle(sel, stanza).forEach(el => { var _el$querySelector; @@ -33581,7 +36330,7 @@ const { async function checkBookmarksSupport() { const identity = await api.disco.getIdentity('pubsub', 'pep', shared_converse.bare_jid); - if (shared_converse.allow_public_bookmarks) { + if (api.settings.get('allow_public_bookmarks')) { return !!identity; } else { return api.disco.supports(bookmarks_utils_Strophe.NS.PUBSUB + '#publish-options', shared_converse.bare_jid); @@ -33645,7 +36394,7 @@ const { bookmarks_Strophe.addNamespace('BOOKMARKS', 'storage:bookmarks'); function handleBookmarksPush(message) { - if (bookmarks_sizzle("event[xmlns=\"".concat(bookmarks_Strophe.NS.PUBSUB, "#event\"] items[node=\"").concat(bookmarks_Strophe.NS.BOOKMARKS, "\"]"), message).length) { + if (bookmarks_sizzle(`event[xmlns="${bookmarks_Strophe.NS.PUBSUB}#event"] items[node="${bookmarks_Strophe.NS.BOOKMARKS}"]`, message).length) { api.waitUntil('bookmarksInitialized').then(() => shared_converse.bookmarks.createBookmarksFromStanza(message)).catch(e => headless_log.fatal(e)); } @@ -33867,7 +36616,7 @@ core_converse.plugins.add('converse-bosh', { // model, to avoid trying to reconnect to a stale BOSH session const id = BOSH_SESSION_ID; sessionStorage.removeItem(id); - sessionStorage.removeItem("".concat(id, "-").concat(id)); + sessionStorage.removeItem(`${id}-${id}`); } else { shared_converse.bosh_session.destroy(); @@ -33943,13 +36692,9 @@ function generateVerificationString() { propertySort(identities, "lang"); } - let S = identities.reduce((result, id) => { - var _id$lang; - - return "".concat(result).concat(id.category, "/").concat(id.type, "/").concat((_id$lang = id === null || id === void 0 ? void 0 : id.lang) !== null && _id$lang !== void 0 ? _id$lang : '', "/").concat(id.name, "<"); - }, ""); + let S = identities.reduce((result, id) => `${result}${id.category}/${id.type}/${(id === null || id === void 0 ? void 0 : id.lang) ?? ''}/${id.name}<`, ""); features.sort(); - S = features.reduce((result, feature) => "".concat(result).concat(feature, "<"), S); + S = features.reduce((result, feature) => `${result}${feature}<`, S); return SHA1.b64_sha1(S); } @@ -33977,6 +36722,7 @@ core_converse.plugins.add('converse-caps', { initialize() { api.listen.on('constructedPresence', (_, p) => p.root().cnode(createCapsNode()).up() && p); + api.listen.on('constructedMUCPresence', (_, p) => p.root().cnode(createCapsNode()).up() && p); } }); @@ -34005,7 +36751,7 @@ function enableCarbons(reconnecting) { }); } - if (!api.settings.get("message_carbons") || ((_converse$session2 = shared_converse.session) === null || _converse$session2 === void 0 ? void 0 : _converse$session2.get('carbons_enabled'))) { + if (!api.settings.get("message_carbons") || (_converse$session2 = shared_converse.session) !== null && _converse$session2 !== void 0 && _converse$session2.get('carbons_enabled')) { return; } @@ -34075,7 +36821,7 @@ const ChatBoxes = Collection.extend({ return; } - initStorage(this, "converse.chatboxes-".concat(shared_converse.bare_jid)); + initStorage(this, `converse.chatboxes-${shared_converse.bare_jid}`); this.fetch({ 'add': true, 'success': c => this.onChatBoxesFetched(c) @@ -34273,8 +37019,9 @@ core_converse.plugins.add('converse-headlines', { async initialize() { this.set({ - 'box_id': "box-".concat(this.get('jid')) + 'box_id': `box-${this.get('jid')}` }); + this.initUI(); this.initMessages(); await this.fetchMessages(); /** @@ -34293,6 +37040,7 @@ core_converse.plugins.add('converse-headlines', { // Handler method for all incoming messages of type "headline". if (isHeadline(stanza) || isServerMessage(stanza)) { const from_jid = stanza.getAttribute('from'); + await api.waitUntil('rosterInitialized'); if (from_jid.includes('@') && !shared_converse.roster.get(from_jid) && !api.settings.get("allow_non_roster_messaging")) { return; @@ -34384,6 +37132,20 @@ core_converse.plugins.add('converse-headlines', { } }); +;// CONCATENATED MODULE: ./src/headless/plugins/mam/placeholder.js + + +const placeholder_u = core_converse.env.utils; +class MAMPlaceholderMessage extends Model { + defaults() { + // eslint-disable-line class-methods-use-this + return { + 'msgid': placeholder_u.getUniqueId(), + 'is_ephemeral': false + }; + } + +} ;// CONCATENATED MODULE: ./src/headless/shared/rsm.js /** * @module converse-rsm @@ -34470,7 +37232,7 @@ class RSM { } /** * Returns a `` XML element that confirms to XEP-0059 Result Set Management. - * The element is constructed based on the { @link module:converse-rsm~RSMQueryParameters } + * The element is constructed based on the {@link module:converse-rsm~RSMQueryParameters} * that are set on this RSM instance. * @returns { XMLElement } */ @@ -34515,7 +37277,7 @@ shared_converse.RSM = RSM; const { Strophe: mam_api_Strophe, $iq: mam_api_$iq, - dayjs + dayjs: api_dayjs } = core_converse.env; const { NS: api_NS @@ -34547,7 +37309,7 @@ const api_u = core_converse.env.utils; */ /** - * The options that can be passed in to the { @link _converse.api.archive.query } method + * The options that can be passed in to the {@link _converse.api.archive.query } method * @typedef { module:converse-mam~MAMFilterParameters } ArchiveQueryOptions * @property { Boolean } [groupchat=false] - Whether the MAM archive is for a groupchat. */ @@ -34562,7 +37324,7 @@ const api_u = core_converse.env.utils; * @param { module:converse-mam~ArchiveQueryOptions } options - An object containing query parameters * @throws {Error} An error is thrown if the XMPP server responds with an error. * @returns { Promise } A promise which resolves - * to a { @link module:converse-mam~MAMQueryResult } object. + * to a {@link module:converse-mam~MAMQueryResult } object. * * @example * // Requesting all archived messages @@ -34728,7 +37490,7 @@ const api_u = core_converse.env.utils; const supported = await api.disco.supports(api_NS.MAM, jid); if (!supported) { - headless_log.warn("Did not fetch MAM archive for ".concat(jid, " because it doesn't support ").concat(api_NS.MAM)); + headless_log.warn(`Did not fetch MAM archive for ${jid} because it doesn't support ${api_NS.MAM}`); return { 'messages': [] }; @@ -34757,14 +37519,14 @@ const api_u = core_converse.env.utils; ['start', 'end'].forEach(t => { if (options[t]) { - const date = dayjs(options[t]); + const date = api_dayjs(options[t]); if (date.isValid()) { stanza.c('field', { 'var': t }).c('value').t(date.toISOString()).up().up(); } else { - throw new TypeError("archive.query: invalid date provided for: ".concat(t)); + throw new TypeError(`archive.query: invalid date provided for: ${t}`); } } }); @@ -34779,7 +37541,7 @@ const api_u = core_converse.env.utils; const messages = []; const message_handler = shared_converse.connection.addHandler(stanza => { - const result = sizzle_default()("message > result[xmlns=\"".concat(api_NS.MAM, "\"]"), stanza).pop(); + const result = sizzle_default()(`message > result[xmlns="${api_NS.MAM}"]`, stanza).pop(); if (result === undefined || result.getAttribute('queryid') !== queryid) { return true; @@ -34789,11 +37551,11 @@ const api_u = core_converse.env.utils; if (options.groupchat) { if (from !== options['with']) { - headless_log.warn("Ignoring alleged groupchat MAM message from ".concat(stanza.getAttribute('from'))); + headless_log.warn(`Ignoring alleged groupchat MAM message from ${stanza.getAttribute('from')}`); return true; } } else if (from !== shared_converse.bare_jid) { - headless_log.warn("Ignoring alleged MAM message from ".concat(stanza.getAttribute('from'))); + headless_log.warn(`Ignoring alleged MAM message from ${stanza.getAttribute('from')}`); return true; } @@ -34836,9 +37598,9 @@ const api_u = core_converse.env.utils; shared_converse.connection.deleteHandler(message_handler); let rsm; - const fin = iq_result && sizzle_default()("fin[xmlns=\"".concat(api_NS.MAM, "\"]"), iq_result).pop(); + const fin = iq_result && sizzle_default()(`fin[xmlns="${api_NS.MAM}"]`, iq_result).pop(); const complete = (fin === null || fin === void 0 ? void 0 : fin.getAttribute('complete')) === 'true'; - const set = sizzle_default()("set[xmlns=\"".concat(api_NS.RSM, "\"]"), fin).pop(); + const set = sizzle_default()(`set[xmlns="${api_NS.RSM}"]`, fin).pop(); if (set) { rsm = new RSM({ ...options, @@ -34848,7 +37610,7 @@ const api_u = core_converse.env.utils; /** * @typedef { Object } MAMQueryResult * @property { Array } messages - * @property { RSM } [rsm] - An instance of { @link RSM }. + * @property { RSM } [rsm] - An instance of {@link RSM}. * You can call `next()` or `previous()` on this instance, * to get the RSM query parameters for the next or previous * page in the result set. @@ -34872,6 +37634,7 @@ const api_u = core_converse.env.utils; + const { Strophe: mam_utils_Strophe, $iq: mam_utils_$iq @@ -34881,10 +37644,10 @@ const { } = mam_utils_Strophe; const mam_utils_u = core_converse.env.utils; function onMAMError(iq) { - if (iq === null || iq === void 0 ? void 0 : iq.querySelectorAll('feature-not-implemented').length) { - headless_log.warn("Message Archive Management (XEP-0313) not supported by ".concat(iq.getAttribute('from'))); + if (iq !== null && iq !== void 0 && iq.querySelectorAll('feature-not-implemented').length) { + headless_log.warn(`Message Archive Management (XEP-0313) not supported by ${iq.getAttribute('from')}`); } else { - headless_log.error("Error while trying to set archiving preferences for ".concat(iq.getAttribute('from'), ".")); + headless_log.error(`Error while trying to set archiving preferences for ${iq.getAttribute('from')}.`); headless_log.error(iq); } } @@ -34901,7 +37664,7 @@ function onMAMError(iq) { */ function onMAMPreferences(iq, feature) { - const preference = sizzle_default()("prefs[xmlns=\"".concat(utils_NS.MAM, "\"]"), iq).pop(); + const preference = sizzle_default()(`prefs[xmlns="${utils_NS.MAM}"]`, iq).pop(); const default_pref = preference.getAttribute('default'); if (default_pref !== api.settings.get('message_archiving')) { @@ -34982,8 +37745,8 @@ async function handleMAMResult(model, result, query, options, should_page) { } } /** - * Fetch XEP-0313 archived messages based on the passed in criteria. - * @param { Object } options + * @typedef { Object } MAMOptions + * A map of MAM related options that may be passed to fetchArchivedMessages * @param { integer } [options.max] - The maximum number of items to return. * Defaults to "archived_messages_page_size" * @param { string } [options.after] - The XEP-0359 stanza ID of a message @@ -34997,8 +37760,15 @@ async function handleMAMResult(model, result, query, options, should_page) { * @param { string } [options.with] - The JID of the entity with * which messages were exchanged. * @param { boolean } [options.groupchat] - True if archive in groupchat. - * @param { ('forwards'|'backwards'|null)} [should_page=null] - Determines whether this function should - * recursively page through the entire result set if a limited number of results were returned. + */ + +/** + * Fetch XEP-0313 archived messages based on the passed in criteria. + * @param { _converse.ChatBox | _converse.ChatRoom } model + * @param { MAMOptions } [options] + * @param { ('forwards'|'backwards'|null)} [should_page=null] - Determines whether + * this function should recursively page through the entire result set if a limited + * number of results were returned. */ async function fetchArchivedMessages(model, options = {}, should_page = null) { @@ -35032,17 +37802,58 @@ async function fetchArchivedMessages(model, options = {}, should_page = null) { } return fetchArchivedMessages(model, options, should_page); - } else {// TODO: Add a special kind of message which will - // render as a link to fetch further messages, either - // to fetch older messages or to fill in a gap. + } else { + createPlaceholder(model, options, result); } } } +/** + * Create a placeholder message which is used to indicate gaps in the history. + * @param { _converse.ChatBox | _converse.ChatRoom } model + * @param { MAMOptions } options + * @param { object } result - The RSM result object + */ + +async function createPlaceholder(model, options, result) { + if (options.before == '' && (model.messages.length === 0 || !options.start)) { + // Fetching the latest MAM messages with an empty local cache + return; + } + + if (options.before && !options.start) { + // Infinite scrolling upward + return; + } + + if (options.before == null) { + // eslint-disable-line no-eq-null + // Adding placeholders when paging forwards is not supported yet, + // since currently with standard Converse, we only page forwards + // when fetching the entire history (i.e. no gaps should arise). + return; + } + + const msgs = await Promise.all(result.messages); + const { + rsm + } = result; + const key = `stanza_id ${model.get('jid')}`; + const adjacent_message = msgs.find(m => m[key] === rsm.result.first); + const msg_data = { + 'template_hook': 'getMessageTemplate', + 'time': new Date(new Date(adjacent_message['time']) - 1).toISOString(), + 'before': rsm.result.first, + 'start': options.start + }; + model.messages.add(new MAMPlaceholderMessage(msg_data)); +} /** * Fetches messages that might have been archived *after* * the last archived message in our local cache. + * @param { _converse.ChatBox | _converse.ChatRoom } */ + function fetchNewestMessages(model) { if (model.disable_mam) { return; @@ -35056,7 +37867,7 @@ function fetchNewestMessages(model) { const should_page = api.settings.get('mam_request_all_pages'); if (should_page) { - const stanza_id = most_recent_msg.get("stanza_id ".concat(model.get('jid'))); + const stanza_id = most_recent_msg.get(`stanza_id ${model.get('jid')}`); if (stanza_id) { fetchArchivedMessages(model, { @@ -35089,6 +37900,7 @@ function fetchNewestMessages(model) { + const { Strophe: mam_Strophe } = core_converse.env; @@ -35112,7 +37924,8 @@ core_converse.plugins.add('converse-mam', { Object.assign(shared_converse, { onMAMError: onMAMError, onMAMPreferences: onMAMPreferences, - handleMAMResult: handleMAMResult + handleMAMResult: handleMAMResult, + MAMPlaceholderMessage: MAMPlaceholderMessage }); /************************ Event Handlers ************************/ @@ -35255,13 +38068,13 @@ const { const result = await api.sendIQ(iq, timeout || 10000, false); if (result === null) { - headless_log.warn("Timeout while pinging ".concat(jid)); + headless_log.warn(`Timeout while pinging ${jid}`); if (jid === ping_api_Strophe.getDomainFromJid(shared_converse.bare_jid)) { api.connection.reconnect(); } } else if (ping_api_u.isErrorStanza(result)) { - headless_log.error("Error while pinging ".concat(jid)); + headless_log.error(`Error while pinging ${jid}`); headless_log.error(result); } @@ -35364,24 +38177,24 @@ core_converse.plugins.add('converse-pubsub', { }).c('field', { 'var': 'FORM_TYPE', 'type': 'hidden' - }).c('value').t("".concat(pubsub_Strophe.NS.PUBSUB, "#publish-options")).up().up(); + }).c('value').t(`${pubsub_Strophe.NS.PUBSUB}#publish-options`).up().up(); Object.keys(options).forEach(k => stanza.c('field', { 'var': k }).c('value').t(options[k]).up().up()); } else { - headless_log.warn("_converse.api.publish: ".concat(jid, " does not support #publish-options, ") + "so we didn't set them even though they were provided."); + headless_log.warn(`_converse.api.publish: ${jid} does not support #publish-options, ` + `so we didn't set them even though they were provided.`); } } try { await api.sendIQ(stanza); } catch (iq) { - if (iq instanceof Element && strict_options && iq.querySelector("precondition-not-met[xmlns=\"".concat(pubsub_Strophe.NS.PUBSUB_ERROR, "\"]"))) { + if (iq instanceof Element && strict_options && iq.querySelector(`precondition-not-met[xmlns="${pubsub_Strophe.NS.PUBSUB_ERROR}"]`)) { // The publish-options precondition couldn't be // met. We re-publish but without publish-options. const el = stanza.nodeTree; el.querySelector('publish-options').outerHTML = ''; - headless_log.warn("PubSub: Republishing without publish options. ".concat(el.outerHTML)); + headless_log.warn(`PubSub: Republishing without publish options. ${el.outerHTML}`); await api.sendIQ(el); } else { throw iq; @@ -35504,7 +38317,7 @@ const XMPPStatus = Model.extend({ }, getNickname() { - return shared_converse.nickname; + return api.settings.get('nickname'); }, getFullname() { @@ -35580,11 +38393,7 @@ const XMPPStatus = Model.extend({ child_nodes = [child_nodes]; } - child_nodes.map(c => { - var _c$tree; - - return (_c$tree = c === null || c === void 0 ? void 0 : c.tree()) !== null && _c$tree !== void 0 ? _c$tree : c; - }).forEach(c => presence.cnode(c).up()); + child_nodes.map(c => (c === null || c === void 0 ? void 0 : c.tree()) ?? c).forEach(c => presence.cnode(c).up()); } api.send(presence); @@ -35681,7 +38490,7 @@ const { $build: status_utils_$build } = core_converse.env; -function onStatusInitialized(reconnecting) { +function utils_onStatusInitialized(reconnecting) { /** * Triggered when the user's own chat status has been initialized. * @event _converse#statusInitialized @@ -35697,17 +38506,17 @@ function initStatus(reconnecting) { reconnecting = shared_converse.xmppstatus === undefined ? false : reconnecting; if (reconnecting) { - onStatusInitialized(reconnecting); + utils_onStatusInitialized(reconnecting); } else { - const id = "converse.xmppstatus-".concat(shared_converse.bare_jid); + const id = `converse.xmppstatus-${shared_converse.bare_jid}`; shared_converse.xmppstatus = new shared_converse.XMPPStatus({ id }); initStorage(shared_converse.xmppstatus, id, 'session'); shared_converse.xmppstatus.fetch({ - 'success': () => onStatusInitialized(reconnecting), - 'error': () => onStatusInitialized(reconnecting), + 'success': () => utils_onStatusInitialized(reconnecting), + 'error': () => utils_onStatusInitialized(reconnecting), 'silent': true }); } @@ -35720,7 +38529,7 @@ function onUserActivity() { shared_converse.idle_seconds = 0; } - if (!((_converse$connection = shared_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.authenticated)) { + if (!((_converse$connection = shared_converse.connection) !== null && _converse$connection !== void 0 && _converse$connection.authenticated)) { // We can't send out any stanzas when there's no authenticated connection. // This can happen when the connection reconnects. return; @@ -35748,7 +38557,7 @@ function utils_onEverySecond() { /* An interval handler running every second. * Used for CSI and the auto_away and auto_xa features. */ - if (!((_converse$connection2 = shared_converse.connection) === null || _converse$connection2 === void 0 ? void 0 : _converse$connection2.authenticated)) { + if (!((_converse$connection2 = shared_converse.connection) !== null && _converse$connection2 !== void 0 && _converse$connection2.authenticated)) { // We can't send out any stanzas when there's no authenticated connection. // This can happen when the connection reconnects. return; @@ -35865,10 +38674,265 @@ core_converse.plugins.add('converse-status', { } }); +;// CONCATENATED MODULE: ./src/headless/plugins/roster/utils.js + + + + +const { + $pres: utils_$pres +} = core_converse.env; + +async function initRoster() { + // Initialize the Bakcbone collections that represent the contats + // roster and the roster groups. + await api.waitUntil('VCardsInitialized'); + shared_converse.roster = new shared_converse.RosterContacts(); + let id = `converse.contacts-${shared_converse.bare_jid}`; + initStorage(shared_converse.roster, id); + shared_converse.roster.data = new Model(); + id = `converse-roster-model-${shared_converse.bare_jid}`; + shared_converse.roster.data.id = id; + initStorage(shared_converse.roster.data, id); + + shared_converse.roster.data.fetch(); + /** + * Triggered once the `_converse.RosterContacts` + * been created, but not yet populated with data. + * This event is useful when you want to create views for these collections. + * @event _converse#chatBoxMaximized + * @example _converse.api.listen.on('rosterInitialized', () => { ... }); + * @example _converse.api.waitUntil('rosterInitialized').then(() => { ... }); + */ + + + api.trigger('rosterInitialized'); +} +/** + * Fetch all the roster groups, and then the roster contacts. + * Emit an event after fetching is done in each case. + * @private + * @param { Bool } ignore_cache - If set to to true, the local cache + * will be ignored it's guaranteed that the XMPP server + * will be queried for the roster. + */ + + +async function populateRoster(ignore_cache = false) { + if (ignore_cache) { + shared_converse.send_initial_presence = true; + } + + try { + await shared_converse.roster.fetchRosterContacts(); + api.trigger('rosterContactsFetched'); + } catch (reason) { + headless_log.error(reason); + } finally { + shared_converse.send_initial_presence && api.user.presence.send(); + } +} + +function updateUnreadCounter(chatbox) { + var _converse$roster; + + const contact = (_converse$roster = shared_converse.roster) === null || _converse$roster === void 0 ? void 0 : _converse$roster.findWhere({ + 'jid': chatbox.get('jid') + }); + contact === null || contact === void 0 ? void 0 : contact.save({ + 'num_unread': chatbox.get('num_unread') + }); +} + +function registerPresenceHandler() { + unregisterPresenceHandler(); + shared_converse.presence_ref = shared_converse.connection.addHandler(presence => { + shared_converse.roster.presenceHandler(presence); + + return true; + }, null, 'presence', null); +} + +function unregisterPresenceHandler() { + if (shared_converse.presence_ref !== undefined) { + shared_converse.connection.deleteHandler(shared_converse.presence_ref); + + delete shared_converse.presence_ref; + } +} + +async function clearPresences() { + var _converse$presences; + + await ((_converse$presences = shared_converse.presences) === null || _converse$presences === void 0 ? void 0 : _converse$presences.clearStore()); +} +/** + * Roster specific event handler for the clearSession event + */ + + +async function utils_onClearSession() { + await clearPresences(); + + if (shared_converse.shouldClearCache()) { + if (shared_converse.rostergroups) { + await shared_converse.rostergroups.clearStore(); + delete shared_converse.rostergroups; + } + + if (shared_converse.roster) { + var _converse$roster$data; + + (_converse$roster$data = shared_converse.roster.data) === null || _converse$roster$data === void 0 ? void 0 : _converse$roster$data.destroy(); + await shared_converse.roster.clearStore(); + delete shared_converse.roster; + } + } +} +/** + * Roster specific event handler for the presencesInitialized event + * @param { Boolean } reconnecting + */ + +async function onPresencesInitialized(reconnecting) { + if (reconnecting) { + /** + * Similar to `rosterInitialized`, but instead pertaining to reconnection. + * This event indicates that the roster and its groups are now again + * available after Converse.js has reconnected. + * @event _converse#rosterReadyAfterReconnection + * @example _converse.api.listen.on('rosterReadyAfterReconnection', () => { ... }); + */ + api.trigger('rosterReadyAfterReconnection'); + } else { + await initRoster(); + } + + shared_converse.roster.onConnected(); + + registerPresenceHandler(); + populateRoster(!shared_converse.connection.restored); +} +/** + * Roster specific event handler for the statusInitialized event + * @param { Boolean } reconnecting + */ + +async function roster_utils_onStatusInitialized(reconnecting) { + if (reconnecting) { + // When reconnecting and not resuming a previous session, + // we clear all cached presence data, since it might be stale + // and we'll receive new presence updates + !shared_converse.connection.hasResumed() && (await clearPresences()); + } else { + shared_converse.presences = new shared_converse.Presences(); + const id = `converse.presences-${shared_converse.bare_jid}`; + initStorage(shared_converse.presences, id, 'session'); // We might be continuing an existing session, so we fetch + // cached presence data. + + shared_converse.presences.fetch(); + } + /** + * Triggered once the _converse.Presences collection has been + * initialized and its cached data fetched. + * Returns a boolean indicating whether this event has fired due to + * Converse having reconnected. + * @event _converse#presencesInitialized + * @type { bool } + * @example _converse.api.listen.on('presencesInitialized', reconnecting => { ... }); + */ + + + api.trigger('presencesInitialized', reconnecting); +} +/** + * Roster specific event handler for the chatBoxesInitialized event + */ + +function onChatBoxesInitialized() { + shared_converse.chatboxes.on('change:num_unread', updateUnreadCounter); + + shared_converse.chatboxes.on('add', chatbox => { + if (chatbox.get('type') === shared_converse.PRIVATE_CHAT_TYPE) { + chatbox.setRosterContact(chatbox.get('jid')); + } + }); +} +/** + * Roster specific handler for the rosterContactsFetched promise + */ + +function onRosterContactsFetched() { + shared_converse.roster.on('add', contact => { + // When a new contact is added, check if we already have a + // chatbox open for it, and if so attach it to the chatbox. + const chatbox = shared_converse.chatboxes.findWhere({ + 'jid': contact.get('jid') + }); + + chatbox === null || chatbox === void 0 ? void 0 : chatbox.setRosterContact(contact.get('jid')); + }); +} +/** + * Reject or cancel another user's subscription to our presence updates. + * @function rejectPresenceSubscription + * @param { String } jid - The Jabber ID of the user whose subscription is being canceled + * @param { String } message - An optional message to the user + */ + +function rejectPresenceSubscription(jid, message) { + const pres = utils_$pres({ + to: jid, + type: "unsubscribed" + }); + + if (message && message !== "") { + pres.c("status").t(message); + } + + api.send(pres); +} +function contactsComparator(contact1, contact2) { + const status1 = contact1.presence.get('show') || 'offline'; + const status2 = contact2.presence.get('show') || 'offline'; + + if (shared_converse.STATUS_WEIGHTS[status1] === shared_converse.STATUS_WEIGHTS[status2]) { + const name1 = contact1.getDisplayName().toLowerCase(); + const name2 = contact2.getDisplayName().toLowerCase(); + return name1 < name2 ? -1 : name1 > name2 ? 1 : 0; + } else { + return shared_converse.STATUS_WEIGHTS[status1] < shared_converse.STATUS_WEIGHTS[status2] ? -1 : 1; + } +} +function groupsComparator(a, b) { + const HEADER_WEIGHTS = {}; + HEADER_WEIGHTS[shared_converse.HEADER_UNREAD] = 0; + HEADER_WEIGHTS[shared_converse.HEADER_REQUESTING_CONTACTS] = 1; + HEADER_WEIGHTS[shared_converse.HEADER_CURRENT_CONTACTS] = 2; + HEADER_WEIGHTS[shared_converse.HEADER_UNGROUPED] = 3; + HEADER_WEIGHTS[shared_converse.HEADER_PENDING_CONTACTS] = 4; + const WEIGHTS = HEADER_WEIGHTS; + const special_groups = Object.keys(HEADER_WEIGHTS); + const a_is_special = special_groups.includes(a); + const b_is_special = special_groups.includes(b); + + if (!a_is_special && !b_is_special) { + return a.toLowerCase() < b.toLowerCase() ? -1 : a.toLowerCase() > b.toLowerCase() ? 1 : 0; + } else if (a_is_special && b_is_special) { + return WEIGHTS[a] < WEIGHTS[b] ? -1 : WEIGHTS[a] > WEIGHTS[b] ? 1 : 0; + } else if (!a_is_special && b_is_special) { + const a_header = shared_converse.HEADER_CURRENT_CONTACTS; + return WEIGHTS[a_header] < WEIGHTS[b] ? -1 : WEIGHTS[a_header] > WEIGHTS[b] ? 1 : 0; + } else if (a_is_special && !b_is_special) { + const b_header = shared_converse.HEADER_CURRENT_CONTACTS; + return WEIGHTS[a] < WEIGHTS[b_header] ? -1 : WEIGHTS[a] > WEIGHTS[b_header] ? 1 : 0; + } +} ;// CONCATENATED MODULE: ./src/headless/plugins/roster/contact.js + const { Strophe: contact_Strophe, $iq: contact_$iq, @@ -35882,6 +38946,7 @@ const { const RosterContact = Model.extend({ defaults: { 'chat_state': undefined, + 'groups': [], 'image': shared_converse.DEFAULT_IMAGE, 'image_type': shared_converse.DEFAULT_IMAGE_TYPE, 'num_unread': 0, @@ -35897,7 +38962,6 @@ const RosterContact = Model.extend({ const bare_jid = contact_Strophe.getBareJidFromJid(jid).toLowerCase(); attributes.jid = bare_jid; this.set(Object.assign({ - 'groups': [], 'id': bare_jid, 'jid': bare_jid, 'user_id': contact_Strophe.getNodeFromJid(jid) @@ -35950,8 +39014,8 @@ const RosterContact = Model.extend({ const nick = this.get('nickname'); const jid = this.get('jid'); let criteria = this.getDisplayName(); - criteria = !criteria.includes(jid) ? criteria.concat(" ".concat(jid)) : criteria; - criteria = !criteria.includes(nick) ? criteria.concat(" ".concat(nick)) : criteria; + criteria = !criteria.includes(jid) ? criteria.concat(` ${jid}`) : criteria; + criteria = !criteria.includes(nick) ? criteria.concat(` ${nick}`) : criteria; return criteria.toLowerCase(); }, @@ -36041,8 +39105,7 @@ const RosterContact = Model.extend({ * @param { String } message - Optional message to send to the person being unauthorized */ unauthorize(message) { - shared_converse.rejectPresenceSubscription(this.get('jid'), message); - + rejectPresenceSubscription(this.get('jid'), message); return this; }, @@ -36147,17 +39210,18 @@ function sum(array) { + const { Strophe: contacts_Strophe, $iq: contacts_$iq, - sizzle: contacts_sizzle + sizzle: contacts_sizzle, + u: contacts_u } = core_converse.env; -const contacts_u = core_converse.env.utils; const RosterContacts = Collection.extend({ model: contact, initialize() { - const id = "roster.state-".concat(shared_converse.bare_jid, "-").concat(this.get('jid')); + const id = `roster.state-${shared_converse.bare_jid}-${this.get('jid')}`; this.state = new Model({ id, 'collapsed_groups': [] @@ -36339,7 +39403,7 @@ const RosterContacts = Collection.extend({ var _sizzle$pop; // Can happen when a subscription is retried or roster was deleted - const nickname = ((_sizzle$pop = contacts_sizzle("nick[xmlns=\"".concat(contacts_Strophe.NS.NICK, "\"]"), presence).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent) || null; + const nickname = ((_sizzle$pop = contacts_sizzle(`nick[xmlns="${contacts_Strophe.NS.NICK}"]`, presence).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent) || null; const contact = await this.addContactToRoster(bare_jid, nickname, [], { 'subscription': 'from' }); @@ -36373,7 +39437,7 @@ const RosterContacts = Collection.extend({ // attribute (i.e., implicitly from the bare JID of the user's // account) or it has a 'from' attribute whose value matches the // user's bare JID . - headless_log.warn("Ignoring roster illegitimate roster push message from ".concat(iq.getAttribute('from'))); + headless_log.warn(`Ignoring roster illegitimate roster push message from ${iq.getAttribute('from')}`); return; } @@ -36382,9 +39446,9 @@ const RosterContacts = Collection.extend({ id, from: shared_converse.connection.jid })); - const query = contacts_sizzle("query[xmlns=\"".concat(contacts_Strophe.NS.ROSTER, "\"]"), iq).pop(); + const query = contacts_sizzle(`query[xmlns="${contacts_Strophe.NS.ROSTER}"]`, iq).pop(); this.data.save('version', query.getAttribute('ver')); - const items = contacts_sizzle("item", query); + const items = contacts_sizzle(`item`, query); if (items.length > 1) { headless_log.error(iq); @@ -36436,10 +39500,10 @@ const RosterContacts = Collection.extend({ const iq = await api.sendIQ(stanza, null, false); if (iq.getAttribute('type') !== 'error') { - const query = contacts_sizzle("query[xmlns=\"".concat(contacts_Strophe.NS.ROSTER, "\"]"), iq).pop(); + const query = contacts_sizzle(`query[xmlns="${contacts_Strophe.NS.ROSTER}"]`, iq).pop(); if (query) { - const items = contacts_sizzle("item", query); + const items = contacts_sizzle(`item`, query); items.forEach(item => this.updateContact(item)); this.data.save('version', query.getAttribute('ver')); } @@ -36475,7 +39539,7 @@ const RosterContacts = Collection.extend({ const contact = this.get(jid); const subscription = item.getAttribute("subscription"); const ask = item.getAttribute("ask"); - const groups = Array.from(item.getElementsByTagName('group')).map(e => e.textContent); + const groups = [...new Set(contacts_sizzle('group', item).map(e => e.textContent))]; if (!contact) { if (subscription === "none" && ask === null || subscription === "remove") { @@ -36514,7 +39578,7 @@ const RosterContacts = Collection.extend({ var _sizzle$pop2; const bare_jid = contacts_Strophe.getBareJidFromJid(presence.getAttribute('from')); - const nickname = ((_sizzle$pop2 = contacts_sizzle("nick[xmlns=\"".concat(contacts_Strophe.NS.NICK, "\"]"), presence).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent) || null; + const nickname = ((_sizzle$pop2 = contacts_sizzle(`nick[xmlns="${contacts_Strophe.NS.NICK}"]`, presence).pop()) === null || _sizzle$pop2 === void 0 ? void 0 : _sizzle$pop2.textContent) || null; const user_data = { 'jid': bare_jid, 'subscription': 'none', @@ -36538,7 +39602,7 @@ const RosterContacts = Collection.extend({ contact = this.get(bare_jid); if (!api.settings.get('allow_contact_requests')) { - shared_converse.rejectPresenceSubscription(jid, __("This client does not allow presence subscriptions")); + rejectPresenceSubscription(jid, __("This client does not allow presence subscriptions")); } if (api.settings.get('auto_subscribe')) { @@ -36621,7 +39685,7 @@ const RosterContacts = Collection.extend({ if (this.isSelf(bare_jid)) { return this.handleOwnPresence(presence); - } else if (contacts_sizzle("query[xmlns=\"".concat(contacts_Strophe.NS.MUC, "\"]"), presence).length) { + } else if (contacts_sizzle(`query[xmlns="${contacts_Strophe.NS.MUC}"]`, presence).length) { return; // Ignore MUC } @@ -36757,7 +39821,7 @@ const Presence = Model.extend({ initialize() { this.resources = new Resources(); - const id = "converse.identities-".concat(this.get('jid')); + const id = `converse.identities-${this.get('jid')}`; initStorage(this.resources, id, 'session'); this.listenTo(this.resources, 'update', this.onResourcesChanged); this.listenTo(this.resources, 'change', this.onResourcesChanged); @@ -36782,7 +39846,7 @@ const Presence = Model.extend({ * @private */ getHighestPriorityResource() { - return this.resources.sortBy(r => "".concat(r.get('priority'), "-").concat(r.get('timestamp'))).reverse()[0]; + return this.resources.sortBy(r => `${r.get('priority')}-${r.get('timestamp')}`).reverse()[0]; }, /** @@ -36793,17 +39857,17 @@ const Presence = Model.extend({ * @param { XMLElement } presence: The presence stanza */ addResource(presence) { - var _presence$querySelect, _presence$querySelect2, _presence$querySelect3, _presence$querySelect4; + var _presence$querySelect, _presence$querySelect2; const jid = presence.getAttribute('from'), name = presence_Strophe.getResourceFromJid(jid), - delay = presence_sizzle("delay[xmlns=\"".concat(presence_Strophe.NS.DELAY, "\"]"), presence).pop(), - priority = (_presence$querySelect = (_presence$querySelect2 = presence.querySelector('priority')) === null || _presence$querySelect2 === void 0 ? void 0 : _presence$querySelect2.textContent) !== null && _presence$querySelect !== void 0 ? _presence$querySelect : 0, + delay = presence_sizzle(`delay[xmlns="${presence_Strophe.NS.DELAY}"]`, presence).pop(), + priority = ((_presence$querySelect = presence.querySelector('priority')) === null || _presence$querySelect === void 0 ? void 0 : _presence$querySelect.textContent) ?? 0, resource = this.resources.get(name), settings = { 'name': name, 'priority': lodash_es_isNaN(parseInt(priority, 10)) ? 0 : parseInt(priority, 10), - 'show': (_presence$querySelect3 = (_presence$querySelect4 = presence.querySelector('show')) === null || _presence$querySelect4 === void 0 ? void 0 : _presence$querySelect4.textContent) !== null && _presence$querySelect3 !== void 0 ? _presence$querySelect3 : 'online', + 'show': ((_presence$querySelect2 = presence.querySelector('show')) === null || _presence$querySelect2 === void 0 ? void 0 : _presence$querySelect2.textContent) ?? 'online', 'timestamp': delay ? presence_dayjs(delay.getAttribute('stamp')).toISOString() : new Date().toISOString() }; @@ -36833,87 +39897,6 @@ const Presence = Model.extend({ const Presences = Collection.extend({ 'model': Presence }); -;// CONCATENATED MODULE: ./src/headless/plugins/roster/utils.js - - - -async function initRoster() { - // Initialize the Bakcbone collections that represent the contats - // roster and the roster groups. - await api.waitUntil('VCardsInitialized'); - shared_converse.roster = new shared_converse.RosterContacts(); - let id = "converse.contacts-".concat(shared_converse.bare_jid); - initStorage(shared_converse.roster, id); - shared_converse.roster.data = new Model(); - id = "converse-roster-model-".concat(shared_converse.bare_jid); - shared_converse.roster.data.id = id; - initStorage(shared_converse.roster.data, id); - - shared_converse.roster.data.fetch(); - /** - * Triggered once the `_converse.RosterContacts` - * been created, but not yet populated with data. - * This event is useful when you want to create views for these collections. - * @event _converse#chatBoxMaximized - * @example _converse.api.listen.on('rosterInitialized', () => { ... }); - * @example _converse.api.waitUntil('rosterInitialized').then(() => { ... }); - */ - - - api.trigger('rosterInitialized'); -} -function updateUnreadCounter(chatbox) { - const contact = shared_converse.roster && shared_converse.roster.findWhere({ - 'jid': chatbox.get('jid') - }); - - if (contact !== undefined) { - contact.save({ - 'num_unread': chatbox.get('num_unread') - }); - } -} -async function clearPresences() { - var _converse$presences; - - await ((_converse$presences = shared_converse.presences) === null || _converse$presences === void 0 ? void 0 : _converse$presences.clearStore()); -} -function contactsComparator(contact1, contact2) { - const status1 = contact1.presence.get('show') || 'offline'; - const status2 = contact2.presence.get('show') || 'offline'; - - if (shared_converse.STATUS_WEIGHTS[status1] === shared_converse.STATUS_WEIGHTS[status2]) { - const name1 = contact1.getDisplayName().toLowerCase(); - const name2 = contact2.getDisplayName().toLowerCase(); - return name1 < name2 ? -1 : name1 > name2 ? 1 : 0; - } else { - return shared_converse.STATUS_WEIGHTS[status1] < shared_converse.STATUS_WEIGHTS[status2] ? -1 : 1; - } -} -function groupsComparator(a, b) { - const HEADER_WEIGHTS = {}; - HEADER_WEIGHTS[shared_converse.HEADER_UNREAD] = 0; - HEADER_WEIGHTS[shared_converse.HEADER_REQUESTING_CONTACTS] = 1; - HEADER_WEIGHTS[shared_converse.HEADER_CURRENT_CONTACTS] = 2; - HEADER_WEIGHTS[shared_converse.HEADER_UNGROUPED] = 3; - HEADER_WEIGHTS[shared_converse.HEADER_PENDING_CONTACTS] = 4; - const WEIGHTS = HEADER_WEIGHTS; - const special_groups = Object.keys(HEADER_WEIGHTS); - const a_is_special = special_groups.includes(a); - const b_is_special = special_groups.includes(b); - - if (!a_is_special && !b_is_special) { - return a.toLowerCase() < b.toLowerCase() ? -1 : a.toLowerCase() > b.toLowerCase() ? 1 : 0; - } else if (a_is_special && b_is_special) { - return WEIGHTS[a] < WEIGHTS[b] ? -1 : WEIGHTS[a] > WEIGHTS[b] ? 1 : 0; - } else if (!a_is_special && b_is_special) { - const a_header = shared_converse.HEADER_CURRENT_CONTACTS; - return WEIGHTS[a_header] < WEIGHTS[b] ? -1 : WEIGHTS[a_header] > WEIGHTS[b] ? 1 : 0; - } else if (a_is_special && !b_is_special) { - const b_header = shared_converse.HEADER_CURRENT_CONTACTS; - return WEIGHTS[a] < WEIGHTS[b_header] ? -1 : WEIGHTS[a] > WEIGHTS[b_header] ? 1 : 0; - } -} ;// CONCATENATED MODULE: ./src/headless/plugins/roster/index.js /** * @copyright The Converse.js contributors @@ -36927,19 +39910,10 @@ function groupsComparator(a, b) { - - - -const { - $pres: roster_$pres -} = core_converse.env; core_converse.plugins.add('converse-roster', { dependencies: ['converse-status'], initialize() { - /* The initialize function gets called as soon as the plugin is - * loaded by converse.js's plugin machinery. - */ api.settings.extend({ 'allow_contact_requests': true, 'auto_subscribe': false, @@ -36953,173 +39927,17 @@ core_converse.plugins.add('converse-roster', { shared_converse.HEADER_REQUESTING_CONTACTS = __('Contact requests'); shared_converse.HEADER_UNGROUPED = __('Ungrouped'); shared_converse.HEADER_UNREAD = __('New messages'); - - shared_converse.registerPresenceHandler = function () { - shared_converse.unregisterPresenceHandler(); - - shared_converse.presence_ref = shared_converse.connection.addHandler(presence => { - shared_converse.roster.presenceHandler(presence); - - return true; - }, null, 'presence', null); - }; - /** - * Reject or cancel another user's subscription to our presence updates. - * @method rejectPresenceSubscription - * @private - * @memberOf _converse - * @param { String } jid - The Jabber ID of the user whose subscription is being canceled - * @param { String } message - An optional message to the user - */ - - - shared_converse.rejectPresenceSubscription = function (jid, message) { - const pres = roster_$pres({ - to: jid, - type: "unsubscribed" - }); - - if (message && message !== "") { - pres.c("status").t(message); - } - - api.send(pres); - }; - - shared_converse.sendInitialPresence = function () { - if (shared_converse.send_initial_presence) { - api.user.presence.send(); - } - }; - /** - * Fetch all the roster groups, and then the roster contacts. - * Emit an event after fetching is done in each case. - * @private - * @method _converse.populateRoster - * @param { Bool } ignore_cache - If set to to true, the local cache - * will be ignored it's guaranteed that the XMPP server - * will be queried for the roster. - */ - - - shared_converse.populateRoster = async function (ignore_cache = false) { - if (ignore_cache) { - shared_converse.send_initial_presence = true; - } - - try { - await shared_converse.roster.fetchRosterContacts(); - api.trigger('rosterContactsFetched'); - } catch (reason) { - headless_log.error(reason); - } finally { - shared_converse.sendInitialPresence(); - } - }; - shared_converse.Presence = Presence; shared_converse.Presences = Presences; shared_converse.RosterContact = contact; shared_converse.RosterContacts = contacts; - - shared_converse.unregisterPresenceHandler = function () { - if (shared_converse.presence_ref !== undefined) { - shared_converse.connection.deleteHandler(shared_converse.presence_ref); - - delete shared_converse.presence_ref; - } - }; - /******************** Event Handlers ********************/ - - - api.listen.on('chatBoxesInitialized', () => { - shared_converse.chatboxes.on('change:num_unread', updateUnreadCounter); - - shared_converse.chatboxes.on('add', chatbox => { - if (chatbox.get('type') === shared_converse.PRIVATE_CHAT_TYPE) { - chatbox.setRosterContact(chatbox.get('jid')); - } - }); - }); - api.listen.on('beforeTearDown', () => shared_converse.unregisterPresenceHandler()); - api.waitUntil('rosterContactsFetched').then(() => { - shared_converse.roster.on('add', contact => { - /* When a new contact is added, check if we already have a - * chatbox open for it, and if so attach it to the chatbox. - */ - const chatbox = shared_converse.chatboxes.findWhere({ - 'jid': contact.get('jid') - }); - - if (chatbox) { - chatbox.setRosterContact(contact.get('jid')); - } - }); - }); + api.listen.on('beforeTearDown', () => unregisterPresenceHandler()); + api.listen.on('chatBoxesInitialized', onChatBoxesInitialized); + api.listen.on('clearSession', utils_onClearSession); + api.listen.on('presencesInitialized', onPresencesInitialized); + api.listen.on('statusInitialized', roster_utils_onStatusInitialized); api.listen.on('streamResumptionFailed', () => shared_converse.session.set('roster_cached', false)); - api.listen.on('clearSession', async () => { - await clearPresences(); - - if (shared_converse.shouldClearCache()) { - if (shared_converse.rostergroups) { - await shared_converse.rostergroups.clearStore(); - delete shared_converse.rostergroups; - } - - if (shared_converse.roster) { - lodash_es_invoke(shared_converse, 'roster.data.destroy'); - await shared_converse.roster.clearStore(); - delete shared_converse.roster; - } - } - }); - api.listen.on('statusInitialized', async reconnecting => { - if (reconnecting) { - // When reconnecting and not resuming a previous session, - // we clear all cached presence data, since it might be stale - // and we'll receive new presence updates - !shared_converse.connection.hasResumed() && (await clearPresences()); - } else { - shared_converse.presences = new shared_converse.Presences(); - const id = "converse.presences-".concat(shared_converse.bare_jid); - initStorage(shared_converse.presences, id, 'session'); // We might be continuing an existing session, so we fetch - // cached presence data. - - shared_converse.presences.fetch(); - } - /** - * Triggered once the _converse.Presences collection has been - * initialized and its cached data fetched. - * Returns a boolean indicating whether this event has fired due to - * Converse having reconnected. - * @event _converse#presencesInitialized - * @type { bool } - * @example _converse.api.listen.on('presencesInitialized', reconnecting => { ... }); - */ - - - api.trigger('presencesInitialized', reconnecting); - }); - api.listen.on('presencesInitialized', async reconnecting => { - if (reconnecting) { - /** - * Similar to `rosterInitialized`, but instead pertaining to reconnection. - * This event indicates that the roster and its groups are now again - * available after Converse.js has reconnected. - * @event _converse#rosterReadyAfterReconnection - * @example _converse.api.listen.on('rosterReadyAfterReconnection', () => { ... }); - */ - api.trigger('rosterReadyAfterReconnection'); - } else { - await initRoster(); - } - - shared_converse.roster.onConnected(); - - shared_converse.registerPresenceHandler(); - - shared_converse.populateRoster(!shared_converse.connection.restored); - }); + api.waitUntil('rosterContactsFetched').then(onRosterContactsFetched); } }); @@ -37152,14 +39970,14 @@ function handleAck(el) { const delta = handled - last_known_handled; if (delta < 0) { - const err_msg = "New reported stanza count lower than previous. " + "New: ".concat(handled, " - Previous: ").concat(last_known_handled); + const err_msg = `New reported stanza count lower than previous. ` + `New: ${handled} - Previous: ${last_known_handled}`; headless_log.error(err_msg); } const unacked_stanzas = shared_converse.session.get('unacked_stanzas'); if (delta > unacked_stanzas.length) { - const err_msg = "Higher reported acknowledge count than unacknowledged stanzas. " + "Reported Acknowledged Count: ".concat(delta, " -") + "Unacknowledged Stanza Count: ".concat(unacked_stanzas.length, " -") + "New: ".concat(handled, " - Previous: ").concat(last_known_handled); + const err_msg = `Higher reported acknowledge count than unacknowledged stanzas. ` + `Reported Acknowledged Count: ${delta} -` + `Unacknowledged Stanza Count: ${unacked_stanzas.length} -` + `New: ${handled} - Previous: ${last_known_handled}`; headless_log.error(err_msg); } @@ -37176,7 +39994,7 @@ function sendAck() { if (shared_converse.session.get('smacks_enabled')) { const h = shared_converse.session.get('num_stanzas_handled'); - const stanza = smacks_utils_u.toStanza("")); + const stanza = smacks_utils_u.toStanza(``); api.send(stanza); } @@ -37206,7 +40024,9 @@ function initSessionData() { } function resetSessionData() { - shared_converse.session && shared_converse.session.save({ + var _converse$session; + + (_converse$session = shared_converse.session) === null || _converse$session === void 0 ? void 0 : _converse$session.save({ 'smacks_enabled': false, 'num_stanzas_handled': 0, 'num_stanzas_handled_by_server': 0, @@ -37302,7 +40122,7 @@ async function sendResumeStanza() { const h = shared_converse.session.get('num_stanzas_handled'); - const stanza = smacks_utils_u.toStanza("")); + const stanza = smacks_utils_u.toStanza(``); api.send(stanza); shared_converse.connection.flush(); @@ -37324,7 +40144,7 @@ async function sendEnableStanza() { const resume = api.connection.isType('websocket') || shared_converse.isTestEnv(); - const stanza = smacks_utils_u.toStanza("")); + const stanza = smacks_utils_u.toStanza(``); api.send(stanza); shared_converse.connection.flush(); @@ -37334,6 +40154,8 @@ async function sendEnableStanza() { } const smacks_handlers = []; async function enableStreamManagement() { + var _converse$session2; + if (!api.settings.get('enable_smacks')) { return; } @@ -37352,7 +40174,7 @@ async function enableStreamManagement() { smacks_handlers.push(conn.addHandler(sendAck, smacks_utils_Strophe.NS.SM, 'r')); smacks_handlers.push(conn.addHandler(handleAck, smacks_utils_Strophe.NS.SM, 'a')); - if (shared_converse.session.get('smacks_stream_id')) { + if ((_converse$session2 = shared_converse.session) !== null && _converse$session2 !== void 0 && _converse$session2.get('smacks_stream_id')) { await sendResumeStanza(); } else { resetSessionData(); @@ -37380,7 +40202,7 @@ function onStanzaSent(stanza) { if (num % max_unacked === 0) { // Request confirmation of sent stanzas - api.send(smacks_utils_u.toStanza(""))); + api.send(smacks_utils_u.toStanza(``)); } shared_converse.session.save({ @@ -37653,7 +40475,7 @@ core_converse.plugins.add('converse-vcard', { jid }); } else { - headless_log.error("Could not assign VCard for message because no JID found! msgid: ".concat(message.get('msgid'))); + headless_log.error(`Could not assign VCard for message because no JID found! msgid: ${message.get('msgid')}`); return; } } @@ -37671,7 +40493,7 @@ core_converse.plugins.add('converse-vcard', { shared_converse.initVCardCollection = async function () { shared_converse.vcards = new shared_converse.VCards(); - const id = "".concat(shared_converse.bare_jid, "-converse.vcards"); + const id = `${shared_converse.bare_jid}-converse.vcards`; initStorage(shared_converse.vcards, id); await new Promise(resolve => { shared_converse.vcards.fetch({ @@ -37746,14 +40568,14 @@ core_converse.plugins.add('converse-vcard', { * @param {string} jid The JID for which the VCard should be set * @param {object} data A map of VCard keys and values * @example - * _converse.api.vcard.set({ - * 'jid': _converse.bare_jid, + * let jid = _converse.bare_jid; + * _converse.api.vcard.set( jid, { * 'fn': 'John Doe', * 'nickname': 'jdoe' * }).then(() => { * // Succes - * }).catch(() => { - * // Failure + * }).catch((e) => { + * // Failure, e is your error object * }). */ async set(jid, data) { @@ -37762,7 +40584,18 @@ core_converse.plugins.add('converse-vcard', { } const div = document.createElement('div'); - const vcard_el = vcard_u.toStanza("\n \n ".concat(data.fn, "\n ").concat(data.nickname, "\n ").concat(data.url, "\n ").concat(data.role, "\n ").concat(data.email, "\n \n ").concat(data.image_type, "\n ").concat(data.image, "\n \n "), div); + const vcard_el = vcard_u.toStanza(` + + ${data.fn} + ${data.nickname} + ${data.url} + ${data.role} + ${data.email} + + ${data.image_type} + ${data.image} + + `, div); let result; try { @@ -37834,7 +40667,7 @@ core_converse.plugins.add('converse-vcard', { }) : model; if (!model) { - headless_log.error("Could not find a VCard model for ".concat(model)); + headless_log.error(`Could not find a VCard model for ${model}`); return; } @@ -37909,21 +40742,90 @@ api.elements = { define: registry_define, register }; -// EXTERNAL MODULE: ./src/shared/styles/index.scss -var styles = __webpack_require__(6353); -;// CONCATENATED MODULE: ./src/plugins/bookmark-views/templates/form.js -function form_templateObject() { - const data = form_taggedTemplateLiteral(["\n
\n ", "\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n "]); +;// CONCATENATED MODULE: ./src/shared/components/element.js - form_templateObject = function () { - return data; - }; - return data; +class CustomElement extends lit_element_h { + constructor() { + super(); + Object.assign(this, Events); + } + + createRenderRoot() { + // Render without the shadow DOM + return this; + } + + connectedCallback() { + var _this$initialize; + + super.connectedCallback(); + (_this$initialize = this.initialize) === null || _this$initialize === void 0 ? void 0 : _this$initialize.call(this); + } + + disconnectedCallback() { + super.disconnectedCallback(); + this.stopListening(); + } + } +;// CONCATENATED MODULE: ./src/shared/constants.js +// These are all the view-layer plugins. +// +// For the full Converse build, this list serves +// as a whitelist (see src/converse.js) in addition to the +// CORE_PLUGINS list in src/headless/consts.js. +const VIEW_PLUGINS = ['converse-bookmark-views', 'converse-chatboxviews', 'converse-chatview', 'converse-controlbox', 'converse-dragresize', 'converse-fullscreen', 'converse-headlines-view', 'converse-mam-views', 'converse-minimize', 'converse-modal', 'converse-muc-views', 'converse-notification', 'converse-omemo', 'converse-profile', 'converse-push', 'converse-register', 'converse-roomslist', 'converse-rootview', 'converse-rosterview', 'converse-singleton']; +// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js +var injectStylesIntoStyleTag = __webpack_require__(3379); +var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag); +// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js +var styleDomAPI = __webpack_require__(7795); +var styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI); +// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js +var insertBySelector = __webpack_require__(569); +var insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector); +// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js +var setAttributesWithoutAttributes = __webpack_require__(3565); +var setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes); +// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js +var insertStyleElement = __webpack_require__(609); +var insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement); +// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js +var styleTagTransform = __webpack_require__(4589); +var styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/styles/index.scss +var styles = __webpack_require__(4452); +;// CONCATENATED MODULE: ./src/shared/styles/index.scss -function form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + + + + + + + + + +var options = {}; + +options.styleTagTransform = (styleTagTransform_default()); +options.setAttributes = (setAttributesWithoutAttributes_default()); + + options.insert = insertBySelector_default().bind(null, "head"); + +options.domAPI = (styleDomAPI_default()); +options.insertStyleElement = (insertStyleElement_default()); + +var update = injectStylesIntoStyleTag_default()(styles/* default */.Z, options); + + + + + /* harmony default export */ const shared_styles = (styles/* default */.Z && styles/* default.locals */.Z.locals ? styles/* default.locals */.Z.locals : undefined); + +;// CONCATENATED MODULE: ./src/plugins/bookmark-views/templates/form.js /* harmony default export */ const templates_form = (o => { @@ -37939,28 +40841,28 @@ function form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.sl const i18n_submit = __('Save'); - return T(form_templateObject(), o.onSubmit, i18n_heading, i18n_name, o.name, i18n_nick, o.nick || '', i18n_autojoin, i18n_submit, i18n_cancel, o.onCancel); + return T` +
+ ${i18n_heading} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ `; }); -;// CONCATENATED MODULE: ./src/shared/components/element.js - - -class CustomElement extends lit_element_h { - constructor() { - super(); - Object.assign(this, Events); - } - - createRenderRoot() { - // Render without the shadow DOM - return this; - } - - disconnectedCallback() { - super.disconnectedCallback(); - this.stopListening(); - } - -} ;// CONCATENATED MODULE: ./src/plugins/bookmark-views/form.js @@ -38061,7 +40963,7 @@ var invokeMap = _baseRest(function(collection, path, args) { function getHeadingButtons(view, buttons) { - if (shared_converse.allow_bookmarks && view.model.get('type') === shared_converse.CHATROOMS_TYPE) { + if (api.settings.get('allow_bookmarks') && view.model.get('type') === shared_converse.CHATROOMS_TYPE) { const bookmarked = view.model.get('bookmarked'); const data = { 'i18n_title': bookmarked ? __('Unbookmark this groupchat') : __('Bookmark this groupchat'), @@ -38111,18 +41013,6 @@ function openRoomViaEvent(ev) { api.rooms.open(jid, data, true); } ;// CONCATENATED MODULE: ./src/plugins/bookmark-views/templates/item.js -function item_templateObject() { - const data = item_taggedTemplateLiteral(["\n
\n ", "\n\n \n
\n "]); - - item_templateObject = function () { - return data; - }; - - return data; -} - -function item_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -38135,21 +41025,21 @@ function item_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.sl const open_title = __('Click to open this groupchat'); - return T(item_templateObject(), is_hidden ? 'hidden' : '', jid, jid, open_title, openRoomViaEvent, o.bm.getDisplayName(), o.bm.get('bookmarked') ? 'button-on' : '', jid, o.bm.getDisplayName(), info_remove_bookmark, removeBookmarkViaEvent); + return T` + + `; }); ;// CONCATENATED MODULE: ./src/plugins/bookmark-views/templates/list.js -function list_templateObject() { - const data = list_taggedTemplateLiteral(["\n
\n \n\n \n ", "\n
\n ", "\n
\n
\n "]); - - list_templateObject = function () { - return data; - }; - - return data; -} - -function list_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -38161,9 +41051,21 @@ function list_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.sl const label_bookmarks = __('Bookmarks'); - return T(list_templateObject(), !is_collapsed && 'hidden' || '', desc_bookmarks, o.toggleBookmarksList, o.toggle_state === shared_converse.OPENED ? 'fa-caret-down' : 'fa-caret-right', label_bookmarks, o.toggle_state !== shared_converse.OPENED ? 'hidden' : '', shared_converse.bookmarks.map(bm => item(Object.assign({ + return T` +
+ + + + ${label_bookmarks} +
+ ${shared_converse.bookmarks.map(bm => item(Object.assign({ bm - }, o)))); + }, o)))} +
+
+ `; }); ;// CONCATENATED MODULE: ./node_modules/@converse/skeletor/src/element.js function element_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -38392,7 +41294,7 @@ class BookmarksView extends ElementView { this.listenTo(shared_converse.bookmarks, 'remove', this.render); this.listenTo(shared_converse.chatboxes, 'add', this.render); this.listenTo(shared_converse.chatboxes, 'remove', this.render); - const id = "converse.bookmarks-list-model-".concat(shared_converse.bare_jid); + const id = `converse.bookmarks-list-model-${shared_converse.bare_jid}`; this.model = new shared_converse.BookmarksList({ id }); @@ -38414,10 +41316,9 @@ class BookmarksView extends ElementView { } toggleBookmarksList(ev) { - if (ev && ev.preventDefault) { - ev.preventDefault(); - } + var _ev$preventDefault; + ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); const icon_el = ev.target.matches('.fa') ? ev.target : ev.target.querySelector('.fa'); if (bookmarks_list_u.hasClass('fa-caret-down', icon_el)) { @@ -38491,8 +41392,37 @@ const bookmarkableChatRoomView = { } }; -// EXTERNAL MODULE: ./src/plugins/bookmark-views/styles/bookmarks.scss -var bookmarks = __webpack_require__(5561); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/bookmark-views/styles/bookmarks.scss +var bookmarks = __webpack_require__(3742); +;// CONCATENATED MODULE: ./src/plugins/bookmark-views/styles/bookmarks.scss + + + + + + + + + + + +var bookmarks_options = {}; + +bookmarks_options.styleTagTransform = (styleTagTransform_default()); +bookmarks_options.setAttributes = (setAttributesWithoutAttributes_default()); + + bookmarks_options.insert = insertBySelector_default().bind(null, "head"); + +bookmarks_options.domAPI = (styleDomAPI_default()); +bookmarks_options.insertStyleElement = (insertStyleElement_default()); + +var bookmarks_update = injectStylesIntoStyleTag_default()(bookmarks/* default */.Z, bookmarks_options); + + + + + /* harmony default export */ const styles_bookmarks = (bookmarks/* default */.Z && bookmarks/* default.locals */.Z.locals ? bookmarks/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/bookmark-views/index.js /** * @description Converse.js plugin which adds views for XEP-0048 bookmarks @@ -38536,20 +41466,55 @@ core_converse.plugins.add('converse-bookmark-views', { }); ;// CONCATENATED MODULE: ./src/templates/background_logo.js -function background_logo_templateObject() { - const data = background_logo_taggedTemplateLiteral(["\n
\n
\n
\n \n Logo Converse\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n converse.js\n

messaging freedom

\n
\n
\n
"]); - - background_logo_templateObject = function () { - return data; - }; - - return data; -} - -function background_logo_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } -/* harmony default export */ const background_logo = (() => T(background_logo_templateObject())); +/* harmony default export */ const background_logo = (() => T` +
+
+
+ + Logo Converse + + + + + + + + + + + + + + + + + + + + + + + + + + + + converse.js + + +
+ ${api.settings.get('view_mode') === 'overlayed' ? T`
` : ''} +
`); ;// CONCATENATED MODULE: ./node_modules/lit-html/directive.js /** * @license @@ -38755,78 +41720,6 @@ const repeat_u = (e, s, t) => { //# sourceMappingURL=repeat.js.map ;// CONCATENATED MODULE: ./src/plugins/chatboxviews/templates/chats.js -function _templateObject7() { - const data = chats_taggedTemplateLiteral(["\n \n "]); - - _templateObject7 = function () { - return data; - }; - - return data; -} - -function _templateObject6() { - const data = chats_taggedTemplateLiteral(["\n \n "]); - - _templateObject6 = function () { - return data; - }; - - return data; -} - -function _templateObject5() { - const data = chats_taggedTemplateLiteral(["\n \n "]); - - _templateObject5 = function () { - return data; - }; - - return data; -} - -function _templateObject4() { - const data = chats_taggedTemplateLiteral([""]); - - _templateObject4 = function () { - return data; - }; - - return data; -} - -function chats_templateObject3() { - const data = chats_taggedTemplateLiteral(["\n ", "\n \n "]); - - chats_templateObject3 = function () { - return data; - }; - - return data; -} - -function chats_templateObject2() { - const data = chats_taggedTemplateLiteral([""]); - - chats_templateObject2 = function () { - return data; - }; - - return data; -} - -function chats_templateObject() { - const data = chats_taggedTemplateLiteral(["\n ", "\n ", "\n "]); - - chats_templateObject = function () { - return data; - }; - - return data; -} - -function chats_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -38835,7 +41728,8 @@ function shouldShowChat(c) { const { CONTROLBOX_TYPE } = shared_converse; - return c.get('type') === CONTROLBOX_TYPE || !(c.get('hidden') || c.get('minimized')); + const is_minimized = api.settings.get('view_mode') === 'overlayed' && c.get('minimized'); + return c.get('type') === CONTROLBOX_TYPE || !(c.get('hidden') || is_minimized); } /* harmony default export */ const chats = (() => { @@ -38847,18 +41741,33 @@ function shouldShowChat(c) { } = shared_converse; const view_mode = api.settings.get('view_mode'); const connection = shared_converse === null || shared_converse === void 0 ? void 0 : shared_converse.connection; - const logged_out = !(connection === null || connection === void 0 ? void 0 : connection.connected) || !(connection === null || connection === void 0 ? void 0 : connection.authenticated) || (connection === null || connection === void 0 ? void 0 : connection.disconnecting); - return T(chats_templateObject(), view_mode === 'overlayed' ? T(chats_templateObject2()) : '', repeat_c(chatboxes.filter(shouldShowChat), m => m.get('jid'), m => { + const logged_out = !(connection !== null && connection !== void 0 && connection.connected) || !(connection !== null && connection !== void 0 && connection.authenticated) || (connection === null || connection === void 0 ? void 0 : connection.disconnecting); + return T` + ${!logged_out && view_mode === 'overlayed' ? T`` : ''} + ${repeat_c(chatboxes.filter(shouldShowChat), m => m.get('jid'), m => { if (m.get('type') === CONTROLBOX_TYPE) { - return T(chats_templateObject3(), view_mode === 'overlayed' ? T(_templateObject4(), !m.get('closed') ? 'hidden' : '') : '', m.get('closed') ? 'hidden' : '', logged_out ? 'logged-out' : '', m.get('width') ? "width: ".concat(m.get('width')) : ''); + return T` + ${view_mode === 'overlayed' ? T`` : ''} + + `; } else if (m.get('type') === CHATROOMS_TYPE) { - return T(_templateObject5(), m.get('jid')); + return T` + + `; } else if (m.get('type') === HEADLINES_TYPE) { - return T(_templateObject6(), m.get('jid')); + return T` + + `; } else { - return T(_templateObject7(), m.get('jid')); + return T` + + `; } - })); + })} + `; }); ;// CONCATENATED MODULE: ./src/plugins/chatboxviews/view.js @@ -38867,20 +41776,24 @@ function shouldShowChat(c) { -class ConverseChats extends ElementView { + +class ConverseChats extends CustomElement { initialize() { this.model = shared_converse.chatboxes; - this.listenTo(this.model, 'add', this.render); - this.listenTo(this.model, 'change:closed', this.render); - this.listenTo(this.model, 'change:hidden', this.render); - this.listenTo(this.model, 'change:jid', this.render); - this.listenTo(this.model, 'change:minimized', this.render); - this.listenTo(this.model, 'destroy', this.render); // Use listenTo instead of api.listen.to so that event handlers + this.listenTo(this.model, 'add', () => this.requestUpdate()); + this.listenTo(this.model, 'change:closed', () => this.requestUpdate()); + this.listenTo(this.model, 'change:hidden', () => this.requestUpdate()); + this.listenTo(this.model, 'change:jid', () => this.requestUpdate()); + this.listenTo(this.model, 'change:minimized', () => this.requestUpdate()); + this.listenTo(this.model, 'destroy', () => this.requestUpdate()); // Use listenTo instead of api.listen.to so that event handlers // automatically get deregistered when the component is dismounted - this.listenTo(shared_converse, 'connected', this.render); - this.listenTo(shared_converse, 'reconnected', this.render); - this.listenTo(shared_converse, 'disconnected', this.render); + this.listenTo(shared_converse, 'connected', () => this.requestUpdate()); + this.listenTo(shared_converse, 'reconnected', () => this.requestUpdate()); + this.listenTo(shared_converse, 'disconnected', () => this.requestUpdate()); + const settings = getAppSettings(); + this.listenTo(settings, 'change:view_mode', () => this.requestUpdate()); + this.listenTo(settings, 'change:singleton', () => this.requestUpdate()); const bg = document.getElementById('conversejs-bg'); if (bg && !bg.innerHTML.trim()) { @@ -38888,8 +41801,7 @@ class ConverseChats extends ElementView { } const body = document.querySelector('body'); - body.classList.add("converse-".concat(api.settings.get('view_mode'))); - this.render(); + body.classList.add(`converse-${api.settings.get('view_mode')}`); /** * Triggered once the _converse.ChatBoxViews view-colleciton has been initialized * @event _converse#chatBoxViewsInitialized @@ -38900,7 +41812,8 @@ class ConverseChats extends ElementView { } render() { - V(chats(), this); + // eslint-disable-line class-methods-use-this + return chats(); } } @@ -38920,6 +41833,13 @@ class ChatBoxViews { return this.views[key]; } + xget(id) { + return this.keys().filter(k => k !== id).reduce((acc, k) => { + acc[k] = this.views[k]; + return acc; + }, {}); + } + getAll() { return Object.values(this.views); } @@ -38954,27 +41874,18 @@ class ChatBoxViews { /* harmony default export */ const container = (ChatBoxViews); ;// CONCATENATED MODULE: ./src/shared/templates/avatar.js -function avatar_templateObject() { - const data = avatar_taggedTemplateLiteral(["\n \n \n "]); - - avatar_templateObject = function () { - return data; - }; - - return data; -} - -function avatar_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - const getImgHref = (image, image_type) => { - return image.startsWith('data:') ? image : "data:".concat(image_type, ";base64,").concat(image); + return image.startsWith('data:') ? image : `data:${image_type};base64,${image}`; }; /* harmony default export */ const avatar = (o => { if (o.image) { - return T(avatar_templateObject(), o.classes, o.width, o.height, o.width, o.height, getImgHref(o.image, o.image_type)); + return T` + + + `; } else { return ''; } @@ -39262,9 +42173,7 @@ Object.assign(View.prototype, Events, { const avatar_u = core_converse.env.utils; const AvatarMixin = { renderAvatar(el) { - var _this$el; - - el = el || ((_this$el = this === null || this === void 0 ? void 0 : this.el) !== null && _this$el !== void 0 ? _this$el : this); + el = el || ((this === null || this === void 0 ? void 0 : this.el) ?? this); const avatar_el = el.querySelector('canvas.avatar, svg.avatar'); if (avatar_el === null) { @@ -39294,10 +42203,39 @@ class ElementViewWithAvatar extends ElementView { ;// CONCATENATED MODULE: ./src/plugins/chatboxviews/utils.js function calculateViewportHeightUnit() { const vh = window.innerHeight * 0.01; - document.documentElement.style.setProperty('--vh', "".concat(vh, "px")); + document.documentElement.style.setProperty('--vh', `${vh}px`); } -// EXTERNAL MODULE: ./src/plugins/chatboxviews/styles/chats.scss -var styles_chats = __webpack_require__(4410); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/chatboxviews/styles/chats.scss +var styles_chats = __webpack_require__(7904); +;// CONCATENATED MODULE: ./src/plugins/chatboxviews/styles/chats.scss + + + + + + + + + + + +var chats_options = {}; + +chats_options.styleTagTransform = (styleTagTransform_default()); +chats_options.setAttributes = (setAttributesWithoutAttributes_default()); + + chats_options.insert = insertBySelector_default().bind(null, "head"); + +chats_options.domAPI = (styleDomAPI_default()); +chats_options.insertStyleElement = (insertStyleElement_default()); + +var chats_update = injectStylesIntoStyleTag_default()(styles_chats/* default */.Z, chats_options); + + + + + /* harmony default export */ const chatboxviews_styles_chats = (styles_chats/* default */.Z && styles_chats/* default.locals */.Z.locals ? styles_chats/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/chatboxviews/index.js /** * @module converse-chatboxviews @@ -39315,10 +42253,6 @@ core_converse.plugins.add('converse-chatboxviews', { dependencies: ['converse-chatboxes', 'converse-vcard'], initialize() { - /* The initialize function gets called as soon as the plugin is - * loaded by converse.js's plugin machinery. - */ - api.elements.register(); api.promises.add(['chatBoxViewsInitialized']); // Configuration values for this plugin // ==================================== // Refer to docs/source/configuration.rst for explanations of these @@ -39361,7 +42295,6 @@ core_converse.plugins.add('converse-chatboxviews', { if (el && !container.contains(el)) { container.insertAdjacentElement('afterBegin', el); - api.chatviews.get().filter(v => v.model.get('id') !== 'controlbox').forEach(v => v.maintainScrollTop()); } else if (!el) { throw new Error('Cannot insert non-existing #conversejs element into the DOM'); } @@ -39375,23 +42308,40 @@ core_converse.plugins.add('converse-chatboxviews', { var bootstrap_native = __webpack_require__(2919); var bootstrap_native_default = /*#__PURE__*/__webpack_require__.n(bootstrap_native); ;// CONCATENATED MODULE: ./src/templates/alert.js -function alert_templateObject() { - const data = alert_taggedTemplateLiteral(["

", "

"]); - alert_templateObject = function () { - return data; - }; +/* harmony default export */ const templates_alert = (o => T``); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/modal/styles/_modal.scss +var _modal = __webpack_require__(9924); +;// CONCATENATED MODULE: ./src/plugins/modal/styles/_modal.scss - return data; -} + + + + + + + + + -function alert_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +var _modal_options = {}; + +_modal_options.styleTagTransform = (styleTagTransform_default()); +_modal_options.setAttributes = (setAttributesWithoutAttributes_default()); + + _modal_options.insert = insertBySelector_default().bind(null, "head"); + +_modal_options.domAPI = (styleDomAPI_default()); +_modal_options.insertStyleElement = (insertStyleElement_default()); + +var _modal_update = injectStylesIntoStyleTag_default()(_modal/* default */.Z, _modal_options); -/* harmony default export */ const templates_alert = (o => T(alert_templateObject(), o.type, o.message)); -// EXTERNAL MODULE: ./src/modals/styles/_modal.scss -var _modal = __webpack_require__(552); -;// CONCATENATED MODULE: ./src/modals/base.js + + + /* harmony default export */ const styles_modal = (_modal/* default */.Z && _modal/* default.locals */.Z.locals ? _modal/* default.locals */.Z.locals : undefined); + +;// CONCATENATED MODULE: ./src/plugins/modal/base.js @@ -39465,7 +42415,7 @@ const BaseModal = View.extend({ V(templates_alert({ - 'type': "alert-".concat(type), + 'type': `alert-${type}`, 'message': message }), body); const el = body.firstElementChild; @@ -39487,60 +42437,28 @@ const BaseModal = View.extend({ }); /* harmony default export */ const base = (BaseModal); -;// CONCATENATED MODULE: ./src/modals/templates/buttons.js -function buttons_templateObject2() { - const data = buttons_taggedTemplateLiteral([""]); - - buttons_templateObject2 = function () { - return data; - }; - - return data; -} - -function buttons_templateObject() { - const data = buttons_taggedTemplateLiteral([""]); - - buttons_templateObject = function () { - return data; - }; - - return data; -} - -function buttons_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +;// CONCATENATED MODULE: ./src/plugins/modal/templates/buttons.js - -const modal_close_button = T(buttons_templateObject(), __('Close')); -const modal_header_close_button = T(buttons_templateObject2(), __('Close')); -;// CONCATENATED MODULE: ./src/modals/templates/alert.js -function alert_templateObject2() { - const data = templates_alert_taggedTemplateLiteral(["

", "

"]); - - alert_templateObject2 = function () { - return data; - }; - - return data; -} - -function templates_alert_templateObject() { - const data = templates_alert_taggedTemplateLiteral(["\n
\n
\n
\n
", "
\n ", "\n
\n
\n \n ", "\n
\n
\n
\n"]); - - templates_alert_templateObject = function () { - return data; - }; - - return data; -} - -function templates_alert_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +const modal_close_button = T``; +const modal_header_close_button = T``; +;// CONCATENATED MODULE: ./src/plugins/modal/templates/alert.js - -/* harmony default export */ const modals_templates_alert = (o => T(templates_alert_templateObject(), o.level, o.title, modal_header_close_button, o.messages.map(message => T(alert_templateObject2(), message)))); -;// CONCATENATED MODULE: ./src/modals/alert.js +/* harmony default export */ const modal_templates_alert = (o => T` + `); +;// CONCATENATED MODULE: ./src/plugins/modal/alert.js @@ -39553,53 +42471,56 @@ const Alert = base.extend({ }, toHTML() { - return modals_templates_alert(Object.assign({ + return modal_templates_alert(Object.assign({ __: __ }, this.model.toJSON())); } }); -/* harmony default export */ const modals_alert = (Alert); -;// CONCATENATED MODULE: ./src/modals/templates/prompt.js -function prompt_templateObject3() { - const data = prompt_taggedTemplateLiteral(["

", "

"]); - - prompt_templateObject3 = function () { - return data; - }; - - return data; -} - -function prompt_templateObject2() { - const data = prompt_taggedTemplateLiteral(["\n
\n
\n
\n
", "
\n \n
\n
\n \n
\n
\n ", "\n
\n ", "\n
\n \n \n
\n
\n
\n
\n
\n"]); - - prompt_templateObject2 = function () { - return data; - }; - - return data; -} - -function prompt_templateObject() { - const data = prompt_taggedTemplateLiteral(["\n
\n \n
\n"]); - - prompt_templateObject = function () { - return data; - }; - - return data; -} - -function prompt_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +/* harmony default export */ const modal_alert = (Alert); +;// CONCATENATED MODULE: ./src/plugins/modal/templates/prompt.js +const tpl_field = f => T` +
+ +
+`; -const tpl_field = f => T(prompt_templateObject(), f.label || '', f.name, f.challenge_failed ? 'error' : '', f.required, f.placeholder); - -/* harmony default export */ const templates_prompt = (o => T(prompt_templateObject2(), o.level || '', o.title, o.messages.map(message => T(prompt_templateObject3(), message)), o.fields.map(f => tpl_field(f)), __('OK'), __('Cancel'))); -;// CONCATENATED MODULE: ./src/modals/confirm.js +/* harmony default export */ const templates_prompt = (o => T` + +`); +;// CONCATENATED MODULE: ./src/plugins/modal/confirm.js @@ -39657,20 +42578,11 @@ const Confirm = base.extend({ } }); -/* harmony default export */ const modals_confirm = (Confirm); -;// CONCATENATED MODULE: ./src/plugins/modal.js -/** - * @module converse-modal - * @copyright The Converse.js contributors - * @license Mozilla Public License (MPLv2) - */ +/* harmony default export */ const modal_confirm = (Confirm); +;// CONCATENATED MODULE: ./src/plugins/modal/api.js - - -core_converse.env.BootstrapModal = base; // expose to plugins - let modals = []; const modal_api = { /** @@ -39738,7 +42650,7 @@ const modal_api = { * Show a confirm modal to the user. * @method _converse.api.confirm * @param { String } title - The header text for the confirmation dialog - * @param { (String[]|String) } messages - The text to show to the user + * @param { (Array|String) } messages - The text to show to the user * @param { Array } fields - An object representing a fields presented to the user. * @property { String } Field.label - The form label for the input field. * @property { String } Field.name - The name for the input field. @@ -39759,7 +42671,7 @@ const modal_api = { fields, 'type': 'confirm' }); - const confirm = new modals_confirm({ + const confirm = new modal_confirm({ model }); confirm.show(); @@ -39779,7 +42691,7 @@ const modal_api = { * Show a prompt modal to the user. * @method _converse.api.prompt * @param { String } title - The header text for the prompt - * @param { (String[]|String) } messages - The prompt text to show to the user + * @param { (Array|String) } messages - The prompt text to show to the user * @param { String } placeholder - The placeholder text for the prompt input * @returns { Promise } A promise which resolves with the text provided by the * user or `false` if the user canceled the prompt. @@ -39798,7 +42710,7 @@ const modal_api = { }], 'type': 'prompt' }); - const prompt = new modals_confirm({ + const prompt = new modal_confirm({ model }); prompt.show(); @@ -39821,7 +42733,7 @@ const modal_api = { * @method _converse.api.alert * @param { ('info'|'warn'|'error') } type - The type of alert. * @param { String } title - The header text for the alert. - * @param { (String[]|String) } messages - The alert text to show to the user. + * @param { (Array|String) } messages - The alert text to show to the user. */ alert(type, title, messages) { if (typeof messages === 'string') { @@ -39844,12 +42756,23 @@ const modal_api = { 'level': level, 'type': 'alert' }); - api.modal.show(modals_alert, { + modal_api.modal.show(modal_alert, { model }); } }; +/* harmony default export */ const plugins_modal_api = (modal_api); +;// CONCATENATED MODULE: ./src/plugins/modal/index.js +/** + * @copyright The Converse.js contributors + * @license Mozilla Public License (MPLv2) + */ + + + +core_converse.env.BootstrapModal = base; // expose to plugins + core_converse.plugins.add('converse-modal', { initialize() { api.listen.on('disconnect', () => { @@ -39860,7 +42783,7 @@ core_converse.plugins.add('converse-modal', { } }); api.listen.on('clearSession', () => api.modal.removeAll()); - Object.assign(shared_converse.api, modal_api); + Object.assign(shared_converse.api, plugins_modal_api); } }); @@ -39936,7 +42859,7 @@ class async_directive_c extends directive_s { } S(i, t) { - if (!this.isConnected) throw Error("AsyncDirective ".concat(this.constructor.name, " was rendered while its tree was disconnected.")); + if (!this.isConnected) throw Error(`AsyncDirective ${this.constructor.name} was rendered while its tree was disconnected.`); return super.S(i, t); } @@ -40002,38 +42925,41 @@ const until_e = t => !directive_helpers_i(t) && "function" == typeof t.then, //# sourceMappingURL=until.js.map +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/chat/styles/message-actions.scss +var message_actions = __webpack_require__(9520); +;// CONCATENATED MODULE: ./src/shared/chat/styles/message-actions.scss + + + + + + + + + + + +var message_actions_options = {}; + +message_actions_options.styleTagTransform = (styleTagTransform_default()); +message_actions_options.setAttributes = (setAttributesWithoutAttributes_default()); + + message_actions_options.insert = insertBySelector_default().bind(null, "head"); + +message_actions_options.domAPI = (styleDomAPI_default()); +message_actions_options.insertStyleElement = (insertStyleElement_default()); + +var message_actions_update = injectStylesIntoStyleTag_default()(message_actions/* default */.Z, message_actions_options); + + + + + /* harmony default export */ const styles_message_actions = (message_actions/* default */.Z && message_actions/* default.locals */.Z.locals ? message_actions/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/shared/chat/message-actions.js -function message_actions_templateObject3() { - const data = message_actions_taggedTemplateLiteral(["\n \n "]); - message_actions_templateObject3 = function () { - return data; - }; - return data; -} -function message_actions_templateObject2() { - const data = message_actions_taggedTemplateLiteral([""]); - - message_actions_templateObject2 = function () { - return data; - }; - - return data; -} - -function message_actions_templateObject() { - const data = message_actions_taggedTemplateLiteral(["", ""]); - - message_actions_templateObject = function () { - return data; - }; - - return data; -} - -function message_actions_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } @@ -40049,47 +42975,59 @@ const { class MessageActions extends CustomElement { static get properties() { return { - correcting: { - type: Boolean - }, - editable: { - type: Boolean - }, - hide_url_previews: { - type: Boolean - }, is_retracted: { type: Boolean }, - message_type: { - type: String - }, model: { type: Object - }, - unfurls: { - type: Number } }; } + initialize() { + const settings = getAppSettings(); + this.listenTo(settings, 'change:allowed_audio_domains', () => this.requestUpdate()); + this.listenTo(settings, 'change:allowed_image_domains', () => this.requestUpdate()); + this.listenTo(settings, 'change:allowed_video_domains', () => this.requestUpdate()); + this.listenTo(settings, 'change:render_media', () => this.requestUpdate()); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + } + render() { - return T(message_actions_templateObject(), until_o(this.renderActions(), '')); + return T`${until_o(this.renderActions(), '')}`; } async renderActions() { + // We want to let the message actions menu drop upwards if we're at the + // bottom of the message history, and down otherwise. This is to avoid + // the menu disappearing behind the bottom panel (toolbar, textarea etc). + // That's difficult to know from state, so we're making an approximation here. + const should_drop_up = this.model.collection.length > 2 && this.model === this.model.collection.last(); const buttons = await this.getActionButtons(); const items = buttons.map(b => MessageActions.getActionsDropdownItem(b)); if (items.length) { - return T(message_actions_templateObject2(), items); + return T``; } else { return ''; } } static getActionsDropdownItem(o) { - return T(message_actions_templateObject3(), o.button_class, o.handler, o.icon_class, api.settings.get("assets_path"), o.i18n_text); + return T` + + `; } onMessageEditButtonClicked(ev) { @@ -40148,12 +43086,12 @@ class MessageActions extends CustomElement { const result = await chatbox.retractOtherMessage(this.model, reason); if (result === null) { - const err_msg = __("A timeout occurred while trying to retract the message"); + const err_msg = __(`A timeout occurred while trying to retract the message`); api.alert('error', __('Error'), err_msg); headless_log(err_msg, message_actions_Strophe.LogLevel.WARN); } else if (message_actions_u.isErrorStanza(result)) { - const err_msg = __("Sorry, you're not allowed to retract this message."); + const err_msg = __(`Sorry, you're not allowed to retract this message.`); api.alert('error', __('Error'), err_msg); headless_log(err_msg, message_actions_Strophe.LogLevel.WARN); @@ -40195,7 +43133,7 @@ class MessageActions extends CustomElement { reason !== false && this.retractOtherMessage(reason); } } else { - const err_msg = __("Sorry, you're not allowed to retract this message"); + const err_msg = __(`Sorry, you're not allowed to retract this message`); api.alert('error', __('Error'), err_msg); } @@ -40214,27 +43152,109 @@ class MessageActions extends CustomElement { } } - onHidePreviewsButtonClicked(ev) { + onMediaToggleClicked(ev) { var _ev$preventDefault2; ev === null || ev === void 0 ? void 0 : (_ev$preventDefault2 = ev.preventDefault) === null || _ev$preventDefault2 === void 0 ? void 0 : _ev$preventDefault2.call(ev); - if (this.hide_url_previews) { + if (this.hasHiddenMedia(this.getMediaURLs())) { this.model.save({ 'hide_url_previews': false, 'url_preview_transition': 'fade-in' }); } else { - this.model.set('url_preview_transition', 'fade-out'); + const ogp_metadata = this.model.get('ogp_metadata') || []; + + if (ogp_metadata.length) { + this.model.set('url_preview_transition', 'fade-out'); + } else { + this.model.save({ + 'hide_url_previews': true, + 'url_preview_transition': 'fade-in' + }); + } + } + } + /** + * Check whether media is hidden or shown, which is used to determine the toggle text. + * + * If `render_media` is an array, check if there are media URLs outside + * of that array, in which case we consider message media on the whole to be hidden (since + * those excluded by the whitelist will be, even if the render_media whitelisted URLs are shown). + * @param { Array } media_urls + * @returns { Boolean } + */ + + + hasHiddenMedia(media_urls) { + if (typeof this.model.get('hide_url_previews') === 'boolean') { + return this.model.get('hide_url_previews'); + } + + const render_media = api.settings.get('render_media'); + + if (Array.isArray(render_media)) { + return media_urls.reduce((acc, url) => acc || !isDomainWhitelisted(render_media, url), false); + } else { + return !render_media; + } + } + + getMediaURLs() { + const unfurls_to_show = (this.model.get('ogp_metadata') || []).map(o => ({ + 'url': o['og:image'], + 'is_image': true + })).filter(o => isMediaURLDomainAllowed(o)); + const media_urls = getMediaURLs(this.model.get('media_urls') || [], this.model.get('body')).filter(o => isMediaURLDomainAllowed(o)); + return [...new Set([...media_urls.map(o => o.url), ...unfurls_to_show.map(o => o.url)])]; + } + /** + * Adds a media rendering toggle to this message's action buttons if necessary. + * + * The toggle is only added if the message contains media URLs and if the + * user is allowed to show or hide media for those URLs. + * + * Whether a user is allowed to show or hide domains depends on the config settings: + * * allowed_audio_domains + * * allowed_video_domains + * * allowed_image_domains + * + * Whether media is currently shown or hidden is determined by the { @link hasHiddenMedia } method. + * + * @param { Array } buttons - An array of objects representing action buttons + */ + + + addMediaRenderingToggle(buttons) { + const urls = this.getMediaURLs(); + + if (urls.length) { + const hidden = this.hasHiddenMedia(urls); + buttons.push({ + 'i18n_text': hidden ? __('Show media') : __('Hide media'), + 'handler': ev => this.onMediaToggleClicked(ev), + 'button_class': 'chat-msg__action-hide-previews', + 'icon_class': hidden ? 'fas fa-eye' : 'fas fa-eye-slash', + 'name': 'hide' + }); } } async getActionButtons() { const buttons = []; - if (this.editable) { + if (this.model.get('editable')) { + /** + * @typedef { Object } MessageActionAttributes + * An object which represents a message action (as shown in the message dropdown); + * @property { String } i18n_text + * @property { Function } handler + * @property { String } button_class + * @property { String } icon_class + * @property { String } name + */ buttons.push({ - 'i18n_text': this.correcting ? __('Cancel Editing') : __('Edit'), + 'i18n_text': this.model.get('correcting') ? __('Cancel Editing') : __('Edit'), 'handler': ev => this.onMessageEditButtonClicked(ev), 'button_class': 'chat-msg__action-edit', 'icon_class': 'fa fa-pencil-alt', @@ -40242,7 +43262,7 @@ class MessageActions extends CustomElement { }); } - const may_be_moderated = this.model.get('type') === 'groupchat' && (await this.model.mayBeModerated()); + const may_be_moderated = ['groupchat', 'mep'].includes(this.model.get('type')) && (await this.model.mayBeModerated()); const retractable = !this.is_retracted && (this.model.mayBeRetracted() || may_be_moderated); if (retractable) { @@ -40255,27 +43275,13 @@ class MessageActions extends CustomElement { }); } - const ogp_metadata = this.model.get('ogp_metadata') || []; - const chatbox = this.model.collection.chatbox; - - if (chatbox.get('type') === shared_converse.CHATROOMS_TYPE && api.settings.get('muc_show_ogp_unfurls') && ogp_metadata.length) { - let title; - const hidden_preview = this.hide_url_previews; - - if (ogp_metadata.length > 1) { - title = hidden_preview ? __('Show URL previews') : __('Hide URL previews'); - } else { - title = hidden_preview ? __('Show URL preview') : __('Hide URL preview'); - } - - buttons.push({ - 'i18n_text': title, - 'handler': ev => this.onHidePreviewsButtonClicked(ev), - 'button_class': 'chat-msg__action-hide-previews', - 'icon_class': this.hide_url_previews ? 'fas fa-eye' : 'fas fa-eye-slash', - 'name': 'hide' - }); + if (!this.model.collection) { + // While we were awaiting, this model got removed from the + // collection (happens during tests) + return []; } + + this.addMediaRenderingToggle(buttons); /** * *Hook* which allows plugins to add more message action buttons * @event _converse#getMessageActionButtons @@ -40292,7 +43298,6 @@ class MessageActions extends CustomElement { * }); */ - return api.hook('getMessageActionButtons', this, buttons); } @@ -40300,23 +43305,23 @@ class MessageActions extends CustomElement { api.elements.define('converse-message-actions', MessageActions); ;// CONCATENATED MODULE: ./src/modals/templates/image.js -function image_templateObject() { - const data = image_taggedTemplateLiteral(["\n
\n
\n
\n

", "", "

\n ", "\n
\n
\n \n
\n
", "
\n
\n
"]); - - image_templateObject = function () { - return data; - }; - - return data; -} - -function image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const templates_image = (o => { - return T(image_templateObject(), __('Image: '), o.src, o.src, modal_header_close_button, o.src, o.onload, modal_close_button); + return T` + `; }); ;// CONCATENATED MODULE: ./src/modals/image.js @@ -40327,7 +43332,7 @@ function image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.s toHTML() { return templates_image({ 'src': this.src, - 'onload': ev => ev.target.parentElement.style.height = "".concat(ev.target.height, "px") + 'onload': ev => ev.target.parentElement.style.height = `${ev.target.height}px` }); } @@ -40336,1124 +43341,1103 @@ function image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.s //# sourceMappingURL=directive.js.map -// EXTERNAL MODULE: ./node_modules/urijs/src/URI.js -var URI = __webpack_require__(2369); -var URI_default = /*#__PURE__*/__webpack_require__.n(URI); -;// CONCATENATED MODULE: ./src/shared/directives/styling.js -function styling_templateObject2() { - const data = styling_taggedTemplateLiteral(["", ""]); +;// CONCATENATED MODULE: ./src/templates/audio.js - styling_templateObject2 = function () { - return data; - }; +/* harmony default export */ const audio = ((url, hide_url) => T`${hide_url ? '' : T`${url}`}`); +;// CONCATENATED MODULE: ./src/shared/gif/stream.js +class Stream { + constructor(data) { + if (data.toString().indexOf('ArrayBuffer') > 0) { + data = new Uint8Array(data); + } - return data; -} + this.data = data; + this.len = this.data.length; + this.pos = 0; + } -function styling_templateObject() { - const data = styling_taggedTemplateLiteral(["", ""]); + readByte() { + if (this.pos >= this.data.length) { + throw new Error('Attempted to read past end of stream.'); + } - styling_templateObject = function () { - return data; - }; + if (this.data instanceof Uint8Array) return this.data[this.pos++];else return this.data.charCodeAt(this.pos++) & 0xFF; + } - return data; -} + readBytes(n) { + const bytes = []; -function styling_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + for (let i = 0; i < n; i++) { + bytes.push(this.readByte()); + } + return bytes; + } + read(n) { + let s = ''; + for (let i = 0; i < n; i++) { + s += String.fromCharCode(this.readByte()); + } + return s; + } - -async function transform(t) { - await t.addTemplates(); - return t.payload; -} - -class StylingDirective extends directive_s { - render(txt, offset, mentions, options) { - // eslint-disable-line class-methods-use-this - const t = new RichText(txt, offset, mentions, Object.assign(options, { - 'show_images': false - })); - return T(styling_templateObject(), until_o(transform(t), T(styling_templateObject2(), t))); + readUnsigned() { + // Little-endian. + const a = this.readBytes(2); + return (a[1] << 8) + a[0]; } } - -const renderStylingDirectiveBody = directive_i(StylingDirective); -;// CONCATENATED MODULE: ./src/shared/styling.js -function styling_templateObject6() { - const data = shared_styling_taggedTemplateLiteral(["*", "*"]); - - styling_templateObject6 = function () { - return data; - }; - - return data; -} - -function styling_templateObject5() { - const data = shared_styling_taggedTemplateLiteral(["~", "~"]); - - styling_templateObject5 = function () { - return data; - }; - - return data; -} - -function styling_templateObject4() { - const data = shared_styling_taggedTemplateLiteral(["
", "
"]); - - styling_templateObject4 = function () { - return data; - }; - - return data; -} - -function styling_templateObject3() { - const data = shared_styling_taggedTemplateLiteral(["
```
", "
```
"], ["
\\`\\`\\`
", "
\\`\\`\\`
"]); - - styling_templateObject3 = function () { - return data; - }; - - return data; -} - -function shared_styling_templateObject2() { - const data = shared_styling_taggedTemplateLiteral(["`", "`"], ["\\`", "\\`"]); - - shared_styling_templateObject2 = function () { - return data; - }; - - return data; -} - -function shared_styling_templateObject() { - const data = shared_styling_taggedTemplateLiteral(["_", "_"]); - - shared_styling_templateObject = function () { - return data; - }; - - return data; -} - -function shared_styling_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - +;// CONCATENATED MODULE: ./src/shared/gif/utils.js /** - * @copyright 2020, the Converse.js contributors - * @license Mozilla Public License (MPLv2) - * @description Utility functions to help with parsing XEP-393 message styling hints - * @todo Other parsing helpers can be made more abstract and placed here. + * @copyright Shachaf Ben-Kiki and the Converse.js contributors + * @description + * Started as a fork of Shachaf Ben-Kiki's jsgif library + * https://github.com/shachaf/jsgif + * @license MIT License + */ +function bitsToNum(ba) { + return ba.reduce(function (s, n) { + return s * 2 + n; + }, 0); +} + +function byteToBitArr(bite) { + const a = []; + + for (let i = 7; i >= 0; i--) { + a.push(!!(bite & 1 << i)); + } + + return a; +} + +function lzwDecode(minCodeSize, data) { + // TODO: Now that the GIF parser is a bit different, maybe this should get an array of bytes instead of a String? + let pos = 0; // Maybe this streaming thing should be merged with the Stream? + + function readCode(size) { + let code = 0; + + for (let i = 0; i < size; i++) { + if (data.charCodeAt(pos >> 3) & 1 << (pos & 7)) { + code |= 1 << i; + } + + pos++; + } + + return code; + } + + const output = []; + const clearCode = 1 << minCodeSize; + const eoiCode = clearCode + 1; + let codeSize = minCodeSize + 1; + let dict = []; + + const clear = function () { + dict = []; + codeSize = minCodeSize + 1; + + for (let i = 0; i < clearCode; i++) { + dict[i] = [i]; + } + + dict[clearCode] = []; + dict[eoiCode] = null; + }; + + let code; + let last; + + while (true) { + // eslint-disable-line no-constant-condition + last = code; + code = readCode(codeSize); + + if (code === clearCode) { + clear(); + continue; + } + + if (code === eoiCode) break; + + if (code < dict.length) { + if (last !== clearCode) { + dict.push(dict[last].concat(dict[code][0])); + } + } else { + if (code !== dict.length) throw new Error('Invalid LZW code.'); + dict.push(dict[last].concat(dict[last][0])); + } + + output.push.apply(output, dict[code]); + + if (dict.length === 1 << codeSize && codeSize < 12) { + // If we're at the last code and codeSize is 12, the next code will be a clearCode, and it'll be 12 bits long. + codeSize++; + } + } // I don't know if this is technically an error, but some GIFs do it. + //if (Math.ceil(pos / 8) !== data.length) throw new Error('Extraneous LZW bytes.'); + + + return output; +} + +function readSubBlocks(st) { + let size, data; + data = ''; + + do { + size = st.readByte(); + data += st.read(size); + } while (size !== 0); + + return data; +} +/** + * Parses GIF image color table information + * @param { Stream } st + * @param { Number } entries */ -const styling_directives = ['*', '_', '~', '`', '```', '>']; -const styling_map = { - '*': { - 'name': 'strong', - 'type': 'span' - }, - '_': { - 'name': 'emphasis', - 'type': 'span' - }, - '~': { - 'name': 'strike', - 'type': 'span' - }, - '`': { - 'name': 'preformatted', - 'type': 'span' - }, - '```': { - 'name': 'preformatted_block', - 'type': 'block' - }, - '>': { - 'name': 'quote', - 'type': 'block' - } -}; -const dont_escape = ['_', '>', '`', '~']; -const styling_templates = { - // m is the chatbox model - // i is the offset of this directive relative to the start of the original message - 'emphasis': (txt, i, mentions, options) => T(shared_styling_templateObject(), renderStylingDirectiveBody(txt, i, mentions, options)), - 'preformatted': txt => T(shared_styling_templateObject2(), txt), - 'preformatted_block': txt => T(styling_templateObject3(), txt), - 'quote': (txt, i, mentions, options) => T(styling_templateObject4(), renderStylingDirectiveBody(txt, i, mentions, options)), - 'strike': (txt, i, mentions, options) => T(styling_templateObject5(), renderStylingDirectiveBody(txt, i, mentions, options)), - 'strong': (txt, i, mentions, options) => T(styling_templateObject6(), renderStylingDirectiveBody(txt, i, mentions, options)) -}; -/** - * Checks whether a given character "d" at index "i" of "text" is a valid opening or closing directive. - * @param { String } d - The potential directive - * @param { String } text - The text in which the directive appears - * @param { Number } i - The directive index - * @param { Boolean } opening - Check for a valid opening or closing directive - */ +function parseCT(st, entries) { + // Each entry is 3 bytes, for RGB. + const ct = []; -function isValidDirective(d, text, i, opening) { - // Ignore directives that are parts of words - // More info on the Regexes used here: https://javascript.info/regexp-unicode#unicode-properties-p - if (opening) { - const regex = RegExp(dont_escape.includes(d) ? "^(\\p{L}|\\p{N})".concat(d) : "^(\\p{L}|\\p{N})\\".concat(d), 'u'); - - if (i > 1 && regex.test(text.slice(i - 1))) { - return false; - } - - const is_quote = isQuoteDirective(d); - - if (is_quote && i > 0 && text[i - 1] !== '\n') { - // Quote directives must be on newlines - return false; - } else if (!is_quote && d === text[i + 1]) { - // Immediately followed by another directive of the same type - return false; - } - } else { - const regex = RegExp(dont_escape.includes(d) ? "^".concat(d, "(\\p{L}|\\p{N})") : "^\\".concat(d, "(\\p{L}|\\p{N})"), 'u'); - - if (i < text.length - 1 && regex.test(text.slice(i))) { - return false; - } + for (let i = 0; i < entries; i++) { + ct.push(st.readBytes(3)); } - return true; + return ct; } /** - * Given a specific index "i" of "text", return the directive it matches or - * null otherwise. - * @param { String } text - The text in which the directive appears - * @param { Number } i - The directive index - * @param { Boolean } opening - Whether we're looking for an opening or closing directive + * Parses GIF image information + * @param { Stream } st + * @param { ByteStream } img + * @param { Function } [callback] */ -function getDirective(text, i, opening = true) { - let d; +function parseImg(st, img, callback) { + function deinterlace(pixels, width) { + // Of course this defeats the purpose of interlacing. And it's *probably* + // the least efficient way it's ever been implemented. But nevertheless... + const newPixels = new Array(pixels.length); + const rows = pixels.length / width; - if (/(^```\s*\n|^```\s*$)/.test(text.slice(i)) && (i === 0 || text[i - 1] === '\n' || text[i - 1] === '>')) { - d = text.slice(i, i + 3); - } else if (styling_directives.includes(text.slice(i, i + 1))) { - d = text.slice(i, i + 1); - if (!isValidDirective(d, text, i, opening)) return null; - } else { - return null; + function cpRow(toRow, fromRow) { + const fromPixels = pixels.slice(fromRow * width, (fromRow + 1) * width); + newPixels.splice.apply(newPixels, [toRow * width, width].concat(fromPixels)); + } // See appendix E. + + + const offsets = [0, 4, 2, 1]; + const steps = [8, 8, 4, 2]; + let fromRow = 0; + + for (let pass = 0; pass < 4; pass++) { + for (let toRow = offsets[pass]; toRow < rows; toRow += steps[pass]) { + cpRow(toRow, fromRow); + fromRow++; + } + } + + return newPixels; } - return d; + img.leftPos = st.readUnsigned(); + img.topPos = st.readUnsigned(); + img.width = st.readUnsigned(); + img.height = st.readUnsigned(); + const bits = byteToBitArr(st.readByte()); + img.lctFlag = bits.shift(); + img.interlaced = bits.shift(); + img.sorted = bits.shift(); + img.reserved = bits.splice(0, 2); + img.lctSize = bitsToNum(bits.splice(0, 3)); + + if (img.lctFlag) { + img.lct = parseCT(st, 1 << img.lctSize + 1); + } + + img.lzwMinCodeSize = st.readByte(); + const lzwData = readSubBlocks(st); + img.pixels = lzwDecode(img.lzwMinCodeSize, lzwData); + + if (img.interlaced) { + // Move + img.pixels = deinterlace(img.pixels, img.width); + } + + callback === null || callback === void 0 ? void 0 : callback(img); } /** - * Given an opening directive "d", an index "i" and the text, check whether - * we've found the closing directive. - * @param { String } d -The directive - * @param { Number } i - The directive index - * @param { String } text -The text in which the directive appears + * Parses GIF header information + * @param { Stream } st + * @param { Function } [callback] */ -function isDirectiveEnd(d, i, text) { - const dtype = styling_map[d].type; // directive type +function parseHeader(st, callback) { + const hdr = {}; + hdr.sig = st.read(3); + hdr.ver = st.read(3); - return i === text.length || getDirective(text, i, false) === d || dtype === 'span' && text[i] === '\n'; + if (hdr.sig !== 'GIF') { + throw new Error('Not a GIF file.'); + } + + hdr.width = st.readUnsigned(); + hdr.height = st.readUnsigned(); + const bits = byteToBitArr(st.readByte()); + hdr.gctFlag = bits.shift(); + hdr.colorRes = bitsToNum(bits.splice(0, 3)); + hdr.sorted = bits.shift(); + hdr.gctSize = bitsToNum(bits.splice(0, 3)); + hdr.bgColor = st.readByte(); + hdr.pixelAspectRatio = st.readByte(); // if not 0, aspectRatio = (pixelAspectRatio + 15) / 64 + + if (hdr.gctFlag) { + hdr.gct = parseCT(st, 1 << hdr.gctSize + 1); + } + + callback === null || callback === void 0 ? void 0 : callback(hdr); +} + +function parseExt(st, block, handler) { + function parseGCExt(block) { + st.readByte(); // blocksize, always 4 + + const bits = byteToBitArr(st.readByte()); + block.reserved = bits.splice(0, 3); // Reserved; should be 000. + + block.disposalMethod = bitsToNum(bits.splice(0, 3)); + block.userInput = bits.shift(); + block.transparencyGiven = bits.shift(); + block.delayTime = st.readUnsigned(); + block.transparencyIndex = st.readByte(); + block.terminator = st.readByte(); + handler === null || handler === void 0 ? void 0 : handler.gce(block); + } + + function parseComExt(block) { + block.comment = readSubBlocks(st); + handler.com && handler.com(block); + } + + function parsePTExt(block) { + // No one *ever* uses this. If you use it, deal with parsing it yourself. + st.readByte(); // blocksize, always 12 + + block.ptHeader = st.readBytes(12); + block.ptData = readSubBlocks(st); + handler.pte && handler.pte(block); + } + + function parseAppExt(block) { + function parseNetscapeExt(block) { + st.readByte(); // blocksize, always 3 + + block.unknown = st.readByte(); // ??? Always 1? What is this? + + block.iterations = st.readUnsigned(); + block.terminator = st.readByte(); + handler.app && handler.app.NETSCAPE && handler.app.NETSCAPE(block); + } + + function parseUnknownAppExt(block) { + block.appData = readSubBlocks(st); // FIXME: This won't work if a handler wants to match on any identifier. + + handler.app && handler.app[block.identifier] && handler.app[block.identifier](block); + } + + st.readByte(); // blocksize, always 11 + + block.identifier = st.read(8); + block.authCode = st.read(3); + + switch (block.identifier) { + case 'NETSCAPE': + parseNetscapeExt(block); + break; + + default: + parseUnknownAppExt(block); + break; + } + } + + function parseUnknownExt(block) { + block.data = readSubBlocks(st); + handler.unknown && handler.unknown(block); + } + + block.label = st.readByte(); + + switch (block.label) { + case 0xF9: + block.extType = 'gce'; + parseGCExt(block); + break; + + case 0xFE: + block.extType = 'com'; + parseComExt(block); + break; + + case 0x01: + block.extType = 'pte'; + parsePTExt(block); + break; + + case 0xFF: + block.extType = 'app'; + parseAppExt(block); + break; + + default: + block.extType = 'unknown'; + parseUnknownExt(block); + break; + } } /** - * Given a directive "d", which occurs in "text" at index "i", check that it - * has a valid closing directive and return the length from start to end of the - * directive. - * @param { String } d -The directive - * @param { Number } i - The directive index - * @param { String } text -The text in which the directive appears + * @param { Stream } st + * @param { GIFParserHandlers } handler */ -function getDirectiveLength(d, text, i) { - if (!d) { - return 0; +function parseBlock(st, handler) { + const block = {}; + block.sentinel = st.readByte(); + + switch (String.fromCharCode(block.sentinel)) { + // For ease of matching + case '!': + block.type = 'ext'; + parseExt(st, block, handler); + break; + + case ',': + block.type = 'img'; + parseImg(st, block, handler === null || handler === void 0 ? void 0 : handler.img); + break; + + case ';': + block.type = 'eof'; + handler === null || handler === void 0 ? void 0 : handler.eof(block); + break; + + default: + throw new Error('Unknown block: 0x' + block.sentinel.toString(16)); + // TODO: Pad this with a 0. } - const begin = i; - i += d.length; + if (block.type !== 'eof') setTimeout(() => parseBlock(st, handler), 0); +} +/** + * Takes a Stream and parses it for GIF data, calling the relevant handler + * methods on the passed in `handler` object. + * @param { Stream } st + * @param { GIFParserHandlers } handler + */ - if (isQuoteDirective(d)) { - i += text.slice(i).split(/\n[^>]/).shift().length; - return i - begin; - } else if (styling_map[d].type === 'span') { - const line = text.slice(i + 1).split('\n').shift(); - let j = 0; - let idx = line.indexOf(d); - while (idx !== -1) { - if (isDirectiveEnd(d, i + 1 + idx, text)) return idx + 1 + 2 * d.length; - idx = line.indexOf(d, j++); +function parseGIF(st, handler = {}) { + parseHeader(st, handler === null || handler === void 0 ? void 0 : handler.hdr); + setTimeout(() => parseBlock(st, handler), 0); +} +;// CONCATENATED MODULE: ./src/shared/gif/index.js +/** + * @copyright Shachaf Ben-Kiki, JC Brand + * @description + * Started as a fork of Shachaf Ben-Kiki's jsgif library + * https://github.com/shachaf/jsgif + * @license MIT License + */ + + + +const DELAY_FACTOR = 10; +class ConverseGif { + /** + * Creates a new ConverseGif instance + * @param { HTMLElement } el + * @param { Object } [options] + * @param { Number } [options.width] - The width, in pixels, of the canvas + * @param { Number } [options.height] - The height, in pixels, of the canvas + * @param { Boolean } [options.loop=true] - Setting this to `true` will enable looping of the gif + * @param { Boolean } [options.autoplay=true] - Same as the rel:autoplay attribute above, this arg overrides the img tag info. + * @param { Number } [options.max_width] - Scale images over max_width down to max_width. Helpful with mobile. + * @param { Function } [options.onIterationEnd] - Add a callback for when the gif reaches the end of a single loop (one iteration). The first argument passed will be the gif HTMLElement. + * @param { Boolean } [options.show_progress_bar=true] + * @param { String } [options.progress_bg_color='rgba(0,0,0,0.4)'] + * @param { String } [options.progress_color='rgba(255,0,22,.8)'] + * @param { Number } [options.progress_bar_height=5] + */ + constructor(el, opts) { + this.options = Object.assign({ + width: null, + height: null, + autoplay: true, + loop: true, + show_progress_bar: true, + progress_bg_color: 'rgba(0,0,0,0.4)', + progress_color: 'rgba(255,0,22,.8)', + progress_bar_height: 5 + }, opts); + this.el = el; + this.gif_el = el.querySelector('img'); + this.canvas = el.querySelector('canvas'); + this.ctx = this.canvas.getContext('2d'); // It's good practice to pre-render to an offscreen canvas + + this.offscreenCanvas = document.createElement('canvas'); + this.ctx_scaled = false; + this.disposal_method = null; + this.disposal_restore_from_idx = null; + this.frame = null; + this.frame_offsets = []; // elements have .x and .y properties + + this.frames = []; + this.last_disposal_method = null; + this.last_img = null; + this.load_error = null; + this.playing = this.options.autoplay; + this.transparency = null; + this.frame_idx = 0; + this.iteration_count = 0; + this.start = null; + this.initialize(); + } + + async initialize() { + if (this.options.width && this.options.height) { + this.setSizes(this.options.width, this.options.height); } - return 0; - } else { - const substring = text.slice(i + 1); - let j = 0; - let idx = substring.indexOf(d); + const data = await this.fetchGIF(this.gif_el.src); + requestAnimationFrame(() => this.startParsing(data)); + } - while (idx !== -1) { - if (isDirectiveEnd(d, i + 1 + idx, text)) return idx + 1 + 2 * d.length; - idx = substring.indexOf(d, j++); + initPlayer() { + if (this.load_error) return; + + if (!(this.options.width && this.options.height)) { + this.ctx.scale(this.getCanvasScale(), this.getCanvasScale()); + } // Show the first frame + + + this.frame_idx = 0; + this.putFrame(this.frame_idx); + + if (this.options.autoplay) { + var _this$frames$this$fra; + + const delay = (((_this$frames$this$fra = this.frames[this.frame_idx]) === null || _this$frames$this$fra === void 0 ? void 0 : _this$frames$this$fra.delay) ?? 0) * DELAY_FACTOR; + setTimeout(() => this.play(), delay); } - - return 0; } -} + /** + * Gets the index of the frame "up next" + * @returns {number} + */ -function getDirectiveAndLength(text, i) { - const d = getDirective(text, i); - const length = d ? getDirectiveLength(d, text, i) : 0; - return length > 0 ? { - d, - length - } : {}; -} -const isQuoteDirective = d => ['>', '>'].includes(d); -function getDirectiveTemplate(d, text, offset, mentions, options) { - const template = styling_templates[styling_map[d].name]; - if (isQuoteDirective(d)) { - const newtext = text.replace(/\n>/g, '\n') // Don't show the directive itself - .replace(/\n$/, ''); // Trim line-break at the end - - return template(newtext, offset, mentions, options); - } else { - return template(text, offset, mentions, options); + getNextFrameNo() { + return (this.frame_idx + 1 + this.frames.length) % this.frames.length; } -} -function containsDirectives(text) { - for (let i = 0; i < styling_directives.length; i++) { - if (text.includes(styling_directives[i])) { + /** + * Called once we've looped through all frames in the GIF + * @returns { Boolean } - Returns `true` if the GIF is now paused (i.e. further iterations are not desired) + */ + + + onIterationEnd() { + var _this$options$onItera, _this$options; + + this.iteration_count++; + (_this$options$onItera = (_this$options = this.options).onIterationEnd) === null || _this$options$onItera === void 0 ? void 0 : _this$options$onItera.call(_this$options, this); + + if (!this.options.loop) { + this.pause(); return true; } - } -} -;// CONCATENATED MODULE: ./src/shared/rich-text.js -function rich_text_templateObject2() { - const data = rich_text_taggedTemplateLiteral(["", ""]); - rich_text_templateObject2 = function () { - return data; - }; - - return data; -} - -function rich_text_templateObject() { - const data = rich_text_taggedTemplateLiteral(["", ""]); - - rich_text_templateObject = function () { - return data; - }; - - return data; -} - -function rich_text_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - - - - - -const rich_text_u = core_converse.env.utils; - -const rich_text_isString = s => typeof s === 'string'; // We don't render more than two line-breaks, replace extra line-breaks with -// the zero-width whitespace character - - -const collapseLineBreaks = text => text.replace(/\n\n+/g, m => "\n".concat("\u200B".repeat(m.length - 2), "\n")); - -const tpl_mention_with_nick = o => T(rich_text_templateObject(), o.mention); - -const tpl_mention = o => T(rich_text_templateObject2(), o.mention); -/** - * @class RichText - * A String subclass that is used to render rich text (i.e. text that contains - * hyperlinks, images, mentions, styling etc.). - * - * The "rich" parts of the text is represented by lit TemplateResult - * objects which are added via the {@link RichText.addTemplateResult} - * method and saved as metadata. - * - * By default Converse adds TemplateResults to support emojis, hyperlinks, - * images, map URIs and mentions. - * - * 3rd party plugins can listen for the `beforeMessageBodyTransformed` - * and/or `afterMessageBodyTransformed` events and then call - * `addTemplateResult` on the RichText instance in order to add their own - * rich features. - */ - - -class RichText extends String { - /** - * Create a new {@link RichText} instance. - * @param { String } text - The text to be annotated - * @param { Integer } offset - The offset of this particular piece of text - * from the start of the original message text. This is necessary because - * RichText instances can be nested when templates call directives - * which create new RichText instances (as happens with XEP-393 styling directives). - * @param { Array } mentions - An array of mention references - * @param { Object } options - * @param { String } options.nick - The current user's nickname (only relevant if the message is in a XEP-0045 MUC) - * @param { Boolean } options.render_styling - Whether XEP-0393 message styling should be applied to the message - * @param { Boolean } options.show_images - Whether image URLs should be rendered as tags. - * @param { Boolean } options.show_me_message - Whether /me messages should be rendered differently - * @param { Function } options.onImgClick - Callback for when an inline rendered image has been clicked - * @param { Function } options.onImgLoad - Callback for when an inline rendered image has been loaded - */ - constructor(text, offset = 0, mentions = [], options = {}) { - super(text); - this.mentions = mentions; - this.nick = options === null || options === void 0 ? void 0 : options.nick; - this.offset = offset; - this.onImgClick = options === null || options === void 0 ? void 0 : options.onImgClick; - this.onImgLoad = options === null || options === void 0 ? void 0 : options.onImgLoad; - this.options = options; - this.payload = []; - this.references = []; - this.render_styling = options === null || options === void 0 ? void 0 : options.render_styling; - this.show_images = options === null || options === void 0 ? void 0 : options.show_images; + return false; } /** - * Look for `http` URIs and return templates that render them as URL links - * @param { String } text - * @param { Integer } offset - The index of the passed in text relative to - * the start of the message body text. + * Inner callback for the `requestAnimationFrame` function. + * + * This method gets wrapped by an arrow function so that the `previous_timestamp` and + * `frame_delay` parameters can also be passed in. The `timestamp` + * parameter comes from `requestAnimationFrame`. + * + * The purpose of this method is to call `putFrame` with the right delay + * in order to render the GIF animation. + * + * Note, this method will cause the *next* upcoming frame to be rendered, + * not the current one. + * + * This means `this.frame_idx` will be incremented before calling `this.putFrame`, so + * `putFrame(0)` needs to be called *before* this method, otherwise the + * animation will incorrectly start from frame #1 (this is done in `initPlayer`). + * + * @param { DOMHighRestTimestamp } timestamp - The timestamp as returned by `requestAnimationFrame` + * @param { DOMHighRestTimestamp } previous_timestamp - The timestamp from the previous iteration of this method. + * We need this in order to calculate whether we have waited long enough to + * show the next frame. + * @param { Number } frame_delay - The delay (in 1/100th of a second) + * before the currently being shown frame should be replaced by a new one. */ - addHyperlinks(text, offset) { - const objs = []; + onAnimationFrame(timestamp, previous_timestamp, frame_delay) { + var _this$frames$this$fra2; - try { - const parse_options = { - 'start': /\b(?:([a-z][a-z0-9.+-]*:\/\/)|xmpp:|mailto:|www\.)/gi - }; - URI_default().withinString(text, (url, start, end) => { - objs.push({ - url, - start, - end - }); - return url; - }, parse_options); - } catch (error) { - headless_log.debug(error); + if (!this.playing) { return; } - objs.forEach(url_obj => { - const url_text = text.slice(url_obj.start, url_obj.end); - const filtered_url = rich_text_u.filterQueryParamsFromURL(url_text); - this.addTemplateResult(url_obj.start + offset, url_obj.end + offset, this.show_images && rich_text_u.isImageURL(url_text) && rich_text_u.isImageDomainAllowed(url_text) ? rich_text_u.convertToImageTag(filtered_url, this.onImgLoad, this.onImgClick) : rich_text_u.convertUrlToHyperlink(filtered_url)); - }); + if (timestamp - previous_timestamp < frame_delay) { + this.hovering ? this.drawPauseIcon() : this.putFrame(this.frame_idx); // We need to wait longer + + requestAnimationFrame(ts => this.onAnimationFrame(ts, previous_timestamp, frame_delay)); + return; + } + + const next_frame = this.getNextFrameNo(); + + if (next_frame === 0 && this.onIterationEnd()) { + return; + } + + this.frame_idx = next_frame; + this.putFrame(this.frame_idx); + const delay = (((_this$frames$this$fra2 = this.frames[this.frame_idx]) === null || _this$frames$this$fra2 === void 0 ? void 0 : _this$frames$this$fra2.delay) || 8) * DELAY_FACTOR; + requestAnimationFrame(ts => this.onAnimationFrame(ts, timestamp, delay)); } - /** - * Look for `geo` URIs and return templates that render them as URL links - * @param { String } text - * @param { Integer } offset - The index of the passed in text relative to - * the start of the message body text. - */ + setSizes(w, h) { + this.canvas.width = w * this.getCanvasScale(); + this.canvas.height = h * this.getCanvasScale(); + this.offscreenCanvas.width = w; + this.offscreenCanvas.height = h; + this.offscreenCanvas.style.width = w + 'px'; + this.offscreenCanvas.style.height = h + 'px'; + this.offscreenCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0); + } - addMapURLs(text, offset) { - const regex = /geo:([\-0-9.]+),([\-0-9.]+)(?:,([\-0-9.]+))?(?:\?(.*))?/g; - const matches = text.matchAll(regex); + setFrameOffset(frame, offset) { + if (!this.frame_offsets[frame]) { + this.frame_offsets[frame] = offset; + return; + } - for (const m of matches) { - this.addTemplateResult(m.index + offset, m.index + m[0].length + offset, rich_text_u.convertUrlToHyperlink(m[0].replace(regex, shared_converse.geouri_replacement))); + if (typeof offset.x !== 'undefined') { + this.frame_offsets[frame].x = offset.x; + } + + if (typeof offset.y !== 'undefined') { + this.frame_offsets[frame].y = offset.y; + } + } + + doShowProgress(pos, length, draw) { + if (draw && this.options.show_progress_bar) { + let height = this.options.progress_bar_height; + const top = (this.canvas.height - height) / (this.ctx_scaled ? this.getCanvasScale() : 1); + const mid = pos / length * this.canvas.width / (this.ctx_scaled ? this.getCanvasScale() : 1); + const width = this.canvas.width / (this.ctx_scaled ? this.getCanvasScale() : 1); + height /= this.ctx_scaled ? this.getCanvasScale() : 1; + this.ctx.fillStyle = this.options.progress_bg_color; + this.ctx.fillRect(mid, top, width - mid, height); + this.ctx.fillStyle = this.options.progress_color; + this.ctx.fillRect(0, top, mid, height); } } /** - * Look for emojis (shortnames or unicode) and add templates for rendering them. - * @param { String } text - * @param { Integer } offset - The index of the passed in text relative to - * the start of the message body text. + * Starts parsing the GIF stream data by calling `parseGIF` and passing in + * a map of handler functions. + * @param { String } data - The GIF file data, as returned by the server */ - addEmojis(text, offset) { - const references = [...getShortnameReferences(text.toString()), ...getCodePointReferences(text.toString())]; - references.forEach(e => { - this.addTemplateResult(e.begin + offset, e.end + offset, getEmojiMarkup(e, { - 'add_title_wrapper': true - })); - }); - } - /** - * Look for mentions included as XEP-0372 references and add templates for - * rendering them. - * @param { String } text - * @param { Integer } local_offset - The index of the passed in text relative to - * the start of this RichText instance (which is not necessarily the same as the - * offset from the start of the original message stanza's body text). - */ - - - addMentions(text, local_offset) { - var _this$mentions; - - const full_offset = local_offset + this.offset; - (_this$mentions = this.mentions) === null || _this$mentions === void 0 ? void 0 : _this$mentions.forEach(ref => { - const begin = Number(ref.begin) - full_offset; - - if (begin < 0 || begin >= full_offset + text.length) { - return; - } - - const end = Number(ref.end) - full_offset; - const mention = text.slice(begin, end); - - if (mention === this.nick) { - this.addTemplateResult(begin + local_offset, end + local_offset, tpl_mention_with_nick({ - mention - })); - } else { - this.addTemplateResult(begin + local_offset, end + local_offset, tpl_mention({ - mention - })); - } - }); - } - /** - * Look for XEP-0393 styling directives and add templates for rendering - * them. - */ - - - addStyling() { - const references = []; - - if (containsDirectives(this, this.mentions)) { - const mention_ranges = this.mentions.map(m => Array.from({ - 'length': Number(m.end) - }, (v, i) => Number(m.begin) + i)); - let i = 0; - - while (i < this.length) { - if (mention_ranges.filter(r => r.includes(i)).length) { - // eslint-disable-line no-loop-func - // Don't treat potential directives if they fall within a - // declared XEP-0372 reference - i++; - continue; - } - - const { - d, - length - } = getDirectiveAndLength(this, i); - - if (d && length) { - const is_quote = isQuoteDirective(d); - const end = i + length; - const slice_end = is_quote ? end : end - d.length; - let slice_begin = d === '```' ? i + d.length + 1 : i + d.length; - - if (is_quote && this[slice_begin] === ' ') { - // Trim leading space inside codeblock - slice_begin += 1; - } - - const offset = slice_begin; - const text = this.slice(slice_begin, slice_end); - references.push({ - 'begin': i, - 'template': getDirectiveTemplate(d, text, offset, this.mentions, this.options), - end - }); - i = end; - } - - i++; - } - } - - references.forEach(ref => this.addTemplateResult(ref.begin, ref.end, ref.template)); - } - - trimMeMessage() { - if (this.offset === 0) { - // Subtract `/me ` from 3rd person messages - if (this.isMeCommand()) { - this.payload[0] = this.payload[0].substring(4); - } - } - } - /** - * Look for plaintext (i.e. non-templated) sections of this RichText - * instance and add references via the passed in function. - * @param { Function } func - */ - - - addAnnotations(func) { - const payload = this.marshall(); - let idx = 0; // The text index of the element in the payload - - for (const text of payload) { - if (!text) { - continue; - } else if (rich_text_isString(text)) { - func.call(this, text, idx); - idx += text.length; - } else { - idx = text.end; - } - } - } - /** - * Parse the text and add template references for rendering the "rich" parts. - * - * @param { RichText } text - * @param { Boolean } show_images - Should URLs of images be rendered as `` tags? - * @param { Function } onImgLoad - * @param { Function } onImgClick - **/ - - - async addTemplates() { + startParsing(data) { + const stream = new Stream(data); /** - * Synchronous event which provides a hook for transforming a chat message's body text - * before the default transformations have been applied. - * @event _converse#beforeMessageBodyTransformed - * @param { RichText } text - A {@link RichText } instance. You - * can call {@link RichText#addTemplateResult } on it in order to - * add TemplateResult objects meant to render rich parts of the message. - * @example _converse.api.listen.on('beforeMessageBodyTransformed', (view, text) => { ... }); - */ - await api.trigger('beforeMessageBodyTransformed', this, { - 'Synchronous': true - }); - this.render_styling && this.addStyling(); - this.addAnnotations(this.addMentions); - this.addAnnotations(this.addHyperlinks); - this.addAnnotations(this.addMapURLs); - await api.emojis.initialize(); - this.addAnnotations(this.addEmojis); - /** - * Synchronous event which provides a hook for transforming a chat message's body text - * after the default transformations have been applied. - * @event _converse#afterMessageBodyTransformed - * @param { RichText } text - A {@link RichText } instance. You - * can call {@link RichText#addTemplateResult} on it in order to - * add TemplateResult objects meant to render rich parts of the message. - * @example _converse.api.listen.on('afterMessageBodyTransformed', (view, text) => { ... }); + * @typedef { Object } GIFParserHandlers + * A map of callback functions passed `parseGIF`. These functions are + * called as various parts of the GIF file format are parsed. + * @property { Function } hdr - Callback to handle the GIF header data + * @property { Function } gce - Callback to handle the GIF Graphic Control Extension data + * @property { Function } com - Callback to handle the comment extension block + * @property { Function } img - Callback to handle image data + * @property { Function } eof - Callback once the end of file has been reached */ - await api.trigger('afterMessageBodyTransformed', this, { - 'Synchronous': true - }); - this.payload = this.marshall(); - this.options.show_me_message && this.trimMeMessage(); - this.payload = this.payload.map(item => rich_text_isString(item) ? item : item.template); + const handler = { + 'hdr': this.withProgress(stream, header => this.handleHeader(header)), + 'gce': this.withProgress(stream, gce => this.handleGCE(gce)), + 'com': this.withProgress(stream), + 'img': this.withProgress(stream, img => this.doImg(img), true), + 'eof': () => this.handleEOF(stream) + }; + + try { + parseGIF(stream, handler); + } catch (err) { + this.showError('parse'); + } + } + + drawError() { + this.ctx.fillStyle = 'black'; + this.ctx.fillRect(0, 0, this.options.width ? this.options.width : this.hdr.width, this.options.height ? this.options.height : this.hdr.height); + this.ctx.strokeStyle = 'red'; + this.ctx.lineWidth = 3; + this.ctx.moveTo(0, 0); + this.ctx.lineTo(this.options.width ? this.options.width : this.hdr.width, this.options.height ? this.options.height : this.hdr.height); + this.ctx.moveTo(0, this.options.height ? this.options.height : this.hdr.height); + this.ctx.lineTo(this.options.width ? this.options.width : this.hdr.width, 0); + this.ctx.stroke(); + } + + showError(errtype) { + this.load_error = errtype; + this.hdr = { + width: this.gif_el.width, + height: this.gif_el.height + }; // Fake header. + + this.frames = []; + this.drawError(); + this.el.requestUpdate(); + } + + handleHeader(header) { + this.hdr = header; + this.setSizes(this.options.width ?? this.hdr.width, this.options.height ?? this.hdr.height); } /** - * The "rich" markup parts of a chat message are represented by lit - * TemplateResult objects. - * - * This method can be used to add new template results to this message's - * text. - * - * @method RichText.addTemplateResult - * @param { Number } begin - The starting index of the plain message text - * which is being replaced with markup. - * @param { Number } end - The ending index of the plain message text - * which is being replaced with markup. - * @param { Object } template - The lit TemplateResult instance + * Handler for GIF Graphic Control Extension (GCE) data */ - addTemplateResult(begin, end, template) { - this.references.push({ - begin, - end, - template - }); + handleGCE(gce) { + this.pushFrame(gce.delayTime); + this.clear(); + this.transparency = gce.transparencyGiven ? gce.transparencyIndex : null; + this.disposal_method = gce.disposalMethod; } + /** + * Handler for when the end of the GIF's file has been reached + */ - isMeCommand() { - const text = this.toString(); - if (!text) { - return false; + handleEOF(stream) { + this.doDecodeProgress(stream, false); + + if (!(this.options.width && this.options.height)) { + this.canvas.width = this.hdr.width * this.getCanvasScale(); + this.canvas.height = this.hdr.height * this.getCanvasScale(); } - return text.startsWith('/me '); + this.initPlayer(); + !this.options.autoplay && this.drawPlayIcon(); + } + + pushFrame(delay) { + if (!this.frame) return; + this.frames.push({ + data: this.frame.getImageData(0, 0, this.hdr.width, this.hdr.height), + delay + }); + this.frame_offsets.push({ + x: 0, + y: 0 + }); + } + + doImg(img) { + this.frame = this.frame || this.offscreenCanvas.getContext('2d'); + const currIdx = this.frames.length; //ct = color table, gct = global color table + + const ct = img.lctFlag ? img.lct : this.hdr.gct; // TODO: What if neither exists? + + /* + * Disposal method indicates the way in which the graphic is to + * be treated after being displayed. + * + * Values : 0 - No disposal specified. The decoder is + * not required to take any action. + * 1 - Do not dispose. The graphic is to be left + * in place. + * 2 - Restore to background color. The area used by the + * graphic must be restored to the background color. + * 3 - Restore to previous. The decoder is required to + * restore the area overwritten by the graphic with + * what was there prior to rendering the graphic. + * + * Importantly, "previous" means the frame state + * after the last disposal of method 0, 1, or 2. + */ + + if (currIdx > 0) { + if (this.last_disposal_method === 3) { + // Restore to previous + // If we disposed every frame including first frame up to this point, then we have + // no composited frame to restore to. In this case, restore to background instead. + if (this.disposal_restore_from_idx !== null) { + this.frame.putImageData(this.frames[this.disposal_restore_from_idx].data, 0, 0); + } else { + this.frame.clearRect(this.last_img.leftPos, this.last_img.topPos, this.last_img.width, this.last_img.height); + } + } else { + this.disposal_restore_from_idx = currIdx - 1; + } + + if (this.last_disposal_method === 2) { + // Restore to background color + // Browser implementations historically restore to transparent; we do the same. + // http://www.wizards-toolkit.org/discourse-server/viewtopic.php?f=1&t=21172#p86079 + this.frame.clearRect(this.last_img.leftPos, this.last_img.topPos, this.last_img.width, this.last_img.height); + } + } // else, Undefined/Do not dispose. + // frame contains final pixel data from the last frame; do nothing + //Get existing pixels for img region after applying disposal method + + + const imgData = this.frame.getImageData(img.leftPos, img.topPos, img.width, img.height); //apply color table colors + + img.pixels.forEach((pixel, i) => { + // imgData.data === [R,G,B,A,R,G,B,A,...] + if (pixel !== this.transparency) { + imgData.data[i * 4 + 0] = ct[pixel][0]; + imgData.data[i * 4 + 1] = ct[pixel][1]; + imgData.data[i * 4 + 2] = ct[pixel][2]; + imgData.data[i * 4 + 3] = 255; // Opaque. + } + }); + this.frame.putImageData(imgData, img.leftPos, img.topPos); + + if (!this.ctx_scaled) { + this.ctx.scale(this.getCanvasScale(), this.getCanvasScale()); + this.ctx_scaled = true; + } + + if (!this.last_img) { + // This is the first receivd image, so we draw it + this.ctx.drawImage(this.offscreenCanvas, 0, 0); + } + + this.last_img = img; } /** - * Take the annotations and return an array of text and TemplateResult - * instances to be rendered to the DOM. - * @method RichText#marshall + * Draws a gif frame at a specific index inside the canvas. + * @param { Number } i - The frame index */ - marshall() { - let list = [this.toString()]; - this.references.sort((a, b) => b.begin - a.begin).forEach(ref => { - const text = list.shift(); - list = [text.slice(0, ref.begin), ref, text.slice(ref.end), ...list]; - }); - return list.reduce((acc, i) => rich_text_isString(i) ? [...acc, convertASCII2Emoji(collapseLineBreaks(i))] : [...acc, i], []); + putFrame(i, show_pause_on_hover = true) { + i = parseInt(i, 10); + + if (i > this.frames.length - 1) { + i = 0; + } + + if (i < 0) { + i = 0; + } + + const offset = this.frame_offsets[i]; + this.offscreenCanvas.getContext('2d').putImageData(this.frames[i].data, offset.x, offset.y); + this.ctx.globalCompositeOperation = 'copy'; + this.ctx.drawImage(this.offscreenCanvas, 0, 0); + + if (show_pause_on_hover && this.hovering) { + this.drawPauseIcon(); + } } -} -;// CONCATENATED MODULE: ./src/shared/directives/rich-text.js -function directives_rich_text_templateObject2() { - const data = directives_rich_text_taggedTemplateLiteral(["", ""]); - - directives_rich_text_templateObject2 = function () { - return data; - }; - - return data; -} - -function directives_rich_text_templateObject() { - const data = directives_rich_text_taggedTemplateLiteral(["", ""]); - - directives_rich_text_templateObject = function () { - return data; - }; - - return data; -} - -function directives_rich_text_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + clear() { + this.transparency = null; + this.last_disposal_method = this.disposal_method; + this.disposal_method = null; + this.frame = null; + } + /** + * Start playing the gif + */ + play() { + this.playing = true; + requestAnimationFrame(ts => this.onAnimationFrame(ts, 0, 0)); + } + /** + * Pause the gif + */ - - -class RichTextRenderer { - constructor(text, offset, mentions = [], options = {}) { - this.mentions = mentions; - this.offset = offset; - this.options = options; - this.text = text; + pause() { + this.playing = false; + requestAnimationFrame(() => this.drawPlayIcon()); } - async transform() { - const text = new RichText(this.text, this.offset, this.mentions, this.options); - await text.addTemplates(); - return text.payload; + drawPauseIcon() { + if (!this.playing) { + return; + } // Clear the potential play button by re-rendering the current frame + + + this.putFrame(this.frame_idx, false); + this.ctx.globalCompositeOperation = 'source-over'; // Draw dark overlay + + this.ctx.fillStyle = 'rgb(0, 0, 0, 0.25)'; + this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); + const icon_size = this.canvas.height * 0.1; // Draw bars + + this.ctx.lineWidth = this.canvas.height * 0.04; + this.ctx.beginPath(); + this.ctx.moveTo(this.canvas.width / 2 - icon_size / 2, this.canvas.height / 2 - icon_size); + this.ctx.lineTo(this.canvas.width / 2 - icon_size / 2, this.canvas.height / 2 + icon_size); + this.ctx.fillStyle = 'rgb(200, 200, 200, 0.75)'; + this.ctx.stroke(); + this.ctx.beginPath(); + this.ctx.moveTo(this.canvas.width / 2 + icon_size / 2, this.canvas.height / 2 - icon_size); + this.ctx.lineTo(this.canvas.width / 2 + icon_size / 2, this.canvas.height / 2 + icon_size); + this.ctx.fillStyle = 'rgb(200, 200, 200, 0.75)'; + this.ctx.stroke(); // Draw circle + + this.ctx.lineWidth = this.canvas.height * 0.02; + this.ctx.strokeStyle = 'rgb(200, 200, 200, 0.75)'; + this.ctx.beginPath(); + this.ctx.arc(this.canvas.width / 2, this.canvas.height / 2, icon_size * 1.5, 0, 2 * Math.PI); + this.ctx.stroke(); } - render() { - return T(directives_rich_text_templateObject(), until_o(this.transform(), T(directives_rich_text_templateObject2(), this.text))); + drawPlayIcon() { + if (this.playing) { + return; + } // Clear the potential pause button by re-rendering the current frame + + + this.putFrame(this.frame_idx, false); + this.ctx.globalCompositeOperation = 'source-over'; // Draw dark overlay + + this.ctx.fillStyle = 'rgb(0, 0, 0, 0.25)'; + this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); // Draw triangle + + const triangle_size = this.canvas.height * 0.1; + const region = new Path2D(); + region.moveTo(this.canvas.width / 2 + triangle_size, this.canvas.height / 2); // start at the pointy end + + region.lineTo(this.canvas.width / 2 - triangle_size / 2, this.canvas.height / 2 + triangle_size); + region.lineTo(this.canvas.width / 2 - triangle_size / 2, this.canvas.height / 2 - triangle_size); + region.closePath(); + this.ctx.fillStyle = 'rgb(200, 200, 200, 0.75)'; + this.ctx.fill(region); // Draw circle + + const circle_size = triangle_size * 1.5; + this.ctx.lineWidth = this.canvas.height * 0.02; + this.ctx.strokeStyle = 'rgb(200, 200, 200, 0.75)'; + this.ctx.beginPath(); + this.ctx.arc(this.canvas.width / 2, this.canvas.height / 2, circle_size, 0, 2 * Math.PI); + this.ctx.stroke(); } -} + doDecodeProgress(stream, draw) { + this.doShowProgress(stream.pos, stream.data.length, draw); + } + /** + * @param{boolean=} draw Whether to draw progress bar or not; + * this is not idempotent because of translucency. + * Note that this means that the text will be unsynchronized + * with the progress bar on non-frames; + * but those are typically so small (GCE etc.) that it doesn't really matter + */ -class RichTextDirective extends directive_s { - render(text, offset, mentions, options, callback) { - // eslint-disable-line class-methods-use-this - const renderer = new RichTextRenderer(text, offset, mentions, options); - const result = renderer.render(); - callback === null || callback === void 0 ? void 0 : callback(); - return result; + + withProgress(stream, fn, draw) { + return block => { + fn === null || fn === void 0 ? void 0 : fn(block); + this.doDecodeProgress(stream, draw); + }; } -} + getCanvasScale() { + let scale; -const renderRichText = directive_i(RichTextDirective); -/* harmony default export */ const rich_text = (renderRichText); -;// CONCATENATED MODULE: ./src/shared/chat/message-body.js + if (this.options.max_width && this.hdr && this.hdr.width > this.options.max_width) { + scale = this.options.max_width / this.hdr.width; + } else { + scale = 1; + } + + return scale; + } + /** + * Makes an HTTP request to fetch a GIF + * @param { String } url + * @returns { Promise } Returns a promise which resolves with the response data. + */ + fetchGIF(url) { + const promise = getOpenPromise(); + const h = new XMLHttpRequest(); + h.open('GET', url, true); + h === null || h === void 0 ? void 0 : h.overrideMimeType('text/plain; charset=x-user-defined'); - - -class MessageBody extends CustomElement { - static get properties() { - return { - model: { - type: Object - }, - is_me_message: { - type: Boolean - }, - show_images: { - type: Boolean - }, - text: { - type: String + h.onload = () => { + if (h.status != 200) { + this.showError('xhr - response'); + return promise.reject(); } - }; - } - onImgClick(ev) { - // eslint-disable-line class-methods-use-this - ev.preventDefault(); - api.modal.create(modals_image, { - 'src': ev.target.src - }, ev).show(ev); - } - - onImgLoad() { - this.dispatchEvent(new CustomEvent('imageLoaded', { - detail: this, - 'bubbles': true - })); - } - - render() { - const callback = () => { - var _this$model$collectio; - - return (_this$model$collectio = this.model.collection) === null || _this$model$collectio === void 0 ? void 0 : _this$model$collectio.trigger('rendered', this.model); + promise.resolve(h.response); }; - const offset = 0; - const mentions = this.model.get('references'); - const options = { - 'nick': this.model.collection.chatbox.get('nick'), - 'onImgClick': this.onImgClick, - 'onImgLoad': () => this.onImgLoad(), - 'render_styling': !this.model.get('is_unstyled') && api.settings.get('allow_message_styling'), - 'show_images': this.show_images, - 'show_me_message': true - }; - return rich_text(this.text, offset, mentions, options, callback); + h.onprogress = e => e.lengthComputable && this.doShowProgress(e.loaded, e.total, true); + + h.onerror = () => this.showError('xhr'); + + h.send(); + return promise; } } -api.elements.define('converse-chat-message-body', MessageBody); -;// CONCATENATED MODULE: ./src/templates/audio.js -function audio_templateObject() { - const data = audio_taggedTemplateLiteral(["\n \n ", "\n"]); - - audio_templateObject = function () { - return data; - }; - - return data; -} - -function audio_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const audio = (o => T(audio_templateObject(), o.url, o.url, o.label_download)); ;// CONCATENATED MODULE: ./src/templates/file.js -function file_templateObject() { - const data = file_taggedTemplateLiteral(["", ""]); - - file_templateObject = function () { - return data; - }; - - return data; -} - -function file_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } -/* harmony default export */ const file = (o => T(file_templateObject(), o.url, o.label_download)); +/* harmony default export */ const file = ((url, name) => { + const i18n_download = __('Download file "%1$s"', name); + + return T`${i18n_download}`; +}); ;// CONCATENATED MODULE: ./src/templates/form_captcha.js -function form_captcha_templateObject2() { - const data = form_captcha_taggedTemplateLiteral([""]); - form_captcha_templateObject2 = function () { - return data; - }; - - return data; -} - -function form_captcha_templateObject() { - const data = form_captcha_taggedTemplateLiteral(["\n
\n ", "\n \n \n
\n"]); - - form_captcha_templateObject = function () { - return data; - }; - - return data; -} - -function form_captcha_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const form_captcha = (o => T(form_captcha_templateObject(), o.label ? T(form_captcha_templateObject2(), o.label) : '', o.type, o.data, o.name, o.required)); +/* harmony default export */ const form_captcha = (o => T` +
+ ${o.label ? T`` : ''} + + +
+`); ;// CONCATENATED MODULE: ./src/templates/form_checkbox.js -function form_checkbox_templateObject() { - const data = form_checkbox_taggedTemplateLiteral(["\n
\n \n \n
"]); - form_checkbox_templateObject = function () { - return data; - }; - - return data; -} - -function form_checkbox_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const form_checkbox = (o => T(form_checkbox_templateObject(), o.id, o.name, o.checked, o.required, o.id, o.label)); +/* harmony default export */ const form_checkbox = (o => T` +
+ + +
`); ;// CONCATENATED MODULE: ./src/templates/form_help.js -function form_help_templateObject() { - const data = form_help_taggedTemplateLiteral(["

", "

"]); - form_help_templateObject = function () { - return data; - }; - - return data; -} - -function form_help_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const form_help = (o => T(form_help_templateObject(), o.text)); +/* harmony default export */ const form_help = (o => T`

${o.text}

`); ;// CONCATENATED MODULE: ./src/templates/form_input.js -function form_input_templateObject3() { - const data = form_input_taggedTemplateLiteral(["\n \n "]); - form_input_templateObject3 = function () { - return data; - }; +/* harmony default export */ const form_input = (o => T` +
+ ${o.type !== 'hidden' ? T`` : ''} - return data; -} + + ${o.type === 'password' && o.fixed_username ? T` + + ` : ''} -function form_input_templateObject2() { - const data = form_input_taggedTemplateLiteral([""]); - - form_input_templateObject2 = function () { - return data; - }; - - return data; -} - -function form_input_templateObject() { - const data = form_input_taggedTemplateLiteral(["\n
\n ", "\n\n \n ", "\n\n \n
"]); - - form_input_templateObject = function () { - return data; - }; - - return data; -} - -function form_input_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const form_input = (o => T(form_input_templateObject(), o.type !== 'hidden' ? T(form_input_templateObject2(), o.id, o.label) : '', o.type === 'password' && o.fixed_username ? T(form_input_templateObject3(), o.fixed_username) : '', o.autocomplete || '', o.id, o.name, o.placeholder || '', o.type, o.value || '', o.required)); + +
`); ;// CONCATENATED MODULE: ./src/templates/form_select.js -function form_select_templateObject2() { - const data = form_select_taggedTemplateLiteral(["\n
\n \n \n
"]); - - form_select_templateObject2 = function () { - return data; - }; - - return data; -} - -function form_select_templateObject() { - const data = form_select_taggedTemplateLiteral([""]); - - form_select_templateObject = function () { - return data; - }; - - return data; -} - -function form_select_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -const tpl_option = o => T(form_select_templateObject(), o.value, o.selected, o.label); +const tpl_option = o => T``; /* harmony default export */ const form_select = (o => { var _o$options; - return T(form_select_templateObject2(), o.id, o.label, o.id, o.name, o.multiple, (_o$options = o.options) === null || _o$options === void 0 ? void 0 : _o$options.map(o => tpl_option(o))); + return T` +
+ + +
`; }); ;// CONCATENATED MODULE: ./src/templates/form_textarea.js -function form_textarea_templateObject() { - const data = form_textarea_taggedTemplateLiteral(["\n \n \n"]); - form_textarea_templateObject = function () { - return data; - }; - - return data; -} - -function form_textarea_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const form_textarea = (o => T(form_textarea_templateObject(), o.label, o.name, o.value)); +/* harmony default export */ const form_textarea = (o => T` + + +`); ;// CONCATENATED MODULE: ./src/templates/form_url.js -function form_url_templateObject() { - const data = form_url_taggedTemplateLiteral(["\n "]); - form_url_templateObject = function () { - return data; - }; - - return data; -} - -function form_url_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const form_url = (o => T(form_url_templateObject(), o.label, o.value, o.value)); +/* harmony default export */ const form_url = (o => T` + `); ;// CONCATENATED MODULE: ./src/templates/form_username.js -function form_username_templateObject2() { - const data = form_username_taggedTemplateLiteral([""]); - form_username_templateObject2 = function () { - return data; - }; +/* harmony default export */ const form_username = (o => T` +
+ ${o.label ? T`` : ''} +
+
+ +
${o.domain}
+
+
+
`); +;// CONCATENATED MODULE: ./src/templates/hyperlink.js - return data; + + +function onClickXMPPURI(ev) { + ev.preventDefault(); + api.rooms.open(ev.target.href); } -function form_username_templateObject() { - const data = form_username_taggedTemplateLiteral(["\n
\n ", "\n
\n
\n \n
", "
\n
\n
\n
"]); +/* harmony default export */ const hyperlink = ((uri, url_text) => { + let normalized_url = uri.normalize()._string; - form_username_templateObject = function () { - return data; - }; + const pretty_url = uri._parts.urn ? normalized_url : uri.readable(); + const visible_url = url_text || pretty_url; - return data; -} - -function form_username_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const form_username = (o => T(form_username_templateObject(), o.label ? T(form_username_templateObject2(), o.label) : '', o.name, o.type, o.value || '', o.required, o.domain, o.domain)); -;// CONCATENATED MODULE: ./node_modules/lit/async-directive.js - -//# sourceMappingURL=async-directive.js.map - -;// CONCATENATED MODULE: ./src/shared/directives/image.js -function directives_image_templateObject() { - const data = directives_image_taggedTemplateLiteral([""]); - - directives_image_templateObject = function () { - return data; - }; - - return data; -} - -function directives_image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - - - - - -class ImageDirective extends async_directive_c { - render(src, href, onLoad, onClick) { - return T(directives_image_templateObject(), href, src, onClick, () => this.onError(src, href, onLoad, onClick), onLoad); + if (!uri._parts.protocol && !normalized_url.startsWith('http://') && !normalized_url.startsWith('https://')) { + normalized_url = 'http://' + normalized_url; } - onError(src, href, onLoad, onClick) { - const u = core_converse.env.utils; - - if (u.isURLWithImageExtension(src)) { - this.setValue(u.convertUrlToHyperlink(href)); - } else { - // Before giving up and falling back to just rendering a hyperlink, - // we attach `.png` and try one more time. - // This works with some Imgur URLs - const uri = new (URI_default())(src); - const filename = uri.filename(); - uri.filename("".concat(filename, ".png")); - this.setValue(renderImage(uri.toString(), href, onLoad, onClick)); - } + if (uri._parts.protocol === 'xmpp' && uri._parts.query === 'join') { + return T` + ${visible_url}`; } -} -/** - * lit directive which attempts to render an element from a URL. - * It will fall back to rendering an element if it can't. - * - * @param { String } src - The value that will be assigned to the `src` attribute of the `` element. - * @param { String } href - The value that will be assigned to the `href` attribute of the `` element. - * @param { Function } onLoad - A callback function to be called once the image has loaded. - * @param { Function } onClick - A callback function to be called once the image has been clicked. - */ - - -const renderImage = directive_i(ImageDirective); -;// CONCATENATED MODULE: ./src/templates/image.js -function templates_image_templateObject() { - const data = templates_image_taggedTemplateLiteral(["", ""]); - - templates_image_templateObject = function () { - return data; - }; - - return data; -} - -function templates_image_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - -/* harmony default export */ const src_templates_image = (o => T(templates_image_templateObject(), renderImage(o.url, o.url, o.onLoad, o.onClick))); + return T`${visible_url}`; +}); ;// CONCATENATED MODULE: ./src/templates/video.js -function video_templateObject() { - const data = video_taggedTemplateLiteral([""]); - video_templateObject = function () { - return data; - }; - - return data; -} - -function video_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const video = (o => T(video_templateObject(), o.url)); +/* harmony default export */ const video = ((url, hide_url) => T`${hide_url ? '' : T`${url}`}`); ;// CONCATENATED MODULE: ./src/utils/html.js -function html_templateObject2() { - const data = html_taggedTemplateLiteral(["", ""]); - - html_templateObject2 = function () { - return data; - }; - - return data; -} - -function html_templateObject() { - const data = html_taggedTemplateLiteral(["\n ", ""]); - - html_templateObject = function () { - return data; - }; - - return data; -} - -function html_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /** * @copyright 2020, the Converse.js contributors * @license Mozilla Public License (MPLv2) @@ -41485,7 +44469,7 @@ const APPROVED_URL_PROTOCOLS = ['http', 'https', 'xmpp', 'mailto']; function getAutoCompleteProperty(name, options) { return { 'muc#roomconfig_lang': 'language', - 'muc#roomconfig_roomsecret': (options === null || options === void 0 ? void 0 : options.new_password) ? 'new-password' : 'current-password' + 'muc#roomconfig_roomsecret': options !== null && options !== void 0 && options.new_password ? 'new-password' : 'current-password' }[name]; } @@ -41499,68 +44483,39 @@ const XFORM_TYPE_MAP = { 'list-single': 'dropdown', 'list-multi': 'dropdown' }; +const XFORM_VALIDATE_TYPE_MAP = { + 'xs:anyURI': 'url', + 'xs:byte': 'number', + 'xs:date': 'date', + 'xs:dateTime': 'datetime', + 'xs:int': 'number', + 'xs:integer': 'number', + 'xs:time': 'time' +}; + +function getInputType(field) { + const type = XFORM_TYPE_MAP[field.getAttribute('type')]; + + if (type == 'text') { + const datatypes = field.getElementsByTagNameNS("http://jabber.org/protocol/xdata-validate", "validate"); + + if (datatypes.length === 1) { + const datatype = datatypes[0].getAttribute("datatype"); + return XFORM_VALIDATE_TYPE_MAP[datatype] || type; + } + } + + return type; +} function slideOutWrapup(el) { /* Wrapup function for slideOut. */ el.removeAttribute('data-slider-marker'); el.classList.remove('collapsed'); - el.style.overflow = ""; - el.style.height = ""; + el.style.overflow = ''; + el.style.height = ''; } -function getURI(url) { - try { - return url instanceof (URI_default()) ? url : new (URI_default())(url); - } catch (error) { - headless_log.debug(error); - return null; - } -} - -utils_core.getURI = getURI; - -function checkTLS(uri) { - return window.location.protocol === 'http:' || window.location.protocol === 'https:' && uri.protocol().toLowerCase() === "https"; -} - -function checkFileTypes(types, url) { - const uri = getURI(url); - - if (uri === null || !checkTLS(uri)) { - return false; - } - - const filename = uri.filename().toLowerCase(); - return !!types.filter(ext => filename.endsWith(ext)).length; -} - -utils_core.isAudioURL = url => checkFileTypes(['.ogg', '.mp3', '.m4a'], url); - -utils_core.isVideoURL = url => checkFileTypes(['.mp4', '.webm'], url); - -utils_core.isURLWithImageExtension = url => checkFileTypes(['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.svg'], url); - -utils_core.isImageURL = url => { - const regex = api.settings.get('image_urls_regex'); - return (regex === null || regex === void 0 ? void 0 : regex.test(url)) || utils_core.isURLWithImageExtension(url); -}; - -utils_core.isImageDomainAllowed = url => { - const show_images_inline = api.settings.get('show_images_inline'); - - if (!Array.isArray(show_images_inline)) { - return true; - } - - try { - const image_domain = getURI(url).domain(); - return show_images_inline.includes(image_domain); - } catch (error) { - headless_log.debug(error); - return true; - } -}; - function getFileName(uri) { try { return decodeURI(uri.filename()); @@ -41569,36 +44524,6 @@ function getFileName(uri) { return uri.filename(); } } - -function renderAudioURL(_converse, uri) { - const { - __ - } = _converse; - return audio({ - 'url': uri.toString(), - 'label_download': __('Download audio file "%1$s"', getFileName(uri)) - }); -} - -function renderImageURL(_converse, uri) { - const { - __ - } = _converse; - return file({ - 'url': uri.toString(), - 'label_download': __('Download image file "%1$s"', getFileName(uri)) - }); -} - -function renderFileURL(_converse, uri) { - const { - __ - } = _converse; - return file({ - 'url': uri.toString(), - 'label_download': __('Download file "%1$s"', getFileName(uri)) - }); -} /** * Returns the markup for a URL that points to a downloadable asset * (such as a video, image or audio file). @@ -41608,25 +44533,23 @@ function renderFileURL(_converse, uri) { */ -utils_core.getOOBURLMarkup = function (_converse, url) { +function getOOBURLMarkup(url) { const uri = getURI(url); if (uri === null) { return url; } - if (utils_core.isVideoURL(uri)) { - return video({ - url - }); - } else if (utils_core.isAudioURL(uri)) { - return renderAudioURL(_converse, uri); - } else if (utils_core.isImageURL(uri)) { - return renderImageURL(_converse, uri); + if (isVideoURL(uri)) { + return video(url); + } else if (isAudioURL(uri)) { + return audio(url); + } else if (isImageURL(uri)) { + return file(uri.toString(), getFileName(uri)); } else { - return renderFileURL(_converse, uri); + return file(uri.toString(), getFileName(uri)); } -}; +} /** * Return the height of the passed in DOM element, * based on the heights of its children. @@ -41635,7 +44558,6 @@ utils_core.getOOBURLMarkup = function (_converse, url) { * @returns {integer} */ - utils_core.calculateElementHeight = function (el) { return Array.from(el.children).reduce((result, child) => result + child.offsetHeight, 0); }; @@ -41778,37 +44700,7 @@ utils_core.unescapeHTML = function (string) { }; utils_core.escapeHTML = function (string) { - return string.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); -}; - -utils_core.convertToImageTag = function (url, onLoad, onClick) { - return src_templates_image({ - url, - onClick, - onLoad - }); -}; - -function onClickXMPPURI(ev) { - ev.preventDefault(); - api.rooms.open(ev.target.href); -} - -utils_core.convertURIoHyperlink = function (uri, urlAsTyped) { - let normalized_url = uri.normalize()._string; - - const pretty_url = uri._parts.urn ? normalized_url : uri.readable(); - const visible_url = urlAsTyped || pretty_url; - - if (!uri._parts.protocol && !normalized_url.startsWith('http://') && !normalized_url.startsWith('https://')) { - normalized_url = 'http://' + normalized_url; - } - - if (uri._parts.protocol === 'xmpp' && uri._parts.query === 'join') { - return T(html_templateObject(), onClickXMPPURI, normalized_url, visible_url); - } - - return T(html_templateObject2(), normalized_url, visible_url); + return string.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); }; function isProtocolApproved(protocol, safeProtocolsList = APPROVED_URL_PROTOCOLS) { @@ -41825,23 +44717,16 @@ function isUrlValid(urlString) { } } -utils_core.convertUrlToHyperlink = function (url) { - const http_url = RegExp('^w{3}.', 'ig').test(url) ? "http://".concat(url) : url; +function getHyperlinkTemplate(url) { + const http_url = RegExp('^w{3}.', 'ig').test(url) ? `http://${url}` : url; const uri = getURI(url); if (uri !== null && isUrlValid(http_url) && (isProtocolApproved(uri._parts.protocol) || !uri._parts.protocol)) { - return this.convertURIoHyperlink(uri, url); + return hyperlink(uri, url); } return url; -}; - -utils_core.filterQueryParamsFromURL = function (url) { - const paramsArray = api.settings.get("filter_url_query_params"); - if (!paramsArray) return url; - const parsed_uri = getURI(url); - return parsed_uri.removeQuery(paramsArray).toString(); -}; +} utils_core.slideInAllElements = function (elements, duration = 300) { return Promise.all(Array.from(elements).map(e => utils_core.slideIn(e, duration))); @@ -41866,7 +44751,7 @@ utils_core.slideToggleElement = function (el, duration) { utils_core.slideOut = function (el, duration = 200) { return new Promise((resolve, reject) => { if (!el) { - const err = "An element needs to be passed in to slideOut"; + const err = 'An element needs to be passed in to slideOut'; headless_log.warn(err); reject(new Error(err)); return; @@ -41910,8 +44795,8 @@ utils_core.slideOut = function (el, duration = 200) { // offsetHeight beforehand. el.removeAttribute('data-slider-marker'); el.style.height = utils_core.calculateElementHeight(el) + 'px'; - el.style.overflow = ""; - el.style.height = ""; + el.style.overflow = ''; + el.style.height = ''; resolve(); } } @@ -41928,7 +44813,7 @@ utils_core.slideIn = function (el, duration = 200) { /* Hides/collapses an element by sliding it into itself. */ return new Promise((resolve, reject) => { if (!el) { - const err = "An element needs to be passed in to slideIn"; + const err = 'An element needs to be passed in to slideIn'; headless_log.warn(err); return reject(new Error(err)); } else if (utils_core.hasClass('collapsed', el)) { @@ -41936,7 +44821,7 @@ utils_core.slideIn = function (el, duration = 200) { } else if (window.converse_disable_effects) { // Effects are disabled (for tests) el.classList.add('collapsed'); - el.style.height = ""; + el.style.height = ''; return resolve(el); } @@ -41962,7 +44847,7 @@ utils_core.slideIn = function (el, duration = 200) { } else { el.removeAttribute('data-slider-marker'); el.classList.add('collapsed'); - el.style.height = ""; + el.style.height = ''; resolve(el); } } @@ -41998,7 +44883,7 @@ utils_core.isVisible = function (el) { utils_core.fadeIn = function (el, callback) { if (!el) { - headless_log.warn("An element needs to be passed in to fadeIn"); + headless_log.warn('An element needs to be passed in to fadeIn'); } if (window.converse_disable_effects) { @@ -42009,9 +44894,9 @@ utils_core.fadeIn = function (el, callback) { if (utils_core.hasClass('hidden', el)) { el.classList.add('visible'); el.classList.remove('hidden'); - el.addEventListener("webkitAnimationEnd", () => afterAnimationEnds(el, callback)); - el.addEventListener("animationend", () => afterAnimationEnds(el, callback)); - el.addEventListener("oanimationend", () => afterAnimationEnds(el, callback)); + el.addEventListener('webkitAnimationEnd', () => afterAnimationEnds(el, callback)); + el.addEventListener('animationend', () => afterAnimationEnds(el, callback)); + el.addEventListener('oanimationend', () => afterAnimationEnds(el, callback)); } else { afterAnimationEnds(el, callback); } @@ -42073,7 +44958,7 @@ utils_core.xForm2TemplateResult = function (field, stanza, options) { 'id': utils_core.getUniqueId(), 'name': field.getAttribute('var'), 'label': field.getAttribute('label') || '', - 'checked': (value === "1" || value === "true") && 'checked="1"' || '', + 'checked': (value === '1' || value === 'true') && 'checked="1"' || '', 'required': !!field.querySelector('required') }); } else if (field.getAttribute('var') === 'url') { @@ -42089,7 +44974,7 @@ utils_core.xForm2TemplateResult = function (field, stanza, options) { return form_username({ 'domain': ' @' + options.domain, 'name': field.getAttribute('var'), - 'type': XFORM_TYPE_MAP[field.getAttribute('type')], + 'type': getInputType(field), 'label': field.getAttribute('label') || '', 'value': (_field$querySelector5 = field.querySelector('value')) === null || _field$querySelector5 === void 0 ? void 0 : _field$querySelector5.textContent, 'required': !!field.querySelector('required') @@ -42117,13 +45002,1098 @@ utils_core.xForm2TemplateResult = function (field, stanza, options) { 'autocomplete': getAutoCompleteProperty(name, options), 'placeholder': null, 'required': !!field.querySelector('required'), - 'type': XFORM_TYPE_MAP[field.getAttribute('type')], + 'type': getInputType(field), 'value': (_field$querySelector6 = field.querySelector('value')) === null || _field$querySelector6 === void 0 ? void 0 : _field$querySelector6.textContent }); } }; +Object.assign(utils_core, { + getOOBURLMarkup +}); /* harmony default export */ const html = (utils_core); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/components/styles/gif.scss +var gif = __webpack_require__(3735); +;// CONCATENATED MODULE: ./src/shared/components/styles/gif.scss + + + + + + + + + + + +var gif_options = {}; + +gif_options.styleTagTransform = (styleTagTransform_default()); +gif_options.setAttributes = (setAttributesWithoutAttributes_default()); + + gif_options.insert = insertBySelector_default().bind(null, "head"); + +gif_options.domAPI = (styleDomAPI_default()); +gif_options.insertStyleElement = (insertStyleElement_default()); + +var gif_update = injectStylesIntoStyleTag_default()(gif/* default */.Z, gif_options); + + + + + /* harmony default export */ const styles_gif = (gif/* default */.Z && gif/* default.locals */.Z.locals ? gif/* default.locals */.Z.locals : undefined); + +;// CONCATENATED MODULE: ./src/shared/components/gif.js + + + + + + +class ConverseGIFElement extends CustomElement { + static get properties() { + /** + * @typedef { Object } ConverseGIFComponentProperties + * @property { Boolean } autoplay + * @property { Boolean } noloop + * @property { String } progress_color + * @property { String } nick + * @property { ('url'|'empty'|'error') } fallback + * @property { String } src + */ + return { + 'autoplay': { + type: Boolean + }, + 'noloop': { + type: Boolean + }, + 'progress_color': { + type: String + }, + 'fallback': { + type: String + }, + 'src': { + type: String + } + }; + } + + constructor() { + super(); + this.autoplay = false; + this.noloop = false; + this.fallback = 'url'; + } + + initGIF() { + const options = { + 'autoplay': this.autoplay, + 'loop': !this.noloop + }; + + if (this.progress_color) { + options['progress_color'] = this.progress_color; + } + + this.supergif = new ConverseGif(this, options); + } + + updated(changed) { + if (!this.supergif || changed.has('src')) { + this.initGIF(); + return; + } + + if (changed.has('autoplay')) { + this.supergif.options.autoplay = this.autoplay; + } + + if (changed.has('noloop')) { + this.supergif.options.loop = !this.noloop; + } + + if (changed.has('progress_color')) { + this.supergif.options.progress_color = this.progress_color; + } + } + + render() { + var _this$supergif; + + return (_this$supergif = this.supergif) !== null && _this$supergif !== void 0 && _this$supergif.load_error && ['url', 'empty'].includes(this.fallback) ? this.renderErrorFallback() : T` this.setHover()} + @mouseleave=${() => this.unsetHover()} + @click=${ev => this.onControlsClicked(ev)}>`; + } + + renderErrorFallback() { + if (this.fallback === 'url') { + return getHyperlinkTemplate(this.src); + } else if (this.fallback === 'empty') { + return ''; + } + } + + setHover() { + if (this.supergif) { + this.supergif.hovering = true; + this.hover_timeout && clearTimeout(this.hover_timeout); + this.hover_timeout = setTimeout(() => this.unsetHover(), 2000); + } + } + + unsetHover() { + if (this.supergif) this.supergif.hovering = false; + } + + onControlsClicked(ev) { + ev.preventDefault(); + + if (this.supergif.playing) { + this.supergif.pause(); + } else { + // When the user manually clicks play, we turn on looping + this.supergif.options.loop = true; + this.supergif.play(); + } + } + +} +api.elements.define('converse-gif', ConverseGIFElement); +;// CONCATENATED MODULE: ./src/templates/gif.js + + +/* harmony default export */ const templates_gif = ((url, hide_url) => T`${hide_url ? '' : T`${url}`}`); +;// CONCATENATED MODULE: ./node_modules/lit/async-directive.js + +//# sourceMappingURL=async-directive.js.map + +;// CONCATENATED MODULE: ./src/shared/directives/image.js + + + + + + +const { + URI: image_URI +} = core_converse.env; + +class ImageDirective extends async_directive_c { + render(src, href, onLoad, onClick) { + return href ? T`${this.renderImage(src, href, onLoad, onClick)}` : this.renderImage(src, href, onLoad, onClick); + } + + renderImage(src, href, onLoad, onClick) { + return T` this.onError(src, href, onLoad, onClick)} + @load=${onLoad}/>`; + } + + onError(src, href, onLoad, onClick) { + if (isURLWithImageExtension(src)) { + href && this.setValue(getHyperlinkTemplate(href)); + } else { + // Before giving up and falling back to just rendering a hyperlink, + // we attach `.png` and try one more time. + // This works with some Imgur URLs + const uri = new image_URI(src); + const filename = uri.filename(); + uri.filename(`${filename}.png`); + this.setValue(renderImage(uri.toString(), href, onLoad, onClick)); + } + } + +} +/** + * lit directive which attempts to render an element from a URL. + * It will fall back to rendering an element if it can't. + * + * @param { String } src - The value that will be assigned to the `src` attribute of the `` element. + * @param { String } href - The value that will be assigned to the `href` attribute of the `` element. + * @param { Function } onLoad - A callback function to be called once the image has loaded. + * @param { Function } onClick - A callback function to be called once the image has been clicked. + */ + + +const renderImage = directive_i(ImageDirective); +;// CONCATENATED MODULE: ./src/templates/image.js + + +/* harmony default export */ const src_templates_image = (o => T`${renderImage(o.url, o.href, o.onLoad, o.onClick)}`); +;// CONCATENATED MODULE: ./src/shared/directives/styling.js + + + + + + +async function transform(t) { + try { + await t.addTemplates(); + } catch (e) { + headless_log.error(e); + } + + return t.payload; +} + +class StylingDirective extends directive_s { + render(txt, offset, options) { + // eslint-disable-line class-methods-use-this + const t = new RichText(txt, offset, Object.assign(options, { + 'show_images': false, + 'embed_videos': false, + 'embed_audio': false + })); + return T`${until_o(transform(t), T`${t}`)}`; + } + +} + +const renderStylingDirectiveBody = directive_i(StylingDirective); +;// CONCATENATED MODULE: ./src/shared/styling.js +/** + * @copyright 2020, the Converse.js contributors + * @license Mozilla Public License (MPLv2) + * @description Utility functions to help with parsing XEP-393 message styling hints + * @todo Other parsing helpers can be made more abstract and placed here. + */ + + +const bracketing_directives = ['*', '_', '~', '`']; +const styling_directives = [...bracketing_directives, '```', '>']; +const styling_map = { + '*': { + 'name': 'strong', + 'type': 'span' + }, + '_': { + 'name': 'emphasis', + 'type': 'span' + }, + '~': { + 'name': 'strike', + 'type': 'span' + }, + '`': { + 'name': 'preformatted', + 'type': 'span' + }, + '```': { + 'name': 'preformatted_block', + 'type': 'block' + }, + '>': { + 'name': 'quote', + 'type': 'block' + } +}; +const dont_escape = ['_', '>', '`', '~']; +const styling_templates = { + // m is the chatbox model + // i is the offset of this directive relative to the start of the original message + 'emphasis': (txt, i, options) => T`_${renderStylingDirectiveBody(txt, i, options)}_`, + 'preformatted': txt => T`\`${txt}\``, + 'preformatted_block': txt => T`
\`\`\`
${txt}
\`\`\`
`, + 'quote': (txt, i, options) => T`
${renderStylingDirectiveBody(txt, i, options)}
`, + 'strike': (txt, i, options) => T`~${renderStylingDirectiveBody(txt, i, options)}~`, + 'strong': (txt, i, options) => T`*${renderStylingDirectiveBody(txt, i, options)}*` +}; +/** + * Checks whether a given character "d" at index "i" of "text" is a valid opening or closing directive. + * @param { String } d - The potential directive + * @param { String } text - The text in which the directive appears + * @param { Number } i - The directive index + * @param { Boolean } opening - Check for a valid opening or closing directive + */ + +function isValidDirective(d, text, i, opening) { + // Ignore directives that are parts of words + // More info on the Regexes used here: https://javascript.info/regexp-unicode#unicode-properties-p + if (opening) { + const regex = RegExp(dont_escape.includes(d) ? `^(\\p{L}|\\p{N})${d}` : `^(\\p{L}|\\p{N})\\${d}`, 'u'); + + if (i > 1 && regex.test(text.slice(i - 1))) { + return false; + } + + const is_quote = isQuoteDirective(d); + + if (is_quote && i > 0 && text[i - 1] !== '\n') { + // Quote directives must be on newlines + return false; + } else if (bracketing_directives.includes(d) && text[i + 1] === d) { + // Don't consider empty bracketing directives as valid (e.g. **, `` etc.) + return false; + } + } else { + const regex = RegExp(dont_escape.includes(d) ? `^${d}(\\p{L}|\\p{N})` : `^\\${d}(\\p{L}|\\p{N})`, 'u'); + + if (i < text.length - 1 && regex.test(text.slice(i))) { + return false; + } + + if (bracketing_directives.includes(d) && text[i - 1] === d) { + // Don't consider empty directives as valid (e.g. **, `` etc.) + return false; + } + } + + return true; +} +/** + * Given a specific index "i" of "text", return the directive it matches or + * null otherwise. + * @param { String } text - The text in which the directive appears + * @param { Number } i - The directive index + * @param { Boolean } opening - Whether we're looking for an opening or closing directive + */ + + +function getDirective(text, i, opening = true) { + let d; + + if (/(^```\s*\n|^```\s*$)/.test(text.slice(i)) && (i === 0 || text[i - 1] === '\n' || text[i - 1] === '>')) { + d = text.slice(i, i + 3); + } else if (styling_directives.includes(text.slice(i, i + 1))) { + d = text.slice(i, i + 1); + if (!isValidDirective(d, text, i, opening)) return null; + } else { + return null; + } + + return d; +} +/** + * Given a directive "d", which occurs in "text" at index "i", check that it + * has a valid closing directive and return the length from start to end of the + * directive. + * @param { String } d -The directive + * @param { Number } i - The directive index + * @param { String } text -The text in which the directive appears + */ + + +function getDirectiveLength(d, text, i) { + if (!d) { + return 0; + } + + const begin = i; + i += d.length; + + if (isQuoteDirective(d)) { + i += text.slice(i).split(/\n[^>]/).shift().length; + return i - begin; + } else if (styling_map[d].type === 'span') { + const line = text.slice(i).split('\n').shift(); + let j = 0; + let idx = line.indexOf(d); + + while (idx !== -1) { + if (getDirective(text, i + idx, false) === d) { + return idx + 2 * d.length; + } + + idx = line.indexOf(d, j++); + } + + return 0; + } else { + // block directives + const substring = text.slice(i + 1); + let j = 0; + let idx = substring.indexOf(d); + + while (idx !== -1) { + if (getDirective(text, i + 1 + idx, false) === d) { + return idx + 1 + 2 * d.length; + } + + idx = substring.indexOf(d, j++); + } + + return 0; + } +} + +function getDirectiveAndLength(text, i) { + const d = getDirective(text, i); + const length = d ? getDirectiveLength(d, text, i) : 0; + return length > 0 ? { + d, + length + } : {}; +} +const isQuoteDirective = d => ['>', '>'].includes(d); +function getDirectiveTemplate(d, text, offset, options) { + const template = styling_templates[styling_map[d].name]; + + if (isQuoteDirective(d)) { + const newtext = text.replace(/\n>/g, '\n') // Don't show the directive itself + .replace(/\n$/, ''); // Trim line-break at the end + + return template(newtext, offset, options); + } else { + return template(text, offset, options); + } +} +function containsDirectives(text) { + for (let i = 0; i < styling_directives.length; i++) { + if (text.includes(styling_directives[i])) { + return true; + } + } +} +;// CONCATENATED MODULE: ./src/shared/rich-text.js + + + + + + + + + + + + + +const rich_text_isString = s => typeof s === 'string'; // We don't render more than two line-breaks, replace extra line-breaks with +// the zero-width whitespace character + + +const collapseLineBreaks = text => text.replace(/\n\n+/g, m => `\n${'\u200B'.repeat(m.length - 2)}\n`); + +const tpl_mention_with_nick = o => T`${o.mention}`; + +const tpl_mention = o => T`${o.mention}`; +/** + * @class RichText + * A String subclass that is used to render rich text (i.e. text that contains + * hyperlinks, images, mentions, styling etc.). + * + * The "rich" parts of the text is represented by lit TemplateResult + * objects which are added via the {@link RichText.addTemplateResult} + * method and saved as metadata. + * + * By default Converse adds TemplateResults to support emojis, hyperlinks, + * images, map URIs and mentions. + * + * 3rd party plugins can listen for the `beforeMessageBodyTransformed` + * and/or `afterMessageBodyTransformed` events and then call + * `addTemplateResult` on the RichText instance in order to add their own + * rich features. + */ + + +class RichText extends String { + /** + * Create a new {@link RichText} instance. + * @param { String } text - The text to be annotated + * @param { Integer } offset - The offset of this particular piece of text + * from the start of the original message text. This is necessary because + * RichText instances can be nested when templates call directives + * which create new RichText instances (as happens with XEP-393 styling directives). + * @param { Object } options + * @param { String } options.nick - The current user's nickname (only relevant if the message is in a XEP-0045 MUC) + * @param { Boolean } options.render_styling - Whether XEP-0393 message styling should be applied to the message + * @param { Boolean } [options.embed_audio] - Whether audio URLs should be rendered as

", "

"]); - - _templateObject10 = function () { - return data; - }; - - return data; -} - -function _templateObject9() { - const data = user_details_taggedTemplateLiteral(["

", "

"]); - - _templateObject9 = function () { - return data; - }; - - return data; -} - -function _templateObject8() { - const data = user_details_taggedTemplateLiteral(["

", "

"]); - - _templateObject8 = function () { - return data; - }; - - return data; -} - -function user_details_templateObject7() { - const data = user_details_taggedTemplateLiteral(["

", "

"]); - - user_details_templateObject7 = function () { - return data; - }; - - return data; -} - -function user_details_templateObject6() { - const data = user_details_taggedTemplateLiteral(["
", "
"]); - - user_details_templateObject6 = function () { - return data; - }; - - return data; -} - -function user_details_templateObject5() { - const data = user_details_taggedTemplateLiteral(["\n
\n
\n
\n
", "
\n ", "\n
\n
\n ", "\n ", "\n

", "

\n ", "\n ", "\n ", "\n ", "\n\n ", "\n
\n
\n ", "\n \n ", "\n\n
\n
\n
\n "]); - - user_details_templateObject5 = function () { - return data; - }; - - return data; -} - -function user_details_templateObject4() { - const data = user_details_taggedTemplateLiteral(["\n \n "]); - - user_details_templateObject4 = function () { - return data; - }; - - return data; -} - -function user_details_templateObject3() { - const data = user_details_taggedTemplateLiteral(["
  • ", "
  • "]); - - user_details_templateObject3 = function () { - return data; - }; - - return data; -} - -function user_details_templateObject2() { - const data = user_details_taggedTemplateLiteral(["\n
    \n
      \n
    • ", "
    • \n ", "\n
    \n "]); - - user_details_templateObject2 = function () { - return data; - }; - - return data; -} - -function user_details_templateObject() { - const data = user_details_taggedTemplateLiteral(["\n
  • \n
    \n
    \n \n \n
    \n ", "\n
    \n
  • \n "]); - - user_details_templateObject = function () { - return data; - }; - - return data; -} - -function user_details_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -42944,7 +46885,21 @@ const device_fingerprint = o => { const i18n_untrusted = __('Untrusted'); if (o.device.get('bundle') && o.device.get('bundle').fingerprint) { - return T(user_details_templateObject(), o.device.get('trusted') !== -1 ? 'btn-primary active' : 'btn-secondary', o.device.get('id'), o.device.get('trusted') !== -1, i18n_trusted, o.device.get('trusted') !== -1 ? 'btn-primary active' : 'btn-secondary', o.device.get('id'), o.device.get('trusted') === -1, i18n_untrusted, o.utils.formatFingerprint(o.device.get('bundle').fingerprint)); + return T` +
  • +
    +
    + + +
    + ${o.utils.formatFingerprint(o.device.get('bundle').fingerprint)} +
    +
  • + `; } else { return ''; } @@ -42956,15 +46911,25 @@ const fingerprints = o => { const i18n_no_devices = __("No OMEMO-enabled devices found"); const devices = o.view.devicelist.devices; - return T(user_details_templateObject2(), i18n_fingerprints, devices.length ? devices.map(device => device_fingerprint(Object.assign({ + return T` +
    +
      +
    • ${i18n_fingerprints}
    • + ${devices.length ? devices.map(device => device_fingerprint(Object.assign({ device - }, o))) : T(user_details_templateObject3(), i18n_no_devices)); + }, o))) : T`
    • ${i18n_no_devices}
    • `} +
    + `; }; const remove_button = o => { const i18n_remove_contact = __('Remove as contact'); - return T(user_details_templateObject4(), o.removeContact, i18n_remove_contact); + return T` + + `; }; /* harmony default export */ const user_details = (o => { @@ -42990,7 +46955,33 @@ const remove_button = o => { 'height': '120', 'width': '120' }; - return T(user_details_templateObject5(), o.display_name, modal_header_close_button, o.image ? T(user_details_templateObject6(), avatar(Object.assign(o, avatar_data))) : '', o.fullname ? T(user_details_templateObject7(), i18n_full_name, o.fullname) : '', i18n_address, o.jid, o.jid, o.nickname ? T(_templateObject8(), i18n_nickname, o.nickname) : '', o.url ? T(_templateObject9(), i18n_url, o.url, o.url) : '', o.email ? T(_templateObject10(), i18n_email, o.email, o.email) : '', o.role ? T(_templateObject11(), i18n_role, o.role) : '', o._converse.pluggable.plugins['converse-omemo'].enabled(o._converse) ? fingerprints(o) : '', modal_close_button, i18n_refresh, o.allow_contact_removal && o.is_roster_contact ? remove_button(o) : ''); + return T` + + `; }); ;// CONCATENATED MODULE: ./src/modals/user-details.js @@ -43098,45 +47089,154 @@ const UserDetailsModal = base.extend({ }); shared_converse.UserDetailsModal = UserDetailsModal; /* harmony default export */ const modals_user_details = (UserDetailsModal); -// EXTERNAL MODULE: ./node_modules/filesize/lib/filesize.min.js -var lib_filesize_min = __webpack_require__(6755); -var lib_filesize_min_default = /*#__PURE__*/__webpack_require__.n(lib_filesize_min); -;// CONCATENATED MODULE: ./src/shared/chat/templates/unfurl.js -function unfurl_templateObject2() { - const data = unfurl_taggedTemplateLiteral([""]); - - unfurl_templateObject2 = function () { - return data; - }; - - return data; -} - -function unfurl_templateObject() { - const data = unfurl_taggedTemplateLiteral(["
    \n ", "\n
    \n
    ", "
    \n

    \n

    ", "

    \n
    \n
    "]); - - unfurl_templateObject = function () { - return data; - }; - - return data; -} - -function unfurl_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +;// CONCATENATED MODULE: ./src/shared/chat/templates/info-message.js -const unfurl_u = core_converse.env.utils; -/* harmony default export */ const unfurl = (o => { - return T(unfurl_templateObject(), o.image && unfurl_u.isImageDomainAllowed(o.image) ? T(unfurl_templateObject2(), o.url, o.image, o.onload) : '', o.url, o.title, o.description, o.url, unfurl_u.getURI(o.url).domain()); +const { + dayjs: info_message_dayjs +} = core_converse.env; +/* harmony default export */ const info_message = (el => { + const isodate = info_message_dayjs(el.model.get('time')).toISOString(); + + const i18n_retry = __('Retry'); + + return T` +
    + +
    + + +
    + ${el.model.get('reason') ? T`${el.model.get('reason')}` : ``} + ${el.model.get('error_text') ? T`${el.model.get('error_text')}` : ``} + ${el.model.get('retry_event_id') ? T`${i18n_retry}` : ''} +
    `; }); -// EXTERNAL MODULE: ./src/shared/chat/styles/unfurl.scss -var styles_unfurl = __webpack_require__(4867); +;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/mep-message.js + + +const { + dayjs: mep_message_dayjs +} = core_converse.env; +/* harmony default export */ const mep_message = (el => { + const isodate = mep_message_dayjs(el.model.get('time')).toISOString(); + return T` +
    + +
    +
    +
    + ${el.isRetracted() ? el.renderRetraction() : T` + + + ${el.model.get('reason') ? T`` : ``} + `} +
    + +
    +
    +
    `; +}); +;// CONCATENATED MODULE: ./src/shared/chat/templates/unfurl.js + + + +function isValidURL(url) { + // We don't consider relative URLs as valid + return !!getURI(url).host(); +} + +function isValidImage(image) { + return image && isDomainAllowed(image, 'allowed_image_domains') && isValidURL(image); +} + +function shouldHideMediaURL(url) { + return url && (isGIFURL(url) || isVideoURL(url) || isAudioURL(url)); +} + +const tpl_url_wrapper = (o, wrapped_template) => o.url && isValidURL(o.url) && !isGIFURL(o.url) ? T`${wrapped_template(o)}` : wrapped_template(o); + +const tpl_image = o => T``; + +/* harmony default export */ const unfurl = (o => { + const show_image = isValidImage(o.image); + const has_body_info = o.title || o.description || o.url; + + if (show_image || has_body_info) { + return T`
    + ${show_image ? tpl_url_wrapper(o, tpl_image) : ''} + ${has_body_info ? T`
    + ${o.title ? tpl_url_wrapper(o, o => T`
    ${o.title}
    `) : ''} + ${o.description ? T`

    + +

    ` : ''} + ${o.url ? T`

    + ${getURI(o.url).domain()} +

    ` : ''} +
    ` : ''} +
    `; + } else { + return ''; + } +}); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/chat/styles/unfurl.scss +var styles_unfurl = __webpack_require__(7415); +;// CONCATENATED MODULE: ./src/shared/chat/styles/unfurl.scss + + + + + + + + + + + +var unfurl_options = {}; + +unfurl_options.styleTagTransform = (styleTagTransform_default()); +unfurl_options.setAttributes = (setAttributesWithoutAttributes_default()); + + unfurl_options.insert = insertBySelector_default().bind(null, "head"); + +unfurl_options.domAPI = (styleDomAPI_default()); +unfurl_options.insertStyleElement = (insertStyleElement_default()); + +var unfurl_update = injectStylesIntoStyleTag_default()(styles_unfurl/* default */.Z, unfurl_options); + + + + + /* harmony default export */ const chat_styles_unfurl = (styles_unfurl/* default */.Z && styles_unfurl/* default.locals */.Z.locals ? styles_unfurl/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/shared/chat/unfurl.js + class MessageUnfurl extends CustomElement { static get properties() { return { @@ -43158,6 +47258,12 @@ class MessageUnfurl extends CustomElement { }; } + initialize() { + const settings = getAppSettings(); + this.listenTo(settings, 'change:allowed_image_domains', () => this.requestUpdate()); + this.listenTo(settings, 'change:render_media', () => this.requestUpdate()); + } + render() { return unfurl(Object.assign({ 'onload': () => this.onImageLoad() @@ -43179,240 +47285,297 @@ class MessageUnfurl extends CustomElement { } api.elements.define('converse-message-unfurl', MessageUnfurl); ;// CONCATENATED MODULE: ./src/shared/chat/templates/message.js -function message_templateObject7() { - const data = message_taggedTemplateLiteral([""]); - - message_templateObject7 = function () { - return data; - }; - - return data; -} - -function message_templateObject6() { - const data = message_taggedTemplateLiteral(["\n  \n ", "", " "]); - - message_templateObject6 = function () { - return data; - }; - - return data; -} - -function message_templateObject5() { - const data = message_taggedTemplateLiteral([""]); - - message_templateObject5 = function () { - return data; - }; - - return data; -} - -function message_templateObject4() { - const data = message_taggedTemplateLiteral(["", ""]); - - message_templateObject4 = function () { - return data; - }; - - return data; -} - -function message_templateObject3() { - const data = message_taggedTemplateLiteral(["\n \n ", "\n ", "\n \n ", "\n "]); - - message_templateObject3 = function () { - return data; - }; - - return data; -} - -function message_templateObject2() { - const data = message_taggedTemplateLiteral(["

    ", "
    "]); - - message_templateObject2 = function () { - return data; - }; - - return data; -} - -function message_templateObject() { - const data = message_taggedTemplateLiteral(["\n ", "\n
    \n\n \n \n\n ", "\n
    \n\n ", "\n
    \n
    \n ", "\n ", "\n
    \n \n
    \n\n ", "\n
    \n
    "]); - - message_templateObject = function () { - return data; - }; - - return data; -} - -function message_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } /* harmony default export */ const templates_message = ((el, o) => { - var _el$model$get, _el$model$get2; + var _el$model$get; const i18n_new_messages = __('New messages'); - return T(message_templateObject(), o.is_first_unread ? T(message_templateObject2(), i18n_new_messages) : '', el.getExtraMessageClasses(), o.time, o.msgid, o.from, o.is_encrypted, o.msgid, el.showUserModal, o.should_show_avatar ? renderAvatar(el.getAvatarData()) : '', o.sender, o.is_me_message ? 'chat-msg__content--action' : '', !o.is_me_message ? T(message_templateObject3(), el.showUserModal, o.username, o.hats.map(h => T(message_templateObject4(), h.title)), el.model.get('edited') || el.model.get('time'), o.pretty_time, o.is_encrypted ? T(message_templateObject5()) : '') : '', o.message_type, o.received ? 'chat-msg__body--received' : '', o.is_delayed ? 'chat-msg__body--delayed' : '', o.is_me_message ? T(message_templateObject6(), o.edited || o.time, o.pretty_time, o.is_me_message ? '**' : '', o.username) : '', o.is_retracted ? el.renderRetraction() : el.renderMessageText(), el.model, o.correcting, o.editable, o.is_retracted, el.model.get('hide_url_previews'), (_el$model$get = el.model.get('ogp_metadata')) === null || _el$model$get === void 0 ? void 0 : _el$model$get.length, o.message_type, !el.model.get('hide_url_previews') ? (_el$model$get2 = el.model.get('ogp_metadata')) === null || _el$model$get2 === void 0 ? void 0 : _el$model$get2.map(m => { + return T` + ${o.is_first_unread ? T`

    ${i18n_new_messages}
    ` : ''} +
    + + + + + ${o.should_show_avatar ? renderAvatar(el.getAvatarData()) : ''} +
    + + ${!o.is_me_message ? T` + + ${o.username} + ${o.hats.map(h => T`${h.title}`)} + + ${o.is_encrypted ? T`` : ''} + ` : ''} +
    +
    + ${o.is_me_message ? T` +   + ${o.is_me_message ? '**' : ''}${o.username} ` : ''} + ${o.is_retracted ? el.renderRetraction() : el.renderMessageText()} +
    + +
    + + ${(_el$model$get = el.model.get('ogp_metadata')) === null || _el$model$get === void 0 ? void 0 : _el$model$get.map(m => { var _el$chatbox; - return T(message_templateObject7(), el.onUnfurlAnimationEnd, el.model.get('url_preview_transition'), (_el$chatbox = el.chatbox) === null || _el$chatbox === void 0 ? void 0 : _el$chatbox.get('jid'), m['og:description'] || '', m['og:title'] || '', m['og:image'] || '', m['og:url'] || ''); - }) : ''); + if (el.model.get('hide_url_previews') === true) { + return ''; + } + + if (!shouldRenderMediaFromURL(m['og:image'], 'image')) { + return ''; + } + + return T``; + })} +
    +
    `; +}); +;// CONCATENATED MODULE: ./src/shared/chat/templates/message-text.js + + + + +const tpl_edited_icon = el => { + const i18n_edited = __('This message has been edited'); + + return T``; +}; + +/* harmony default export */ const message_text = (el => { + const i18n_show = __('Show more'); + + const is_groupchat_message = el.model.get('type') === 'groupchat'; + + const i18n_show_less = __('Show less'); + + const tpl_spoiler_hint = T` + + `; + const spoiler_classes = el.model.get('is_spoiler') ? `spoiler ${el.model.get('is_spoiler_visible') ? '' : 'hidden'}` : ''; + const text = el.model.getMessageText(); + const show_oob = el.model.get('oob_url') && text !== el.model.get('oob_url'); + return T` + ${el.model.get('is_spoiler') ? tpl_spoiler_hint : ''} + ${el.model.get('subject') ? T`
    ${el.model.get('subject')}
    ` : ''} + + + ${el.model.get('received') && !el.model.isMeCommand() && !is_groupchat_message ? T`` : ''} + ${el.model.get('edited') ? tpl_edited_icon(el) : ''} + + ${show_oob ? T`
    ${getOOBURLMarkup(el.model.get('oob_url'))}
    ` : ''} +
    ${el.model.get('error_text') || el.model.get('error')}
    + `; +}); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/chat/styles/retraction.scss +var retraction = __webpack_require__(3861); +;// CONCATENATED MODULE: ./src/shared/chat/styles/retraction.scss + + + + + + + + + + + +var retraction_options = {}; + +retraction_options.styleTagTransform = (styleTagTransform_default()); +retraction_options.setAttributes = (setAttributesWithoutAttributes_default()); + + retraction_options.insert = insertBySelector_default().bind(null, "head"); + +retraction_options.domAPI = (styleDomAPI_default()); +retraction_options.insertStyleElement = (insertStyleElement_default()); + +var retraction_update = injectStylesIntoStyleTag_default()(retraction/* default */.Z, retraction_options); + + + + + /* harmony default export */ const styles_retraction = (retraction/* default */.Z && retraction/* default.locals */.Z.locals ? retraction/* default.locals */.Z.locals : undefined); + +;// CONCATENATED MODULE: ./src/shared/chat/templates/retraction.js + + +/* harmony default export */ const templates_retraction = (el => { + const retraction_text = el.isRetracted() ? el.getRetractionText() : null; + return T` +
    ${retraction_text}
    + ${el.model.get('moderation_reason') ? T`${el.model.get('moderation_reason')}` : ''}`; }); ;// CONCATENATED MODULE: ./src/templates/spinner.js -function spinner_templateObject() { - const data = spinner_taggedTemplateLiteral([""]); - spinner_templateObject = function () { - return data; - }; +/* harmony default export */ const spinner = ((o = {}) => { + var _o$classes; - return data; + if ((_o$classes = o.classes) !== null && _o$classes !== void 0 && _o$classes.includes('hor_centered')) { + return T`
    `; + } else { + return T``; + } +}); +// EXTERNAL MODULE: ./node_modules/lodash/debounce.js +var lodash_debounce = __webpack_require__(3279); +var debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce); +;// CONCATENATED MODULE: ./src/shared/chat/templates/new-day.js + +/* harmony default export */ const new_day = (o => T` +
    +
    + +
    +`); +;// CONCATENATED MODULE: ./src/shared/chat/utils.js + + + +const { + dayjs: utils_dayjs +} = core_converse.env; +function onScrolledDown(model) { + if (!model.isHidden()) { + if (api.settings.get('allow_url_history_change')) { + // Clear location hash if set to one of the messages in our history + const hash = window.location.hash; + hash && model.messages.get(hash.slice(1)) && shared_converse.router.history.navigate(); + } + } +} +/** + * Called when the chat content is scrolled up or down. + * We want to record when the user has scrolled away from + * the bottom, so that we don't automatically scroll away + * from what the user is reading when new messages are received. + * + * Don't call this method directly, instead, call `markScrolled`, + * which debounces this method. + */ + +function _markScrolled(ev) { + const el = ev.target; + + if (el.nodeName.toLowerCase() !== 'converse-chat-content') { + return; + } + + let scrolled = true; + const is_at_bottom = Math.floor(el.scrollTop) === 0; + const is_at_top = Math.ceil(el.clientHeight - el.scrollTop) >= el.scrollHeight - Math.ceil(el.scrollHeight / 20); + + if (is_at_bottom) { + scrolled = false; + onScrolledDown(el.model); + } else if (is_at_top) { + /** + * Triggered once the chat's message area has been scrolled to the top + * @event _converse#chatBoxScrolledUp + * @property { _converse.ChatBoxView | _converse.ChatRoomView } view + * @example _converse.api.listen.on('chatBoxScrolledUp', obj => { ... }); + */ + api.trigger('chatBoxScrolledUp', el); + } + + if (el.model.get('scolled') !== scrolled) { + el.model.ui.set({ + scrolled + }); + } } -function spinner_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +const markScrolled = debounce_default()(ev => _markScrolled(ev), 50); +/** + * Given a message object, returns a TemplateResult indicating a new day if + * the passed in message is more than a day later than its predecessor. + * @param { _converse.Message } + */ +function getDayIndicator(message) { + var _message$collection; -/* harmony default export */ const spinner = ((o = {}) => T(spinner_templateObject(), o.classes || '')); + const messages = (_message$collection = message.collection) === null || _message$collection === void 0 ? void 0 : _message$collection.models; + + if (!messages) { + return; + } + + const idx = messages.indexOf(message); + const prev_message = messages[idx - 1]; + + if (!prev_message || utils_dayjs(message.get('time')).isAfter(utils_dayjs(prev_message.get('time')), 'day')) { + const day_date = utils_dayjs(message.get('time')).startOf('day'); + return new_day({ + 'type': 'date', + 'time': day_date.toISOString(), + 'datestring': day_date.format("dddd MMM Do YYYY") + }); + } +} +function getHats(message) { + if (message.get('type') === 'groupchat') { + var _message$occupant; + + const allowed_hats = api.settings.get('muc_hats').filter(hat => hat).map(hat => hat.toLowerCase()); + let vcard_roles = []; + + if (allowed_hats.includes('vcard_roles')) { + vcard_roles = message.vcard ? message.vcard.get('role') : null; + vcard_roles = vcard_roles ? vcard_roles.split(',').filter(hat => hat).map(hat => ({ + title: hat + })) : []; + } + + const muc_role = message.occupant ? [message.occupant.get('role')] : []; + const muc_affiliation = message.occupant ? [message.occupant.get('affiliation')] : []; + const affiliation_role_hats = [...muc_role, ...muc_affiliation].filter(hat => hat).filter(hat => allowed_hats.includes(hat.toLowerCase())).map(hat => ({ + title: hat + })); + const hats = allowed_hats.includes('xep317') ? ((_message$occupant = message.occupant) === null || _message$occupant === void 0 ? void 0 : _message$occupant.get('hats')) || [] : []; + return [...hats, ...vcard_roles, ...affiliation_role_hats]; + } + + return []; +} ;// CONCATENATED MODULE: ./src/shared/chat/message.js -function _templateObject13() { - const data = chat_message_taggedTemplateLiteral(["
    ", "
    "]); - _templateObject13 = function () { - return data; - }; - return data; -} -function _templateObject12() { - const data = chat_message_taggedTemplateLiteral([""]); - _templateObject12 = function () { - return data; - }; - return data; -} - -function message_templateObject11() { - const data = chat_message_taggedTemplateLiteral([""]); - - message_templateObject11 = function () { - return data; - }; - - return data; -} - -function message_templateObject10() { - const data = chat_message_taggedTemplateLiteral(["
    ", "
    "]); - - message_templateObject10 = function () { - return data; - }; - - return data; -} - -function message_templateObject9() { - const data = chat_message_taggedTemplateLiteral(["\n ", "\n ", "\n \n \n ", "\n ", "\n \n ", "\n
    ", "
    \n "]); - - message_templateObject9 = function () { - return data; - }; - - return data; -} - -function message_templateObject8() { - const data = chat_message_taggedTemplateLiteral(["\n
    \n ", "\n \n \n ", "\n \n
    \n "]); - - message_templateObject8 = function () { - return data; - }; - - return data; -} - -function chat_message_templateObject7() { - const data = chat_message_taggedTemplateLiteral(["", ""]); - - chat_message_templateObject7 = function () { - return data; - }; - - return data; -} - -function chat_message_templateObject6() { - const data = chat_message_taggedTemplateLiteral(["\n
    ", "
    \n ", "\n "]); - - chat_message_templateObject6 = function () { - return data; - }; - - return data; -} - -function chat_message_templateObject5() { - const data = chat_message_taggedTemplateLiteral(["\n
    \n ", "\n
    \n ", " ", ", ", "\n \n
    \n
    "]); - - chat_message_templateObject5 = function () { - return data; - }; - - return data; -} - -function chat_message_templateObject4() { - const data = chat_message_taggedTemplateLiteral(["", ""]); - - chat_message_templateObject4 = function () { - return data; - }; - - return data; -} - -function chat_message_templateObject3() { - const data = chat_message_taggedTemplateLiteral(["", ""]); - - chat_message_templateObject3 = function () { - return data; - }; - - return data; -} - -function chat_message_templateObject2() { - const data = chat_message_taggedTemplateLiteral(["", ""]); - - chat_message_templateObject2 = function () { - return data; - }; - - return data; -} - -function chat_message_templateObject() { - const data = chat_message_taggedTemplateLiteral(["\n
    \n\n
    \n ", "\n
    \n ", "\n ", "\n ", "\n
    "]); - - chat_message_templateObject = function () { - return data; - }; - - return data; -} - -function chat_message_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } @@ -43431,9 +47594,9 @@ function chat_message_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = st const { - Strophe: chat_message_Strophe + Strophe: chat_message_Strophe, + dayjs: message_dayjs } = core_converse.env; -const chat_message_u = core_converse.env.utils; class Message extends CustomElement { static get properties() { return { @@ -43446,11 +47609,53 @@ class Message extends CustomElement { }; } + async initialize() { + await this.setModels(); + + if (!this.model) { + // Happen during tests due to a race condition + headless_log.error('Could not find module for converse-chat-message'); + return; + } + + const settings = getAppSettings(); + this.listenTo(settings, 'change:render_media', () => { + // Reset individual show/hide state of media + this.model.save('hide_url_previews', undefined); + this.requestUpdate(); + }); + this.listenTo(this.chatbox, 'change:first_unread_id', () => this.requestUpdate()); + this.listenTo(this.model, 'change', () => this.requestUpdate()); + this.model.vcard && this.listenTo(this.model.vcard, 'change', () => this.requestUpdate()); + + if (this.model.get('type') === 'groupchat') { + if (this.model.occupant) { + this.listenTo(this.model.occupant, 'change', () => this.requestUpdate()); + } else { + this.listenTo(this.model, 'occupantAdded', () => { + this.listenTo(this.model.occupant, 'change', () => this.requestUpdate()); + }); + } + } + } + + async setModels() { + this.chatbox = await api.chatboxes.get(this.jid); + await this.chatbox.initialized; + await this.chatbox.messages.fetched; + this.model = this.chatbox.messages.get(this.mid); + this.model && this.requestUpdate(); + } + render() { - if (this.show_spinner) { + if (!this.model) { + return ''; + } else if (this.show_spinner) { return spinner(); - } else if (this.model.get('file') && !this.model.get('oob_url')) { + } else if (this.model.get('file') && this.model.get('upload') !== shared_converse.SUCCESS) { return this.renderFileProgress(); + } else if (['mep'].includes(this.model.get('type'))) { + return this.renderMEPMessage(); } else if (['error', 'info'].includes(this.model.get('type'))) { return this.renderInfoMessage(); } else { @@ -43458,43 +47663,44 @@ class Message extends CustomElement { } } - connectedCallback() { - super.connectedCallback(); - this.chatbox = shared_converse.chatboxes.get(this.jid); - this.model = this.chatbox.messages.get(this.mid); - this.listenTo(this.chatbox, 'change:first_unread_id', this.requestUpdate); - this.listenTo(this.model, 'change', this.requestUpdate); - this.model.vcard && this.listenTo(this.model.vcard, 'change', this.requestUpdate); - - if (this.model.get('type') === 'groupchat') { - if (this.model.occupant) { - this.listenTo(this.model.occupant, 'change', this.requestUpdate); - } else { - this.listenTo(this.model, 'occupantAdded', () => { - this.listenTo(this.model.occupant, 'change', this.requestUpdate); - }); - } - } - } - getProps() { return Object.assign(this.model.toJSON(), this.getDerivedMessageProps()); } + renderRetraction() { + return templates_retraction(this); + } + + renderMessageText() { + return message_text(this); + } + + renderMEPMessage() { + return mep_message(this); + } + renderInfoMessage() { - const isodate = dayjs_min_default()(this.model.get('time')).toISOString(); - - const i18n_retry = __('Retry'); - - return T(chat_message_templateObject(), this.model.get('type'), isodate, this.data_name, this.data_value, this.model.getMessageText(), this.model.get('reason') ? T(chat_message_templateObject2(), this.model.get('reason')) : "", this.model.get('error_text') ? T(chat_message_templateObject3(), this.model.get('error_text')) : "", this.model.get('retry_event_id') ? T(chat_message_templateObject4(), this.onRetryClicked, i18n_retry) : ''); + return info_message(this); } renderFileProgress() { + if (!this.model.file) { + // Can happen when file upload failed and page was reloaded + return ''; + } + const i18n_uploading = __('Uploading file:'); const filename = this.model.file.name; - const size = lib_filesize_min_default()(this.model.file.size); - return T(chat_message_templateObject5(), renderAvatar(this.getAvatarData()), i18n_uploading, filename, size, this.model.get('progress')); + const size = filesize_min_default()(this.model.file.size); + return T` +
    + ${renderAvatar(this.getAvatarData())} +
    + ${i18n_uploading} ${filename}, ${size} + +
    +
    `; } renderChatMessage() { @@ -43502,7 +47708,7 @@ class Message extends CustomElement { } shouldShowAvatar() { - return api.settings.get('show_message_avatar') && !this.model.isMeCommand() && this.type !== 'headline'; + return api.settings.get('show_message_avatar') && !this.model.isMeCommand() && ['chat', 'groupchat'].includes(this.model.get('type')); } getAvatarData() { @@ -43522,7 +47728,7 @@ class Message extends CustomElement { onUnfurlAnimationEnd() { if (this.model.get('url_preview_transition') === 'fade-out') { this.model.save({ - 'hide_url_previews': !this.model.get('hide_url_previews'), + 'hide_url_previews': true, 'url_preview_transition': 'fade-in' }); } @@ -43538,19 +47744,6 @@ class Message extends CustomElement { this.parentElement.removeChild(this); } - isFollowup() { - const messages = this.model.collection.models; - const idx = messages.indexOf(this.model); - const prev_model = idx ? messages[idx - 1] : null; - - if (prev_model === null) { - return false; - } - - const date = dayjs_min_default()(this.model.get('time')); - return this.model.get('from') === prev_model.get('from') && !this.model.isMeCommand() && !prev_model.isMeCommand() && this.model.get('type') !== 'info' && prev_model.get('type') !== 'info' && date.isBefore(dayjs_min_default()(prev_model.get('time')).add(10, 'minutes')) && !!this.model.get('is_encrypted') === !!prev_model.get('is_encrypted'); - } - isRetracted() { return this.model.get('retracted') || this.model.get('moderated') === 'retracted'; } @@ -43573,13 +47766,11 @@ class Message extends CustomElement { } getExtraMessageClasses() { - const extra_classes = [this.isFollowup() ? 'chat-msg--followup' : null, this.model.get('is_delayed') ? 'delayed' : null, this.model.isMeCommand() ? 'chat-msg--action' : null, this.isRetracted() ? 'chat-msg--retracted' : null, this.model.get('type'), this.shouldShowAvatar() ? 'chat-msg--with-avatar' : null].map(c => c); + const extra_classes = [this.model.isFollowup() ? 'chat-msg--followup' : null, this.model.get('is_delayed') ? 'delayed' : null, this.model.isMeCommand() ? 'chat-msg--action' : null, this.isRetracted() ? 'chat-msg--retracted' : null, this.model.get('type'), this.shouldShowAvatar() ? 'chat-msg--with-avatar' : null].map(c => c); if (this.model.get('type') === 'groupchat') { - var _this$getOccupantRole, _this$getOccupantAffi; - - extra_classes.push((_this$getOccupantRole = this.getOccupantRole()) !== null && _this$getOccupantRole !== void 0 ? _this$getOccupantRole : ''); - extra_classes.push((_this$getOccupantAffi = this.getOccupantAffiliation()) !== null && _this$getOccupantAffi !== void 0 ? _this$getOccupantAffi : ''); + extra_classes.push(this.getOccupantRole() ?? ''); + extra_classes.push(this.getOccupantAffiliation() ?? ''); if (this.model.get('sender') === 'them' && this.hasMentions()) { extra_classes.push('mentioned'); @@ -43593,9 +47784,9 @@ class Message extends CustomElement { getDerivedMessageProps() { const format = api.settings.get('time_format'); return { - 'pretty_time': dayjs_min_default()(this.model.get('edited') || this.model.get('time')).format(format), + 'pretty_time': message_dayjs(this.model.get('edited') || this.model.get('time')).format(format), 'has_mentions': this.hasMentions(), - 'hats': shared_converse.getHats(this.model), + 'hats': getHats(this.model), 'is_first_unread': this.chatbox.get('first_unread_id') === this.model.get('id'), 'is_me_message': this.model.isMeCommand(), 'is_retracted': this.isRetracted(), @@ -43605,7 +47796,7 @@ class Message extends CustomElement { } getRetractionText() { - if (this.model.get('type') === 'groupchat' && this.model.get('moderated_by')) { + if (['groupchat', 'mep'].includes(this.model.get('type')) && this.model.get('moderated_by')) { const retracted_by_mod = this.model.get('moderated_by'); const chatbox = this.model.collection.chatbox; @@ -43624,29 +47815,11 @@ class Message extends CustomElement { } } - renderRetraction() { - const retraction_text = this.isRetracted() ? this.getRetractionText() : null; - return T(chat_message_templateObject6(), retraction_text, this.model.get('moderation_reason') ? T(chat_message_templateObject7(), this.model.get('moderation_reason')) : ''); - } - - renderMessageText() { - const i18n_edited = __('This message has been edited'); - - const i18n_show = __('Show more'); - - const is_groupchat_message = this.model.get('type') === 'groupchat'; - - const i18n_show_less = __('Show less'); - - const tpl_spoiler_hint = T(message_templateObject8(), this.model.get('spoiler_hint'), this.toggleSpoilerMessage, this.model.get('is_spoiler_visible') ? 'fa-eye-slash' : 'fa-eye', this.model.get('is_spoiler_visible') ? i18n_show_less : i18n_show); - const spoiler_classes = this.model.get('is_spoiler') ? "spoiler ".concat(this.model.get('is_spoiler_visible') ? '' : 'hidden') : ''; - const text = this.model.getMessageText(); - return T(message_templateObject9(), this.model.get('is_spoiler') ? tpl_spoiler_hint : '', this.model.get('subject') ? T(message_templateObject10(), this.model.get('subject')) : '', this.model.get('is_only_emojis') ? 'chat-msg__text--larger' : '', spoiler_classes, this.model, this.model.isMeCommand(), api.settings.get('show_images_inline'), text, this.model.get('received') && !this.model.isMeCommand() && !is_groupchat_message ? T(message_templateObject11()) : '', this.model.get('edited') ? T(_templateObject12(), i18n_edited, this.showMessageVersionsModal) : '', this.model.get('oob_url') ? T(_templateObject13(), chat_message_u.getOOBURLMarkup(shared_converse, this.model.get('oob_url'))) : '', this.model.get('error_text') || this.model.get('error')); - } - showUserModal(ev) { if (this.model.get('sender') === 'me') { - shared_converse.xmppstatusview.showProfileModal(ev); + api.modal.show(shared_converse.ProfileModal, { + model: this.model + }, ev); } else if (this.model.get('type') === 'groupchat') { ev.preventDefault(); api.modal.show(modals_occupant, { @@ -43677,43 +47850,7 @@ class Message extends CustomElement { } api.elements.define('converse-chat-message', Message); -;// CONCATENATED MODULE: ./src/shared/chat/templates/new-day.js -function new_day_templateObject() { - const data = new_day_taggedTemplateLiteral(["\n
    \n
    \n \n
    \n"]); - - new_day_templateObject = function () { - return data; - }; - - return data; -} - -function new_day_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const new_day = (o => T(new_day_templateObject(), o.time, o.time, o.datestring)); ;// CONCATENATED MODULE: ./src/shared/chat/message-history.js -function message_history_templateObject2() { - const data = message_history_taggedTemplateLiteral([""]); - - message_history_templateObject2 = function () { - return data; - }; - - return data; -} - -function message_history_templateObject() { - const data = message_history_taggedTemplateLiteral(["", ""]); - - message_history_templateObject = function () { - return data; - }; - - return data; -} - -function message_history_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } @@ -43721,53 +47858,6 @@ function message_history_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = - // Return a TemplateResult indicating a new day if the passed in message is -// more than a day later than its predecessor. - -function getDayIndicator(model) { - const models = model.collection.models; - const idx = models.indexOf(model); - const prev_model = models[idx - 1]; - - if (!prev_model || dayjs_min_default()(model.get('time')).isAfter(dayjs_min_default()(prev_model.get('time')), 'day')) { - const day_date = dayjs_min_default()(model.get('time')).startOf('day'); - return new_day({ - 'type': 'date', - 'time': day_date.toISOString(), - 'datestring': day_date.format("dddd MMM Do YYYY") - }); - } -} // This is set to _converse so that it can be overriden. An attempt was made to use -// a hook instead, but hook returns a promise and it forces the asynchronicity up -// to the render method. - - -shared_converse.getHats = function (model) { - if (model.get('type') === 'groupchat') { - var _model$occupant; - - const allowed_hats = api.settings.get('muc_hats').filter(hat => hat).map(hat => hat.toLowerCase()); - let vcard_roles = []; - - if (allowed_hats.includes('vcard_roles')) { - vcard_roles = model.vcard ? model.vcard.get('role') : null; - vcard_roles = vcard_roles ? vcard_roles.split(',').filter(hat => hat).map(hat => ({ - title: hat - })) : []; - } - - const muc_role = model.occupant ? [model.occupant.get('role')] : []; - const muc_affiliation = model.occupant ? [model.occupant.get('affiliation')] : []; - const affiliation_role_hats = [...muc_role, ...muc_affiliation].filter(hat => hat).filter(hat => allowed_hats.includes(hat.toLowerCase())).map(hat => ({ - title: hat - })); - const hats = allowed_hats.includes('xep317') ? ((_model$occupant = model.occupant) === null || _model$occupant === void 0 ? void 0 : _model$occupant.get('hats')) || [] : []; - return [...hats, ...vcard_roles, ...affiliation_role_hats]; - } - - return []; -}; - class MessageHistory extends CustomElement { static get properties() { return { @@ -43782,7 +47872,12 @@ class MessageHistory extends CustomElement { render() { const msgs = this.messages; - return msgs.length ? T(message_history_templateObject(), repeat_c(msgs, m => m.get('id'), m => this.renderMessage(m))) : ''; + + if (msgs.length) { + return repeat_c(msgs, m => m.get('id'), m => T`${this.renderMessage(m)}`); + } else { + return ''; + } } renderMessage(model) { @@ -43790,55 +47885,54 @@ class MessageHistory extends CustomElement { return ''; } - const day = getDayIndicator(model); - const templates = day ? [day] : []; - const message = T(message_history_templateObject2(), this.model.get('jid'), model.get('id')); - return [...templates, message]; + const template_hook = model.get('template_hook'); + + if (typeof template_hook === 'string') { + const template_promise = api.hook(template_hook, model, ''); + return until_o(template_promise, ''); + } else { + const template = T``; + const day = getDayIndicator(model); + return day ? [day, template] : template; + } } } api.elements.define('converse-message-history', MessageHistory); -// EXTERNAL MODULE: ./node_modules/lodash/debounce.js -var lodash_debounce = __webpack_require__(3279); -var debounce_default = /*#__PURE__*/__webpack_require__.n(lodash_debounce); -;// CONCATENATED MODULE: ./src/shared/chat/utils.js +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/chat/styles/chat-content.scss +var chat_content = __webpack_require__(8269); +;// CONCATENATED MODULE: ./src/shared/chat/styles/chat-content.scss + + + + + + + + + + + +var chat_content_options = {}; + +chat_content_options.styleTagTransform = (styleTagTransform_default()); +chat_content_options.setAttributes = (setAttributesWithoutAttributes_default()); + + chat_content_options.insert = insertBySelector_default().bind(null, "head"); + +chat_content_options.domAPI = (styleDomAPI_default()); +chat_content_options.insertStyleElement = (insertStyleElement_default()); + +var chat_content_update = injectStylesIntoStyleTag_default()(chat_content/* default */.Z, chat_content_options); + + + + + /* harmony default export */ const styles_chat_content = (chat_content/* default */.Z && chat_content/* default.locals */.Z.locals ? chat_content/* default.locals */.Z.locals : undefined); -function onScrolledDown(model) { - if (!model.isHidden()) { - if (api.settings.get('allow_url_history_change')) { - // Clear location hash if set to one of the messages in our history - const hash = window.location.hash; - hash && model.messages.get(hash.slice(1)) && shared_converse.router.history.navigate(); - } - } -} -// EXTERNAL MODULE: ./src/shared/chat/styles/chat-content.scss -var chat_content = __webpack_require__(9023); ;// CONCATENATED MODULE: ./src/shared/chat/chat-content.js -function chat_content_templateObject2() { - const data = chat_content_taggedTemplateLiteral([""]); - - chat_content_templateObject2 = function () { - return data; - }; - - return data; -} - -function chat_content_templateObject() { - const data = chat_content_taggedTemplateLiteral(["\n
    ", "
    \n \n \n ", "\n "]); - - chat_content_templateObject = function () { - return data; - }; - - return data; -} - -function chat_content_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - @@ -43854,12 +47948,14 @@ class ChatContent extends CustomElement { }; } - connectedCallback() { - super.connectedCallback(); - this.markScrolled = debounce_default()(this._markScrolled, 50); - this.model = shared_converse.chatboxes.get(this.jid); + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener('scroll', markScrolled); + } + + async initialize() { + await this.setModels(); this.listenTo(this.model, 'change:hidden_occupants', this.requestUpdate); - this.listenTo(this.model, 'change:scrolled', this.scrollDown); this.listenTo(this.model.messages, 'add', this.requestUpdate); this.listenTo(this.model.messages, 'change', this.requestUpdate); this.listenTo(this.model.messages, 'remove', this.requestUpdate); @@ -43867,60 +47963,42 @@ class ChatContent extends CustomElement { this.listenTo(this.model.messages, 'reset', this.requestUpdate); this.listenTo(this.model.notifications, 'change', this.requestUpdate); this.listenTo(this.model.ui, 'change', this.requestUpdate); + this.listenTo(this.model.ui, 'change:scrolled', this.scrollDown); if (this.model.occupants) { this.listenTo(this.model.occupants, 'change', this.requestUpdate); } - this.addEventListener('scroll', () => this.markScrolled()); + this.addEventListener('scroll', markScrolled); + } + + async setModels() { + this.model = await api.chatboxes.get(this.jid); + await this.model.initialized; + this.requestUpdate(); } render() { var _this$model$ui; - // This element has "flex-direction: reverse", so elements here are + if (!this.model) { + return ''; + } // This element has "flex-direction: reverse", so elements here are // shown in reverse order. - return T(chat_content_templateObject(), this.model.getNotificationsText(), this.model, [...this.model.messages.models], ((_this$model$ui = this.model.ui) === null || _this$model$ui === void 0 ? void 0 : _this$model$ui.get('chat-content-spinner-top')) ? T(chat_content_templateObject2()) : ''); - } - /** - * Called when the chat content is scrolled up or down. - * We want to record when the user has scrolled away from - * the bottom, so that we don't automatically scroll away - * from what the user is reading when new messages are received. - * - * Don't call this method directly, instead, call `markScrolled`, - * which debounces this method by 100ms. - * @private - */ - _markScrolled() { - let scrolled = true; - const is_at_bottom = this.scrollTop === 0; - const is_at_top = Math.ceil(this.clientHeight - this.scrollTop) >= this.scrollHeight - Math.ceil(this.scrollHeight / 20); - - if (is_at_bottom) { - scrolled = false; - onScrolledDown(this.model); - } else if (is_at_top) { - /** - * Triggered once the chat's message area has been scrolled to the top - * @event _converse#chatBoxScrolledUp - * @property { _converse.ChatBoxView | _converse.ChatRoomView } view - * @example _converse.api.listen.on('chatBoxScrolledUp', obj => { ... }); - */ - api.trigger('chatBoxScrolledUp', this); - } - - if (this.model.get('scolled') !== scrolled) { - safeSave(this.model, { - scrolled - }); - } + return T` +
    ${this.model.getNotificationsText()}
    + + + ${(_this$model$ui = this.model.ui) !== null && _this$model$ui !== void 0 && _this$model$ui.get('chat-content-spinner-top') ? T`` : ''} + `; } scrollDown() { - if (this.model.get('scrolled')) { + if (this.model.ui.get('scrolled')) { return; } @@ -43949,79 +48027,6 @@ class ChatContent extends CustomElement { } api.elements.define('converse-chat-content', ChatContent); -;// CONCATENATED MODULE: ./src/shared/components/icons.js -function icons_templateObject2() { - const data = icons_taggedTemplateLiteral([" "]); - - icons_templateObject2 = function () { - return data; - }; - - return data; -} - -function icons_templateObject() { - const data = icons_taggedTemplateLiteral(["\n :host {\n display: inline-block;\n padding: 0;\n margin: 0;\n }\n "]); - - icons_templateObject = function () { - return data; - }; - - return data; -} - -function icons_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -/** - * @module icons.js - * @copyright Alfredo Medrano Sánchez and the Converse.js contributors - * @description - * Component inspired by the one from fa-icons - * https://github.com/obsidiansoft-io/fa-icons/blob/master/LICENSE - * @license Mozilla Public License (MPLv2) - */ - - - -class ConverseIcon extends CustomElement { - static get properties() { - return { - color: String, - class_name: { - attribute: "class" - }, - style: String, - size: String - }; - } - - static get styles() { - return css_tag_r(icons_templateObject()); - } - - constructor() { - super(); - this.class_name = ""; - this.style = ""; - this.size = ""; - this.color = ""; - } - - getSource() { - return "#icon-".concat(this.class_name.split(" ")[1].replace("fa-", "")); - } - - getStyles() { - return "\n ".concat(this.size ? "width: ".concat(this.size, ";") : '', "\n ").concat(this.size ? "height: ".concat(this.size, ";") : '', "\n ").concat(this.color ? "fill: ".concat(this.color, ";") : '', "\n ").concat(this.style, "\n "); - } - - render() { - return T(icons_templateObject2(), this.getStyles(), this.getSource()); - } - -} - -customElements.define("converse-icon", ConverseIcon); ;// CONCATENATED MODULE: ./node_modules/lit-html/directives/unsafe-html.js @@ -44060,28 +48065,6 @@ const unsafe_html_o = directive_i(unsafe_html_n); //# sourceMappingURL=unsafe-html.js.map ;// CONCATENATED MODULE: ./src/shared/chat/help-messages.js -function help_messages_templateObject2() { - const data = help_messages_taggedTemplateLiteral(["
    ", "
    "]); - - help_messages_templateObject2 = function () { - return data; - }; - - return data; -} - -function help_messages_templateObject() { - const data = help_messages_taggedTemplateLiteral([""]); - - help_messages_templateObject = function () { - return data; - }; - - return data; -} - -function help_messages_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -44108,12 +48091,13 @@ class ChatHelp extends CustomElement { render() { const isodate = new Date().toISOString(); - return [T(help_messages_templateObject(), this.close, api.settings.get("assets_path")), ...this.messages.map(m => this.renderHelpMessage({ + return [T``, ...this.messages.map(m => this.renderHelpMessage({ isodate, - 'markup': xss.filterXSS(m, { - 'whiteList': { - 'strong': [] - } + 'markup': purify_default().sanitize(m, { + 'ALLOWED_TAGS': ['strong'] }) }))]; } @@ -44125,111 +48109,29 @@ class ChatHelp extends CustomElement { } renderHelpMessage(o) { - return T(help_messages_templateObject2(), this.type, o.isodate, unsafe_html_o(o.markup)); + return T`
    ${unsafe_html_o(o.markup)}
    `; } } api.elements.define('converse-chat-help', ChatHelp); ;// CONCATENATED MODULE: ./src/shared/chat/templates/emoji-picker.js -function emoji_picker_templateObject9() { - const data = emoji_picker_taggedTemplateLiteral([""]); - - emoji_picker_templateObject9 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject8() { - const data = emoji_picker_taggedTemplateLiteral(["\n
    \n \n ", "\n
    \n ", "\n\n
    \n \n
      ", "
    \n
    "]); - - emoji_picker_templateObject8 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject7() { - const data = emoji_picker_taggedTemplateLiteral(["\n
  • \n ", "\n
  • "]); - - emoji_picker_templateObject7 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject6() { - const data = emoji_picker_taggedTemplateLiteral(["\n \n ", "\n "]); - - emoji_picker_templateObject6 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject5() { - const data = emoji_picker_taggedTemplateLiteral(["\n ", "\n
      \n ", "\n
    "]); - - emoji_picker_templateObject5 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject4() { - const data = emoji_picker_taggedTemplateLiteral(["\n \n ", "\n
      \n ", "\n
    \n
    \n "]); - - emoji_picker_templateObject4 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject3() { - const data = emoji_picker_taggedTemplateLiteral(["\n
  • \n ", "\n
  • \n "]); - - emoji_picker_templateObject3 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject2() { - const data = emoji_picker_taggedTemplateLiteral(["
      ", "
    "]); - - emoji_picker_templateObject2 = function () { - return data; - }; - - return data; -} - -function emoji_picker_templateObject() { - const data = emoji_picker_taggedTemplateLiteral(["\n
  • \n\n ", " \n
  • \n "]); - - emoji_picker_templateObject = function () { - return data; - }; - - return data; -} - -function emoji_picker_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - const emoji_picker_u = core_converse.env.utils; const emoji_category = o => { - return T(emoji_picker_templateObject(), o.category, o.category, o.current_category === o.category ? 'picked' : '', __(api.settings.get('emoji_category_labels')[o.category]), o.onCategoryPicked, o.category, o.category, o.emoji); + return T` +
  • + + ${o.emoji} +
  • + `; }; const emoji_picker_header = o => { @@ -44240,59 +48142,87 @@ const emoji_picker_header = o => { 'emoji': o.sn2Emoji(cats[c]) }, o)) : ''; - return T(emoji_picker_templateObject2(), Object.keys(cats).map(transform)); + return T`
      ${Object.keys(cats).map(transform)}
    `; }; const emoji_item = o => { - return T(emoji_picker_templateObject3(), o.shouldBeHidden(o.emoji.sn) ? 'hidden' : '', o.emoji.sn, o.emoji.sn, o.insertEmoji, o.emoji.sn, emoji_picker_u.shortnamesToEmojis(o.emoji.sn)); + return T` +
  • + ${emoji_picker_u.shortnamesToEmojis(o.emoji.sn)} +
  • + `; }; const tpl_search_results = o => { const i18n_search_results = __('Search results'); - return T(emoji_picker_templateObject4(), !o.query, i18n_search_results, o.search_results.map(emoji => emoji_item(Object.assign({ + return T` + + ${i18n_search_results} +
      + ${o.search_results.map(emoji => emoji_item(Object.assign({ emoji - }, o)))); + }, o)))} +
    +
    + `; }; const emojis_for_category = o => { - return T(emoji_picker_templateObject5(), o.category, o.category, __(api.settings.get('emoji_category_labels')[o.category]), o.category, Object.values(core_converse.emojis.json[o.category]).map(emoji => emoji_item(Object.assign({ + return T` + ${__(api.settings.get('emoji_category_labels')[o.category])} +
      + ${Object.values(core_converse.emojis.json[o.category]).map(emoji => emoji_item(Object.assign({ emoji - }, o)))); + }, o)))} +
    `; }; const tpl_all_emojis = o => { const cats = api.settings.get('emoji_categories'); - return T(emoji_picker_templateObject6(), o.query, Object.keys(cats).map(c => cats[c] ? emojis_for_category(Object.assign({ + return T` + + ${Object.keys(cats).map(c => cats[c] ? emojis_for_category(Object.assign({ 'category': c - }, o)) : '')); + }, o)) : '')} + `; }; const skintone_emoji = o => { - return T(emoji_picker_templateObject7(), o.skintone, o.current_skintone === o.skintone ? 'picked' : '', o.skintone, o.onSkintonePicked, emoji_picker_u.shortnamesToEmojis(':' + o.skintone + ':')); + return T` +
  • + ${emoji_picker_u.shortnamesToEmojis(':' + o.skintone + ':')} +
  • `; }; const tpl_emoji_picker = o => { const i18n_search = __('Search'); const skintones = ['tone1', 'tone2', 'tone3', 'tone4', 'tone5']; - return T(emoji_picker_templateObject8(), i18n_search, o.query || '', o.onSearchInputKeyDown, o.onSearchInputBlurred, o.onSearchInputFocus, o.query ? '' : emoji_picker_header(o), o.render_emojis ? T(emoji_picker_templateObject9(), o.chatview, o.model, o.search_results, o.current_skintone, o.query) : '', skintones.map(skintone => skintone_emoji(Object.assign({ + return T` +
    + + ${o.query ? '' : emoji_picker_header(o)} +
    + ${o.render_emojis ? T`` : ''} + +
    + +
      ${skintones.map(skintone => skintone_emoji(Object.assign({ skintone - }, o)))); + }, o)))}
    +
    `; }; ;// CONCATENATED MODULE: ./src/shared/chat/emoji-picker-content.js -function emoji_picker_content_templateObject() { - const data = emoji_picker_content_taggedTemplateLiteral(["\n
    \n ", "\n ", "\n
    \n "]); - - emoji_picker_content_templateObject = function () { - return data; - }; - - return data; -} - -function emoji_picker_content_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -44329,7 +48259,12 @@ class EmojiPickerContent extends CustomElement { 'search_results': this.search_results, 'shouldBeHidden': shortname => this.shouldBeHidden(shortname) }; - return T(emoji_picker_content_templateObject(), tpl_search_results(props), tpl_all_emojis(props)); + return T` +
    + ${tpl_search_results(props)} + ${tpl_all_emojis(props)} +
    + `; } firstUpdated() { @@ -44411,35 +48346,149 @@ class EmojiPickerContent extends CustomElement { } api.elements.define('converse-emoji-picker-content', EmojiPickerContent); -// EXTERNAL MODULE: ./src/shared/chat/styles/emoji.scss -var emoji = __webpack_require__(3796); +;// CONCATENATED MODULE: ./src/shared/chat/emoji-dropdown.js + + + + + + +const emoji_dropdown_u = core_converse.env.utils; +class EmojiDropdown extends Dropdown { + static get properties() { + return { + chatview: { + type: Object + } + }; + } + + constructor() { + super(); // This is an optimization, we lazily render the emoji picker, otherwise tests slow to a crawl. + + this.render_emojis = false; + } + + initModel() { + if (!this.init_promise) { + this.init_promise = (async () => { + await api.emojis.initialize(); + const id = `converse.emoji-${shared_converse.bare_jid}-${this.chatview.model.get('jid')}`; + this.model = new shared_converse.EmojiPicker({ + 'id': id + }); + initStorage(this.model, id); + await new Promise(resolve => this.model.fetch({ + 'success': resolve, + 'error': resolve + })); // We never want still be in the autocompleting state upon page load + + this.model.set({ + 'autocompleting': null, + 'ac_position': null + }); + })(); + } + + return this.init_promise; + } + + render() { + return T` +
    + + +
    `; + } + + connectedCallback() { + super.connectedCallback(); + this.render_emojis = false; + } + + toggleMenu(ev) { + ev.stopPropagation(); + ev.preventDefault(); + + if (emoji_dropdown_u.hasClass('show', this.menu)) { + if (emoji_dropdown_u.ancestor(ev.target, '.toggle-emojis')) { + this.hideMenu(); + } + } else { + this.showMenu(); + } + } + + async showMenu() { + await this.initModel(); + + if (!this.render_emojis) { + // Trigger an update so that emojis are rendered + this.render_emojis = true; + await this.requestUpdate(); + } + + super.showMenu(); + setTimeout(() => { + var _this$querySelector; + + return (_this$querySelector = this.querySelector('.emoji-search')) === null || _this$querySelector === void 0 ? void 0 : _this$querySelector.focus(); + }); + } + +} +api.elements.define('converse-emoji-dropdown', EmojiDropdown); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/chat/styles/emoji.scss +var emoji = __webpack_require__(9796); +;// CONCATENATED MODULE: ./src/shared/chat/styles/emoji.scss + + + + + + + + + + + +var emoji_options = {}; + +emoji_options.styleTagTransform = (styleTagTransform_default()); +emoji_options.setAttributes = (setAttributesWithoutAttributes_default()); + + emoji_options.insert = insertBySelector_default().bind(null, "head"); + +emoji_options.domAPI = (styleDomAPI_default()); +emoji_options.insertStyleElement = (insertStyleElement_default()); + +var emoji_update = injectStylesIntoStyleTag_default()(emoji/* default */.Z, emoji_options); + + + + + /* harmony default export */ const styles_emoji = (emoji/* default */.Z && emoji/* default.locals */.Z.locals ? emoji/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/shared/chat/emoji-picker.js -function chat_emoji_picker_templateObject2() { - const data = chat_emoji_picker_taggedTemplateLiteral(["\n "]); - - chat_emoji_picker_templateObject2 = function () { - return data; - }; - - return data; -} - -function chat_emoji_picker_templateObject() { - const data = chat_emoji_picker_taggedTemplateLiteral(["\n
    \n \n
    \n ", "\n
    \n
    "]); - - chat_emoji_picker_templateObject = function () { - return data; - }; - - return data; -} - -function chat_emoji_picker_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - - - @@ -44478,6 +48527,7 @@ class EmojiPicker extends CustomElement { } firstUpdated() { + super.firstUpdated(); this.listenTo(this.model, 'change', o => this.onModelChanged(o.changed)); this.initArrowNavigation(); } @@ -44488,7 +48538,6 @@ class EmojiPicker extends CustomElement { this.debouncedFilter = lodash_es_debounce(input => this.model.set({ 'query': input.value }), 250); - this.registerEvents(); } get search_results() { @@ -44536,7 +48585,7 @@ class EmojiPicker extends CustomElement { } const el = this.querySelector('.emoji-lists__container--browse'); - const heading = this.querySelector("#emoji-picker-".concat(this.current_category)); + const heading = this.querySelector(`#emoji-picker-${this.current_category}`); if (heading) { // +4 due to 2px padding on list elements @@ -44698,7 +48747,7 @@ class EmojiPicker extends CustomElement { getTonedShortname(shortname) { if (core_converse.emojis.toned.includes(shortname) && this.current_skintone) { - return "".concat(shortname.slice(0, shortname.length - 1), "_").concat(this.current_skintone, ":"); + return `${shortname.slice(0, shortname.length - 1)}_${this.current_skintone}:`; } return shortname; @@ -44716,7 +48765,7 @@ class EmojiPicker extends CustomElement { 'getSelector': direction => { if (direction === dom_navigator.DIRECTION.down) { const c = this.navigator.selected && this.navigator.selected.getAttribute('data-category'); - return c ? "ul[data-category=\"".concat(c, "\"] li:not(.hidden):not(.emoji-skintone), .emoji-search") : default_selector; + return c ? `ul[data-category="${c}"] li:not(.hidden):not(.emoji-skintone), .emoji-search` : default_selector; } else { return default_selector; } @@ -44746,106 +48795,14 @@ class EmojiPicker extends CustomElement { } } -class EmojiDropdown extends BaseDropdown { - static get properties() { - return { - chatview: { - type: Object - } - }; - } - - constructor() { - super(); // This is an optimization, we lazily render the emoji picker, otherwise tests slow to a crawl. - - this.render_emojis = false; - } - - initModel() { - if (!this.init_promise) { - this.init_promise = (async () => { - await api.emojis.initialize(); - const id = "converse.emoji-".concat(shared_converse.bare_jid, "-").concat(this.chatview.model.get('jid')); - this.model = new shared_converse.EmojiPicker({ - 'id': id - }); - initStorage(this.model, id); - await new Promise(resolve => this.model.fetch({ - 'success': resolve, - 'error': resolve - })); // We never want still be in the autocompleting state upon page load - - this.model.set({ - 'autocompleting': null, - 'ac_position': null - }); - })(); - } - - return this.init_promise; - } - - render() { - return T(chat_emoji_picker_templateObject(), __('Insert emojis'), api.settings.get('assets_path'), until_o(this.initModel().then(() => T(chat_emoji_picker_templateObject2(), this.chatview, this.model, this.render_emojis, this.model.get('current_category') || '', this.model.get('current_skintone') || '', this.model.get('query') || '')), '')); - } - - connectedCallback() { - super.connectedCallback(); - this.render_emojis = false; - } - - toggleMenu(ev) { - ev.stopPropagation(); - ev.preventDefault(); - - if (chat_emoji_picker_u.hasClass('show', this.menu)) { - if (chat_emoji_picker_u.ancestor(ev.target, '.toggle-emojis')) { - this.hideMenu(); - } - } else { - this.showMenu(); - } - } - - async showMenu() { - await this.initModel(); - - if (!this.render_emojis) { - // Trigger an update so that emojis are rendered - this.render_emojis = true; - await this.requestUpdate(); - } - - super.showMenu(); - setTimeout(() => { - var _this$querySelector; - - return (_this$querySelector = this.querySelector('.emoji-search')) === null || _this$querySelector === void 0 ? void 0 : _this$querySelector.focus(); - }); - } - -} -api.elements.define('converse-emoji-dropdown', EmojiDropdown); api.elements.define('converse-emoji-picker', EmojiPicker); ;// CONCATENATED MODULE: ./src/shared/chat/templates/message-limit.js -function message_limit_templateObject() { - const data = message_limit_taggedTemplateLiteral(["", ""]); - - message_limit_templateObject = function () { - return data; - }; - - return data; -} - -function message_limit_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const message_limit = (counter => { const i18n_chars_remaining = __('Message characters remaining'); - return T(message_limit_templateObject(), counter < 1 ? 'error' : '', i18n_chars_remaining, counter); + return T`${counter}`; }); ;// CONCATENATED MODULE: ./src/shared/chat/message-limit.js @@ -44874,111 +48831,38 @@ class MessageLimitIndicator extends CustomElement { } api.elements.define('converse-message-limit-indicator', MessageLimitIndicator); -// EXTERNAL MODULE: ./src/shared/chat/styles/toolbar.scss -var toolbar = __webpack_require__(4837); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/chat/styles/toolbar.scss +var toolbar = __webpack_require__(7991); +;// CONCATENATED MODULE: ./src/shared/chat/styles/toolbar.scss + + + + + + + + + + + +var toolbar_options = {}; + +toolbar_options.styleTagTransform = (styleTagTransform_default()); +toolbar_options.setAttributes = (setAttributesWithoutAttributes_default()); + + toolbar_options.insert = insertBySelector_default().bind(null, "head"); + +toolbar_options.domAPI = (styleDomAPI_default()); +toolbar_options.insertStyleElement = (insertStyleElement_default()); + +var toolbar_update = injectStylesIntoStyleTag_default()(toolbar/* default */.Z, toolbar_options); + + + + + /* harmony default export */ const styles_toolbar = (toolbar/* default */.Z && toolbar/* default.locals */.Z.locals ? toolbar/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/shared/chat/toolbar.js -function toolbar_templateObject10() { - const data = toolbar_taggedTemplateLiteral(["", ""]); - - toolbar_templateObject10 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject9() { - const data = toolbar_taggedTemplateLiteral(["\n "]); - - toolbar_templateObject9 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject8() { - const data = toolbar_taggedTemplateLiteral(["\n \n "]); - - toolbar_templateObject8 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject7() { - const data = toolbar_taggedTemplateLiteral(["\n "]); - - toolbar_templateObject7 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject6() { - const data = toolbar_taggedTemplateLiteral(["", ""]); - - toolbar_templateObject6 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject5() { - const data = toolbar_taggedTemplateLiteral(["\n \n "]); - - toolbar_templateObject5 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject4() { - const data = toolbar_taggedTemplateLiteral(["\n "]); - - toolbar_templateObject4 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject3() { - const data = toolbar_taggedTemplateLiteral([""]); - - toolbar_templateObject3 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject2() { - const data = toolbar_taggedTemplateLiteral([""]); - - toolbar_templateObject2 = function () { - return data; - }; - - return data; -} - -function toolbar_templateObject() { - const data = toolbar_taggedTemplateLiteral(["\n ", "\n ", "\n "]); - - toolbar_templateObject = function () { - return data; - }; - - return data; -} - -function toolbar_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -45012,9 +48896,6 @@ class ChatToolbar extends CustomElement { show_emoji_button: { type: Boolean }, - show_occupants_toggle: { - type: Boolean - }, show_send_button: { type: Boolean }, @@ -45032,7 +48913,10 @@ class ChatToolbar extends CustomElement { render() { const i18n_send_message = __('Send the message'); - return T(toolbar_templateObject(), until_o(this.getButtons(), ''), this.show_send_button ? T(toolbar_templateObject2(), i18n_send_message) : ''); + return T` + ${until_o(this.getButtons(), '')} + ${this.show_send_button ? T`` : ''} + `; } firstUpdated() { @@ -45046,24 +48930,31 @@ class ChatToolbar extends CustomElement { } getButtons() { + var _api$settings$get; + const buttons = []; if (this.show_emoji_button) { const chatview = shared_converse.chatboxviews.get(this.model.get('jid')); - buttons.push(T(toolbar_templateObject3(), chatview)); + buttons.push(T``); } if (this.show_call_button) { const i18n_start_call = __('Start a call'); - buttons.push(T(toolbar_templateObject4(), this.toggleCall, i18n_start_call)); + buttons.push(T` + `); } const message_limit = api.settings.get('message_limit'); if (message_limit) { - buttons.push(T(toolbar_templateObject5(), this.model)); + buttons.push(T` + + `); } if (this.show_spoiler_button) { @@ -45071,14 +48962,20 @@ class ChatToolbar extends CustomElement { } const http_upload_promise = api.disco.supports(toolbar_Strophe.NS.HTTPUPLOAD, shared_converse.domain); - buttons.push(T(toolbar_templateObject6(), until_o(http_upload_promise.then(is_supported => this.getHTTPUploadButton(is_supported)), ''))); + buttons.push(T`${until_o(http_upload_promise.then(is_supported => this.getHTTPUploadButton(is_supported)), '')}`); - if (this.show_occupants_toggle) { + if (this.is_groupchat && (_api$settings$get = api.settings.get('visible_toolbar_buttons')) !== null && _api$settings$get !== void 0 && _api$settings$get.toggle_occupants) { const i18n_hide_occupants = __('Hide participants'); const i18n_show_occupants = __('Show participants'); - buttons.push(T(toolbar_templateObject7(), this.hidden_occupants ? i18n_show_occupants : i18n_hide_occupants, this.toggleOccupants, this.hidden_occupants ? "fa-angle-double-left" : "fa-angle-double-right", api.settings.get('assets_path'))); + buttons.push(T` + `); } /** * *Hook* which allows plugins to add more buttons to a chat's toolbar @@ -45100,7 +48997,13 @@ class ChatToolbar extends CustomElement { if (is_supported) { const i18n_choose_file = __('Choose a file to send'); - return T(toolbar_templateObject8(), i18n_choose_file, this.toggleFileUpload, api.settings.get('assets_path'), this.onFileSelection); + return T` + + `; } else { return ''; } @@ -45111,7 +49014,7 @@ class ChatToolbar extends CustomElement { const model = this.model; - if (!this.is_groupchat && !((_model$presence = model.presence) === null || _model$presence === void 0 ? void 0 : _model$presence.resources.length)) { + if (!this.is_groupchat && !((_model$presence = model.presence) !== null && _model$presence !== void 0 && _model$presence.resources.length)) { return; } @@ -45123,14 +49026,21 @@ class ChatToolbar extends CustomElement { i18n_toggle_spoiler = __("Click to write your message as a spoiler"); } - const markup = T(toolbar_templateObject9(), i18n_toggle_spoiler, this.toggleComposeSpoilerMessage, this.composing_spoiler ? 'fa-eye-slash' : 'fa-eye', api.settings.get('assets_path')); + const markup = T` + `; if (this.is_groupchat) { return markup; } else { const contact_jid = model.get('jid'); - const spoilers_promise = Promise.all(model.presence.resources.map(r => api.disco.supports(toolbar_Strophe.NS.SPOILER, "".concat(contact_jid, "/").concat(r.get('name'))))).then(results => results.reduce((acc, val) => acc && val, true)); - return T(toolbar_templateObject10(), until_o(spoilers_promise.then(() => markup), '')); + const spoilers_promise = Promise.all(model.presence.resources.map(r => api.disco.supports(toolbar_Strophe.NS.SPOILER, `${contact_jid}/${r.get('name')}`))).then(results => results.reduce((acc, val) => acc && val, true)); + return T`${until_o(spoilers_promise.then(() => markup), '')}`; } } @@ -45186,122 +49096,34 @@ class ChatToolbar extends CustomElement { } window.customElements.define('converse-chat-toolbar', ChatToolbar); -;// CONCATENATED MODULE: ./src/plugins/chatview/templates/chat-head.js -function chat_head_templateObject7() { - const data = chat_head_taggedTemplateLiteral(["

    ", "

    "]); - - chat_head_templateObject7 = function () { - return data; - }; - - return data; -} - -function chat_head_templateObject6() { - const data = chat_head_taggedTemplateLiteral([""]); - - chat_head_templateObject6 = function () { - return data; - }; - - return data; -} - -function chat_head_templateObject5() { - const data = chat_head_taggedTemplateLiteral(["", ""]); - - chat_head_templateObject5 = function () { - return data; - }; - - return data; -} - -function chat_head_templateObject4() { - const data = chat_head_taggedTemplateLiteral(["", ""]); - - chat_head_templateObject4 = function () { - return data; - }; - - return data; -} - -function chat_head_templateObject3() { - const data = chat_head_taggedTemplateLiteral([""]); - - chat_head_templateObject3 = function () { - return data; - }; - - return data; -} - -function chat_head_templateObject2() { - const data = chat_head_taggedTemplateLiteral(["\n
    \n
    \n ", "\n ", "\n
    \n ", "\n
    \n
    \n
    \n ", "\n ", "\n
    \n
    \n ", "\n "]); - - chat_head_templateObject2 = function () { - return data; - }; - - return data; -} - -function chat_head_templateObject() { - const data = chat_head_taggedTemplateLiteral(["", ""]); - - chat_head_templateObject = function () { - return data; - }; - - return data; -} - -function chat_head_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - - - -/* harmony default export */ const chat_head = (o => { - const tpl_standalone_btns = o => o.standalone_btns.reverse().map(b => until_o(b, '')); - - const avatar = T(chat_head_templateObject(), renderAvatar(o.avatar_data)); - return T(chat_head_templateObject2(), o.status ? '' : "chatbox-title--no-desc", !shared_converse.api.settings.get("singleton") ? T(chat_head_templateObject3(), o.jid) : '', o.type !== shared_converse.HEADLINES_TYPE ? T(chat_head_templateObject4(), o.showUserDetailsModal, avatar) : '', o.jid, o.type !== shared_converse.HEADLINES_TYPE ? T(chat_head_templateObject5(), o.showUserDetailsModal, o.display_name) : o.display_name, o.dropdown_btns.length ? T(chat_head_templateObject6(), o.dropdown_btns) : '', o.standalone_btns.length ? tpl_standalone_btns(o) : '', o.status ? T(chat_head_templateObject7(), o.status) : ''); -}); ;// CONCATENATED MODULE: ./src/plugins/chatview/utils.js -function utils_templateObject2() { - const data = utils_taggedTemplateLiteral(["\n \n "]); - utils_templateObject2 = function () { - return data; - }; - return data; + +function clearHistory(jid) { + if (shared_converse.router.history.getFragment() === `converse/chat?jid=${jid}`) { + shared_converse.router.navigate(''); + } } - -function utils_templateObject() { - const data = utils_taggedTemplateLiteral(["\n ", "\n "]); - - utils_templateObject = function () { - return data; - }; - - return data; -} - -function utils_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - - async function getHeadingDropdownItem(promise_or_data) { const data = await promise_or_data; - return T(utils_templateObject(), data.a_class, data.handler, data.i18n_title, data.icon_class, data.i18n_text); + return T` + + + ${data.i18n_text} + + `; } async function getHeadingStandaloneButton(promise_or_data) { const data = await promise_or_data; - return T(utils_templateObject2(), data.a_class, data.icon_class, data.handler, data.i18n_title); + return T` + + `; } async function clearMessages(chat) { const result = confirm(__('Are you sure you want to clear the messages from this conversation?')); @@ -45347,8 +49169,95 @@ function resetElementHeight(ev) { ev.target.style = ''; } } -// EXTERNAL MODULE: ./src/plugins/chatview/styles/chat-head.scss -var styles_chat_head = __webpack_require__(4311); +;// CONCATENATED MODULE: ./src/plugins/chatview/templates/chat-head.js + + + + + + + +async function getStandaloneButtons(promise) { + const heading_btns = await promise; + const standalone_btns = heading_btns.filter(b => b.standalone); + return standalone_btns.map(b => getHeadingStandaloneButton(b)); +} + +async function getDropdownButtons(promise) { + const heading_btns = await promise; + const dropdown_btns = heading_btns.filter(b => !b.standalone); + return dropdown_btns.map(b => getHeadingDropdownItem(b)); +} + +/* harmony default export */ const chat_head = (o => { + var _o$model; + + const vcard = (_o$model = o.model) === null || _o$model === void 0 ? void 0 : _o$model.vcard; + const vcard_json = vcard ? vcard.toJSON() : {}; + + const i18n_profile = __("The User's Profile Image"); + + const avatar_data = Object.assign({ + 'alt_text': i18n_profile, + 'extra_classes': '', + 'height': 40, + 'width': 40 + }, vcard_json); + const avatar = T`${renderAvatar(avatar_data)}`; + const display_name = o.model.getDisplayName(); + + const tpl_dropdown_btns = () => getDropdownButtons(o.heading_buttons_promise).then(btns => btns.length ? T`` : ''); + + const tpl_standalone_btns = () => getStandaloneButtons(o.heading_buttons_promise).then(btns => btns.reverse().map(b => until_o(b, ''))); + + return T` +
    +
    + ${!shared_converse.api.settings.get("singleton") ? T`` : ''} + ${o.type !== shared_converse.HEADLINES_TYPE ? T`${avatar}` : ''} +
    + ${o.type !== shared_converse.HEADLINES_TYPE ? T`${display_name}` : display_name} +
    +
    +
    + ${until_o(tpl_dropdown_btns(), '')} + ${until_o(tpl_standalone_btns(), '')} +
    +
    + ${o.status ? T`

    ${o.status}

    ` : ''} + `; +}); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/chatview/styles/chat-head.scss +var styles_chat_head = __webpack_require__(6220); +;// CONCATENATED MODULE: ./src/plugins/chatview/styles/chat-head.scss + + + + + + + + + + + +var chat_head_options = {}; + +chat_head_options.styleTagTransform = (styleTagTransform_default()); +chat_head_options.setAttributes = (setAttributesWithoutAttributes_default()); + + chat_head_options.insert = insertBySelector_default().bind(null, "head"); + +chat_head_options.domAPI = (styleDomAPI_default()); +chat_head_options.insertStyleElement = (insertStyleElement_default()); + +var chat_head_update = injectStylesIntoStyleTag_default()(styles_chat_head/* default */.Z, chat_head_options); + + + + + /* harmony default export */ const chatview_styles_chat_head = (styles_chat_head/* default */.Z && styles_chat_head/* default.locals */.Z.locals ? styles_chat_head/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/chatview/heading.js @@ -45356,32 +49265,30 @@ var styles_chat_head = __webpack_require__(4311); - - - -class ChatHeading extends ElementView { - async render() { - const tpl = await this.generateHeadingTemplate(); - V(tpl, this); - } - - connectedCallback() { +class ChatHeading extends CustomElement { + initialize() { var _this$model$rosterCon; - super.connectedCallback(); this.model = shared_converse.chatboxes.get(this.getAttribute('jid')); - this.debouncedRender = lodash_es_debounce(this.render, 100); - this.listenTo(this.model, 'vcard:change', this.debouncedRender); + this.listenTo(this.model, 'change:status', this.requestUpdate); + this.listenTo(this.model, 'vcard:change', this.requestUpdate); if (this.model.contact) { - this.listenTo(this.model.contact, 'destroy', this.debouncedRender); + this.listenTo(this.model.contact, 'destroy', this.requestUpdate); } (_this$model$rosterCon = this.model.rosterContactAdded) === null || _this$model$rosterCon === void 0 ? void 0 : _this$model$rosterCon.then(() => { - this.listenTo(this.model.contact, 'change:nickname', this.debouncedRender); - this.debouncedRender(); + this.listenTo(this.model.contact, 'change:nickname', this.requestUpdate); + this.requestUpdate(); }); - this.render(); + } + + render() { + return chat_head(Object.assign(this.model.toJSON(), { + 'heading_buttons_promise': this.getHeadingButtons(), + 'model': this.model, + 'showUserDetailsModal': ev => this.showUserDetailsModal(ev) + })); } showUserDetailsModal(ev) { @@ -45391,10 +49298,9 @@ class ChatHeading extends ElementView { }, ev); } - close() { - var _converse$chatboxview; - - (_converse$chatboxview = shared_converse.chatboxviews.get(this.getAttribute('jid'))) === null || _converse$chatboxview === void 0 ? void 0 : _converse$chatboxview.close(); + close(ev) { + ev.preventDefault(); + this.model.close(); } /** * Returns a list of objects which represent buttons for the chat's header. @@ -45452,47 +49358,9 @@ class ChatHeading extends ElementView { } } - async generateHeadingTemplate() { - var _this$model; - - const vcard = (_this$model = this.model) === null || _this$model === void 0 ? void 0 : _this$model.vcard; - const vcard_json = vcard ? vcard.toJSON() : {}; - - const i18n_profile = __("The User's Profile Image"); - - const avatar_data = Object.assign({ - 'alt_text': i18n_profile, - 'extra_classes': '', - 'height': 40, - 'width': 40 - }, vcard_json); - const heading_btns = await this.getHeadingButtons(); - const standalone_btns = heading_btns.filter(b => b.standalone); - const dropdown_btns = heading_btns.filter(b => !b.standalone); - return chat_head(Object.assign(this.model.toJSON(), { - avatar_data, - 'display_name': this.model.getDisplayName(), - 'dropdown_btns': dropdown_btns.map(b => getHeadingDropdownItem(b)), - 'showUserDetailsModal': ev => this.showUserDetailsModal(ev), - 'standalone_btns': standalone_btns.map(b => getHeadingStandaloneButton(b)) - })); - } - } api.elements.define('converse-chat-heading', ChatHeading); ;// CONCATENATED MODULE: ./src/plugins/chatview/templates/message-form.js -function message_form_templateObject() { - const data = message_form_taggedTemplateLiteral(["\n
    \n \n ", "\n "]); - - message_form_templateObject = function () { - return data; - }; - - return data; -} - -function message_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -45503,7 +49371,23 @@ function message_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = st const label_spoiler_hint = __('Optional hint'); const show_send_button = api.settings.get('show_send_button'); - return T(message_form_templateObject(), label_spoiler_hint || '', o.hint_value || '', o.composing_spoiler ? '' : 'hidden', o.onDrop, resetElementHeight, o.onKeyDown, o.onKeyUp, o.onPaste, o.onChange, show_send_button ? 'chat-textarea-send-button' : '', o.composing_spoiler ? 'spoiler' : '', label_message, o.message_value || ''); + return T` +
    + + +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/chatview/message-form.js @@ -45712,7 +49596,10 @@ class MessageForm extends ElementView { textarea.setAttribute('disabled', 'disabled'); (_this$querySelector3 = this.querySelector('converse-emoji-dropdown')) === null || _this$querySelector3 === void 0 ? void 0 : _this$querySelector3.hideMenu(); const is_command = this.parseMessageForCommands(message_text); - const message = is_command ? null : await this.model.sendMessage(message_text, spoiler_hint); + const message = is_command ? null : await this.model.sendMessage({ + 'body': message_text, + spoiler_hint + }); if (is_command || message) { hint_el.value = ''; @@ -45755,38 +49642,6 @@ class MessageForm extends ElementView { } api.elements.define('converse-message-form', MessageForm); ;// CONCATENATED MODULE: ./src/plugins/chatview/templates/bottom-panel.js -function bottom_panel_templateObject3() { - const data = bottom_panel_taggedTemplateLiteral(["\n "]); - - bottom_panel_templateObject3 = function () { - return data; - }; - - return data; -} - -function bottom_panel_templateObject2() { - const data = bottom_panel_taggedTemplateLiteral(["
    \u25BC ", " \u25BC
    "]); - - bottom_panel_templateObject2 = function () { - return data; - }; - - return data; -} - -function bottom_panel_templateObject() { - const data = bottom_panel_taggedTemplateLiteral(["\n ", "\n ", "\n \n "]); - - bottom_panel_templateObject = function () { - return data; - }; - - return data; -} - -function bottom_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -45799,10 +49654,53 @@ function bottom_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = st const show_send_button = api.settings.get('show_send_button'); const show_spoiler_button = api.settings.get('visible_toolbar_buttons').spoiler; const show_toolbar = api.settings.get('show_toolbar'); - return T(bottom_panel_templateObject(), o.model.get('scrolled') && o.model.get('num_unread') ? T(bottom_panel_templateObject2(), ev => o.viewUnreadMessages(ev), unread_msgs) : '', api.settings.get('show_toolbar') ? T(bottom_panel_templateObject3(), o.model, o.model.get('composing_spoiler'), show_call_button, show_emoji_button, show_send_button, show_spoiler_button, show_toolbar, message_limit) : '', o.model.get('jid')); + return T` + ${o.model.ui.get('scrolled') && o.model.get('num_unread') ? T`
    o.viewUnreadMessages(ev)}>▼ ${unread_msgs} ▼
    ` : ''} + ${api.settings.get('show_toolbar') ? T` + ` : ''} + + `; }); -// EXTERNAL MODULE: ./src/plugins/chatview/styles/chat-bottom-panel.scss -var chat_bottom_panel = __webpack_require__(6694); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/chatview/styles/chat-bottom-panel.scss +var chat_bottom_panel = __webpack_require__(5503); +;// CONCATENATED MODULE: ./src/plugins/chatview/styles/chat-bottom-panel.scss + + + + + + + + + + + +var chat_bottom_panel_options = {}; + +chat_bottom_panel_options.styleTagTransform = (styleTagTransform_default()); +chat_bottom_panel_options.setAttributes = (setAttributesWithoutAttributes_default()); + + chat_bottom_panel_options.insert = insertBySelector_default().bind(null, "head"); + +chat_bottom_panel_options.domAPI = (styleDomAPI_default()); +chat_bottom_panel_options.insertStyleElement = (insertStyleElement_default()); + +var chat_bottom_panel_update = injectStylesIntoStyleTag_default()(chat_bottom_panel/* default */.Z, chat_bottom_panel_options); + + + + + /* harmony default export */ const styles_chat_bottom_panel = (chat_bottom_panel/* default */.Z && chat_bottom_panel/* default.locals */.Z.locals ? chat_bottom_panel/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/chatview/bottom-panel.js function bottom_panel_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -45815,25 +49713,31 @@ function bottom_panel_defineProperty(obj, key, value) { if (key in obj) { Object class ChatBottomPanel extends ElementView { - constructor(...args) { - super(...args); + constructor() { + super(); bottom_panel_defineProperty(this, "events", { 'click .send-button': 'sendButtonClicked', 'click .toggle-clear': 'clearMessages' }); + + this.debouncedRender = lodash_es_debounce(this.render, 100); } async connectedCallback() { super.connectedCallback(); - this.debouncedRender = lodash_es_debounce(this.render, 100); - this.model = shared_converse.chatboxes.get(this.getAttribute('jid')); + await this.initialize(); + this.render(); // don't call in initialize, since the MUCBottomPanel subclasses it + // and we want to render after it has finished as wel. + } + + async initialize() { + this.model = await api.chatboxes.get(this.getAttribute('jid')); await this.model.initialized; this.listenTo(this.model, 'change:num_unread', this.debouncedRender); this.listenTo(this.model, 'emoji-picker-autocomplete', this.autocompleteInPicker); this.addEventListener('focusin', ev => this.emitFocused(ev)); this.addEventListener('focusout', ev => this.emitBlurred(ev)); - this.render(); } render() { @@ -45853,7 +49757,7 @@ class ChatBottomPanel extends ElementView { var _ev$preventDefault; ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); - this.model.save({ + this.model.ui.set({ 'scrolled': false }); } @@ -45870,11 +49774,6 @@ class ChatBottomPanel extends ElementView { (_converse$chatboxview2 = shared_converse.chatboxviews.get(this.getAttribute('jid'))) === null || _converse$chatboxview2 === void 0 ? void 0 : _converse$chatboxview2.emitBlurred(ev); } - getToolbarOptions() { - // eslint-disable-line class-methods-use-this - return {}; - } - onDrop(evt) { if (evt.dataTransfer.files.length == 0) { // There are no files to be dropped, so this isn’t a file @@ -45919,7 +49818,6 @@ api.elements.define('converse-chat-bottom-panel', ChatBottomPanel); -const baseview_u = core_converse.env.utils; class BaseChatView extends CustomElement { static get properties() { return { @@ -45938,12 +49836,22 @@ class BaseChatView extends CustomElement { updated() { if (this.model && this.jid !== this.model.get('jid')) { this.stopListening(); + + shared_converse.chatboxviews.remove(this.model.get('jid'), this); + delete this.model; this.requestUpdate(); this.initialize(); } } + close(ev) { + var _ev$preventDefault; + + ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); + return this.model.close(ev); + } + maybeFocus() { api.settings.get('auto_focus') && this.focus(); } @@ -45990,23 +49898,6 @@ class BaseChatView extends CustomElement { api.trigger('chatBoxFocused', this, ev); } - onStatusMessageChanged(item) { - this.renderHeading(); - /** - * When a contact's custom status message has changed. - * @event _converse#contactStatusMessageChanged - * @type {object} - * @property { object } contact - The chat buddy - * @property { string } message - The message text - * @example _converse.api.listen.on('contactStatusMessageChanged', obj => { ... }); - */ - - api.trigger('contactStatusMessageChanged', { - 'contact': item.attributes, - 'message': item.get('status') - }); - } - getBottomPanel() { if (this.model.get('type') === shared_converse.CHATROOMS_TYPE) { return this.querySelector('converse-muc-bottom-panel'); @@ -46032,13 +49923,13 @@ class BaseChatView extends CustomElement { scrollDown(ev) { - var _ev$preventDefault, _ev$stopPropagation; + var _ev$preventDefault2, _ev$stopPropagation; - ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); + ev === null || ev === void 0 ? void 0 : (_ev$preventDefault2 = ev.preventDefault) === null || _ev$preventDefault2 === void 0 ? void 0 : _ev$preventDefault2.call(ev); ev === null || ev === void 0 ? void 0 : (_ev$stopPropagation = ev.stopPropagation) === null || _ev$stopPropagation === void 0 ? void 0 : _ev$stopPropagation.call(ev); - if (this.model.get('scrolled')) { - baseview_u.safeSave(this.model, { + if (this.model.ui.get('scrolled')) { + this.model.ui.set({ 'scrolled': false }); } @@ -46061,43 +49952,35 @@ class BaseChatView extends CustomElement { } ;// CONCATENATED MODULE: ./src/plugins/chatview/templates/chat.js -function chat_templateObject3() { - const data = chat_taggedTemplateLiteral(["
    \n
    "]); - - chat_templateObject3 = function () { - return data; - }; - - return data; -} - -function chat_templateObject2() { - const data = chat_taggedTemplateLiteral(["\n \n
    \n
    \n \n\n ", "\n
    \n \n
    \n "]); - - chat_templateObject2 = function () { - return data; - }; - - return data; -} - -function chat_templateObject() { - const data = chat_taggedTemplateLiteral(["\n
    \n \n ", "\n
    \n"]); - - chat_templateObject = function () { - return data; - }; - - return data; -} - -function chat_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +/* harmony default export */ const chat = (o => T` +
    + + ${o.model ? T` + +
    +
    + -/* harmony default export */ const chat = (o => T(chat_templateObject(), o.model ? T(chat_templateObject2(), o.jid, o.show_send_button ? 'chat-content-sendbutton' : '', o.jid, o.show_help_messages ? T(chat_templateObject3(), o.model, o.help_messages, !o.show_help_messages, shared_converse.CHATROOMS_TYPE) : '', o.jid) : '')); -;// CONCATENATED MODULE: ./src/plugins/chatview/view.js -function view_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + ${o.show_help_messages ? T`
    +
    ` : ''} +
    + +
    + ` : ''} +
    +`); +;// CONCATENATED MODULE: ./src/plugins/chatview/chat.js +function chat_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -46116,12 +49999,7 @@ class ChatView extends BaseChatView { constructor(...args) { super(...args); - view_defineProperty(this, "length", 200); - } - - connectedCallback() { - super.connectedCallback(); - this.initialize(); + chat_defineProperty(this, "length", 200); } async initialize() { @@ -46131,7 +50009,6 @@ class ChatView extends BaseChatView { this.listenTo(shared_converse, 'windowStateChanged', this.onWindowStateChanged); this.listenTo(this.model, 'change:hidden', () => !this.model.get('hidden') && this.afterShown()); this.listenTo(this.model, 'change:show_help_messages', this.requestUpdate); - this.listenTo(this.model, 'change:status', this.onStatusMessageChanged); await this.model.messages.fetched; !this.model.get('hidden') && this.afterShown(); /** @@ -46154,7 +50031,7 @@ class ChatView extends BaseChatView { getHelpMessages() { // eslint-disable-line class-methods-use-this - return ["/clear: ".concat(__('Remove messages')), "/close: ".concat(__('Close this chat')), "/me: ".concat(__('Write in the third person')), "/help: ".concat(__('Show this menu'))]; + return [`/clear: ${__('Remove messages')}`, `/close: ${__('Close this chat')}`, `/me: ${__('Write in the third person')}`, `/help: ${__('Show this menu')}`]; } showControlBox() { @@ -46164,74 +50041,48 @@ class ChatView extends BaseChatView { // Used in mobile view, to navigate back to the controlbox (_converse$chatboxview = shared_converse.chatboxviews.get('controlbox')) === null || _converse$chatboxview === void 0 ? void 0 : _converse$chatboxview.show(); } - /** - * Closes this chat - * @private - * @method _converse.ChatBoxView#close - */ - - - close(ev) { - var _ev$preventDefault; - - ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); - - if (shared_converse.router.history.getFragment() === 'converse/chat?jid=' + this.model.get('jid')) { - shared_converse.router.navigate(''); - } - - return this.model.close(ev); - } afterShown() { this.model.setChatState(shared_converse.ACTIVE); + this.model.clearUnreadMsgCounter(); this.maybeFocus(); } } api.elements.define('converse-chat', ChatView); -;// CONCATENATED MODULE: ./src/plugins/chatview/api.js +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/chatview/styles/index.scss +var chatview_styles = __webpack_require__(9107); +;// CONCATENATED MODULE: ./src/plugins/chatview/styles/index.scss -/* harmony default export */ const chatview_api = ({ - /** - * The "chatview" namespace groups methods pertaining to views - * for one-on-one chats. - * - * @namespace _converse.api.chatviews - * @memberOf _converse.api - */ - chatviews: { - /** - * Get the view of an already open chat. - * @method _converse.api.chatviews.get - * @param { Array.string | string } jids - * @returns { _converse.ChatBoxView|undefined } The chat should already be open, otherwise `undefined` will be returned. - * @example - * // To return a single view, provide the JID of the contact: - * _converse.api.chatviews.get('buddy@example.com') - * @example - * // To return an array of views, provide an array of JIDs: - * _converse.api.chatviews.get(['buddy1@example.com', 'buddy2@example.com']) - */ - get(jids) { - if (jids === undefined) { - return Object.values(shared_converse.chatboxviews.getAll()); - } + + + + + + + + + - if (typeof jids === 'string') { - return shared_converse.chatboxviews.get(jids); - } +var styles_options = {}; - return jids.map(jid => shared_converse.chatboxviews.get(jid)); - } +styles_options.styleTagTransform = (styleTagTransform_default()); +styles_options.setAttributes = (setAttributesWithoutAttributes_default()); + + styles_options.insert = insertBySelector_default().bind(null, "head"); + +styles_options.domAPI = (styleDomAPI_default()); +styles_options.insertStyleElement = (insertStyleElement_default()); + +var styles_update = injectStylesIntoStyleTag_default()(chatview_styles/* default */.Z, styles_options); + + + + + /* harmony default export */ const plugins_chatview_styles = (chatview_styles/* default */.Z && chatview_styles/* default.locals */.Z.locals ? chatview_styles/* default.locals */.Z.locals : undefined); - } -}); -// EXTERNAL MODULE: ./src/plugins/chatview/styles/index.scss -var chatview_styles = __webpack_require__(9475); ;// CONCATENATED MODULE: ./src/plugins/chatview/index.js /** - * @module converse-chatview * @copyright 2020, the Converse.js contributors * @license Mozilla Public License (MPLv2) */ @@ -46265,13 +50116,16 @@ core_converse.plugins.add('converse-chatview', { * loaded by converse.js's plugin machinery. */ api.settings.extend({ + 'allowed_audio_domains': null, + 'allowed_image_domains': null, + 'allowed_video_domains': null, 'auto_focus': true, 'debounced_content_rendering': true, 'filter_url_query_params': null, 'image_urls_regex': null, 'message_limit': 0, 'muc_hats': ['xep317'], - 'show_images_inline': true, + 'render_media': true, 'show_message_avatar': true, 'show_retraction_warning': true, 'show_send_button': true, @@ -46285,35 +50139,13 @@ core_converse.plugins.add('converse-chatview', { 'spoiler': true } }); - Object.assign(api, chatview_api); shared_converse.ChatBoxView = ChatView; api.listen.on('connected', () => api.disco.own.features.add(chatview_Strophe.NS.SPOILER)); + api.listen.on('chatBoxClosed', model => clearHistory(model.get('jid'))); } }); ;// CONCATENATED MODULE: ./src/shared/components/brand-byline.js -function brand_byline_templateObject2() { - const data = brand_byline_taggedTemplateLiteral(["\n

    ", "

    \n

    \n Open Source XMPP chat client\n brought to you by Opkode\n

    \n

    \n Translate\n it into your own language\n

    \n "]); - - brand_byline_templateObject2 = function () { - return data; - }; - - return data; -} - -function brand_byline_templateObject() { - const data = brand_byline_taggedTemplateLiteral(["\n ", "\n "]); - - brand_byline_templateObject = function () { - return data; - }; - - return data; -} - -function brand_byline_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -46321,34 +50153,26 @@ class ConverseBrandByline extends CustomElement { render() { // eslint-disable-line class-methods-use-this const is_fullscreen = api.settings.get('view_mode') === 'fullscreen'; - return T(brand_byline_templateObject(), is_fullscreen ? T(brand_byline_templateObject2(), shared_converse.VERSION_NAME) : ''); + return T` + ${is_fullscreen ? T` +

    ${shared_converse.VERSION_NAME}

    +

    + Open Source XMPP chat client + brought to you by Opkode +

    +

    + Translate + it into your own language +

    + ` : ''} + `; } } api.elements.define('converse-brand-byline', ConverseBrandByline); ;// CONCATENATED MODULE: ./src/shared/components/brand-logo.js -function brand_logo_templateObject2() { - const data = brand_logo_taggedTemplateLiteral(["\n

    messaging freedom

    \n "]); - - brand_logo_templateObject2 = function () { - return data; - }; - - return data; -} - -function brand_logo_templateObject() { - const data = brand_logo_taggedTemplateLiteral(["\n \n \n \n\n Converse\n \n \n \n \n \n \n \n \n \n \n converse.js\n ", "\n \n \n \n "]); - - brand_logo_templateObject = function () { - return data; - }; - - return data; -} - -function brand_logo_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -46356,24 +50180,50 @@ class ConverseBrandLogo extends CustomElement { render() { // eslint-disable-line class-methods-use-this const is_fullscreen = api.settings.get('view_mode') === 'fullscreen'; - return T(brand_logo_templateObject(), is_fullscreen ? 'brand-name-wrapper--fullscreen' : '', is_fullscreen ? T(brand_logo_templateObject2()) : ''); + return T` + + + + + converse.js + ${is_fullscreen ? T` + + ` : ''} + + + + `; } } api.elements.define('converse-brand-logo', ConverseBrandLogo); +;// CONCATENATED MODULE: ./node_modules/lit/html.js + +//# sourceMappingURL=html.js.map + ;// CONCATENATED MODULE: ./src/shared/components/brand-heading.js -function brand_heading_templateObject() { - const data = brand_heading_taggedTemplateLiteral(["\n \n \n "]); - - brand_heading_templateObject = function () { - return data; - }; - - return data; -} - -function brand_heading_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -46382,94 +50232,15 @@ function brand_heading_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = s class ConverseBrandHeading extends CustomElement { render() { // eslint-disable-line class-methods-use-this - return T(brand_heading_templateObject()); + return T` + + + `; } } api.elements.define('converse-brand-heading', ConverseBrandHeading); ;// CONCATENATED MODULE: ./src/plugins/controlbox/templates/loginpanel.js -function loginpanel_templateObject8() { - const data = loginpanel_taggedTemplateLiteral(["\n \n
    \n
    \n

    ", "

    \n

    ", "

    \n
    \n ", "\n
    \n"]); - - loginpanel_templateObject8 = function () { - return data; - }; - - return data; -} - -function loginpanel_templateObject7() { - const data = loginpanel_taggedTemplateLiteral(["

    ", "

    "]); - - loginpanel_templateObject7 = function () { - return data; - }; - - return data; -} - -function loginpanel_templateObject6() { - const data = loginpanel_taggedTemplateLiteral([""]); - - loginpanel_templateObject6 = function () { - return data; - }; - - return data; -} - -function loginpanel_templateObject5() { - const data = loginpanel_taggedTemplateLiteral(["\n ", "\n ", "\n ", "\n "]); - - loginpanel_templateObject5 = function () { - return data; - }; - - return data; -} - -function loginpanel_templateObject4() { - const data = loginpanel_taggedTemplateLiteral(["\n
    \n \n \n
    \n ", "\n ", "\n
    \n \n
    \n ", "\n "]); - - loginpanel_templateObject4 = function () { - return data; - }; - - return data; -} - -function loginpanel_templateObject3() { - const data = loginpanel_taggedTemplateLiteral(["\n
    \n

    ", "

    \n

    \n
    \n "]); - - loginpanel_templateObject3 = function () { - return data; - }; - - return data; -} - -function loginpanel_templateObject2() { - const data = loginpanel_taggedTemplateLiteral(["\n
    \n \n \n
    \n "]); - - loginpanel_templateObject2 = function () { - return data; - }; - - return data; -} - -function loginpanel_templateObject() { - const data = loginpanel_taggedTemplateLiteral(["\n
    \n \n \n \n
    \n "]); - - loginpanel_templateObject = function () { - return data; - }; - - return data; -} - -function loginpanel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -46481,13 +50252,26 @@ const trust_checkbox = checked => { const i18n_trusted = __('This is a trusted device'); - return T(loginpanel_templateObject(), checked, i18n_trusted, i18n_hint_trusted); + return T` + + `; }; const password_input = () => { const i18n_password = __('Password'); - return T(loginpanel_templateObject2(), i18n_password, i18n_password); + return T` +
    + + +
    + `; }; const register_link = () => { @@ -46495,11 +50279,16 @@ const register_link = () => { const i18n_hint_no_account = __("Don't have a chat account?"); - return T(loginpanel_templateObject3(), i18n_hint_no_account, i18n_create_account); + return T` +
    +

    ${i18n_hint_no_account}

    +

    +
    + `; }; const show_register_link = () => { - return shared_converse.allow_registration && !api.settings.get("auto_login") && shared_converse.pluggable.plugins["converse-register"].enabled(shared_converse); + return api.settings.get('allow_registration') && !api.settings.get("auto_login") && shared_converse.pluggable.plugins["converse-register"].enabled(shared_converse); }; const auth_fields = o => { @@ -46507,7 +50296,24 @@ const auth_fields = o => { const i18n_xmpp_address = __("XMPP Address"); - return T(loginpanel_templateObject4(), i18n_xmpp_address, api.settings.get('auto_focus') ? true : false, o.placeholder_username, o.authentication !== o.EXTERNAL ? password_input() : '', o.show_trust_checkbox ? trust_checkbox(o.show_trust_checkbox === 'off' ? false : true) : '', i18n_login, show_register_link() ? register_link(o) : ''); + return T` +
    + + +
    + ${o.authentication !== o.EXTERNAL ? password_input() : ''} + ${o.show_trust_checkbox ? trust_checkbox(o.show_trust_checkbox === 'off' ? false : true) : ''} +
    + +
    + ${show_register_link() ? register_link(o) : ''} + `; }; const form_fields = o => { @@ -46515,12 +50321,25 @@ const form_fields = o => { const i18n_anon_login = __('Click here to log in anonymously'); - return T(loginpanel_templateObject5(), o.authentication == o.LOGIN || o.authentication == o.EXTERNAL ? auth_fields(o) : '', o.authentication == o.ANONYMOUS ? T(loginpanel_templateObject6(), i18n_anon_login) : '', o.authentication == o.PREBIND ? T(loginpanel_templateObject7(), i18n_disconnected) : ''); + return T` + ${o.authentication == o.LOGIN || o.authentication == o.EXTERNAL ? auth_fields(o) : ''} + ${o.authentication == o.ANONYMOUS ? T`` : ''} + ${o.authentication == o.PREBIND ? T`

    ${i18n_disconnected}

    ` : ''} + `; }; -/* harmony default export */ const loginpanel = (o => T(loginpanel_templateObject8(), !o.conn_feedback_subject ? 'hidden' : o.conn_feedback_class, o.conn_feedback_subject, !o.conn_feedback_message ? 'hidden' : '', o.conn_feedback_message, shared_converse.CONNECTION_STATUS[o.connection_status] === 'CONNECTING' ? spinner({ +/* harmony default export */ const loginpanel = (o => T` + +
    +
    + + +
    + ${shared_converse.CONNECTION_STATUS[o.connection_status] === 'CONNECTING' ? spinner({ 'classes': 'hor_centered' -}) : form_fields(o))); +}) : form_fields(o)} +
    +`); ;// CONCATENATED MODULE: ./src/plugins/controlbox/loginpanel.js function loginpanel_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -46733,23 +50552,44 @@ function navigateToControlBox(jid) { 'hidden': true }); } -;// CONCATENATED MODULE: ./src/plugins/controlbox/templates/navback.js -function navback_templateObject() { - const data = navback_taggedTemplateLiteral([""]); +function disconnect() { + /* Upon disconnection, set connected to `false`, so that if + * we reconnect, "onConnected" will be called, + * to fetch the roster again and to send out a presence stanza. + */ + const view = shared_converse.chatboxviews.get('controlbox'); - navback_templateObject = function () { - return data; - }; - - return data; + view.model.set({ + 'connected': false + }); + return view; } +function controlbox_utils_clearSession() { + const chatboxviews = shared_converse === null || shared_converse === void 0 ? void 0 : shared_converse.chatboxviews; + const view = chatboxviews && chatboxviews.get('controlbox'); -function navback_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + if (view) { + controlbox_utils_u.safeSave(view.model, { + 'connected': false + }); + if (view !== null && view !== void 0 && view.controlbox_pane) { + view.controlbox_pane.remove(); + delete view.controlbox_pane; + } + } +} +function onChatBoxesFetched() { + const controlbox = shared_converse.chatboxes.get('controlbox') || addControlBox(); + controlbox.save({ + 'connected': true + }); +} +;// CONCATENATED MODULE: ./src/plugins/controlbox/templates/navback.js /* harmony default export */ const navback = (jid => { - return T(navback_templateObject(), () => navigateToControlBox(jid)); + return T` navigateToControlBox(jid)}>`; }); ;// CONCATENATED MODULE: ./src/plugins/controlbox/navback.js @@ -46775,12 +50615,11 @@ api.elements.define('converse-controlbox-navback', ControlBoxNavback); /* harmony default export */ const controlbox_navback = ((/* unused pure expression or super */ null && (ControlBoxNavback))); ;// CONCATENATED MODULE: ./src/plugins/controlbox/model.js + const { dayjs: model_dayjs } = core_converse.env; /** - * Mixin which turns a ChatBox model into a ControlBox model. - * * The ControlBox is the section of the chat that contains the open groupchats, * bookmarks and roster. * @@ -46789,7 +50628,7 @@ const { * @mixin */ -const ControlBoxMixin = { +const ControlBox = Model.extend({ defaults() { return { 'bookmarked': false, @@ -46797,22 +50636,12 @@ const ControlBoxMixin = { 'chat_state': undefined, 'closed': !api.settings.get('show_controlbox_by_default'), 'num_unread': 0, - 'time_opened': this.get('time_opened') || new Date().getTime(), + 'time_opened': model_dayjs(0).valueOf(), 'type': shared_converse.CONTROLBOX_TYPE, 'url': '' }; }, - initialize() { - if (this.get('id') === 'controlbox') { - this.set({ - 'time_opened': model_dayjs(0).valueOf() - }); - } else { - shared_converse.ChatBox.prototype.initialize.apply(this, arguments); - } - }, - validate(attrs) { if (attrs.type === shared_converse.CONTROLBOX_TYPE) { if (api.settings.get('view_mode') === 'embedded' && api.settings.get('singleton')) { @@ -46838,27 +50667,15 @@ const ControlBoxMixin = { this.save('connected', true); } -}; -/* harmony default export */ const controlbox_model = (ControlBoxMixin); +}); +/* harmony default export */ const controlbox_model = (ControlBox); ;// CONCATENATED MODULE: ./src/plugins/controlbox/templates/toggle.js -function toggle_templateObject() { - const data = toggle_taggedTemplateLiteral(["", ""]); - - toggle_templateObject = function () { - return data; - }; - - return data; -} - -function toggle_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const toggle = (o => { const i18n_toggle = api.connection.connected() ? __('Chat Contacts') : __('Toggle chat'); - return T(toggle_templateObject(), o.hide ? 'hidden' : '', o.onClick, i18n_toggle); + return T`${i18n_toggle}`; }); ;// CONCATENATED MODULE: ./src/plugins/controlbox/toggle.js @@ -46880,7 +50697,7 @@ class ControlBoxToggle extends CustomElement { return toggle({ 'onClick': showControlBox, - 'hide': !((_this$model = this.model) === null || _this$model === void 0 ? void 0 : _this$model.get('closed')) + 'hide': !((_this$model = this.model) !== null && _this$model !== void 0 && _this$model.get('closed')) }); } @@ -46889,71 +50706,30 @@ class ControlBoxToggle extends CustomElement { api.elements.define('converse-controlbox-toggle', ControlBoxToggle); /* harmony default export */ const controlbox_toggle = (ControlBoxToggle); ;// CONCATENATED MODULE: ./src/plugins/controlbox/templates/controlbox.js -function controlbox_templateObject6() { - const data = controlbox_taggedTemplateLiteral([""]); - - controlbox_templateObject6 = function () { - return data; - }; - - return data; -} - -function controlbox_templateObject5() { - const data = controlbox_taggedTemplateLiteral([""]); - - controlbox_templateObject5 = function () { - return data; - }; - - return data; -} - -function controlbox_templateObject4() { - const data = controlbox_taggedTemplateLiteral(["
    "]); - - controlbox_templateObject4 = function () { - return data; - }; - - return data; -} - -function controlbox_templateObject3() { - const data = controlbox_taggedTemplateLiteral(["\n \n \n
    \n \n \n
    \n ", ""]); - - controlbox_templateObject3 = function () { - return data; - }; - - return data; -} - -function controlbox_templateObject2() { - const data = controlbox_taggedTemplateLiteral(["\n \n "]); - - controlbox_templateObject2 = function () { - return data; - }; - - return data; -} - -function controlbox_templateObject() { - const data = controlbox_taggedTemplateLiteral(["\n
    \n \n
    \n ", "\n
    \n
    \n
    \n ", "\n
    \n
    \n
    \n"]); - - controlbox_templateObject = function () { - return data; - }; - - return data; -} - -function controlbox_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -/* harmony default export */ const controlbox = (o => T(controlbox_templateObject(), o.sticky_controlbox ? '' : T(controlbox_templateObject2(), o.close), o.connected ? T(controlbox_templateObject3(), api.settings.get("authentication") === shared_converse.ANONYMOUS ? '' : T(controlbox_templateObject4())) : o['active-form'] === 'register' ? T(controlbox_templateObject5()) : T(controlbox_templateObject6()))); +/* harmony default export */ const controlbox = (o => T` +
    + +
    + ${o.sticky_controlbox ? '' : T` + + `} +
    +
    +
    + ${o.connected ? T` + + +
    + + +
    + ${api.settings.get("authentication") === shared_converse.ANONYMOUS ? '' : T`
    `}` : o['active-form'] === 'register' ? T`` : T``} +
    +
    +
    +`); ;// CONCATENATED MODULE: ./src/plugins/controlbox/controlbox.js @@ -46968,7 +50744,7 @@ const controlbox_u = core_converse.env.utils; * `view_mode` it's a left-aligned sidebar. */ -class ControlBox extends ElementView { +class controlbox_ControlBox extends ElementView { initialize() { this.setModel(); this.render(); @@ -47052,8 +50828,8 @@ class ControlBox extends ElementView { } -api.elements.define('converse-controlbox', ControlBox); -/* harmony default export */ const controlbox_controlbox = (ControlBox); +api.elements.define('converse-controlbox', controlbox_ControlBox); +/* harmony default export */ const controlbox_controlbox = (controlbox_ControlBox); ;// CONCATENATED MODULE: ./src/plugins/controlbox/api.js const { @@ -47094,11 +50870,39 @@ const { } }); -// EXTERNAL MODULE: ./src/plugins/controlbox/styles/_controlbox.scss -var _controlbox = __webpack_require__(9980); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/controlbox/styles/_controlbox.scss +var _controlbox = __webpack_require__(7581); +;// CONCATENATED MODULE: ./src/plugins/controlbox/styles/_controlbox.scss + + + + + + + + + + + +var _controlbox_options = {}; + +_controlbox_options.styleTagTransform = (styleTagTransform_default()); +_controlbox_options.setAttributes = (setAttributesWithoutAttributes_default()); + + _controlbox_options.insert = insertBySelector_default().bind(null, "head"); + +_controlbox_options.domAPI = (styleDomAPI_default()); +_controlbox_options.insertStyleElement = (insertStyleElement_default()); + +var _controlbox_update = injectStylesIntoStyleTag_default()(_controlbox/* default */.Z, _controlbox_options); + + + + + /* harmony default export */ const styles_controlbox = (_controlbox/* default */.Z && _controlbox/* default.locals */.Z.locals ? _controlbox/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/controlbox/index.js /** - * @module converse-controlbox * @copyright 2020, the Converse.js contributors * @license Mozilla Public License (MPLv2) */ @@ -47114,44 +50918,6 @@ var _controlbox = __webpack_require__(9980); -const plugins_controlbox_u = core_converse.env.utils; - -function disconnect() { - /* Upon disconnection, set connected to `false`, so that if - * we reconnect, "onConnected" will be called, - * to fetch the roster again and to send out a presence stanza. - */ - const view = shared_converse.chatboxviews.get('controlbox'); - - view.model.set({ - 'connected': false - }); - return view; -} - -function controlbox_clearSession() { - const chatboxviews = shared_converse === null || shared_converse === void 0 ? void 0 : shared_converse.chatboxviews; - const view = chatboxviews && chatboxviews.get('controlbox'); - - if (view) { - plugins_controlbox_u.safeSave(view.model, { - 'connected': false - }); - - if (view === null || view === void 0 ? void 0 : view.controlbox_pane) { - view.controlbox_pane.remove(); - delete view.controlbox_pane; - } - } -} - -function onChatBoxesFetched() { - const controlbox = shared_converse.chatboxes.get('controlbox') || addControlBox(); - controlbox.save({ - 'connected': true - }); -} - core_converse.plugins.add('converse-controlbox', { /* Plugin dependencies are other plugins which might be * overridden or relied upon, and therefore need to be loaded before @@ -47177,12 +50943,8 @@ core_converse.plugins.add('converse-controlbox', { // New functions which don't exist yet can also be added. ChatBoxes: { model(attrs, options) { - const { - _converse - } = this.__super__; - if (attrs && attrs.id == 'controlbox') { - return new _converse.ControlBox(attrs, options); + return new controlbox_model(attrs, options); } else { return this.__super__.model.apply(this, arguments); } @@ -47203,13 +50965,10 @@ core_converse.plugins.add('converse-controlbox', { api.promises.add('controlBoxInitialized'); Object.assign(api, controlbox_api); shared_converse.ControlBoxView = controlbox_controlbox; - shared_converse.ControlBox = shared_converse.ChatBox.extend(controlbox_model); + shared_converse.ControlBox = controlbox_model; shared_converse.ControlBoxToggle = controlbox_toggle; - /******************** Event Handlers ********************/ - api.listen.on('chatBoxesFetched', onChatBoxesFetched); - api.listen.on('cleanup', () => delete shared_converse.controlboxtoggle); - api.listen.on('clearSession', controlbox_clearSession); + api.listen.on('clearSession', controlbox_utils_clearSession); api.listen.on('will-reconnect', disconnect); api.waitUntil('chatBoxViewsInitialized').then(addControlBox).catch(e => headless_log.fatal(e)); } @@ -47346,21 +51105,13 @@ function onMouseUp(ev) { shared_converse.resizing = null; } ;// CONCATENATED MODULE: ./src/plugins/dragresize/templates/dragresize.js -function dragresize_templateObject() { - const data = dragresize_taggedTemplateLiteral(["\n
    \n
    \n
    \n"]); - - dragresize_templateObject = function () { - return data; - }; - - return data; -} - -function dragresize_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -/* harmony default export */ const dragresize = (() => T(dragresize_templateObject(), onStartVerticalResize, onStartDiagonalResize, onStartHorizontalResize)); +/* harmony default export */ const dragresize = (() => T` +
    +
    +
    +`); ;// CONCATENATED MODULE: ./src/plugins/dragresize/components/dragresize.js @@ -47408,7 +51159,7 @@ const DragResizableMixin = { this.prev_pageY = 0; this.prev_pageX = 0; - if ((_converse$connection = shared_converse.connection) === null || _converse$connection === void 0 ? void 0 : _converse$connection.connected) { + if ((_converse$connection = shared_converse.connection) !== null && _converse$connection !== void 0 && _converse$connection.connected) { this.height = this.model.get('height'); this.width = this.model.get('width'); } @@ -47609,10 +51360,37 @@ core_converse.plugins.add('converse-singleton', { } }); -// EXTERNAL MODULE: ./src/plugins/fullscreen/styles/fullscreen.scss -var fullscreen = __webpack_require__(2366); -// EXTERNAL MODULE: ./src/plugins/fullscreen/styles/background.scss -var background = __webpack_require__(553); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/fullscreen/styles/fullscreen.scss +var fullscreen = __webpack_require__(6752); +;// CONCATENATED MODULE: ./src/plugins/fullscreen/styles/fullscreen.scss + + + + + + + + + + + +var fullscreen_options = {}; + +fullscreen_options.styleTagTransform = (styleTagTransform_default()); +fullscreen_options.setAttributes = (setAttributesWithoutAttributes_default()); + + fullscreen_options.insert = insertBySelector_default().bind(null, "head"); + +fullscreen_options.domAPI = (styleDomAPI_default()); +fullscreen_options.insertStyleElement = (insertStyleElement_default()); + +var fullscreen_update = injectStylesIntoStyleTag_default()(fullscreen/* default */.Z, fullscreen_options); + + + + + /* harmony default export */ const styles_fullscreen = (fullscreen/* default */.Z && fullscreen/* default.locals */.Z.locals ? fullscreen/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/fullscreen/index.js /** * @module converse-fullscreen @@ -47627,8 +51405,8 @@ var background = __webpack_require__(553); core_converse.plugins.add('converse-fullscreen', { - enabled(_converse) { - return _converse.isUniView(); + enabled() { + return isUniView(); }, initialize() { @@ -47643,55 +51421,25 @@ core_converse.plugins.add('converse-fullscreen', { }); ;// CONCATENATED MODULE: ./src/plugins/headlines-view/templates/chat-head.js -function templates_chat_head_templateObject4() { - const data = templates_chat_head_taggedTemplateLiteral(["

    ", "

    "]); - - templates_chat_head_templateObject4 = function () { - return data; - }; - - return data; -} - -function templates_chat_head_templateObject3() { - const data = templates_chat_head_taggedTemplateLiteral([""]); - - templates_chat_head_templateObject3 = function () { - return data; - }; - - return data; -} - -function templates_chat_head_templateObject2() { - const data = templates_chat_head_taggedTemplateLiteral([""]); - - templates_chat_head_templateObject2 = function () { - return data; - }; - - return data; -} - -function templates_chat_head_templateObject() { - const data = templates_chat_head_taggedTemplateLiteral(["\n
    \n
    \n ", "\n
    ", "
    \n
    \n
    \n ", "\n ", "\n
    \n
    \n ", "\n "]); - - templates_chat_head_templateObject = function () { - return data; - }; - - return data; -} - -function templates_chat_head_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const templates_chat_head = (o => { const tpl_standalone_btns = o => o.standalone_btns.reverse().map(b => until_o(b, '')); - return T(templates_chat_head_templateObject(), o.status ? '' : "chatbox-title--no-desc", !shared_converse.api.settings.get("singleton") ? T(templates_chat_head_templateObject2(), o.jid) : '', o.jid, o.display_name, o.dropdown_btns.length ? T(templates_chat_head_templateObject3(), o.dropdown_btns) : '', o.standalone_btns.length ? tpl_standalone_btns(o) : '', o.status ? T(templates_chat_head_templateObject4(), o.status) : ''); + return T` +
    +
    + ${!shared_converse.api.settings.get("singleton") ? T`` : ''} +
    ${o.display_name}
    +
    +
    + ${o.dropdown_btns.length ? T`` : ''} + ${o.standalone_btns.length ? tpl_standalone_btns(o) : ''} +
    +
    + ${o.status ? T`

    ${o.status}

    ` : ''} + `; }); ;// CONCATENATED MODULE: ./src/plugins/headlines-view/heading.js @@ -47699,7 +51447,8 @@ function templates_chat_head_taggedTemplateLiteral(strings, raw) { if (!raw) { r -class HeadlinesHeading extends ChatHeading { + +class HeadlinesHeading extends ElementView { async connectedCallback() { super.connectedCallback(); this.model = shared_converse.chatboxes.get(this.getAttribute('jid')); @@ -47707,6 +51456,11 @@ class HeadlinesHeading extends ChatHeading { this.render(); } + async render() { + const tpl = await this.generateHeadingTemplate(); + V(tpl, this); + } + async generateHeadingTemplate() { const heading_btns = await this.getHeadingButtons(); const standalone_btns = heading_btns.filter(b => b.standalone); @@ -47743,45 +51497,37 @@ class HeadlinesHeading extends ChatHeading { return shared_converse.api.hook('getHeadingButtons', this, buttons); } + close(ev) { + ev.preventDefault(); + this.model.close(); + } + } api.elements.define('converse-headlines-heading', HeadlinesHeading); ;// CONCATENATED MODULE: ./src/plugins/headlines-view/templates/headlines.js -function headlines_templateObject2() { - const data = headlines_taggedTemplateLiteral(["\n \n \n
    \n
    \n \n
    \n
    "]); - - headlines_templateObject2 = function () { - return data; - }; - - return data; -} - -function headlines_templateObject() { - const data = headlines_taggedTemplateLiteral(["\n
    \n \n ", "\n
    \n"]); - - headlines_templateObject = function () { - return data; - }; - - return data; -} - -function headlines_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -/* harmony default export */ const headlines = (model => T(headlines_templateObject(), model ? T(headlines_templateObject2(), model.get('jid'), model.get('jid')) : '')); +/* harmony default export */ const headlines = (model => T` +
    + + ${model ? T` + + +
    +
    + +
    +
    ` : ''} +
    +`); ;// CONCATENATED MODULE: ./src/plugins/headlines-view/view.js class HeadlinesView extends BaseChatView { - connectedCallback() { - super.connectedCallback(); - this.initialize(); - } - async initialize() { shared_converse.chatboxviews.add(this.jid, this); @@ -47791,7 +51537,6 @@ class HeadlinesView extends BaseChatView { this.listenTo(shared_converse, 'windowStateChanged', this.onWindowStateChanged); this.listenTo(this.model, 'change:hidden', () => this.afterShown()); this.listenTo(this.model, 'destroy', this.remove); - this.listenTo(this.model, 'show', this.show); this.listenTo(this.model.messages, 'add', this.requestUpdate); this.listenTo(this.model.messages, 'remove', this.requestUpdate); this.listenTo(this.model.messages, 'reset', this.requestUpdate); @@ -47821,7 +51566,6 @@ class HeadlinesView extends BaseChatView { } await this.model.close(ev); - api.trigger('chatBoxClosed', this); return this; } @@ -47833,59 +51577,44 @@ class HeadlinesView extends BaseChatView { } afterShown() { - // eslint-disable-line class-methods-use-this - return; + this.model.clearUnreadMsgCounter(); } } api.elements.define('converse-headlines', HeadlinesView); ;// CONCATENATED MODULE: ./src/templates/headline_list.js -function headline_list_templateObject2() { - const data = headline_list_taggedTemplateLiteral(["\n
    \n
    \n ", "\n
    \n
    \n"]); - - headline_list_templateObject2 = function () { - return data; - }; - - return data; -} - -function headline_list_templateObject() { - const data = headline_list_taggedTemplateLiteral(["\n
    \n ", "\n
    \n"]); - - headline_list_templateObject = function () { - return data; - }; - - return data; -} - -function headline_list_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +const tpl_headline_box = o => T` + +`; -const tpl_headline_box = o => T(headline_list_templateObject(), o.headlinebox.get('jid'), o.headlinebox.get('jid'), o.open_title, o.headlinebox.get('jid')); - -/* harmony default export */ const headline_list = (o => T(headline_list_templateObject2(), o.headlineboxes.length ? '' : 'hidden', o.headlineboxes.map(headlinebox => tpl_headline_box(Object.assign({ +/* harmony default export */ const headline_list = (o => T` +
    +
    + ${o.headlineboxes.map(headlinebox => tpl_headline_box(Object.assign({ headlinebox -}, o))))); +}, o)))} +
    +
    +`); ;// CONCATENATED MODULE: ./src/plugins/headlines-view/templates/panel.js -function panel_templateObject() { - const data = panel_taggedTemplateLiteral(["\n
    \n
    \n ", "\n
    \n
    \n ", "\n"]); - - panel_templateObject = function () { - return data; - }; - - return data; -} - -function panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -/* harmony default export */ const panel = (o => T(panel_templateObject(), o.headlineboxes.length ? '' : 'hidden', o.heading_headline, headline_list(o))); +/* harmony default export */ const panel = (o => T` +
    +
    + ${o.heading_headline} +
    +
    + ${headline_list(o)} +`); ;// CONCATENATED MODULE: ./src/plugins/headlines-view/panel.js function panel_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -47941,8 +51670,37 @@ class HeadlinesPanel extends ElementView { } api.elements.define('converse-headlines-panel', HeadlinesPanel); -// EXTERNAL MODULE: ./src/plugins/headlines-view/styles/headlines.scss -var styles_headlines = __webpack_require__(9996); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/headlines-view/styles/headlines.scss +var styles_headlines = __webpack_require__(115); +;// CONCATENATED MODULE: ./src/plugins/headlines-view/styles/headlines.scss + + + + + + + + + + + +var headlines_options = {}; + +headlines_options.styleTagTransform = (styleTagTransform_default()); +headlines_options.setAttributes = (setAttributesWithoutAttributes_default()); + + headlines_options.insert = insertBySelector_default().bind(null, "head"); + +headlines_options.domAPI = (styleDomAPI_default()); +headlines_options.insertStyleElement = (insertStyleElement_default()); + +var headlines_update = injectStylesIntoStyleTag_default()(styles_headlines/* default */.Z, headlines_options); + + + + + /* harmony default export */ const headlines_view_styles_headlines = (styles_headlines/* default */.Z && styles_headlines/* default.locals */.Z.locals ? styles_headlines/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/headlines-view/index.js /** * @module converse-headlines-view @@ -47972,10 +51730,102 @@ core_converse.plugins.add('converse-headlines-view', { } }); +;// CONCATENATED MODULE: ./src/plugins/mam-views/templates/placeholder.js + + + +/* harmony default export */ const placeholder = (el => { + return el.model.get('fetching') ? spinner({ + 'classes': 'hor_centered' + }) : T` +
    +
    `; +}); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/mam-views/styles/placeholder.scss +var styles_placeholder = __webpack_require__(7667); +;// CONCATENATED MODULE: ./src/plugins/mam-views/styles/placeholder.scss + + + + + + + + + + + +var placeholder_options = {}; + +placeholder_options.styleTagTransform = (styleTagTransform_default()); +placeholder_options.setAttributes = (setAttributesWithoutAttributes_default()); + + placeholder_options.insert = insertBySelector_default().bind(null, "head"); + +placeholder_options.domAPI = (styleDomAPI_default()); +placeholder_options.insertStyleElement = (insertStyleElement_default()); + +var placeholder_update = injectStylesIntoStyleTag_default()(styles_placeholder/* default */.Z, placeholder_options); + + + + + /* harmony default export */ const mam_views_styles_placeholder = (styles_placeholder/* default */.Z && styles_placeholder/* default.locals */.Z.locals ? styles_placeholder/* default.locals */.Z.locals : undefined); + +;// CONCATENATED MODULE: ./src/plugins/mam-views/placeholder.js + + + + + + +class Placeholder extends CustomElement { + static get properties() { + return { + 'model': { + type: Object + } + }; + } + + render() { + return placeholder(this); + } + + async fetchMissingMessages(ev) { + var _ev$preventDefault; + + ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); + this.model.set('fetching', true); + const options = { + 'before': this.model.get('before'), + 'start': this.model.get('start') + }; + await fetchArchivedMessages(this.model.collection.chatbox, options); + this.model.destroy(); + } + +} + +api.elements.define('converse-mam-placeholder', Placeholder); ;// CONCATENATED MODULE: ./src/plugins/mam-views/utils.js + + + +function getPlaceholderTemplate(message, tpl) { + if (message instanceof MAMPlaceholderMessage) { + return T``; + } else { + return tpl; + } +} async function fetchMessagesOnScrollUp(view) { + if (view.model.ui.get('chat-content-spinner-top')) { + return; + } + if (view.model.messages.length) { const is_groupchat = view.model.get('type') === shared_converse.CHATROOMS_TYPE; @@ -47983,21 +51833,27 @@ async function fetchMessagesOnScrollUp(view) { if (oldest_message) { const by_jid = is_groupchat ? view.model.get('jid') : shared_converse.bare_jid; - const stanza_id = oldest_message && oldest_message.get("stanza_id ".concat(by_jid)); + const stanza_id = oldest_message && oldest_message.get(`stanza_id ${by_jid}`); view.model.ui.set('chat-content-spinner-top', true); - if (stanza_id) { - await fetchArchivedMessages(view.model, { - 'before': stanza_id - }); - } else { - await fetchArchivedMessages(view.model, { - 'end': oldest_message.get('time') - }); + try { + if (stanza_id) { + await fetchArchivedMessages(view.model, { + 'before': stanza_id + }); + } else { + await fetchArchivedMessages(view.model, { + 'end': oldest_message.get('time') + }); + } + } catch (e) { + headless_log.error(e); + view.model.ui.set('chat-content-spinner-top', false); + return; } if (api.settings.get('allow_url_history_change')) { - shared_converse.router.history.navigate("#".concat(oldest_message.get('msgid'))); + shared_converse.router.history.navigate(`#${oldest_message.get('msgid')}`); } setTimeout(() => view.model.ui.set('chat-content-spinner-top', false), 250); @@ -48012,43 +51868,120 @@ async function fetchMessagesOnScrollUp(view) { */ + core_converse.plugins.add('converse-mam-views', { dependencies: ['converse-mam', 'converse-chatview', 'converse-muc-views'], initialize() { api.listen.on('chatBoxScrolledUp', fetchMessagesOnScrollUp); + api.listen.on('getMessageTemplate', getPlaceholderTemplate); } }); +;// CONCATENATED MODULE: ./src/plugins/minimize/toggle.js + +const MinimizedChatsToggle = Model.extend({ + defaults: { + 'collapsed': false + } +}); +/* harmony default export */ const minimize_toggle = (MinimizedChatsToggle); +;// CONCATENATED MODULE: ./src/plugins/minimize/templates/chats-panel.js + + +/* harmony default export */ const chats_panel = (o => T``); +;// CONCATENATED MODULE: ./src/plugins/minimize/view.js + + + + + +class MinimizedChats extends CustomElement { + async initialize() { + this.model = shared_converse.chatboxes; + await this.initToggle(); + this.listenTo(this.minchats, 'change:collapsed', this.requestUpdate); + this.listenTo(this.model, 'add', this.requestUpdate); + this.listenTo(this.model, 'change:fullname', this.requestUpdate); + this.listenTo(this.model, 'change:jid', this.requestUpdate); + this.listenTo(this.model, 'change:minimized', this.requestUpdate); + this.listenTo(this.model, 'change:name', this.requestUpdate); + this.listenTo(this.model, 'change:num_unread', this.requestUpdate); + this.listenTo(this.model, 'remove', this.requestUpdate); + this.listenTo(shared_converse, 'connected', this.requestUpdate); + this.listenTo(shared_converse, 'reconnected', this.requestUpdate); + this.listenTo(shared_converse, 'disconnected', this.requestUpdate); + } + + render() { + const chats = this.model.where({ + 'minimized': true + }); + const num_unread = chats.reduce((acc, chat) => acc + chat.get('num_unread'), 0); + const num_minimized = chats.reduce((acc, chat) => acc + (chat.get('minimized') ? 1 : 0), 0); + const collapsed = this.minchats.get('collapsed'); + const data = { + chats, + num_unread, + num_minimized, + collapsed + }; + + data.toggle = ev => this.toggle(ev); + + return chats_panel(data); + } + + async initToggle() { + const id = `converse.minchatstoggle-${shared_converse.bare_jid}`; + this.minchats = new minimize_toggle({ + id + }); + initStorage(this.minchats, id, 'session'); + await new Promise(resolve => this.minchats.fetch({ + 'success': resolve, + 'error': resolve + })); + } + + toggle(ev) { + ev === null || ev === void 0 ? void 0 : ev.preventDefault(); + this.minchats.save({ + 'collapsed': !this.minchats.get('collapsed') + }); + } + +} +api.elements.define('converse-minimized-chats', MinimizedChats); ;// CONCATENATED MODULE: ./src/plugins/minimize/templates/trimmed_chat.js -function trimmed_chat_templateObject2() { - const data = trimmed_chat_taggedTemplateLiteral(["", ""]); - - trimmed_chat_templateObject2 = function () { - return data; - }; - - return data; -} - -function trimmed_chat_templateObject() { - const data = trimmed_chat_taggedTemplateLiteral(["\n "]); - - trimmed_chat_templateObject = function () { - return data; - }; - - return data; -} - -function trimmed_chat_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const trimmed_chat = (o => { const i18n_tooltip = __('Click to restore this chat'); - return T(trimmed_chat_templateObject(), o.type, i18n_tooltip, o.restore, o.num_unread ? T(trimmed_chat_templateObject2(), o.num_unread) : '', o.title, o.close); + const close_color = o.type === 'chatroom' ? "var(--chatroom-head-color)" : "var(--chat-head-text-color)"; + return T` + `; }); ;// CONCATENATED MODULE: ./src/plugins/minimize/utils.js @@ -48062,7 +51995,8 @@ function getChatBoxWidth(view) { if (minimize_utils_u.isVisible(view)) { return minimize_utils_u.getOuterWidth(view, true); } else { - return minimize_utils_u.getOuterWidth(shared_converse.controlboxtoggle.el, true); + const toggle = document.querySelector('converse-controlbox-toggle'); + return toggle ? minimize_utils_u.getOuterWidth(toggle, true) : 0; } } else if (!view.model.get('minimized') && minimize_utils_u.isVisible(view)) { return minimize_utils_u.getOuterWidth(view, true); @@ -48078,15 +52012,13 @@ function getShownChats() { } function getMinimizedWidth() { - var _converse$minimized_c; - - const minimized_el = (_converse$minimized_c = shared_converse.minimized_chats) === null || _converse$minimized_c === void 0 ? void 0 : _converse$minimized_c.el; + const minimized_el = document.querySelector('converse-minimized-chats'); return shared_converse.chatboxes.pluck('minimized').includes(true) ? minimize_utils_u.getOuterWidth(minimized_el, true) : 0; } function getBoxesWidth(newchat) { const new_id = newchat ? newchat.model.get('id') : null; - const newchat_width = newchat ? minimize_utils_u.getOuterWidth(newchat.el, true) : 0; + const newchat_width = newchat ? minimize_utils_u.getOuterWidth(newchat, true) : 0; return Object.values(shared_converse.chatboxviews.xget(new_id)).reduce((memo, view) => memo + getChatBoxWidth(view), newchat_width); } /** @@ -48100,10 +52032,8 @@ function getBoxesWidth(newchat) { */ -async function trimChats(newchat) { - var _converse$minimized_c2; - - if (shared_converse.isTestEnv() || api.settings.get('no_trimming') || !api.connection.connected() || api.settings.get("view_mode") !== 'overlayed') { +function trimChats(newchat) { + if (shared_converse.isTestEnv() || api.settings.get('no_trimming') || api.settings.get("view_mode") !== 'overlayed') { return; } @@ -48122,8 +52052,7 @@ async function trimChats(newchat) { return; } - await api.waitUntil('minimizedChatsInitialized'); - const minimized_el = (_converse$minimized_c2 = shared_converse.minimized_chats) === null || _converse$minimized_c2 === void 0 ? void 0 : _converse$minimized_c2.el; + const minimized_el = document.querySelector('converse-minimized-chats'); if (minimized_el) { while (getMinimizedWidth() + getBoxesWidth(newchat) > body_width) { @@ -48131,16 +52060,9 @@ async function trimChats(newchat) { const oldest_chat = getOldestMaximizedChat([new_id]); if (oldest_chat) { - // We hide the chat immediately, because waiting - // for the event to fire (and letting the - // ChatBoxView hide it then) causes race - // conditions. - const view = shared_converse.chatboxviews.get(oldest_chat.get('id')); - - if (view) { - view.hide(); - } + const model = shared_converse.chatboxes.get(oldest_chat.get('id')); + model === null || model === void 0 ? void 0 : model.save('hidden', true); minimize(oldest_chat); } else { break; @@ -48197,7 +52119,7 @@ function addMinimizeButtonToMUC(view, buttons) { return idx > -1 ? [...buttons.slice(0, idx), data, ...buttons.slice(idx)] : [data, ...buttons]; } function maximize(ev, chatbox) { - if (ev === null || ev === void 0 ? void 0 : ev.preventDefault) { + if (ev !== null && ev !== void 0 && ev.preventDefault) { ev.preventDefault(); } else { chatbox = ev; @@ -48210,7 +52132,7 @@ function maximize(ev, chatbox) { }); } function minimize(ev, model) { - if (ev === null || ev === void 0 ? void 0 : ev.preventDefault) { + if (ev !== null && ev !== void 0 && ev.preventDefault) { ev.preventDefault(); } else { model = ev; @@ -48308,17 +52230,7 @@ class MinimizedChat extends CustomElement { close(ev) { ev === null || ev === void 0 ? void 0 : ev.preventDefault(); - - const view = shared_converse.chatboxviews.get(this.model.get('id')); - - if (view) { - // This will call model.destroy(), removing it from the - // collection and will also emit 'chatBoxClosed' - view.close(); - } else { - this.model.destroy(); - api.trigger('chatBoxClosed', this); - } + this.model.close(); } restore(ev) { @@ -48328,104 +52240,37 @@ class MinimizedChat extends CustomElement { } api.elements.define('converse-minimized-chat', MinimizedChat); -;// CONCATENATED MODULE: ./src/plugins/minimize/toggle.js +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/minimize/styles/minimize.scss +var styles_minimize = __webpack_require__(7926); +;// CONCATENATED MODULE: ./src/plugins/minimize/styles/minimize.scss -const MinimizedChatsToggle = Model.extend({ - defaults: { - 'collapsed': false - } -}); -/* harmony default export */ const minimize_toggle = (MinimizedChatsToggle); -;// CONCATENATED MODULE: ./src/plugins/minimize/templates/chats-panel.js -function chats_panel_templateObject2() { - const data = chats_panel_taggedTemplateLiteral([""]); + + + + + + + + + - chats_panel_templateObject2 = function () { - return data; - }; +var minimize_options = {}; - return data; -} +minimize_options.styleTagTransform = (styleTagTransform_default()); +minimize_options.setAttributes = (setAttributesWithoutAttributes_default()); -function chats_panel_templateObject() { - const data = chats_panel_taggedTemplateLiteral(["
    \n \n ", " ", "\n ", "\n \n
    \n ", "\n
    \n
    "]); + minimize_options.insert = insertBySelector_default().bind(null, "head"); + +minimize_options.domAPI = (styleDomAPI_default()); +minimize_options.insertStyleElement = (insertStyleElement_default()); - chats_panel_templateObject = function () { - return data; - }; - - return data; -} - -function chats_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - -/* harmony default export */ const chats_panel = (o => T(chats_panel_templateObject(), o.chats.length ? '' : 'hidden', o.toggle, o.num_minimized, __('Minimized'), !o.num_unread ? 'unread-message-count-hidden' : '', o.num_unread, o.collapsed ? 'hidden' : '', o.chats.map(chat => T(chats_panel_templateObject2(), chat, chat.getDisplayName(), chat.get('type'), chat.get('num_unread'))))); -;// CONCATENATED MODULE: ./src/plugins/minimize/view.js +var minimize_update = injectStylesIntoStyleTag_default()(styles_minimize/* default */.Z, minimize_options); + /* harmony default export */ const minimize_styles_minimize = (styles_minimize/* default */.Z && styles_minimize/* default.locals */.Z.locals ? styles_minimize/* default.locals */.Z.locals : undefined); - -class MinimizedChats extends ElementView { - async initialize() { - this.model = shared_converse.chatboxes; - await this.initToggle(); - this.render(); - this.listenTo(this.minchats, 'change:collapsed', this.render); - this.listenTo(this.model, 'add', this.render); - this.listenTo(this.model, 'change:fullname', this.render); - this.listenTo(this.model, 'change:jid', this.render); - this.listenTo(this.model, 'change:minimized', this.render); - this.listenTo(this.model, 'change:name', this.render); - this.listenTo(this.model, 'change:num_unread', this.render); - this.listenTo(this.model, 'remove', this.render); - } - - render() { - const chats = this.model.where({ - 'minimized': true - }); - const num_unread = chats.reduce((acc, chat) => acc + chat.get('num_unread'), 0); - const num_minimized = chats.reduce((acc, chat) => acc + (chat.get('minimized') ? 1 : 0), 0); - const collapsed = this.minchats.get('collapsed'); - const data = { - chats, - num_unread, - num_minimized, - collapsed - }; - - data.toggle = ev => this.toggle(ev); - - V(chats_panel(data), this); - } - - async initToggle() { - const id = "converse.minchatstoggle-".concat(shared_converse.bare_jid); - this.minchats = new minimize_toggle({ - id - }); - initStorage(this.minchats, id, 'session'); - await new Promise(resolve => this.minchats.fetch({ - 'success': resolve, - 'error': resolve - })); - } - - toggle(ev) { - ev === null || ev === void 0 ? void 0 : ev.preventDefault(); - this.minchats.save({ - 'collapsed': !this.minchats.get('collapsed') - }); - } - -} -api.elements.define('converse-minimized-chats', MinimizedChats); -// EXTERNAL MODULE: ./src/plugins/minimize/styles/minimize.scss -var styles_minimize = __webpack_require__(6123); ;// CONCATENATED MODULE: ./src/plugins/minimize/index.js /** * @module converse-minimize @@ -48519,29 +52364,23 @@ core_converse.plugins.add('converse-minimize', { }, initialize() { - /* The initialize function gets called as soon as the plugin is - * loaded by Converse.js's plugin machinery. - */ api.settings.extend({ 'no_trimming': false }); api.promises.add('minimizedChatsInitialized'); shared_converse.MinimizedChatsToggle = minimize_toggle; - shared_converse.MinimizedChats = MinimizedChats; - shared_converse.minimize = {}; - shared_converse.minimize.trimChats = trimChats; - shared_converse.minimize.minimize = minimize; - shared_converse.minimize.maximize = maximize; + shared_converse.minimize = { + trimChats: trimChats, + minimize: minimize, + maximize: maximize + }; function onChatInitialized(model) { model.on('change:minimized', () => onMinimizedChanged(model)); } - /************************ BEGIN Event Handlers ************************/ - api.listen.on('chatBoxViewInitialized', view => shared_converse.minimize.trimChats(view)); api.listen.on('chatRoomViewInitialized', view => shared_converse.minimize.trimChats(view)); - api.listen.on('chatBoxMaximized', view => shared_converse.minimize.trimChats(view)); api.listen.on('controlBoxOpened', view => shared_converse.minimize.trimChats(view)); api.listen.on('chatBoxInitialized', onChatInitialized); api.listen.on('chatRoomInitialized', onChatInitialized); @@ -49017,18 +52856,6 @@ class AutoComplete { Object.assign(AutoComplete.prototype, Events); /* harmony default export */ const autocomplete = (AutoComplete); ;// CONCATENATED MODULE: ./src/shared/autocomplete/component.js -function component_templateObject() { - const data = component_taggedTemplateLiteral(["\n
    \n \n \n \n
    \n "]); - - component_templateObject = function () { - return data; - }; - - return data; -} - -function component_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -49085,7 +52912,26 @@ class AutoCompleteComponent extends CustomElement { } render() { - return T(component_templateObject(), this.name, this.onKeyDown, this.onKeyUp, this.placeholder); + return T` +
    + + + +
    + `; } firstUpdated() { @@ -49113,8 +52959,37 @@ class AutoCompleteComponent extends CustomElement { } api.elements.define('converse-autocomplete', AutoCompleteComponent); -// EXTERNAL MODULE: ./src/shared/autocomplete/styles/_autocomplete.scss -var _autocomplete = __webpack_require__(6657); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/autocomplete/styles/_autocomplete.scss +var _autocomplete = __webpack_require__(8481); +;// CONCATENATED MODULE: ./src/shared/autocomplete/styles/_autocomplete.scss + + + + + + + + + + + +var _autocomplete_options = {}; + +_autocomplete_options.styleTagTransform = (styleTagTransform_default()); +_autocomplete_options.setAttributes = (setAttributesWithoutAttributes_default()); + + _autocomplete_options.insert = insertBySelector_default().bind(null, "head"); + +_autocomplete_options.domAPI = (styleDomAPI_default()); +_autocomplete_options.insertStyleElement = (insertStyleElement_default()); + +var _autocomplete_update = injectStylesIntoStyleTag_default()(_autocomplete/* default */.Z, _autocomplete_options); + + + + + /* harmony default export */ const styles_autocomplete = (_autocomplete/* default */.Z && _autocomplete/* default.locals */.Z.locals ? _autocomplete/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/shared/autocomplete/index.js @@ -49125,28 +53000,6 @@ shared_converse.FILTER_CONTAINS = FILTER_CONTAINS; shared_converse.FILTER_STARTSWITH = FILTER_STARTSWITH; shared_converse.AutoComplete = autocomplete; ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/ad-hoc-command-form.js -function ad_hoc_command_form_templateObject2() { - const data = ad_hoc_command_form_taggedTemplateLiteral(["
    ", "
    "]); - - ad_hoc_command_form_templateObject2 = function () { - return data; - }; - - return data; -} - -function ad_hoc_command_form_templateObject() { - const data = ad_hoc_command_form_taggedTemplateLiteral(["\n
    \n ", "\n
    \n \n \n\n

    ", "

    \n ", "\n
    \n
    \n \n \n
    \n
    \n "]); - - ad_hoc_command_form_templateObject = function () { - return data; - }; - - return data; -} - -function ad_hoc_command_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const ad_hoc_command_form = ((o, command) => { @@ -49154,238 +53007,41 @@ function ad_hoc_command_form_taggedTemplateLiteral(strings, raw) { if (!raw) { r const i18n_run = __('Execute'); - return T(ad_hoc_command_form_templateObject(), o.runCommand, command.alert ? T(ad_hoc_command_form_templateObject2(), command.alert_type, command.alert) : '', command.node, command.jid, command.instructions, command.fields, i18n_run, i18n_hide, o.hideCommandForm); + return T` +
    + ${command.alert ? T`` : ''} +
    + + + +

    ${command.instructions}

    + ${command.fields} +
    +
    + + +
    +
    + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/ad-hoc-command.js -function ad_hoc_command_templateObject() { - const data = ad_hoc_command_taggedTemplateLiteral(["\n
  • \n
    \n ", "\n
    \n ", "\n
  • \n"]); - - ad_hoc_command_templateObject = function () { - return data; - }; - - return data; -} - -function ad_hoc_command_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -/* harmony default export */ const ad_hoc_command = ((o, command) => T(ad_hoc_command_templateObject(), o.toggleCommandForm, command.node, command.jid, command.name, command.name, command.name || command.jid, command.node === o.showform ? ad_hoc_command_form(o, command) : '')); +/* harmony default export */ const ad_hoc_command = ((o, command) => T` +
  • + + ${command.node === o.showform ? ad_hoc_command_form(o, command) : ''} +
  • +`); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/moderator-tools.js -function _templateObject21() { - const data = moderator_tools_taggedTemplateLiteral(["
  • ", "
  • "]); - - _templateObject21 = function () { - return data; - }; - - return data; -} - -function _templateObject20() { - const data = moderator_tools_taggedTemplateLiteral(["
  • ", "
  • "]); - - _templateObject20 = function () { - return data; - }; - - return data; -} - -function _templateObject19() { - const data = moderator_tools_taggedTemplateLiteral(["

    ", "

    "]); - - _templateObject19 = function () { - return data; - }; - - return data; -} - -function _templateObject18() { - const data = moderator_tools_taggedTemplateLiteral([""]); - - _templateObject18 = function () { - return data; - }; - - return data; -} - -function _templateObject17() { - const data = moderator_tools_taggedTemplateLiteral(["
  • ", "
  • "]); - - _templateObject17 = function () { - return data; - }; - - return data; -} - -function _templateObject16() { - const data = moderator_tools_taggedTemplateLiteral(["
  • ", "
  • "]); - - _templateObject16 = function () { - return data; - }; - - return data; -} - -function _templateObject15() { - const data = moderator_tools_taggedTemplateLiteral(["
  • ", "
  • "]); - - _templateObject15 = function () { - return data; - }; - - return data; -} - -function _templateObject14() { - const data = moderator_tools_taggedTemplateLiteral(["

    ", "

    "]); - - _templateObject14 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject13() { - const data = moderator_tools_taggedTemplateLiteral([""]); - - moderator_tools_templateObject13 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject12() { - const data = moderator_tools_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n \n\n ", "\n\n
    \n
    \n
    \n

    ", "

    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n ", "\n
    \n
    \n\n ", "\n
    \n
    \n
    \n
      \n ", "\n ", "\n\n ", "\n
    \n
    \n
    \n\n
    \n
    \n

    ", "

    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n ", "\n
    \n
    \n\n ", "\n
    \n
    \n
    \n
      \n ", "\n ", "\n ", "\n
    \n
    \n
    \n
    \n
    \n
    \n
    "]); - - moderator_tools_templateObject12 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject11() { - const data = moderator_tools_taggedTemplateLiteral(["\n \n"]); - - moderator_tools_templateObject11 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject10() { - const data = moderator_tools_taggedTemplateLiteral([""]); - - moderator_tools_templateObject10 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject9() { - const data = moderator_tools_taggedTemplateLiteral(["\n
  • \n
      \n
    • \n
      JID: ", "
      \n
    • \n
    • \n
      Nickname: ", "
      \n
    • \n
    • \n
      Affiliation: ", " ", "
      \n ", "\n
    • \n
    \n
  • \n"]); - - moderator_tools_templateObject9 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject8() { - const data = moderator_tools_taggedTemplateLiteral([""]); - - moderator_tools_templateObject8 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject7() { - const data = moderator_tools_taggedTemplateLiteral(["\n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n "]); - - moderator_tools_templateObject7 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject6() { - const data = moderator_tools_taggedTemplateLiteral([""]); - - moderator_tools_templateObject6 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject5() { - const data = moderator_tools_taggedTemplateLiteral(["\n
  • \n
      \n
    • \n
      JID: ", "
      \n
    • \n
    • \n
      Nickname: ", "
      \n
    • \n
    • \n
      Role: ", " ", "
      \n ", "\n
    • \n
    \n
  • \n"]); - - moderator_tools_templateObject5 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject4() { - const data = moderator_tools_taggedTemplateLiteral([""]); - - moderator_tools_templateObject4 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject3() { - const data = moderator_tools_taggedTemplateLiteral(["\n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n "]); - - moderator_tools_templateObject3 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject2() { - const data = moderator_tools_taggedTemplateLiteral(["\n \n"]); - - moderator_tools_templateObject2 = function () { - return data; - }; - - return data; -} - -function moderator_tools_templateObject() { - const data = moderator_tools_taggedTemplateLiteral(["\n \n"]); - - moderator_tools_templateObject = function () { - return data; - }; - - return data; -} - -function moderator_tools_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - @@ -49410,9 +53066,17 @@ function getAffiliationHelpText(aff) { } } -const role_option = o => T(moderator_tools_templateObject(), o.item || '', o.item === o.role, getRoleHelpText(o.item), o.item); +const role_option = o => T` + +`; -const affiliation_option = o => T(moderator_tools_templateObject2(), o.item || '', o.item === o.affiliation, getAffiliationHelpText(o.item), o.item); +const affiliation_option = o => T` + +`; const tpl_set_role_form = o => { const i18n_change_role = __('Change role'); @@ -49421,10 +53085,52 @@ const tpl_set_role_form = o => { const i18n_reason = __('Reason'); - return T(moderator_tools_templateObject3(), o.assignRole, o.item.jid, o.item.nick, i18n_new_role, o.assignable_roles.map(role => T(moderator_tools_templateObject4(), role, role === o.item.role, role)), i18n_reason, i18n_change_role); + return T` + + `; }; -const role_list_item = o => T(moderator_tools_templateObject5(), o.item.nick, o.item.jid, o.item.nick, o.item.role, o.assignable_roles.length ? T(moderator_tools_templateObject6(), o.toggleForm) : '', o.assignable_roles.length ? tpl_set_role_form(o) : ''); +const role_form_toggle = o => T` + + + `; + +const role_list_item = o => T` +
  • +
      +
    • +
      JID: ${o.item.jid}
      +
    • +
    • +
      Nickname: ${o.item.nick}
      +
    • +
    • +
      Role: ${o.item.role} ${o.assignable_roles.length ? role_form_toggle(o) : ''}
      + ${o.assignable_roles.length ? tpl_set_role_form(o) : ''} +
    • +
    +
  • +`; const tpl_set_affiliation_form = o => { const i18n_change_affiliation = __('Change affiliation'); @@ -49433,18 +53139,67 @@ const tpl_set_affiliation_form = o => { const i18n_reason = __('Reason'); - return T(moderator_tools_templateObject7(), o.assignAffiliation, o.item.jid, o.item.nick, i18n_new_affiliation, o.assignable_affiliations.map(aff => T(moderator_tools_templateObject8(), aff, aff === o.item.affiliation, aff)), i18n_reason, i18n_change_affiliation); + return T` + + `; }; -const affiliation_list_item = o => T(moderator_tools_templateObject9(), o.item.nick, o.item.jid, o.item.nick, o.item.affiliation, o.assignable_affiliations.length ? T(moderator_tools_templateObject10(), o.toggleForm) : '', o.assignable_affiliations.length ? tpl_set_affiliation_form(o) : ''); +const affiliation_form_toggle = o => T` + + + `; -const tpl_navigation = o => T(moderator_tools_templateObject11(), o.switchTab, o.switchTab); +const affiliation_list_item = o => T` +
  • +
      +
    • +
      JID: ${o.item.jid}
      +
    • +
    • +
      Nickname: ${o.item.nick}
      +
    • +
    • +
      Affiliation: ${o.item.affiliation} ${o.assignable_affiliations.length ? affiliation_form_toggle(o) : ''}
      + ${o.assignable_affiliations.length ? tpl_set_affiliation_form(o) : ''} +
    • +
    +
  • +`; + +const tpl_navigation = () => T` + +`; /* harmony default export */ const moderator_tools = (o => { const i18n_affiliation = __('Affiliation'); - const i18n_moderator_tools = __('Moderator Tools'); - const i18n_no_users_with_aff = __('No users with that affiliation found.'); const i18n_no_users_with_role = __('No users with that role found.'); @@ -49460,17 +53215,95 @@ const tpl_navigation = o => T(moderator_tools_templateObject11(), o.switchTab, o const i18n_helptext_affiliation = __("An affiliation is a long-lived entitlement which typically implies a certain role and which " + "grants privileges and responsibilities. For example admins and owners automatically have the " + "moderator role."); const show_both_tabs = o.queryable_roles.length && o.queryable_affiliations.length; - return T(moderator_tools_templateObject12(), i18n_moderator_tools, modal_header_close_button, show_both_tabs ? tpl_navigation(o) : '', o.queryable_affiliations.length ? 'active' : '', o.queryAffiliation, i18n_helptext_affiliation, i18n_affiliation, o.queryable_affiliations.map(item => affiliation_option(Object.assign({ + return T` + ${o.alert_message ? T`` : ''} + ${show_both_tabs ? tpl_navigation() : ''} + +
    + + ${o.queryable_affiliations.length ? T` +
    +
    +

    ${i18n_helptext_affiliation}

    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + ${Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length > 5 ? T`` : ''} +
    +
    + + ${getAffiliationHelpText(o.affiliation) ? T`

    ${getAffiliationHelpText(o.affiliation)}

    ` : ''} +
    +
    +
    +
      + ${o.loading_users_with_affiliation ? T`
    • ${spinner()}
    • ` : ''} + ${Array.isArray(o.users_with_affiliation) && o.users_with_affiliation.length === 0 ? T`
    • ${i18n_no_users_with_aff}
    • ` : ''} + + ${o.users_with_affiliation instanceof Error ? T`
    • ${o.users_with_affiliation.message}
    • ` : (o.users_with_affiliation || []).map(item => (item.nick || item.jid).match(new RegExp(o.affiliations_filter, 'i')) ? affiliation_list_item(Object.assign({ item - }, o)) : ''), !show_both_tabs && o.queryable_roles.length ? 'active' : '', o.queryRole, i18n_helptext_role, i18n_role, o.queryable_roles.map(item => role_option(Object.assign({ + }, o)) : '')} +
    +
    +
    ` : ''} + + ${o.queryable_roles.length ? T` +
    +
    +

    ${i18n_helptext_role}

    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + ${Array.isArray(o.users_with_role) && o.users_with_role.length > 5 ? T`` : ''} +
    +
    + + ${getRoleHelpText(o.role) ? T`

    ${getRoleHelpText(o.role)}

    ` : ''} +
    +
    +
    +
      + ${o.loading_users_with_role ? T`
    • ${spinner()}
    • ` : ''} + ${o.users_with_role && o.users_with_role.length === 0 ? T`
    • ${i18n_no_users_with_role}
    • ` : ''} + ${(o.users_with_role || []).map(item => item.nick.match(o.roles_filter) ? role_list_item(Object.assign({ item - }, o)) : '')); + }, o)) : '')} +
    +
    +
    ` : ''} +
    `; }); -;// CONCATENATED MODULE: ./src/plugins/muc-views/modals/moderator-tools.js +;// CONCATENATED MODULE: ./src/plugins/muc-views/modtools.js + + @@ -49479,98 +53312,146 @@ const tpl_navigation = o => T(moderator_tools_templateObject11(), o.switchTab, o const { - Strophe: moderator_tools_Strophe, - sizzle: moderator_tools_sizzle + Strophe: modtools_Strophe, + sizzle: modtools_sizzle, + u: modtools_u } = core_converse.env; -const moderator_tools_u = core_converse.env.utils; -const ModeratorToolsModal = base.extend({ - id: "converse-modtools-modal", - persistent: true, - - initialize(attrs) { - this.muc = attrs.muc; - base.prototype.initialize.apply(this, arguments); - this.affiliations_filter = ''; - this.roles_filter = ''; - this.listenTo(this.model, 'change:role', () => { - this.users_with_role = this.muc.getOccupantsWithRole(this.model.get('role')); - this.render(); - }); - this.listenTo(this.model, 'change:affiliation', async () => { - this.loading_users_with_affiliation = true; - this.users_with_affiliation = null; - this.render(); - const affiliation = this.model.get('affiliation'); - - if (this.shouldFetchAffiliationsList()) { - const muc_jid = this.muc.get('jid'); - this.users_with_affiliation = await getAffiliationList(affiliation, muc_jid); - } else { - this.users_with_affiliation = this.muc.getOccupantsWithAffiliation(affiliation); +class ModeratorTools extends CustomElement { + static get properties() { + return { + affiliation: { + type: String + }, + affiliations_filter: { + type: String, + attribute: false + }, + alert_message: { + type: String, + attribute: false + }, + alert_type: { + type: String, + attribute: false + }, + jid: { + type: String + }, + muc: { + type: Object, + attribute: false + }, + role: { + type: String + }, + roles_filter: { + type: String, + attribute: false + }, + users_with_affiliation: { + type: Array, + attribute: false + }, + users_with_role: { + type: Array, + attribute: false } + }; + } - this.loading_users_with_affiliation = false; - this.render(); - }); - }, + constructor() { + super(); + this.affiliation = ''; + this.affiliations_filter = ''; + this.role = ''; + this.roles_filter = ''; + } - toHTML() { - const occupant = this.muc.occupants.findWhere({ - 'jid': shared_converse.bare_jid - }); - return moderator_tools(Object.assign(this.model.toJSON(), { - 'affiliations_filter': this.affiliations_filter, - 'assignAffiliation': ev => this.assignAffiliation(ev), - 'assignRole': ev => this.assignRole(ev), - 'assignable_affiliations': this.getAssignableAffiliations(occupant), - 'assignable_roles': this.getAssignableRoles(occupant), - 'filterAffiliationResults': ev => this.filterAffiliationResults(ev), - 'filterRoleResults': ev => this.filterRoleResults(ev), - 'loading_users_with_affiliation': this.loading_users_with_affiliation, - 'queryAffiliation': ev => this.queryAffiliation(ev), - 'queryRole': ev => this.queryRole(ev), - 'queryable_affiliations': AFFILIATIONS.filter(a => !shared_converse.modtools_disable_query.includes(a)), - 'queryable_roles': ROLES.filter(a => !shared_converse.modtools_disable_query.includes(a)), - 'roles_filter': this.roles_filter, - 'switchTab': ev => this.switchTab(ev), - 'toggleForm': ev => this.toggleForm(ev), - 'users_with_affiliation': this.users_with_affiliation, - 'users_with_role': this.users_with_role - })); - }, + updated(changed) { + changed.has('role') && this.onSearchRoleChange(); + changed.has('affiliation') && this.onSearchAffiliationChange(); + changed.has('jid') && changed.get('jid') && this.initialize(); + } - getAssignableAffiliations(occupant) { - let disabled = api.settings.get('modtools_disable_assign'); + async initialize() { + this.initialized = getOpenPromise(); + const muc = await api.rooms.get(this.jid); + await muc.initialized; + this.muc = muc; + this.initialized.resolve(); + } - if (!Array.isArray(disabled)) { - disabled = disabled ? AFFILIATIONS : []; - } + render() { + var _this$muc; - if (occupant.get('affiliation') === 'owner') { - return AFFILIATIONS.filter(a => !disabled.includes(a)); - } else if (occupant.get('affiliation') === 'admin') { - return AFFILIATIONS.filter(a => !['owner', 'admin', ...disabled].includes(a)); + if ((_this$muc = this.muc) !== null && _this$muc !== void 0 && _this$muc.occupants) { + const occupant = this.muc.occupants.findWhere({ + 'jid': shared_converse.bare_jid + }); + return moderator_tools({ + 'affiliations_filter': this.affiliations_filter, + 'alert_message': this.alert_message, + 'alert_type': this.alert_type, + 'assignAffiliation': ev => this.assignAffiliation(ev), + 'assignRole': ev => this.assignRole(ev), + 'assignable_affiliations': getAssignableAffiliations(occupant), + 'assignable_roles': getAssignableRoles(occupant), + 'filterAffiliationResults': ev => this.filterAffiliationResults(ev), + 'filterRoleResults': ev => this.filterRoleResults(ev), + 'loading_users_with_affiliation': this.loading_users_with_affiliation, + 'queryAffiliation': ev => this.queryAffiliation(ev), + 'queryRole': ev => this.queryRole(ev), + 'queryable_affiliations': AFFILIATIONS.filter(a => !api.settings.get('modtools_disable_query').includes(a)), + 'queryable_roles': ROLES.filter(a => !api.settings.get('modtools_disable_query').includes(a)), + 'roles_filter': this.roles_filter, + 'switchTab': ev => this.switchTab(ev), + 'toggleForm': ev => this.toggleForm(ev), + 'users_with_affiliation': this.users_with_affiliation, + 'users_with_role': this.users_with_role + }); } else { - return []; + return ''; } - }, + } - getAssignableRoles(occupant) { - let disabled = api.settings.get('modtools_disable_assign'); - - if (!Array.isArray(disabled)) { - disabled = disabled ? ROLES : []; + async onSearchAffiliationChange() { + if (!this.affiliation) { + return; } - if (occupant.get('role') === 'moderator') { - return ROLES.filter(r => !disabled.includes(r)); + await this.initialized; + this.clearAlert(); + this.loading_users_with_affiliation = true; + this.users_with_affiliation = null; + + if (this.shouldFetchAffiliationsList()) { + const result = await getAffiliationList(this.affiliation, this.jid); + + if (result instanceof Error) { + this.alert(result.message, 'danger'); + this.users_with_affiliation = []; + } else { + this.users_with_affiliation = result; + } } else { - return []; + this.users_with_affiliation = this.muc.getOccupantsWithAffiliation(this.affiliation); } - }, + + this.loading_users_with_affiliation = false; + } + + async onSearchRoleChange() { + if (!this.role) { + return; + } + + await this.initialized; + this.clearAlert(); + this.users_with_role = this.muc.getOccupantsWithRole(this.role); + } shouldFetchAffiliationsList() { - const affiliation = this.model.get('affiliation'); + const affiliation = this.affiliation; if (affiliation === 'none') { return false; @@ -49584,71 +53465,71 @@ const ModeratorToolsModal = base.extend({ } else { return true; } - }, + } toggleForm(ev) { + // eslint-disable-line class-methods-use-this ev.stopPropagation(); ev.preventDefault(); - const form_class = ev.target.getAttribute('data-form'); - const form = moderator_tools_u.ancestor(ev.target, '.list-group-item').querySelector(".".concat(form_class)); + const toggle = modtools_u.ancestor(ev.target, '.toggle-form'); + const form_class = toggle.getAttribute('data-form'); + const form = modtools_u.ancestor(toggle, '.list-group-item').querySelector(`.${form_class}`); - if (moderator_tools_u.hasClass('hidden', form)) { - moderator_tools_u.removeClass('hidden', form); + if (modtools_u.hasClass('hidden', form)) { + modtools_u.removeClass('hidden', form); } else { - moderator_tools_u.addClass('hidden', form); + modtools_u.addClass('hidden', form); } - }, + } filterRoleResults(ev) { this.roles_filter = ev.target.value; this.render(); - }, + } filterAffiliationResults(ev) { this.affiliations_filter = ev.target.value; - this.render(); - }, + } queryRole(ev) { ev.stopPropagation(); ev.preventDefault(); const data = new FormData(ev.target); const role = data.get('role'); - this.model.set({ - 'role': null - }, { - 'silent': true - }); - this.model.set({ - 'role': role - }); - }, + this.role = null; + this.role = role; + } queryAffiliation(ev) { ev.stopPropagation(); ev.preventDefault(); const data = new FormData(ev.target); const affiliation = data.get('affiliation'); - this.model.set({ - 'affiliation': null - }, { - 'silent': true - }); - this.model.set({ - 'affiliation': affiliation - }); - }, + this.affiliation = null; + this.affiliation = affiliation; + } + + alert(message, type) { + this.alert_message = message; + this.alert_type = type; + } + + clearAlert() { + this.alert_message = undefined; + this.alert_type = undefined; + } async assignAffiliation(ev) { ev.stopPropagation(); ev.preventDefault(); + this.clearAlert(); const data = new FormData(ev.target); const affiliation = data.get('affiliation'); const attrs = { 'jid': data.get('jid'), 'reason': data.get('reason') }; - const current_affiliation = this.model.get('affiliation'); + const current_affiliation = this.affiliation; const muc_jid = this.muc.get('jid'); try { @@ -49656,8 +53537,8 @@ const ModeratorToolsModal = base.extend({ } catch (e) { if (e === null) { this.alert(__('Timeout error while trying to set the affiliation'), 'danger'); - } else if (moderator_tools_sizzle("not-allowed[xmlns=\"".concat(moderator_tools_Strophe.NS.STANZAS, "\"]"), e).length) { - this.alert(__('Sorry, you\'re not allowed to make that change'), 'danger'); + } else if (modtools_sizzle(`not-allowed[xmlns="${modtools_Strophe.NS.STANZAS}"]`, e).length) { + this.alert(__("Sorry, you're not allowed to make that change"), 'danger'); } else { this.alert(__('Sorry, something went wrong while trying to set the affiliation'), 'danger'); } @@ -49666,155 +53547,81 @@ const ModeratorToolsModal = base.extend({ return; } - this.alert(__('Affiliation changed'), 'primary'); await this.muc.occupants.fetchMembers(); - this.model.set({ - 'affiliation': null - }, { - 'silent': true - }); - this.model.set({ - 'affiliation': current_affiliation - }); - }, + this.affiliation = null; + this.affiliation = current_affiliation; + this.alert(__('Affiliation changed'), 'primary'); + } assignRole(ev) { ev.stopPropagation(); ev.preventDefault(); + this.clearAlert(); const data = new FormData(ev.target); const occupant = this.muc.getOccupant(data.get('jid') || data.get('nick')); const role = data.get('role'); const reason = data.get('reason'); - const current_role = this.model.get('role'); + const current_role = this.role; this.muc.setRole(occupant, role, reason, () => { this.alert(__('Role changed'), 'primary'); - this.model.set({ - 'role': null - }, { - 'silent': true - }); - this.model.set({ - 'role': current_role - }); + this.role = null; + this.role = current_role; }, e => { - if (moderator_tools_sizzle("not-allowed[xmlns=\"".concat(moderator_tools_Strophe.NS.STANZAS, "\"]"), e).length) { - this.alert(__('You\'re not allowed to make that change'), 'danger'); + if (modtools_sizzle(`not-allowed[xmlns="${modtools_Strophe.NS.STANZAS}"]`, e).length) { + this.alert(__("You're not allowed to make that change"), 'danger'); } else { this.alert(__('Sorry, something went wrong while trying to set the role'), 'danger'); - if (moderator_tools_u.isErrorObject(e)) { + if (modtools_u.isErrorObject(e)) { headless_log.error(e); } } }); } +} +api.elements.define('converse-modtools', ModeratorTools); +;// CONCATENATED MODULE: ./src/plugins/muc-views/modals/templates/moderator-tools.js + + + +/* harmony default export */ const templates_moderator_tools = (o => { + const i18n_moderator_tools = __('Moderator Tools'); + + return T` + `; +}); +;// CONCATENATED MODULE: ./src/plugins/muc-views/modals/moderator-tools.js + + + +const ModeratorToolsModal = base.extend({ + id: "converse-modtools-modal", + persistent: true, + + initialize(attrs) { + this.jid = attrs.jid; + this.affiliation = attrs.affiliation; + base.prototype.initialize.apply(this, arguments); + }, + + toHTML() { + return templates_moderator_tools(this); + } + }); /* harmony default export */ const modals_moderator_tools = (ModeratorToolsModal); ;// CONCATENATED MODULE: ./src/plugins/muc-views/utils.js -function utils_templateObject10() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - utils_templateObject10 = function () { - return data; - }; - - return data; -} - -function utils_templateObject9() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - utils_templateObject9 = function () { - return data; - }; - - return data; -} - -function utils_templateObject8() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - utils_templateObject8 = function () { - return data; - }; - - return data; -} - -function utils_templateObject7() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - utils_templateObject7 = function () { - return data; - }; - - return data; -} - -function utils_templateObject6() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - utils_templateObject6 = function () { - return data; - }; - - return data; -} - -function utils_templateObject5() { - const data = muc_views_utils_taggedTemplateLiteral(["\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n "]); - - utils_templateObject5 = function () { - return data; - }; - - return data; -} - -function utils_templateObject4() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - utils_templateObject4 = function () { - return data; - }; - - return data; -} - -function utils_templateObject3() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - utils_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_views_utils_templateObject2() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - muc_views_utils_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_views_utils_templateObject() { - const data = muc_views_utils_taggedTemplateLiteral([""]); - - muc_views_utils_templateObject = function () { - return data; - }; - - return data; -} - -function muc_views_utils_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - @@ -49825,9 +53632,9 @@ function muc_views_utils_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = const { Strophe: muc_views_utils_Strophe, - $pres: utils_$pres, + $pres: muc_views_utils_$pres, $iq: muc_views_utils_$iq, - sizzle: utils_sizzle, + sizzle: muc_views_utils_sizzle, u: muc_views_utils_u } = core_converse.env; const COMMAND_TO_AFFILIATION = { @@ -49844,6 +53651,40 @@ const COMMAND_TO_ROLE = { 'op': 'moderator', 'voice': 'participant' }; +function utils_clearHistory(jid) { + if (shared_converse.router.history.getFragment() === `converse/room?jid=${jid}`) { + shared_converse.router.navigate(''); + } +} +async function destroyMUC(model) { + const messages = [__('Are you sure you want to destroy this groupchat?')]; + let fields = [{ + 'name': 'challenge', + 'label': __('Please enter the XMPP address of this groupchat to confirm'), + 'challenge': model.get('jid'), + 'placeholder': __('name@example.org'), + 'required': true + }, { + 'name': 'reason', + 'label': __('Optional reason for destroying this groupchat'), + 'placeholder': __('Reason') + }, { + 'name': 'newjid', + 'label': __('Optional XMPP address for a new groupchat that replaces this one'), + 'placeholder': __('replacement@example.org') + }]; + + try { + var _fields$filter$pop, _fields$filter$pop2; + + fields = await api.confirm(__('Confirm'), messages, fields); + const reason = (_fields$filter$pop = fields.filter(f => f.name === 'reason').pop()) === null || _fields$filter$pop === void 0 ? void 0 : _fields$filter$pop.value; + const newjid = (_fields$filter$pop2 = fields.filter(f => f.name === 'newjid').pop()) === null || _fields$filter$pop2 === void 0 ? void 0 : _fields$filter$pop2.value; + return model.sendDestroyIQ(reason, newjid).then(() => model.close()); + } catch (e) { + headless_log.error(e); + } +} function setMUCDomain(domain, controlboxview) { controlboxview.querySelector('converse-rooms-list').model.save('muc_domain', muc_views_utils_Strophe.getDomainFromJid(domain)); @@ -49893,9 +53734,9 @@ function getNicknameRequiredTemplate(model) { const jid = model.get('jid'); if (api.settings.get('muc_show_logs_before_join')) { - return T(muc_views_utils_templateObject(), jid); + return T``; } else { - return T(muc_views_utils_templateObject2(), jid); + return T``; } } function getChatRoomBodyTemplate(o) { @@ -49905,11 +53746,19 @@ function getChatRoomBodyTemplate(o) { const conn_status = o.model.session.get('connection_status'); if (view === core_converse.MUC.VIEWS.CONFIG) { - return T(utils_templateObject3(), jid); + return T``; } else if (view === core_converse.MUC.VIEWS.BOOKMARK) { - return T(utils_templateObject4(), jid); + return T``; } else { - return T(utils_templateObject5(), conn_status == RS.PASSWORD_REQUIRED ? T(utils_templateObject6(), jid) : '', conn_status == RS.ENTERED ? T(utils_templateObject7(), jid) : '', conn_status == RS.CONNECTING ? spinner() : '', conn_status == RS.NICKNAME_REQUIRED ? getNicknameRequiredTemplate(o.model) : '', conn_status == RS.DISCONNECTED ? T(utils_templateObject8(), jid) : '', conn_status == RS.BANNED ? T(utils_templateObject9(), jid) : '', conn_status == RS.DESTROYED ? T(utils_templateObject10(), jid) : ''); + return T` + ${conn_status == RS.PASSWORD_REQUIRED ? T`` : ''} + ${conn_status == RS.ENTERED ? T`` : ''} + ${conn_status == RS.CONNECTING ? spinner() : ''} + ${conn_status == RS.NICKNAME_REQUIRED ? getNicknameRequiredTemplate(o.model) : ''} + ${conn_status == RS.DISCONNECTED ? T`` : ''} + ${conn_status == RS.BANNED ? T`` : ''} + ${conn_status == RS.DESTROYED ? T`` : ''} + `; } } function getAutoCompleteListItem(text, input) { @@ -49969,15 +53818,15 @@ async function fetchCommandForm(command) { var _sizzle$pop; const iq = await api.sendIQ(stanza); - const cmd_el = utils_sizzle("command[xmlns=\"".concat(muc_views_utils_Strophe.NS.ADHOC, "\"]"), iq).pop(); + const cmd_el = muc_views_utils_sizzle(`command[xmlns="${muc_views_utils_Strophe.NS.ADHOC}"]`, iq).pop(); command.sessionid = cmd_el.getAttribute('sessionid'); - command.instructions = (_sizzle$pop = utils_sizzle('x[type="form"][xmlns="jabber:x:data"] instructions', cmd_el).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent; - command.fields = utils_sizzle('x[type="form"][xmlns="jabber:x:data"] field', cmd_el).map(f => muc_views_utils_u.xForm2TemplateResult(f, cmd_el)); + command.instructions = (_sizzle$pop = muc_views_utils_sizzle('x[type="form"][xmlns="jabber:x:data"] instructions', cmd_el).pop()) === null || _sizzle$pop === void 0 ? void 0 : _sizzle$pop.textContent; + command.fields = muc_views_utils_sizzle('x[type="form"][xmlns="jabber:x:data"] field', cmd_el).map(f => muc_views_utils_u.xForm2TemplateResult(f, cmd_el)); } catch (e) { if (e === null) { - headless_log.error("Error: timeout while trying to execute command for ".concat(jid)); + headless_log.error(`Error: timeout while trying to execute command for ${jid}`); } else { - headless_log.error("Error while trying to execute command for ".concat(jid)); + headless_log.error(`Error while trying to execute command for ${jid}`); headless_log.error(e); } @@ -49989,7 +53838,7 @@ function setRole(muc, command, args, required_affiliations = [], required_roles const role = COMMAND_TO_ROLE[command]; if (!role) { - throw Error("ChatRoomView#setRole called with invalid command: ".concat(command)); + throw Error(`ChatRoomView#setRole called with invalid command: ${command}`); } if (!muc.verifyAffiliations(required_affiliations) || !muc.verifyRoles(required_roles)) { @@ -50017,7 +53866,7 @@ function verifyAndSetAffiliation(muc, command, args, required_affiliations) { const affiliation = COMMAND_TO_AFFILIATION[command]; if (!affiliation) { - throw Error("verifyAffiliations called with invalid command: ".concat(command)); + throw Error(`verifyAffiliations called with invalid command: ${command}`); } if (!muc.verifyAffiliations(required_affiliations)) { @@ -50074,16 +53923,12 @@ function showModeratorToolsModal(muc, affiliation) { let modal = api.modal.get(modals_moderator_tools.id); if (modal) { - modal.model.set({ - affiliation - }); + modal.affiliation = affiliation; + modal.render(); } else { - const model = new Model({ - affiliation - }); modal = api.modal.create(modals_moderator_tools, { - model, - muc + affiliation, + 'jid': muc.get('jid') }); } @@ -50144,9 +53989,7 @@ function parseMessageForMUCCommands(muc, text) { break; } - const chatview = shared_converse.chatboxviews.get(muc.get('jid')); - - chatview.destroy().catch(e => muc.onCommandError(e)); + destroyMUC(muc).catch(e => muc.onCommandError(e)); break; } @@ -50194,12 +54037,7 @@ function parseMessageForMUCCommands(muc, text) { 'type': 'error' }); } else { - const jid = muc_views_utils_Strophe.getBareJidFromJid(muc.get('jid')); - api.send(utils_$pres({ - from: shared_converse.connection.jid, - to: "".concat(jid, "/").concat(args), - id: muc_views_utils_u.getUniqueId() - }).tree()); + muc.setNickname(args); } break; @@ -50258,38 +54096,6 @@ function parseMessageForMUCCommands(muc, text) { return true; } ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/ad-hoc.js -function ad_hoc_templateObject3() { - const data = ad_hoc_taggedTemplateLiteral(["\n
    \n
      \n
    • ", ":
    • \n ", "\n
    \n
    "]); - - ad_hoc_templateObject3 = function () { - return data; - }; - - return data; -} - -function ad_hoc_templateObject2() { - const data = ad_hoc_taggedTemplateLiteral(["
    ", "
    "]); - - ad_hoc_templateObject2 = function () { - return data; - }; - - return data; -} - -function ad_hoc_templateObject() { - const data = ad_hoc_taggedTemplateLiteral(["\n ", "\n
    \n
    \n \n
    \n
    \n \n
    \n ", "\n\n
    \n "]); - - ad_hoc_templateObject = function () { - return data; - }; - - return data; -} - -function ad_hoc_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -50307,7 +54113,32 @@ function ad_hoc_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings. const i18n_no_commands_found = __('No commands found'); - return T(ad_hoc_templateObject(), o.alert ? T(ad_hoc_templateObject2(), o.alert_type, o.alert) : '', o.fetchCommands, i18n_choose_service, i18n_choose_service_instructions, getAutoCompleteList, i18n_jid_placeholder, i18n_fetch_commands, o.view === 'list-commands' ? T(ad_hoc_templateObject3(), o.commands.length ? i18n_commands_found : i18n_no_commands_found, o.commands.map(cmd => ad_hoc_command(o, cmd))) : ''); + return T` + ${o.alert ? T`` : ''} +
    +
    + +
    +
    + +
    + ${o.view === 'list-commands' ? T` +
    +
      +
    • ${o.commands.length ? i18n_commands_found : i18n_no_commands_found}:
    • + ${o.commands.map(cmd => ad_hoc_command(o, cmd))} +
    +
    ` : ''} + +
    + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/adhoc-commands.js @@ -50459,41 +54290,40 @@ class AdHocCommands extends CustomElement { } api.elements.define('converse-adhoc-commands', AdHocCommands); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/message-form.js -function message_form_templateObject2() { - const data = templates_message_form_taggedTemplateLiteral(["
    \u25BC ", " \u25BC
    "]); - - message_form_templateObject2 = function () { - return data; - }; - - return data; -} - -function templates_message_form_templateObject() { - const data = templates_message_form_taggedTemplateLiteral(["\n ", "\n
    \n \n
    \n
    \n \n
    \n \n ", "\n \n
    \n
    "]); - - templates_message_form_templateObject = function () { - return data; - }; - - return data; -} - -function templates_message_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const templates_message_form = (o => { - const unread_msgs = __('You have unread messages'); - const label_message = o.composing_spoiler ? __('Hidden message') : __('Message'); const label_spoiler_hint = __('Optional hint'); const show_send_button = api.settings.get('show_send_button'); - return T(templates_message_form_templateObject(), o.scrolled && o.num_unread ? T(message_form_templateObject2(), ev => o.viewUnreadMessages(ev), unread_msgs) : '', label_spoiler_hint || '', o.hint_value || '', o.composing_spoiler ? '' : 'hidden', o.onDrop, resetElementHeight, o.onKeyDown, o.onKeyUp, o.onPaste, o.onChange, show_send_button ? 'chat-textarea-send-button' : '', o.composing_spoiler ? 'spoiler' : '', label_message, o.message_value || ''); + return T` + +
    + +
    + + + +
    +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/message-form.js @@ -50505,15 +54335,16 @@ class MUCMessageForm extends MessageForm { var _this$querySelector, _this$querySelector2; return templates_message_form(Object.assign(this.model.toJSON(), { - 'onDrop': ev => this.onDrop(ev), 'hint_value': (_this$querySelector = this.querySelector('.spoiler-hint')) === null || _this$querySelector === void 0 ? void 0 : _this$querySelector.value, 'message_value': (_this$querySelector2 = this.querySelector('.chat-textarea')) === null || _this$querySelector2 === void 0 ? void 0 : _this$querySelector2.value, 'onChange': ev => this.model.set({ 'draft': ev.target.value }), + 'onDrop': ev => this.onDrop(ev), 'onKeyDown': ev => this.onKeyDown(ev), 'onKeyUp': ev => this.onKeyUp(ev), 'onPaste': ev => this.onPaste(ev), + 'scrolled': this.model.ui.get('scrolled'), 'viewUnreadMessages': ev => this.viewUnreadMessages(ev) })); } @@ -50549,7 +54380,7 @@ class MUCMessageForm extends MessageForm { getAutoCompleteList() { return this.model.getAllKnownNicknames().map(nick => ({ 'label': nick, - 'value': "@".concat(nick) + 'value': `@${nick}` })); } @@ -50569,18 +54400,6 @@ class MUCMessageForm extends MessageForm { } api.elements.define('converse-muc-message-form', MUCMessageForm); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-nickname-form.js -function muc_nickname_form_templateObject() { - const data = muc_nickname_form_taggedTemplateLiteral(["\n
    \n
    \n
    \n \n

    ", "

    \n \n
    \n
    \n \n
    \n
    \n
    "]); - - muc_nickname_form_templateObject = function () { - return data; - }; - - return data; -} - -function muc_nickname_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -50598,71 +54417,27 @@ function submitNickname(ev, model) { const i18n_heading = api.settings.get('muc_show_logs_before_join') ? __('Choose a nickname to enter') : __('Please choose your nickname'); const validation_message = model.get('nickname_validation_message'); - return T(muc_nickname_form_templateObject(), ev => submitNickname(ev, model), i18n_heading, validation_message, model.get('nick') || '', validation_message ? 'error' : '', i18n_nickname, i18n_join); + return T` +
    submitNickname(ev, model)}> +
    +
    + +

    ${validation_message}

    + +
    +
    + +
    +
    +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-bottom-panel.js -function muc_bottom_panel_templateObject6() { - const data = muc_bottom_panel_taggedTemplateLiteral(["", ""]); - - muc_bottom_panel_templateObject6 = function () { - return data; - }; - - return data; -} - -function muc_bottom_panel_templateObject5() { - const data = muc_bottom_panel_taggedTemplateLiteral(["", ""]); - - muc_bottom_panel_templateObject5 = function () { - return data; - }; - - return data; -} - -function muc_bottom_panel_templateObject4() { - const data = muc_bottom_panel_taggedTemplateLiteral(["
    \u25BC ", " \u25BC
    "]); - - muc_bottom_panel_templateObject4 = function () { - return data; - }; - - return data; -} - -function muc_bottom_panel_templateObject3() { - const data = muc_bottom_panel_taggedTemplateLiteral(["\n ", "\n ", ""]); - - muc_bottom_panel_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_bottom_panel_templateObject2() { - const data = muc_bottom_panel_taggedTemplateLiteral(["\n "]); - - muc_bottom_panel_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_bottom_panel_templateObject() { - const data = muc_bottom_panel_taggedTemplateLiteral(["\n ", "\n "]); - - muc_bottom_panel_templateObject = function () { - return data; - }; - - return data; -} - -function muc_bottom_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -50671,13 +54446,30 @@ function muc_bottom_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw const tpl_can_edit = o => { + const unread_msgs = __('You have unread messages'); + const message_limit = api.settings.get('message_limit'); const show_call_button = api.settings.get('visible_toolbar_buttons').call; const show_emoji_button = api.settings.get('visible_toolbar_buttons').emoji; const show_send_button = api.settings.get('show_send_button'); const show_spoiler_button = api.settings.get('visible_toolbar_buttons').spoiler; const show_toolbar = api.settings.get('show_toolbar'); - return T(muc_bottom_panel_templateObject(), show_toolbar ? T(muc_bottom_panel_templateObject2(), o.model, o.model.get('composing_spoiler'), o.model.get('hidden_occupants'), o.model.get('is_groupchat'), show_call_button, show_emoji_button, o.model.get('show_occupants_toggle'), show_send_button, show_spoiler_button, show_toolbar, message_limit) : '', o.model.get('jid')); + return T` + ${o.model.ui.get('scrolled') && o.model.get('num_unread') ? T`
    o.viewUnreadMessages(ev)}>▼ ${unread_msgs} ▼
    ` : ''} + ${show_toolbar ? T` + ` : ''} + `; }; /* harmony default export */ const muc_bottom_panel = (o => { @@ -50688,17 +54480,48 @@ const tpl_can_edit = o => { const i18n_not_allowed = __("You're not allowed to send messages in this room"); if (conn_status === core_converse.ROOMSTATUS.ENTERED) { - return T(muc_bottom_panel_templateObject3(), o.model.get('scrolled') && o.model.get('num_unread_general') ? T(muc_bottom_panel_templateObject4(), ev => o.viewUnreadMessages(ev), unread_msgs) : '', o.can_edit ? tpl_can_edit(o) : T(muc_bottom_panel_templateObject5(), i18n_not_allowed)); + return T` + ${o.model.ui.get('scrolled') && o.model.get('num_unread_general') ? T`
    o.viewUnreadMessages(ev)}>▼ ${unread_msgs} ▼
    ` : ''} + ${o.can_edit ? tpl_can_edit(o) : T`${i18n_not_allowed}`}`; } else if (conn_status == core_converse.ROOMSTATUS.NICKNAME_REQUIRED) { if (api.settings.get('muc_show_logs_before_join')) { - return T(muc_bottom_panel_templateObject6(), muc_nickname_form(o.model)); + return T`${muc_nickname_form(o.model)}`; } } else { return ''; } }); -// EXTERNAL MODULE: ./src/plugins/muc-views/styles/muc-bottom-panel.scss -var styles_muc_bottom_panel = __webpack_require__(5921); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/muc-views/styles/muc-bottom-panel.scss +var styles_muc_bottom_panel = __webpack_require__(2490); +;// CONCATENATED MODULE: ./src/plugins/muc-views/styles/muc-bottom-panel.scss + + + + + + + + + + + +var muc_bottom_panel_options = {}; + +muc_bottom_panel_options.styleTagTransform = (styleTagTransform_default()); +muc_bottom_panel_options.setAttributes = (setAttributesWithoutAttributes_default()); + + muc_bottom_panel_options.insert = insertBySelector_default().bind(null, "head"); + +muc_bottom_panel_options.domAPI = (styleDomAPI_default()); +muc_bottom_panel_options.insertStyleElement = (insertStyleElement_default()); + +var muc_bottom_panel_update = injectStylesIntoStyleTag_default()(styles_muc_bottom_panel/* default */.Z, muc_bottom_panel_options); + + + + + /* harmony default export */ const muc_views_styles_muc_bottom_panel = (styles_muc_bottom_panel/* default */.Z && styles_muc_bottom_panel/* default.locals */.Z.locals ? styles_muc_bottom_panel/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/muc-views/bottom-panel.js function muc_views_bottom_panel_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -50708,8 +54531,6 @@ function muc_views_bottom_panel_defineProperty(obj, key, value) { if (key in obj - - class MUCBottomPanel extends ChatBottomPanel { constructor(...args) { super(...args); @@ -50720,17 +54541,14 @@ class MUCBottomPanel extends ChatBottomPanel { }); } - async connectedCallback() { - // this.model gets set in the super method and we also wait there for this.model.initialized - await super.connectedCallback(); - this.debouncedRender = lodash_es_debounce(this.render, 100); + async initialize() { + await super.initialize(); this.listenTo(this.model, 'change:hidden_occupants', this.debouncedRender); this.listenTo(this.model, 'change:num_unread_general', this.debouncedRender); this.listenTo(this.model.features, 'change:moderated', this.debouncedRender); this.listenTo(this.model.occupants, 'add', this.renderIfOwnOccupant); this.listenTo(this.model.occupants, 'change:role', this.renderIfOwnOccupant); this.listenTo(this.model.session, 'change:connection_status', this.debouncedRender); - this.render(); } render() { @@ -50740,6 +54558,7 @@ class MUCBottomPanel extends ChatBottomPanel { can_edit, entered, 'model': this.model, + 'is_groupchat': true, 'viewUnreadMessages': ev => this.viewUnreadMessages(ev) }), this); } @@ -50751,15 +54570,7 @@ class MUCBottomPanel extends ChatBottomPanel { sendButtonClicked(ev) { var _this$querySelector; - (_this$querySelector = this.querySelector('converse-message-form')) === null || _this$querySelector === void 0 ? void 0 : _this$querySelector.onFormSubmitted(ev); - } - - getToolbarOptions() { - return Object.assign(super.getToolbarOptions(), { - 'is_groupchat': true, - 'label_hide_occupants': __('Hide the list of participants'), - 'show_occupants_toggle': api.settings.get('visible_toolbar_buttons').toggle_occupants - }); + (_this$querySelector = this.querySelector('converse-muc-message-form')) === null || _this$querySelector === void 0 ? void 0 : _this$querySelector.onFormSubmitted(ev); } hideOccupants(ev) { @@ -50775,68 +54586,6 @@ class MUCBottomPanel extends ChatBottomPanel { } api.elements.define('converse-muc-bottom-panel', MUCBottomPanel); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/occupant.js -function occupant_templateObject6() { - const data = templates_occupant_taggedTemplateLiteral(["", ""]); - - occupant_templateObject6 = function () { - return data; - }; - - return data; -} - -function occupant_templateObject5() { - const data = templates_occupant_taggedTemplateLiteral(["", ""]); - - occupant_templateObject5 = function () { - return data; - }; - - return data; -} - -function occupant_templateObject4() { - const data = templates_occupant_taggedTemplateLiteral(["", ""]); - - occupant_templateObject4 = function () { - return data; - }; - - return data; -} - -function occupant_templateObject3() { - const data = templates_occupant_taggedTemplateLiteral(["", ""]); - - occupant_templateObject3 = function () { - return data; - }; - - return data; -} - -function occupant_templateObject2() { - const data = templates_occupant_taggedTemplateLiteral(["", ""]); - - occupant_templateObject2 = function () { - return data; - }; - - return data; -} - -function templates_occupant_templateObject() { - const data = templates_occupant_taggedTemplateLiteral(["\n
  • \n
    \n
    \n
    \n
    \n
    \n ", "\n \n ", "\n ", "\n ", "\n ", "\n ", "\n \n
    \n
    \n
  • \n "]); - - templates_occupant_templateObject = function () { - return data; - }; - - return data; -} - -function templates_occupant_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -50847,16 +54596,16 @@ const occupant_title = o => { const i18n_visitor_hint = __('This user can NOT send messages in this groupchat.'); - const spaced_jid = "".concat(o.jid, " ") || 0; + const spaced_jid = `${o.jid} ` || ''; if (o.role === "moderator") { - return "".concat(spaced_jid).concat(i18n_moderator_hint, " ").concat(o.hint_occupant); + return `${spaced_jid}${i18n_moderator_hint} ${o.hint_occupant}`; } else if (o.role === "participant") { - return "".concat(spaced_jid).concat(i18n_participant_hint, " ").concat(o.hint_occupant); + return `${spaced_jid}${i18n_participant_hint} ${o.hint_occupant}`; } else if (o.role === "visitor") { - return "".concat(spaced_jid).concat(i18n_visitor_hint, " ").concat(o.hint_occupant); + return `${spaced_jid}${i18n_visitor_hint} ${o.hint_occupant}`; } else if (!["visitor", "participant", "moderator"].includes(o.role)) { - return "".concat(spaced_jid).concat(o.hint_occupant); + return `${spaced_jid}${o.hint_occupant}`; } }; @@ -50871,21 +54620,27 @@ const occupant_title = o => { const i18n_visitor = __('Visitor'); - return T(templates_occupant_templateObject(), o.id, occupant_title(o), o.show, o.hint_show, o.onOccupantClicked, o.nick || o.jid, o.affiliation === "owner" ? T(occupant_templateObject2(), i18n_owner) : '', o.affiliation === "admin" ? T(occupant_templateObject3(), i18n_admin) : '', o.affiliation === "member" ? T(occupant_templateObject4(), i18n_member) : '', o.role === "moderator" ? T(occupant_templateObject5(), i18n_moderator) : '', o.role === "visitor" ? T(occupant_templateObject6(), i18n_visitor) : ''); + return T` +
  • +
    +
    +
    +
    +
    + ${o.nick || o.jid} + + ${o.affiliation === "owner" ? T`${i18n_owner}` : ''} + ${o.affiliation === "admin" ? T`${i18n_admin}` : ''} + ${o.affiliation === "member" ? T`${i18n_member}` : ''} + ${o.role === "moderator" ? T`${i18n_moderator}` : ''} + ${o.role === "visitor" ? T`${i18n_visitor}` : ''} + +
    +
    +
  • + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-sidebar.js -function muc_sidebar_templateObject() { - const data = muc_sidebar_taggedTemplateLiteral(["\n
    \n \n
    \n ", "\n
    \n
    \n
    \n
      ", "
    \n "]); - - muc_sidebar_templateObject = function () { - return data; - }; - - return data; -} - -function muc_sidebar_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -50911,10 +54666,48 @@ const PRETTY_CHAT_STATUS = { 'onOccupantClicked': o.onOccupantClicked }, occupant.toJSON())); }); - return T(muc_sidebar_templateObject(), o.closeSidebar, i18n_participants, occupant_tpls); + return T` +
    + +
    + ${i18n_participants} +
    +
    +
    +
      ${occupant_tpls}
    + `; }); -// EXTERNAL MODULE: ./src/plugins/muc-views/styles/muc-occupants.scss -var muc_occupants = __webpack_require__(5660); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/muc-views/styles/muc-occupants.scss +var muc_occupants = __webpack_require__(1107); +;// CONCATENATED MODULE: ./src/plugins/muc-views/styles/muc-occupants.scss + + + + + + + + + + + +var muc_occupants_options = {}; + +muc_occupants_options.styleTagTransform = (styleTagTransform_default()); +muc_occupants_options.setAttributes = (setAttributesWithoutAttributes_default()); + + muc_occupants_options.insert = insertBySelector_default().bind(null, "head"); + +muc_occupants_options.domAPI = (styleDomAPI_default()); +muc_occupants_options.insertStyleElement = (insertStyleElement_default()); + +var muc_occupants_update = injectStylesIntoStyleTag_default()(muc_occupants/* default */.Z, muc_occupants_options); + + + + + /* harmony default export */ const styles_muc_occupants = (muc_occupants/* default */.Z && muc_occupants/* default.locals */.Z.locals ? muc_occupants/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/muc-views/sidebar.js @@ -50966,43 +54759,49 @@ class MUCSidebar extends CustomElement { ev === null || ev === void 0 ? void 0 : (_ev$preventDefault2 = ev.preventDefault) === null || _ev$preventDefault2 === void 0 ? void 0 : _ev$preventDefault2.call(ev); - const chatview = shared_converse.chatboxviews.get(this.getAttribute('jid')); + const view = shared_converse.chatboxviews.get(this.getAttribute('jid')); - chatview === null || chatview === void 0 ? void 0 : chatview.getBottomPanel().insertIntoTextArea("@".concat(ev.target.textContent)); + view === null || view === void 0 ? void 0 : view.getMessageForm().insertIntoTextArea(`@${ev.target.textContent}`); } } api.elements.define('converse-muc-sidebar', MUCSidebar); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-chatarea.js -function muc_chatarea_templateObject2() { - const data = muc_chatarea_taggedTemplateLiteral(["
    \n
    "]); - - muc_chatarea_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_chatarea_templateObject() { - const data = muc_chatarea_taggedTemplateLiteral(["\n
    \n
    \n \n\n ", "\n
    \n \n
    \n
    \n \n"]); - - muc_chatarea_templateObject = function () { - return data; - }; - - return data; -} - -function muc_chatarea_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +/* harmony default export */ const muc_chatarea = (o => { + var _o$model; -/* harmony default export */ const muc_chatarea = (o => T(muc_chatarea_templateObject(), o.show_send_button ? 'chat-content-sendbutton' : '', o.jid, o.show_help_messages ? T(muc_chatarea_templateObject2(), o.model, o.help_messages, !o.show_help_messages, shared_converse.CHATROOMS_TYPE) : '', o.jid, o.show_sidebar ? '' : 'hidden', o.occupants_width, o.jid, o.onMousedown)); + return T` +
    +
    + + + ${(_o$model = o.model) !== null && _o$model !== void 0 && _o$model.get('show_help_messages') ? T`
    +
    ` : ''} +
    + +
    + + ${o.model ? T` + ` : ''} +`; +}); ;// CONCATENATED MODULE: ./src/plugins/muc-views/chatarea.js @@ -51026,28 +54825,25 @@ class MUCChatArea extends CustomElement { }; } - connectedCallback() { - super.connectedCallback(); - this.model = shared_converse.chatboxes.get(this.jid); + async initialize() { + this.model = await api.rooms.get(this.jid); this.listenTo(this.model, 'change:show_help_messages', () => this.requestUpdate()); this.listenTo(this.model, 'change:hidden_occupants', () => this.requestUpdate()); this.listenTo(this.model.session, 'change:connection_status', () => this.requestUpdate()); // Bind so that we can pass it to addEventListener and removeEventListener this.onMouseMove = this._onMouseMove.bind(this); this.onMouseUp = this._onMouseUp.bind(this); + this.requestUpdate(); // Make sure we render again after the model has been attached } render() { return muc_chatarea({ - 'help_messages': this.getHelpMessages(), + 'getHelpMessages': () => this.getHelpMessages(), 'jid': this.jid, 'model': this.model, - 'occupants': this.model.occupants, - 'occupants_width': this.model.get('occupants_width'), 'onMousedown': ev => this.onMousedown(ev), - 'show_help_messages': this.model.get('show_help_messages'), - 'show_send_button': shared_converse.show_send_button, - 'show_sidebar': this.shouldShowSidebar(), + 'show_send_button': api.settings.get('show_send_button'), + 'shouldShowSidebar': () => this.shouldShowSidebar(), 'type': this.type }); } @@ -51059,7 +54855,7 @@ class MUCChatArea extends CustomElement { getHelpMessages() { const setting = api.settings.get('muc_disable_slash_commands'); const disabled_commands = Array.isArray(setting) ? setting : []; - return ["/admin: ".concat(__("Change user's affiliation to admin")), "/ban: ".concat(__('Ban user by changing their affiliation to outcast')), "/clear: ".concat(__('Clear the chat area')), "/close: ".concat(__('Close this groupchat')), "/deop: ".concat(__('Change user role to participant')), "/destroy: ".concat(__('Remove this groupchat')), "/help: ".concat(__('Show this menu')), "/kick: ".concat(__('Kick user from groupchat')), "/me: ".concat(__('Write in 3rd person')), "/member: ".concat(__('Grant membership to a user')), "/modtools: ".concat(__('Opens up the moderator tools GUI')), "/mute: ".concat(__("Remove user's ability to post messages")), "/nick: ".concat(__('Change your nickname')), "/op: ".concat(__('Grant moderator role to user')), "/owner: ".concat(__('Grant ownership of this groupchat')), "/register: ".concat(__('Register your nickname')), "/revoke: ".concat(__("Revoke the user's current affiliation")), "/subject: ".concat(__('Set groupchat subject')), "/topic: ".concat(__('Set groupchat subject (alias for /subject)')), "/voice: ".concat(__('Allow muted user to post messages'))].filter(line => disabled_commands.every(c => !line.startsWith(c + '<', 9))).filter(line => this.model.getAllowedCommands().some(c => line.startsWith(c + '<', 9))); + return [`/admin: ${__("Change user's affiliation to admin")}`, `/ban: ${__('Ban user by changing their affiliation to outcast')}`, `/clear: ${__('Clear the chat area')}`, `/close: ${__('Close this groupchat')}`, `/deop: ${__('Change user role to participant')}`, `/destroy: ${__('Remove this groupchat')}`, `/help: ${__('Show this menu')}`, `/kick: ${__('Kick user from groupchat')}`, `/me: ${__('Write in 3rd person')}`, `/member: ${__('Grant membership to a user')}`, `/modtools: ${__('Opens up the moderator tools GUI')}`, `/mute: ${__("Remove user's ability to post messages")}`, `/nick: ${__('Change your nickname')}`, `/op: ${__('Grant moderator role to user')}`, `/owner: ${__('Grant ownership of this groupchat')}`, `/register: ${__('Register your nickname')}`, `/revoke: ${__("Revoke the user's current affiliation")}`, `/subject: ${__('Set groupchat subject')}`, `/topic: ${__('Set groupchat subject (alias for /subject)')}`, `/voice: ${__('Allow muted user to post messages')}`].filter(line => disabled_commands.every(c => !line.startsWith(c + '<', 9))).filter(line => this.model.getAllowedCommands().some(c => line.startsWith(c + '<', 9))); } onMousedown(ev) { @@ -51143,38 +54939,6 @@ class MUCChatArea extends CustomElement { } api.elements.define('converse-muc-chatarea', MUCChatArea); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-config-form.js -function muc_config_form_templateObject3() { - const data = muc_config_form_taggedTemplateLiteral(["\n
    \n \n \n
    "]); - - muc_config_form_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_config_form_templateObject2() { - const data = muc_config_form_taggedTemplateLiteral(["

    ", "

    "]); - - muc_config_form_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_config_form_templateObject() { - const data = muc_config_form_taggedTemplateLiteral(["\n
    \n\n
    \n ", "\n ", "\n ", "\n
    \n ", "\n
    \n "]); - - muc_config_form_templateObject = function () { - return data; - }; - - return data; -} - -function muc_config_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -51216,9 +54980,25 @@ const muc_config_form_u = core_converse.env.utils; const i18n_cancel = __('Cancel'); - return T(muc_config_form_templateObject(), fields.length ? '' : 'converse-form--spinner', o.submitConfigForm, title, title !== instructions ? T(muc_config_form_templateObject2(), instructions) : '', fields.length ? fields : spinner({ + return T` +
    + +
    + ${title} + ${title !== instructions ? T`

    ${instructions}

    ` : ''} + ${fields.length ? fields : spinner({ 'classes': 'hor_centered' - }), fields.length ? T(muc_config_form_templateObject3(), i18n_save, i18n_cancel, o.closeConfigForm) : ''); + })} +
    + ${fields.length ? T` +
    + + +
    ` : ''} +
    + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/config-form.js @@ -51292,45 +55072,17 @@ class MUCConfigForm extends CustomElement { api.elements.define('converse-muc-config-form', MUCConfigForm); /* harmony default export */ const config_form = ((/* unused pure expression or super */ null && (MUCConfigForm))); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-destroyed.js -function muc_destroyed_templateObject3() { - const data = muc_destroyed_taggedTemplateLiteral(["

    ", "

    "]); - - muc_destroyed_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_destroyed_templateObject2() { - const data = muc_destroyed_taggedTemplateLiteral(["\n
    \n

    ", "

    \n
    \n ", "\n ", "\n "]); - - muc_destroyed_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_destroyed_templateObject() { - const data = muc_destroyed_taggedTemplateLiteral(["\n

    ", "

    \n

    \n ", "\n

    "]); - - muc_destroyed_templateObject = function () { - return data; - }; - - return data; -} - -function muc_destroyed_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - const tpl_moved = o => { const i18n_moved = __('The conversation has moved to a new address. Click the link below to enter.'); - return T(muc_destroyed_templateObject(), i18n_moved, ev => o.onSwitch(ev), o.moved_jid); + return T` +

    ${i18n_moved}

    + `; }; /* harmony default export */ const muc_destroyed = (o => { @@ -51338,7 +55090,13 @@ const tpl_moved = o => { const i18n_reason = __('The following reason was given: "%1$s"', o.reason || ''); - return T(muc_destroyed_templateObject2(), i18n_non_existent, o.reason ? T(muc_destroyed_templateObject3(), i18n_reason) : '', o.moved_jid ? tpl_moved(o) : ''); + return T` +
    +

    ${i18n_non_existent}

    +
    + ${o.reason ? T`

    ${i18n_reason}

    ` : ''} + ${o.moved_jid ? tpl_moved(o) : ''} + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/destroyed.js @@ -51381,31 +55139,13 @@ class MUCDestroyed extends CustomElement { api.elements.define('converse-muc-destroyed', MUCDestroyed); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-disconnect.js -function muc_disconnect_templateObject2() { - const data = muc_disconnect_taggedTemplateLiteral(["

    ", "

    "]); - - muc_disconnect_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_disconnect_templateObject() { - const data = muc_disconnect_taggedTemplateLiteral(["\n
    \n

    ", "

    \n ", "\n
    "]); - - muc_disconnect_templateObject = function () { - return data; - }; - - return data; -} - -function muc_disconnect_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const muc_disconnect = (messages => { - return T(muc_disconnect_templateObject(), messages[0], messages.slice(1).map(m => T(muc_disconnect_templateObject2(), m))); + return T` +
    +

    ${messages[0]}

    + ${messages.slice(1).map(m => T`

    ${m}

    `)} +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/disconnected.js @@ -51454,28 +55194,6 @@ class MUCDisconnected extends CustomElement { api.elements.define('converse-muc-disconnected', MUCDisconnected); ;// CONCATENATED MODULE: ./src/modals/templates/muc-invite.js -function muc_invite_templateObject2() { - const data = muc_invite_taggedTemplateLiteral(["
    ", "
    "]); - - muc_invite_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_invite_templateObject() { - const data = muc_invite_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n \n
    \n
    \n
    \n \n ", "\n \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n "]); - - muc_invite_templateObject = function () { - return data; - }; - - return data; -} - -function muc_invite_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -51492,7 +55210,42 @@ function muc_invite_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = stri const i18n_reason = __('Optional reason for the invitation'); - return T(muc_invite_templateObject(), i18n_invite_heading, modal_header_close_button, o.submitInviteForm, i18n_invite_label, o.invalid_invite_jid ? T(muc_invite_templateObject2(), i18n_error_message) : '', i18n_jid_placeholder, i18n_reason, i18n_invite); + return T` + + `; }); ;// CONCATENATED MODULE: ./src/modals/muc-invite.js @@ -51552,160 +55305,6 @@ const muc_invite_u = core_converse.env.utils; })); ;// CONCATENATED MODULE: ./src/modals/templates/muc-details.js -function muc_details_templateObject15() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject15 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject14() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject14 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject13() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject13 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject12() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject12 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject11() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject11 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject10() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject10 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject9() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject9 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject8() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject8 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject7() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject7 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject6() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject6 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject5() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject5 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject4() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject4 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject3() { - const data = muc_details_taggedTemplateLiteral(["
  • ", " - ", "
  • "]); - - muc_details_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject2() { - const data = muc_details_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n \n
    \n

    ", ": ", "

    \n

    ", ": ", "

    \n

    ", ": ", "

    \n ", "\n

    ", ": ", "

    \n

    ", ":\n

    \n
      \n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n
    \n
    \n

    \n
    \n
    \n
    ", "
    \n
    \n
    \n "]); - - muc_details_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_details_templateObject() { - const data = muc_details_taggedTemplateLiteral(["\n

    ", ": ", "

    \n

    ", ": ", "

    \n "]); - - muc_details_templateObject = function () { - return data; - }; - - return data; -} - -function muc_details_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - - @@ -51715,13 +55314,14 @@ const subject = o => { const i18n_topic_author = __('Topic author'); - return T(muc_details_templateObject(), i18n_topic, unsafe_html_o(xss.filterXSS(o.subject.text, { - 'whiteList': {} - })), i18n_topic_author, o.subject && o.subject.author); + return T` +

    ${i18n_topic}: ${o.subject.text}

    +

    ${i18n_topic_author}: ${o.subject && o.subject.author}

    + `; }; /* harmony default export */ const muc_details = (o => { - const i18n_address = __('Groupchat address (JID)'); + const i18n_address = __('Groupchat XMPP address'); const i18n_archiving = __('Message archiving'); @@ -51781,7 +55381,46 @@ const subject = o => { const i18n_temporary_help = __('This groupchat will disappear once the last person leaves'); - return T(muc_details_templateObject2(), o.display_name, modal_header_close_button, i18n_name, o.name, i18n_address, o.jid, i18n_desc, o.config.description, o.subject ? subject(o) : '', i18n_online_users, o.num_occupants, i18n_features, o.features.passwordprotected ? T(muc_details_templateObject3(), i18n_password_protected, i18n_password_help) : '', o.features.unsecured ? T(muc_details_templateObject4(), i18n_no_password_required, i18n_no_pass_help) : '', o.features.hidden ? T(muc_details_templateObject5(), i18n_hidden, i18n_hidden_help) : '', o.features.public_room ? T(muc_details_templateObject6(), i18n_public, o.__('This groupchat is publicly searchable')) : '', o.features.membersonly ? T(muc_details_templateObject7(), i18n_members_only, i18n_members_help) : '', o.features.open ? T(muc_details_templateObject8(), i18n_open, i18n_open_help) : '', o.features.persistent ? T(muc_details_templateObject9(), i18n_persistent, i18n_persistent_help) : '', o.features.temporary ? T(muc_details_templateObject10(), i18n_temporary, i18n_temporary_help) : '', o.features.nonanonymous ? T(muc_details_templateObject11(), i18n_not_anonymous, i18n_not_anonymous_help) : '', o.features.semianonymous ? T(muc_details_templateObject12(), i18n_semi_anon, i18n_semi_anon_help) : '', o.features.moderated ? T(muc_details_templateObject13(), i18n_moderated, i18n_moderated_help) : '', o.features.unmoderated ? T(muc_details_templateObject14(), i18n_not_moderated, i18n_not_moderated_help) : '', o.features.mam_enabled ? T(muc_details_templateObject15(), i18n_archiving, i18n_archiving_help) : '', modal_close_button); + return T` + + `; }); ;// CONCATENATED MODULE: ./src/modals/muc-details.js @@ -51808,13 +55447,79 @@ const subject = o => { } })); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/shared/components/styles/rich-text.scss +var styles_rich_text = __webpack_require__(899); +;// CONCATENATED MODULE: ./src/shared/components/styles/rich-text.scss + + + + + + + + + + + +var rich_text_options = {}; + +rich_text_options.styleTagTransform = (styleTagTransform_default()); +rich_text_options.setAttributes = (setAttributesWithoutAttributes_default()); + + rich_text_options.insert = insertBySelector_default().bind(null, "head"); + +rich_text_options.domAPI = (styleDomAPI_default()); +rich_text_options.insertStyleElement = (insertStyleElement_default()); + +var rich_text_update = injectStylesIntoStyleTag_default()(styles_rich_text/* default */.Z, rich_text_options); + + + + + /* harmony default export */ const components_styles_rich_text = (styles_rich_text/* default */.Z && styles_rich_text/* default.locals */.Z.locals ? styles_rich_text/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/shared/components/rich-text.js + +/** + * The RichText custom element allows you to parse transform text into rich DOM elements. + * @example + */ + class rich_text_RichText extends CustomElement { static get properties() { + /** + * @typedef { Object } RichTextComponentProperties + * @property { Boolean } embed_audio + * Whether URLs that point to audio files should render as audio players. + * @property { Boolean } embed_videos + * Whether URLs that point to video files should render as video players. + * @property { Array } mentions - An array of objects representing chat mentions + * @property { String } nick - The current user's nickname, relevant for mentions + * @property { Number } offset - The text offset, in case this is a nested RichText element. + * @property { Function } onImgClick + * @property { Function } onImgLoad + * @property { Boolean } render_styling + * Whether XEP-0393 message styling hints should be rendered + * @property { Boolean } show_images + * Whether URLs that point to image files should render as images + * @property { Boolean } hide_media_urls + * If media URLs are rendered as media, then this option determines + * whether the original URL is also still shown or not. + * Only relevant in conjunction with `show_images`, `embed_audio` and `embed_videos`. + * @property { Boolean } show_me_message + * Whether text that starts with /me should be rendered in the 3rd person. + * @property { String } text - The text that will get transformed. + */ return { + embed_audio: { + type: Boolean + }, + embed_videos: { + type: Boolean + }, mentions: { type: Array }, @@ -51836,6 +55541,9 @@ class rich_text_RichText extends CustomElement { show_images: { type: Boolean }, + hide_media_urls: { + type: Boolean + }, show_me_message: { type: Boolean }, @@ -51847,15 +55555,23 @@ class rich_text_RichText extends CustomElement { constructor() { super(); - this.offset = 0; + this.embed_audio = false; + this.embed_videos = false; + this.hide_media_urls = false; this.mentions = []; + this.offset = 0; this.render_styling = false; + this.show_image_urls = true; this.show_images = false; this.show_me_message = false; } render() { const options = { + embed_audio: this.embed_audio, + embed_videos: this.embed_videos, + hide_media_urls: this.hide_media_urls, + mentions: this.mentions, nick: this.nick, onImgClick: this.onImgClick, onImgLoad: this.onImgLoad, @@ -51863,64 +55579,12 @@ class rich_text_RichText extends CustomElement { show_images: this.show_images, show_me_message: this.show_me_message }; - return rich_text(this.text, this.offset, this.mentions, options); + return rich_text(this.text, this.offset, options); } } api.elements.define('converse-rich-text', rich_text_RichText); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-head.js -function muc_head_templateObject5() { - const data = muc_head_taggedTemplateLiteral(["

    \n \n

    "]); - - muc_head_templateObject5 = function () { - return data; - }; - - return data; -} - -function muc_head_templateObject4() { - const data = muc_head_taggedTemplateLiteral([""]); - - muc_head_templateObject4 = function () { - return data; - }; - - return data; -} - -function muc_head_templateObject3() { - const data = muc_head_taggedTemplateLiteral([""]); - - muc_head_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_head_templateObject2() { - const data = muc_head_taggedTemplateLiteral([""]); - - muc_head_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_head_templateObject() { - const data = muc_head_taggedTemplateLiteral(["\n
    \n ", "\n
    ", "\n ", "\n
    \n
    \n ", "\n ", "\n
    \n
    \n ", "\n "]); - - muc_head_templateObject = function () { - return data; - }; - - return data; -} - -function muc_head_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -51937,10 +55601,53 @@ const tpl_standalone_btns = o => o.standalone_btns.reverse().map(b => until_o(b, const subject = o.subject ? o.subject.text : ''; const show_subject = subject && !o.subject_hidden; - return T(muc_head_templateObject(), show_subject ? '' : "chatbox-title--no-desc", !shared_converse.api.settings.get("singleton") ? T(muc_head_templateObject2(), o.jid) : '', shared_converse.locked_muc_domain !== 'hidden' ? o.jid : '', o.title, o.bookmarked ? T(muc_head_templateObject3(), i18n_bookmarked) : '', o.standalone_btns.length ? tpl_standalone_btns(o) : '', o.dropdown_btns.length ? T(muc_head_templateObject4(), o.dropdown_btns) : '', show_subject ? T(muc_head_templateObject5(), i18n_hide_topic, subject) : ''); + return T` +
    + ${!shared_converse.api.settings.get("singleton") ? T`` : ''} +
    ${o.title} + ${o.bookmarked ? T`` : ''} +
    +
    + ${o.standalone_btns.length ? tpl_standalone_btns(o) : ''} + ${o.dropdown_btns.length ? T`` : ''} +
    +
    + ${show_subject ? T`

    + +

    ` : ''} + `; }); -// EXTERNAL MODULE: ./src/plugins/muc-views/styles/muc-head.scss -var styles_muc_head = __webpack_require__(5355); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/muc-views/styles/muc-head.scss +var styles_muc_head = __webpack_require__(679); +;// CONCATENATED MODULE: ./src/plugins/muc-views/styles/muc-head.scss + + + + + + + + + + + +var muc_head_options = {}; + +muc_head_options.styleTagTransform = (styleTagTransform_default()); +muc_head_options.setAttributes = (setAttributesWithoutAttributes_default()); + + muc_head_options.insert = insertBySelector_default().bind(null, "head"); + +muc_head_options.domAPI = (styleDomAPI_default()); +muc_head_options.insertStyleElement = (insertStyleElement_default()); + +var muc_head_update = injectStylesIntoStyleTag_default()(styles_muc_head/* default */.Z, muc_head_options); + + + + + /* harmony default export */ const muc_views_styles_muc_head = (styles_muc_head/* default */.Z && styles_muc_head/* default.locals */.Z.locals ? styles_muc_head/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/muc-views/heading.js @@ -51953,7 +55660,8 @@ var styles_muc_head = __webpack_require__(5355); -class MUCHeading extends ChatHeading { + +class MUCHeading extends ElementView { async connectedCallback() { super.connectedCallback(); this.model = shared_converse.chatboxes.get(this.getAttribute('jid')); @@ -51969,6 +55677,11 @@ class MUCHeading extends ChatHeading { this.render(); } + async render() { + const tpl = await this.generateHeadingTemplate(); + V(tpl, this); + } + onOccupantAdded(occupant) { if (occupant.get('jid') === shared_converse.bare_jid) { this.debouncedRender(); @@ -52007,10 +55720,14 @@ class MUCHeading extends ChatHeading { this.model.session.set('view', core_converse.MUC.VIEWS.CONFIG); } - destroy() { - var _converse$chatboxview; + close(ev) { + ev.preventDefault(); + this.model.close(); + } - (_converse$chatboxview = shared_converse.chatboxviews.get(this.getAttribute('jid'))) === null || _converse$chatboxview === void 0 ? void 0 : _converse$chatboxview.destroy(); + destroy(ev) { + ev.preventDefault(); + destroyMUC(this.model); } /** * Returns a list of objects which represent buttons for the groupchat header. @@ -52138,11 +55855,43 @@ class MUCHeading extends ChatHeading { } api.elements.define('converse-muc-heading', MUCHeading); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/muc-views/styles/nickname-form.scss +var nickname_form = __webpack_require__(5431); +;// CONCATENATED MODULE: ./src/plugins/muc-views/styles/nickname-form.scss + + + + + + + + + + + +var nickname_form_options = {}; + +nickname_form_options.styleTagTransform = (styleTagTransform_default()); +nickname_form_options.setAttributes = (setAttributesWithoutAttributes_default()); + + nickname_form_options.insert = insertBySelector_default().bind(null, "head"); + +nickname_form_options.domAPI = (styleDomAPI_default()); +nickname_form_options.insertStyleElement = (insertStyleElement_default()); + +var nickname_form_update = injectStylesIntoStyleTag_default()(nickname_form/* default */.Z, nickname_form_options); + + + + + /* harmony default export */ const styles_nickname_form = (nickname_form/* default */.Z && nickname_form/* default.locals */.Z.locals ? nickname_form/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/muc-views/nickname-form.js + class MUCNicknameForm extends CustomElement { static get properties() { return { @@ -52164,20 +55913,8 @@ class MUCNicknameForm extends CustomElement { } api.elements.define('converse-muc-nickname-form', MUCNicknameForm); -/* harmony default export */ const nickname_form = ((/* unused pure expression or super */ null && (MUCNicknameForm))); +/* harmony default export */ const muc_views_nickname_form = ((/* unused pure expression or super */ null && (MUCNicknameForm))); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-password-form.js -function muc_password_form_templateObject() { - const data = muc_password_form_taggedTemplateLiteral(["\n
    \n
    \n \n

    ", "

    \n \n \n
    \n
    \n \n
    \n
    \n "]); - - muc_password_form_templateObject = function () { - return data; - }; - - return data; -} - -function muc_password_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const muc_password_form = (o => { @@ -52187,7 +55924,23 @@ function muc_password_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw const i18n_submit = __('Submit'); - return T(muc_password_form_templateObject(), o.submitPassword, i18n_heading, o.validation_message, o.jid, o.validation_message ? 'error' : '', i18n_password, i18n_submit); + return T` +
    +
    + +

    ${o.validation_message}

    + + +
    +
    + +
    +
    + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/password-form.js @@ -52230,28 +55983,6 @@ class MUCPasswordForm extends CustomElement { api.elements.define('converse-muc-password-form', MUCPasswordForm); /* harmony default export */ const password_form = ((/* unused pure expression or super */ null && (MUCPasswordForm))); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc.js -function muc_templateObject2() { - const data = muc_taggedTemplateLiteral(["\n \n \n
    ", "
    \n "]); - - muc_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_templateObject() { - const data = muc_taggedTemplateLiteral(["\n
    \n \n ", "\n
    "]); - - muc_templateObject = function () { - return data; - }; - - return data; -} - -function muc_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -52262,7 +55993,15 @@ function muc_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.sli /* harmony default export */ const templates_muc = (o => { - return T(muc_templateObject(), o.model ? T(muc_templateObject2(), o.model.get('jid'), getChatRoomBodyTemplate(o)) : ''); + return T` +
    + + ${o.model ? T` + + +
    ${getChatRoomBodyTemplate(o)}
    + ` : ''} +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/muc.js function muc_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -52270,8 +56009,6 @@ function muc_defineProperty(obj, key, value) { if (key in obj) { Object.definePr - - class MUCView extends BaseChatView { constructor(...args) { super(...args); @@ -52281,11 +56018,6 @@ class MUCView extends BaseChatView { muc_defineProperty(this, "is_chatroom", true); } - connectedCallback() { - super.connectedCallback(); - this.initialize(); - } - async initialize() { this.model = await api.rooms.get(this.jid); @@ -52294,13 +56026,12 @@ class MUCView extends BaseChatView { this.setAttribute('id', this.model.get('box_id')); this.listenTo(shared_converse, 'windowStateChanged', this.onWindowStateChanged); this.listenTo(this.model, 'change:composing_spoiler', this.requestUpdateMessageForm); - this.listenTo(this.model, 'show', this.show); - this.listenTo(this.model.session, 'change:connection_status', this.updateAfterTransition); + this.listenTo(this.model.session, 'change:connection_status', this.onConnectionStatusChanged); this.listenTo(this.model.session, 'change:view', this.requestUpdate); - this.updateAfterTransition(); + this.onConnectionStatusChanged(); this.model.maybeShow(); /** - * Triggered once a { @link _converse.ChatRoomView } has been opened + * Triggered once a {@link _converse.ChatRoomView} has been opened * @event _converse#chatRoomViewInitialized * @type { _converse.ChatRoomView } * @example _converse.api.listen.on('chatRoomViewInitialized', view => { ... }); @@ -52314,56 +56045,8 @@ class MUCView extends BaseChatView { 'model': this.model }); } - /** - * Closes this chat, which implies leaving the MUC as well. - * @private - * @method _converse.ChatRoomView#close - */ - - close(ev) { - var _ev$preventDefault; - - ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); - - if (shared_converse.router.history.getFragment() === 'converse/room?jid=' + this.model.get('jid')) { - shared_converse.router.navigate(''); - } - - return this.model.close(ev); - } - - async destroy() { - const messages = [__('Are you sure you want to destroy this groupchat?')]; - let fields = [{ - 'name': 'challenge', - 'label': __('Please enter the XMPP address of this groupchat to confirm'), - 'challenge': this.model.get('jid'), - 'placeholder': __('name@example.org'), - 'required': true - }, { - 'name': 'reason', - 'label': __('Optional reason for destroying this groupchat'), - 'placeholder': __('Reason') - }, { - 'name': 'newjid', - 'label': __('Optional XMPP address for a new groupchat that replaces this one'), - 'placeholder': __('replacement@example.org') - }]; - - try { - var _fields$filter$pop, _fields$filter$pop2; - - fields = await api.confirm(__('Confirm'), messages, fields); - const reason = (_fields$filter$pop = fields.filter(f => f.name === 'reason').pop()) === null || _fields$filter$pop === void 0 ? void 0 : _fields$filter$pop.value; - const newjid = (_fields$filter$pop2 = fields.filter(f => f.name === 'newjid').pop()) === null || _fields$filter$pop2 === void 0 ? void 0 : _fields$filter$pop2.value; - return this.model.sendDestroyIQ(reason, newjid).then(() => this.close()); - } catch (e) { - headless_log.error(e); - } - } - - updateAfterTransition() { + onConnectionStatusChanged() { const conn_status = this.model.session.get('connection_status'); if (conn_status === core_converse.ROOMSTATUS.CONNECTING) { @@ -52384,85 +56067,40 @@ class MUCView extends BaseChatView { } api.elements.define('converse-muc', MUCView); -;// CONCATENATED MODULE: ./src/plugins/muc-views/api.js +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/muc-views/styles/index.scss +var muc_views_styles = __webpack_require__(1557); +;// CONCATENATED MODULE: ./src/plugins/muc-views/styles/index.scss -/* harmony default export */ const muc_views_api = ({ - /** - * The "roomviews" namespace groups methods relevant to chatroom - * (aka groupchats) views. - * - * @namespace _converse.api.roomviews - * @memberOf _converse.api - */ - roomviews: { - /** - * Retrieves a groupchat (aka chatroom) view. The chat should already be open. - * - * @method _converse.api.roomviews.get - * @param {String|string[]} name - e.g. 'coven@conference.shakespeare.lit' or - * ['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit'] - * @returns {View} View representing the groupchat - * - * @example - * // To return a single view, provide the JID of the groupchat - * const view = _converse.api.roomviews.get('coven@conference.shakespeare.lit'); - * - * @example - * // To return an array of views, provide an array of JIDs: - * const views = _converse.api.roomviews.get(['coven@conference.shakespeare.lit', 'cave@conference.shakespeare.lit']); - * - * @example - * // To return views of all open groupchats, call the method without any parameters:: - * const views = _converse.api.roomviews.get(); - * - */ - get(jids) { - if (Array.isArray(jids)) { - const views = api.chatviews.get(jids); - return views.filter(v => v.model.get('type') === shared_converse.CHATROOMS_TYPE); - } else { - const view = api.chatviews.get(jids); + + + + + + + + + - if (view.model.get('type') === shared_converse.CHATROOMS_TYPE) { - return view; - } else { - return null; - } - } - }, +var muc_views_styles_options = {}; - /** - * Lets you close open chatrooms. - * - * You can call this method without any arguments to close - * all open chatrooms, or you can specify a single JID or - * an array of JIDs. - * - * @method _converse.api.roomviews.close - * @param {(String[]|String)} jids The JID or array of JIDs of the chatroom(s) - * @returns { Promise } - Promise which resolves once the views have been closed. - */ - close(jids) { - let views; +muc_views_styles_options.styleTagTransform = (styleTagTransform_default()); +muc_views_styles_options.setAttributes = (setAttributesWithoutAttributes_default()); - if (jids === undefined) { - views = shared_converse.chatboxviews; - } else if (typeof jids === 'string') { - views = [shared_converse.chatboxviews.get(jids)].filter(v => v); - } else if (Array.isArray(jids)) { - views = jids.map(jid => shared_converse.chatboxviews.get(jid)); - } + muc_views_styles_options.insert = insertBySelector_default().bind(null, "head"); + +muc_views_styles_options.domAPI = (styleDomAPI_default()); +muc_views_styles_options.insertStyleElement = (insertStyleElement_default()); - return Promise.all(views.map(v => v.is_chatroom && v.model && v.close())); - } +var muc_views_styles_update = injectStylesIntoStyleTag_default()(muc_views_styles/* default */.Z, muc_views_styles_options); + + + + + /* harmony default export */ const plugins_muc_views_styles = (muc_views_styles/* default */.Z && muc_views_styles/* default.locals */.Z.locals ? muc_views_styles/* default.locals */.Z.locals : undefined); - } -}); -// EXTERNAL MODULE: ./src/plugins/muc-views/styles/index.scss -var muc_views_styles = __webpack_require__(5498); ;// CONCATENATED MODULE: ./src/plugins/muc-views/index.js /** - * @copyright 2020, the Converse.js contributors + * @copyright The Converse.js developers * @description XEP-0045 Multi-User Chat Views * @license Mozilla Public License (MPLv2) */ @@ -52473,7 +56111,6 @@ var muc_views_styles = __webpack_require__(5498); - core_converse.MUC.VIEWS = { CONFIG: 'config-form', BOOKMARK: 'bookmark-form' @@ -52506,7 +56143,6 @@ core_converse.plugins.add('converse-muc-views', { 'cache_muc_messages': true, 'locked_muc_nickname': false, 'modtools_disable_query': [], - 'modtools_disable_assign': false, 'muc_disable_slash_commands': false, 'muc_mention_autocomplete_filter': 'contains', 'muc_mention_autocomplete_min_chars': 0, @@ -52520,7 +56156,6 @@ core_converse.plugins.add('converse-muc-views', { } }); _converse.ChatRoomView = MUCView; - Object.assign(_converse.api, muc_views_api); api.listen.on('clearsession', () => { const view = _converse.chatboxviews.get('controlbox'); @@ -52538,6 +56173,11 @@ core_converse.plugins.add('converse-muc-views', { fetchAndSetMUCDomain(view); view.model.on('change:connected', () => fetchAndSetMUCDomain(view)); }); + api.listen.on('chatBoxClosed', model => { + if (model.get('type') === _converse.CHATROOMS_TYPE) { + utils_clearHistory(model.get('jid')); + } + }); } }); @@ -52549,17 +56189,17 @@ var favico_default = /*#__PURE__*/__webpack_require__.n(favico); + const { - Strophe: notifications_utils_Strophe, - u: notifications_utils_u + Strophe: notifications_utils_Strophe } = core_converse.env; const supports_html5_notification = ('Notification' in window); core_converse.env.Favico = (favico_default()); let favicon; function isMessageToHiddenChat(attrs) { - var _converse$chatboxes$g, _converse$chatboxes$g2; + var _converse$chatboxes$g; - return shared_converse.isTestEnv() || ((_converse$chatboxes$g = (_converse$chatboxes$g2 = shared_converse.chatboxes.get(attrs.from)) === null || _converse$chatboxes$g2 === void 0 ? void 0 : _converse$chatboxes$g2.isHidden()) !== null && _converse$chatboxes$g !== void 0 ? _converse$chatboxes$g : false); + return shared_converse.isTestEnv() || (((_converse$chatboxes$g = shared_converse.chatboxes.get(attrs.from)) === null || _converse$chatboxes$g === void 0 ? void 0 : _converse$chatboxes$g.isHidden()) ?? false); } function areDesktopNotificationsEnabled() { return shared_converse.isTestEnv() || supports_html5_notification && api.settings.get('show_desktop_notifications') && Notification.permission === 'granted'; @@ -52572,9 +56212,9 @@ function clearFavicon() { } function updateUnreadFavicon() { if (api.settings.get('show_tab_notifications')) { - var _favicon, _navigator$setAppBadg, _navigator2; + var _navigator$setAppBadg, _navigator2; - favicon = (_favicon = favicon) !== null && _favicon !== void 0 ? _favicon : new core_converse.env.Favico({ + favicon = favicon ?? new core_converse.env.Favico({ type: 'circle', animation: 'pop' }); @@ -52584,14 +56224,22 @@ function updateUnreadFavicon() { (_navigator$setAppBadg = (_navigator2 = navigator).setAppBadge) === null || _navigator$setAppBadg === void 0 ? void 0 : _navigator$setAppBadg.call(_navigator2, num_unread).catch(e => headless_log.error("Could set unread count in app badge - " + e)); } } + +function isReferenced(references, muc_jid, nick) { + const check = r => [shared_converse.bare_jid, `${muc_jid}/${nick}`].includes(r.uri.replace(/^xmpp:/, '')); + + return references.reduce((acc, r) => acc || check(r), false); +} /** * Is this a group message for which we should notify the user? * @private * @param { MUCMessageAttributes } attrs */ + async function shouldNotifyOfGroupMessage(attrs) { - if (!(attrs === null || attrs === void 0 ? void 0 : attrs.body)) { + if (!(attrs !== null && attrs !== void 0 && attrs.body) && !(attrs !== null && attrs !== void 0 && attrs.message)) { + // attrs.message is used by 'info' messages return false; } @@ -52607,17 +56255,11 @@ async function shouldNotifyOfGroupMessage(attrs) { const nick = room.get('nick'); if (api.settings.get('notify_nicknames_without_references')) { - is_mentioned = new RegExp("\\b".concat(nick, "\\b")).test(attrs.body); + is_mentioned = new RegExp(`\\b${nick}\\b`).test(attrs.body); } - const references_me = r => { - const jid = r.uri.replace(/^xmpp:/, ''); - return jid == shared_converse.bare_jid || jid === "".concat(muc_jid, "/").concat(nick); - }; - - const is_referenced = attrs.references.reduce((acc, r) => acc || references_me(r), false); const is_not_mine = sender !== nick; - const should_notify_user = notify_all === true || Array.isArray(notify_all) && notify_all.includes(muc_jid) || is_referenced || is_mentioned; + const should_notify_user = notify_all === true || Array.isArray(notify_all) && notify_all.includes(muc_jid) || isReferenced(attrs.references, muc_jid, nick) || is_mentioned; if (is_not_mine && !!should_notify_user) { /** @@ -52635,25 +56277,44 @@ async function shouldNotifyOfGroupMessage(attrs) { return false; } + +async function shouldNotifyOfInfoMessage(attrs) { + if (!attrs.from_muc) { + return false; + } + + const room = await api.rooms.get(attrs.from_muc); + + if (!room) { + return false; + } + + const nick = room.get('nick'); + const muc_jid = attrs.from_muc; + const notify_all = api.settings.get('notify_all_room_messages'); + return notify_all === true || Array.isArray(notify_all) && notify_all.includes(muc_jid) || isReferenced(attrs.references, muc_jid, nick); +} /** * @private + * @async * @method shouldNotifyOfMessage * @param { MessageData|MUCMessageData } data */ -async function shouldNotifyOfMessage(data) { + +function shouldNotifyOfMessage(data) { const { - attrs, - stanza + attrs } = data; - if (!attrs || stanza.querySelector('forwarded') !== null) { + if (!attrs || attrs.is_forwarded) { return false; } if (attrs['type'] === 'groupchat') { - const result = await shouldNotifyOfGroupMessage(attrs); - return result; + return shouldNotifyOfGroupMessage(attrs); + } else if (attrs['type'] === 'info') { + return shouldNotifyOfInfoMessage(attrs); } else if (attrs.is_headline) { // We want to show notifications for headline messages. return isMessageToHiddenChat(attrs); @@ -52661,7 +56322,7 @@ async function shouldNotifyOfMessage(data) { const is_me = notifications_utils_Strophe.getBareJidFromJid(attrs.from) === shared_converse.bare_jid; - return !notifications_utils_u.isOnlyChatStateNotification(stanza) && !notifications_utils_u.isOnlyMessageDeliveryReceipt(stanza) && !is_me && (api.settings.get('show_desktop_notifications') === 'all' || isMessageToHiddenChat(attrs)); + return !isEmptyMessage(attrs) && !is_me && (api.settings.get('show_desktop_notifications') === 'all' || isMessageToHiddenChat(attrs)); } function showFeedbackNotification(data) { @@ -52669,7 +56330,7 @@ function showFeedbackNotification(data) { const n = new Notification(data.subject, { body: data.message, lang: shared_converse.locale, - icon: shared_converse.notification_icon + icon: api.settings.get('notification_icon') }); setTimeout(n.close.bind(n), 5000); } @@ -52680,7 +56341,9 @@ function showFeedbackNotification(data) { */ function showChatStateNotification(contact) { - if (shared_converse.chatstate_notification_blacklist.includes(contact.jid)) { + var _api$settings$get; + + if ((_api$settings$get = api.settings.get('chatstate_notification_blacklist')) !== null && _api$settings$get !== void 0 && _api$settings$get.includes(contact.jid)) { // Don't notify if the user is being ignored. return; } @@ -52705,7 +56368,7 @@ function showChatStateNotification(contact) { const n = new Notification(contact.getDisplayName(), { body: message, lang: shared_converse.locale, - icon: shared_converse.notification_icon + icon: api.settings.get('notification_icon') }); setTimeout(() => n.close(), 5000); } @@ -52730,10 +56393,12 @@ function showMessageNotification(data) { } let title, roster_item; - const full_from_jid = attrs.from, - from_jid = notifications_utils_Strophe.getBareJidFromJid(full_from_jid); + const full_from_jid = attrs.from; + const from_jid = notifications_utils_Strophe.getBareJidFromJid(full_from_jid); - if (attrs.type === 'headline') { + if (attrs.type == 'info') { + title = attrs.message; + } else if (attrs.type === 'headline') { if (!from_jid.includes('@') || api.settings.get('allow_non_roster_messaging')) { title = __('Notification from %1$s', from_jid); } else { @@ -52763,17 +56428,23 @@ function showMessageNotification(data) { } } - const body = attrs.is_encrypted ? __('Encrypted message received') : attrs.body; + let body; - if (!body) { - return; + if (attrs.type == 'info') { + body = attrs.reason; + } else { + body = attrs.is_encrypted ? attrs.plaintext : attrs.body; + + if (!body) { + return; + } } const n = new Notification(title, { 'body': body, 'lang': shared_converse.locale, 'icon': api.settings.get('notification_icon'), - 'requireInteraction': !shared_converse.notification_delay + 'requireInteraction': !api.settings.get('notification_delay') }); if (api.settings.get('notification_delay')) { @@ -52826,7 +56497,7 @@ async function handleMessageNotification(data) { * message has will be made. * @event _converse#messageNotification * @type { MessageData|MUCMessageData} - * @example _converse.api.listen.on('messageNotification', stanza => { ... }); + * @example _converse.api.listen.on('messageNotification', data => { ... }); */ @@ -52854,7 +56525,7 @@ function showContactRequestNotification(contact) { const n = new Notification(contact.getDisplayName(), { body: __('wants to be your contact'), lang: shared_converse.locale, - icon: shared_converse.notification_icon + icon: api.settings.get('notification_icon') }); setTimeout(() => n.close(), 5000); } @@ -52914,28 +56585,6 @@ core_converse.plugins.add('converse-notification', { }); ;// CONCATENATED MODULE: ./src/modals/templates/user-settings.js -function user_settings_templateObject2() { - const data = user_settings_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n ", "\n\n
    \n
    \n\n \n
    \n
    \n
    Converse
    \n

    ", "

    \n

    ", "

    \n

    ", "

    \n
    \n
    \n\n
    \n \n
    \n
    \n
    \n
    \n
    \n"]); - - user_settings_templateObject2 = function () { - return data; - }; - - return data; -} - -function user_settings_templateObject() { - const data = user_settings_taggedTemplateLiteral(["\n \n "]); - - user_settings_templateObject = function () { - return data; - }; - - return data; -} - -function user_settings_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -52948,7 +56597,16 @@ const user_settings_tpl_navigation = o => { const i18n_commands = __('Commands'); - return T(user_settings_templateObject(), o.switchTab, i18n_about, o.switchTab, i18n_commands); + return T` + + `; }; /* harmony default export */ const templates_user_settings = (o => { @@ -52961,15 +56619,41 @@ const user_settings_tpl_navigation = o => { const show_client_info = api.settings.get('show_client_info'); const allow_adhoc_commands = api.settings.get('allow_adhoc_commands'); const show_both_tabs = show_client_info && allow_adhoc_commands; - return T(user_settings_templateObject2(), i18n_modal_title, modal_header_close_button, show_both_tabs ? user_settings_tpl_navigation(o) : '', show_client_info ? 'active' : '', o.version_name, unsafe_html_o(xss.filterXSS(first_subtitle, { - 'whiteList': { - 'a': [] - } - })), unsafe_html_o(xss.filterXSS(second_subtitle, { - 'whiteList': { - 'a': [] - } - })), !show_client_info && allow_adhoc_commands ? 'active' : ''); + return T` + +`; }); ;// CONCATENATED MODULE: ./src/modals/user-settings.js @@ -52993,38 +56677,6 @@ let user_settings_converse; })); ;// CONCATENATED MODULE: ./src/plugins/profile/templates/profile.js -function profile_templateObject3() { - const data = profile_taggedTemplateLiteral([""]); - - profile_templateObject3 = function () { - return data; - }; - - return data; -} - -function profile_templateObject2() { - const data = profile_taggedTemplateLiteral([""]); - - profile_templateObject2 = function () { - return data; - }; - - return data; -} - -function profile_templateObject() { - const data = profile_taggedTemplateLiteral(["\n
    \n
    \n \n \n \n ", "\n ", "\n ", "\n
    \n \n
    \n"]); - - profile_templateObject = function () { - return data; - }; - - return data; -} - -function profile_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -53036,7 +56688,29 @@ function profile_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings const i18n_details = __('Show details about this chat client'); const show_settings_button = api.settings.get('show_client_info') || api.settings.get('allow_adhoc_commands'); - return T(profile_templateObject(), o.showProfileModal, o.fullname, show_settings_button ? T(profile_templateObject2(), i18n_details, o.showUserSettingsModal) : '', api.settings.get('allow_logout') ? T(profile_templateObject3(), i18n_logout, o.logout) : '', i18n_change_status, o.showStatusChangeModal, o.chat_status, o.chat_status, o.chat_status === 'online' && 'fa fa-circle chat-status chat-status--online', o.chat_status === 'dnd' && 'fa fa-minus-circle chat-status chat-status--busy', o.chat_status === 'away' && 'fa fa-circle chat-status chat-status--away', o.chat_status === 'xa' && 'far fa-circle chat-status chat-status--xa ', o.chat_status === 'offline' && 'fa fa-circle chat-status chat-status--offline', o.status_message); + return T` +
    +
    + + + + ${o.fullname} + ${show_settings_button ? T`` : ''} + ${api.settings.get('allow_logout') ? T`` : ''} +
    + +
    +`; }); ;// CONCATENATED MODULE: ./src/plugins/profile/statusview.js @@ -53120,23 +56794,59 @@ class ProfileView extends ElementViewWithAvatar { } api.elements.define('converse-user-profile', ProfileView); -;// CONCATENATED MODULE: ./src/modals/templates/chat-status.js -function chat_status_templateObject() { - const data = chat_status_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n"]); - - chat_status_templateObject = function () { - return data; - }; - - return data; -} - -function chat_status_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +;// CONCATENATED MODULE: ./src/plugins/profile/templates/chat-status-modal.js - -/* harmony default export */ const chat_status = (o => T(chat_status_templateObject(), o.modal_title, modal_header_close_button, o.status === 'online', o.label_online, o.status === 'busy', o.label_busy, o.status === 'away', o.label_away, o.status === 'xa', o.label_xa, o.status_message || '', o.placeholder_status_message, o.status_message ? '' : 'hidden', o.label_save)); -;// CONCATENATED MODULE: ./src/modals/chat-status.js +/* harmony default export */ const chat_status_modal = (o => T` + +`); +;// CONCATENATED MODULE: ./src/plugins/profile/modals/chat-status.js @@ -53150,7 +56860,7 @@ const ChatStatusModal = base.extend({ }, toHTML() { - return chat_status(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), { + return chat_status_modal(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), { 'label_away': __('Away'), 'label_busy': __('Busy'), 'label_cancel': __('Cancel'), @@ -53193,27 +56903,15 @@ const ChatStatusModal = base.extend({ }); shared_converse.ChatStatusModal = ChatStatusModal; -/* harmony default export */ const modals_chat_status = ((/* unused pure expression or super */ null && (ChatStatusModal))); +/* harmony default export */ const chat_status = ((/* unused pure expression or super */ null && (ChatStatusModal))); ;// CONCATENATED MODULE: ./src/shared/components/image-picker.js -function image_picker_templateObject() { - const data = image_picker_taggedTemplateLiteral(["\n \n ", "\n \n \n "]); - - image_picker_templateObject = function () { - return data; - }; - - return data; -} - -function image_picker_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -const i18n_alt_avatar = __('Your avatar image'); +const i18n_profile_picture = __('Your profile picture'); class ImagePicker extends CustomElement { static get properties() { @@ -53236,7 +56934,12 @@ class ImagePicker extends CustomElement { 'image': this.image, 'width': this.width }; - return T(image_picker_templateObject(), this.openFileSelection, i18n_alt_avatar, renderAvatar(avatar_data), this.updateFilePreview); + return T` + + ${renderAvatar(avatar_data)} + + + `; } openFileSelection(ev) { @@ -53255,103 +56958,30 @@ class ImagePicker extends CustomElement { } api.elements.define('converse-image-picker', ImagePicker); -;// CONCATENATED MODULE: ./src/modals/templates/profile.js -function profile_templateObject8() { - const data = templates_profile_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n \n ", "\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    ", "
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n ", "\n
    \n
    \n
    \n \n
    \n
    \n
    \n ", "\n
    \n
    \n
    \n
    \n "]); - - profile_templateObject8 = function () { - return data; - }; - - return data; -} - -function profile_templateObject7() { - const data = templates_profile_taggedTemplateLiteral(["\n "]); - - profile_templateObject7 = function () { - return data; - }; - - return data; -} - -function profile_templateObject6() { - const data = templates_profile_taggedTemplateLiteral(["\n
    \n
    \n
      \n
    • ", "
    • \n
    • \n ", "\n
    • \n
    \n
    \n \n
    \n ", "\n
    \n
    "]); - - profile_templateObject6 = function () { - return data; - }; - - return data; -} - -function profile_templateObject5() { - const data = templates_profile_taggedTemplateLiteral(["\n
      \n
    • \n \n
    • \n ", "\n
    \n
    \n "]); - - profile_templateObject5 = function () { - return data; - }; - - return data; -} - -function profile_templateObject4() { - const data = templates_profile_taggedTemplateLiteral(["\n ", "\n"]); - - profile_templateObject4 = function () { - return data; - }; - - return data; -} - -function templates_profile_templateObject3() { - const data = templates_profile_taggedTemplateLiteral(["\n
  • \n \n
  • \n "]); - - templates_profile_templateObject3 = function () { - return data; - }; - - return data; -} - -function templates_profile_templateObject2() { - const data = templates_profile_taggedTemplateLiteral(["\n
  • \n \n
  • \n "]); - - templates_profile_templateObject2 = function () { - return data; - }; - - return data; -} - -function templates_profile_templateObject() { - const data = templates_profile_taggedTemplateLiteral(["\n ", ""]); - - templates_profile_templateObject = function () { - return data; - }; - - return data; -} - -function templates_profile_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +;// CONCATENATED MODULE: ./src/plugins/profile/templates/profile_modal.js +const profile_modal_u = core_converse.env.utils; -const profile_u = core_converse.env.utils; - -const fingerprint = o => T(templates_profile_templateObject(), profile_u.formatFingerprint(o.view.current_device.get('bundle').fingerprint)); +const fingerprint = o => T` + ${profile_modal_u.formatFingerprint(o.view.current_device.get('bundle').fingerprint)}`; const device_with_fingerprint = o => { const i18n_fingerprint_checkbox_label = __('Checkbox for selecting the following fingerprint'); - return T(templates_profile_templateObject2(), o.device.get('id'), i18n_fingerprint_checkbox_label, profile_u.formatFingerprint(o.device.get('bundle').fingerprint)); + return T` +
  • + +
  • + `; }; const device_without_fingerprint = o => { @@ -53359,12 +56989,24 @@ const device_without_fingerprint = o => { const i18n_fingerprint_checkbox_label = __('Checkbox for selecting the following device'); - return T(templates_profile_templateObject3(), o.device.get('id'), i18n_fingerprint_checkbox_label, i18n_device_without_fingerprint); + return T` +
  • + +
  • + `; }; -const device_item = o => T(profile_templateObject4(), o.device.get('bundle') && o.device.get('bundle').fingerprint ? device_with_fingerprint(o) : device_without_fingerprint(o)); +const device_item = o => T` + ${o.device.get('bundle') && o.device.get('bundle').fingerprint ? device_with_fingerprint(o) : device_without_fingerprint(o)} +`; const device_list = o => { + var _o$view$other_devices; + const i18n_other_devices = __('Other OMEMO-enabled devices'); const i18n_other_devices_label = __('Checkbox to select fingerprints of all other OMEMO devices'); @@ -53373,28 +57015,55 @@ const device_list = o => { const i18n_select_all = __('Select all'); - return T(profile_templateObject5(), i18n_select_all, i18n_other_devices_label, i18n_other_devices, o.view.other_devices.map(device => device_item(Object.assign({ + return T` +
      +
    • + +
    • + ${(_o$view$other_devices = o.view.other_devices) === null || _o$view$other_devices === void 0 ? void 0 : _o$view$other_devices.map(device => device_item(Object.assign({ device - }, o))), i18n_remove_devices); + }, o)))} +
    +
    + `; }; // TODO: this needs to go as a component into the OMEMO plugin folder const omemo_page = o => { + var _o$view$other_devices2; + const i18n_fingerprint = __("This device's OMEMO fingerprint"); const i18n_generate = __('Generate new keys and fingerprint'); - return T(profile_templateObject6(), i18n_fingerprint, o.view.current_device && o.view.current_device.get('bundle') && o.view.current_device.get('bundle').fingerprint ? fingerprint(o) : spinner(), i18n_generate, o.view.other_devices.length ? device_list(o) : ''); + return T` +
    +
    +
      +
    • ${i18n_fingerprint}
    • +
    • + ${o.view.current_device && o.view.current_device.get('bundle') && o.view.current_device.get('bundle').fingerprint ? fingerprint(o) : spinner()} +
    • +
    +
    + +
    + ${(_o$view$other_devices2 = o.view.other_devices) !== null && _o$view$other_devices2 !== void 0 && _o$view$other_devices2.length ? device_list(o) : ''} +
    +
    `; }; -/* harmony default export */ const templates_profile = (o => { +/* harmony default export */ const profile_modal = (o => { const heading_profile = __('Your Profile'); const i18n_email = __('Email'); const i18n_fullname = __('Full Name'); - const i18n_jid = __('XMPP Address (JID)'); + const i18n_jid = __('XMPP Address'); const i18n_nickname = __('Nickname'); @@ -53410,10 +57079,73 @@ const omemo_page = o => { const i18n_profile = __('Profile'); - const navigation = T(profile_templateObject7(), i18n_profile, i18n_omemo); - return T(profile_templateObject8(), heading_profile, modal_header_close_button, shared_converse.pluggable.plugins["converse-omemo"].enabled(shared_converse) && navigation || '', o.image, o.width, o.height, i18n_jid, o.jid, i18n_fullname, o.fullname || '', i18n_nickname, o.nickname || '', i18n_url, o.url || '', i18n_email, o.email || '', i18n_role, o.role || '', i18n_role_help, i18n_save, shared_converse.pluggable.plugins["converse-omemo"].enabled(shared_converse) && omemo_page(o) || ''); + const navigation = o.view.current_device ? T`` : ''; + return T` + + `; }); -;// CONCATENATED MODULE: ./src/modals/profile.js +;// CONCATENATED MODULE: ./src/plugins/profile/modals/profile.js @@ -53422,7 +57154,7 @@ const omemo_page = o => { const { sizzle: profile_sizzle -} = converse.env; +} = core_converse.env; const ProfileModal = base.extend({ id: "user-profile-modal", events: { @@ -53443,7 +57175,7 @@ const ProfileModal = base.extend({ }, toHTML() { - return templates_profile(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), this.getAvatarData(), { + return profile_modal(Object.assign(this.model.toJSON(), this.model.vcard.toJSON(), this.getAvatarData(), { 'view': this })); }, @@ -53533,35 +57265,95 @@ core_converse.plugins.add('converse-profile', { } }); -;// CONCATENATED MODULE: ./src/plugins/omemo/overrides/chatbox.js - -const chatbox_ChatBox = { - async sendMessage(text, spoiler_hint) { - if (this.get('omemo_active') && text) { - const attrs = this.getOutgoingMessageAttributes(text, spoiler_hint); - attrs['is_encrypted'] = true; - attrs['plaintext'] = attrs.message; - let message, stanza; - - try { - const devices = await shared_converse.getBundlesAndBuildSessions(this); - message = await this.createMessage(attrs); - stanza = await shared_converse.createOMEMOMessageStanza(this, message, devices); - } catch (e) { - this.handleMessageSendError(e); - return null; - } - - shared_converse.api.send(stanza); - - return message; - } else { - return this.__super__.sendMessage.apply(this, arguments); - } - } - +;// CONCATENATED MODULE: ./src/utils/file.js +const MIMETYPES_MAP = { + 'aac': 'audio/aac', + 'abw': 'application/x-abiword', + 'arc': 'application/x-freearc', + 'avi': 'video/x-msvideo', + 'azw': 'application/vnd.amazon.ebook', + 'bin': 'application/octet-stream', + 'bmp': 'image/bmp', + 'bz': 'application/x-bzip', + 'bz2': 'application/x-bzip2', + 'cda': 'application/x-cdf', + 'csh': 'application/x-csh', + 'css': 'text/css', + 'csv': 'text/csv', + 'doc': 'application/msword', + 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'eot': 'application/vnd.ms-fontobject', + 'epub': 'application/epub+zip', + 'gif': 'image/gif', + 'gz': 'application/gzip', + 'htm': 'text/html', + 'html': 'text/html', + 'ico': 'image/vnd.microsoft.icon', + 'ics': 'text/calendar', + 'jar': 'application/java-archive', + 'jpeg': 'image/jpeg', + 'jpg': 'image/jpeg', + 'js': 'text/javascript', + 'json': 'application/json', + 'jsonld': 'application/ld+json', + 'm4a': 'audio/mp4', + 'mid': 'audio/midi', + 'midi': 'audio/midi', + 'mjs': 'text/javascript', + 'mp3': 'audio/mpeg', + 'mp4': 'video/mp4', + 'mpeg': 'video/mpeg', + 'mpkg': 'application/vnd.apple.installer+xml', + 'odp': 'application/vnd.oasis.opendocument.presentation', + 'ods': 'application/vnd.oasis.opendocument.spreadsheet', + 'odt': 'application/vnd.oasis.opendocument.text', + 'oga': 'audio/ogg', + 'ogv': 'video/ogg', + 'ogx': 'application/ogg', + 'opus': 'audio/opus', + 'otf': 'font/otf', + 'png': 'image/png', + 'pdf': 'application/pdf', + 'php': 'application/x-httpd-php', + 'ppt': 'application/vnd.ms-powerpoint', + 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'rar': 'application/vnd.rar', + 'rtf': 'application/rtf', + 'sh': 'application/x-sh', + 'svg': 'image/svg+xml', + 'swf': 'application/x-shockwave-flash', + 'tar': 'application/x-tar', + 'tif': 'image/tiff', + 'tiff': 'image/tiff', + 'ts': 'video/mp2t', + 'ttf': 'font/ttf', + 'txt': 'text/plain', + 'vsd': 'application/vnd.visio', + 'wav': 'audio/wav', + 'weba': 'audio/webm', + 'webm': 'video/webm', + 'webp': 'image/webp', + 'woff': 'font/woff', + 'woff2': 'font/woff2', + 'xhtml': 'application/xhtml+xml', + 'xls': 'application/vnd.ms-excel', + 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml': 'text/xml', + 'xul': 'application/vnd.mozilla.xul+xml', + 'zip': 'application/zip', + '3gp': 'video/3gpp', + '3g2': 'video/3gpp2', + '7z': 'application/x-7z-compressed' +}; +;// CONCATENATED MODULE: ./src/plugins/omemo/consts.js +const UNDECIDED = 0; +const TRUSTED = 1; +const UNTRUSTED = -1; +const TAG_LENGTH = 128; +const KEY_ALGO = { + 'name': 'AES-GCM', + 'length': 128 }; -/* harmony default export */ const chatbox = (chatbox_ChatBox); ;// CONCATENATED MODULE: ./node_modules/lodash-es/concat.js @@ -53607,23 +57399,54 @@ function concat() { /* harmony default export */ const lodash_es_concat = (concat); -;// CONCATENATED MODULE: ./src/plugins/omemo/consts.js -const UNDECIDED = 0; -const TRUSTED = 1; -const UNTRUSTED = -1; -;// CONCATENATED MODULE: ./src/plugins/omemo/utils.js -function omemo_utils_templateObject() { - const data = omemo_utils_taggedTemplateLiteral(["\n \n "]); +;// CONCATENATED MODULE: ./src/headless/utils/arraybuffer.js - omemo_utils_templateObject = function () { - return data; - }; - - return data; +const { + u: arraybuffer_u +} = core_converse.env; +function appendArrayBuffer(buffer1, buffer2) { + const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength); + tmp.set(new Uint8Array(buffer1), 0); + tmp.set(new Uint8Array(buffer2), buffer1.byteLength); + return tmp.buffer; } +function arrayBufferToHex(ab) { + // https://stackoverflow.com/questions/40031688/javascript-arraybuffer-to-hex#40031979 + return Array.prototype.map.call(new Uint8Array(ab), x => ('00' + x.toString(16)).slice(-2)).join(''); +} +function arrayBufferToString(ab) { + return new TextDecoder("utf-8").decode(ab); +} +function stringToArrayBuffer(string) { + const bytes = new TextEncoder("utf-8").encode(string); + return bytes.buffer; +} +function arrayBufferToBase64(ab) { + return btoa(new Uint8Array(ab).reduce((data, byte) => data + String.fromCharCode(byte), '')); +} +function base64ToArrayBuffer(b64) { + const binary_string = window.atob(b64), + len = binary_string.length, + bytes = new Uint8Array(len); -function omemo_utils_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } + for (let i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + return bytes.buffer; +} +function hexToArrayBuffer(hex) { + const typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(h => parseInt(h, 16))); + return typedArray.buffer; +} +Object.assign(arraybuffer_u, { + arrayBufferToHex, + arrayBufferToString, + stringToArrayBuffer, + arrayBufferToBase64, + base64ToArrayBuffer +}); +;// CONCATENATED MODULE: ./src/plugins/omemo/utils.js /* global libsignal */ @@ -53631,60 +57454,220 @@ function omemo_utils_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = str + + + + + + + + + + const { + $msg: utils_$msg, Strophe: omemo_utils_Strophe, + URI: utils_URI, sizzle: omemo_utils_sizzle, u: omemo_utils_u } = core_converse.env; -const TAG_LENGTH = 128; -const KEY_ALGO = { - 'name': 'AES-GCM', - 'length': 128 -}; -const omemo = { - async encryptMessage(plaintext) { - // The client MUST use fresh, randomly generated key/IV pairs - // with AES-128 in Galois/Counter Mode (GCM). - // For GCM a 12 byte IV is strongly suggested as other IV lengths - // will require additional calculations. In principle any IV size - // can be used as long as the IV doesn't ever repeat. NIST however - // suggests that only an IV size of 12 bytes needs to be supported - // by implementations. - // - // https://crypto.stackexchange.com/questions/26783/ciphertext-and-tag-size-and-iv-transmission-with-aes-in-gcm-mode - const iv = crypto.getRandomValues(new window.Uint8Array(12)), - key = await crypto.subtle.generateKey(KEY_ALGO, true, ['encrypt', 'decrypt']), - algo = { - 'name': 'AES-GCM', - 'iv': iv, - 'tagLength': TAG_LENGTH - }, - encrypted = await crypto.subtle.encrypt(algo, key, omemo_utils_u.stringToArrayBuffer(plaintext)), - length = encrypted.byteLength - (128 + 7 >> 3), - ciphertext = encrypted.slice(0, length), - tag = encrypted.slice(length), - exported_key = await crypto.subtle.exportKey('raw', key); - return { - 'key': exported_key, - 'tag': tag, - 'key_and_tag': omemo_utils_u.appendArrayBuffer(exported_key, tag), - 'payload': omemo_utils_u.arrayBufferToBase64(ciphertext), - 'iv': omemo_utils_u.arrayBufferToBase64(iv) - }; - }, - async decryptMessage(obj) { - const key_obj = await crypto.subtle.importKey('raw', obj.key, KEY_ALGO, true, ['encrypt', 'decrypt']); - const cipher = omemo_utils_u.appendArrayBuffer(omemo_utils_u.base64ToArrayBuffer(obj.payload), obj.tag); - const algo = { - 'name': 'AES-GCM', - 'iv': omemo_utils_u.base64ToArrayBuffer(obj.iv), - 'tagLength': TAG_LENGTH - }; - return omemo_utils_u.arrayBufferToString(await crypto.subtle.decrypt(algo, key_obj, cipher)); +async function encryptMessage(plaintext) { + // The client MUST use fresh, randomly generated key/IV pairs + // with AES-128 in Galois/Counter Mode (GCM). + // For GCM a 12 byte IV is strongly suggested as other IV lengths + // will require additional calculations. In principle any IV size + // can be used as long as the IV doesn't ever repeat. NIST however + // suggests that only an IV size of 12 bytes needs to be supported + // by implementations. + // + // https://crypto.stackexchange.com/questions/26783/ciphertext-and-tag-size-and-iv-transmission-with-aes-in-gcm-mode + const iv = crypto.getRandomValues(new window.Uint8Array(12)); + const key = await crypto.subtle.generateKey(KEY_ALGO, true, ['encrypt', 'decrypt']); + const algo = { + 'name': 'AES-GCM', + 'iv': iv, + 'tagLength': TAG_LENGTH + }; + const encrypted = await crypto.subtle.encrypt(algo, key, stringToArrayBuffer(plaintext)); + const length = encrypted.byteLength - (128 + 7 >> 3); + const ciphertext = encrypted.slice(0, length); + const tag = encrypted.slice(length); + const exported_key = await crypto.subtle.exportKey('raw', key); + return { + 'key': exported_key, + 'tag': tag, + 'key_and_tag': appendArrayBuffer(exported_key, tag), + 'payload': arrayBufferToBase64(ciphertext), + 'iv': arrayBufferToBase64(iv) + }; +} + +async function decryptMessage(obj) { + const key_obj = await crypto.subtle.importKey('raw', obj.key, KEY_ALGO, true, ['encrypt', 'decrypt']); + const cipher = appendArrayBuffer(base64ToArrayBuffer(obj.payload), obj.tag); + const algo = { + 'name': 'AES-GCM', + 'iv': base64ToArrayBuffer(obj.iv), + 'tagLength': TAG_LENGTH + }; + return arrayBufferToString(await crypto.subtle.decrypt(algo, key_obj, cipher)); +} + +const omemo = { + decryptMessage, + encryptMessage +}; +async function encryptFile(file) { + const iv = crypto.getRandomValues(new Uint8Array(12)); + const key = await crypto.subtle.generateKey({ + name: 'AES-GCM', + length: 256 + }, true, ['encrypt', 'decrypt']); + const encrypted = await crypto.subtle.encrypt({ + name: 'AES-GCM', + iv + }, key, await file.arrayBuffer()); + const exported_key = await window.crypto.subtle.exportKey('raw', key); + const encrypted_file = new File([encrypted], file.name, { + type: file.type, + lastModified: file.lastModified + }); + encrypted_file.xep454_ivkey = arrayBufferToHex(iv) + arrayBufferToHex(exported_key); + return encrypted_file; +} +function setEncryptedFileURL(message, attrs) { + const url = attrs.oob_url.replace(/^https?:/, 'aesgcm:') + '#' + message.file.xep454_ivkey; + return Object.assign(attrs, { + 'oob_url': null, + // Since only the body gets encrypted, we don't set the oob_url + 'message': url, + 'body': url + }); +} + +async function decryptFile(iv, key, cipher) { + const key_obj = await crypto.subtle.importKey('raw', hexToArrayBuffer(key), 'AES-GCM', false, ['decrypt']); + const algo = { + 'name': 'AES-GCM', + 'iv': hexToArrayBuffer(iv) + }; + return crypto.subtle.decrypt(algo, key_obj, cipher); +} + +async function downloadFile(url) { + let response; + + try { + response = await fetch(url); + } catch (e) { + headless_log.error(`${e.name}: Failed to download encrypted media: ${url}`); + headless_log.error(e); + return null; } -}; + if (response.status >= 200 && response.status < 400) { + return response.arrayBuffer(); + } +} + +async function getAndDecryptFile(uri) { + var _uri$filename; + + const hash = uri.hash().slice(1); + const protocol = window.location.hostname === 'localhost' ? 'http' : 'https'; + const http_url = uri.toString().replace(/^aesgcm/, protocol); + const cipher = await downloadFile(http_url); + + if (cipher === null) { + headless_log.error(`Could not decrypt file ${uri.toString()} since it could not be downloaded`); + return null; + } + + const iv = hash.slice(0, 24); + const key = hash.slice(24); + let content; + + try { + content = await decryptFile(iv, key, cipher); + } catch (e) { + headless_log.error(`Could not decrypt file ${uri.toString()}`); + headless_log.error(e); + return null; + } + + const [filename, extension] = (_uri$filename = uri.filename()) === null || _uri$filename === void 0 ? void 0 : _uri$filename.split('.'); + const mimetype = MIMETYPES_MAP[extension]; + + try { + const file = new File([content], filename, { + 'type': mimetype + }); + return URL.createObjectURL(file); + } catch (e) { + headless_log.error(`Could not decrypt file ${uri.toString()}`); + headless_log.error(e); + return null; + } +} + +function getTemplateForObjectURL(uri, obj_url, richtext) { + const file_url = uri.toString(); + + if (obj_url === null) { + return file_url; + } + + if (isImageURL(file_url)) { + return src_templates_image({ + 'url': obj_url, + 'onClick': richtext.onImgClick, + 'onLoad': richtext.onImgLoad + }); + } else if (isAudioURL(file_url)) { + return audio(obj_url); + } else if (isVideoURL(file_url)) { + return video(obj_url); + } else { + return file(obj_url, uri.filename()); + } +} + +function addEncryptedFiles(text, offset, richtext) { + const objs = []; + + try { + const parse_options = { + 'start': /\b(aesgcm:\/\/)/gi + }; + utils_URI.withinString(text, (url, start, end) => { + objs.push({ + url, + start, + end + }); + return url; + }, parse_options); + } catch (error) { + headless_log.debug(error); + return; + } + + objs.forEach(o => { + const uri = getURI(text.slice(o.start, o.end)); + const promise = getAndDecryptFile(uri).then(obj_url => getTemplateForObjectURL(uri, obj_url, richtext)); + const template = T`${until_o(promise, '')}`; + richtext.addTemplateResult(o.start + offset, o.end + offset, template); + }); +} + +function handleEncryptedFiles(richtext) { + if (!shared_converse.config.get('trusted')) { + return; + } + + richtext.addAnnotations((text, offset) => addEncryptedFiles(text, offset, richtext)); +} function parseEncryptedMessage(stanza, attrs) { if (attrs.is_encrypted && attrs.encrypted.key) { // https://xmpp.org/extensions/xep-0384.html#usecases-receiving @@ -53697,7 +57680,7 @@ function parseEncryptedMessage(stanza, attrs) { return attrs; } } -function onChatBoxesInitialized() { +function utils_onChatBoxesInitialized() { shared_converse.chatboxes.on('add', chatbox => { checkOMEMOSupported(chatbox); @@ -53733,18 +57716,36 @@ function getSessionCipher(jid, id) { return new window.libsignal.SessionCipher(shared_converse.omemo_store, address); } -async function handleDecryptedWhisperMessage(attrs, key_and_tag) { - const encrypted = attrs.encrypted; +function getJIDForDecryption(attrs) { + const from_jid = attrs.from_muc ? attrs.from_real_jid : attrs.from; - const devicelist = shared_converse.devicelists.getDeviceList(attrs.from); + if (!from_jid) { + Object.assign(attrs, { + 'error_text': __("Sorry, could not decrypt a received OMEMO message because we don't have the XMPP address for that user."), + 'error_type': 'Decryption', + 'is_ephemeral': false, + 'is_error': true, + 'type': 'error' + }); + throw new Error("Could not find JID to decrypt OMEMO message for"); + } + + return from_jid; +} + +async function handleDecryptedWhisperMessage(attrs, key_and_tag) { + const from_jid = getJIDForDecryption(attrs); + + const devicelist = shared_converse.devicelists.getDeviceList(from_jid); await devicelist._devices_promise; + const encrypted = attrs.encrypted; let device = devicelist.get(encrypted.device_id); if (!device) { device = await devicelist.devices.create({ 'id': encrypted.device_id, - 'jid': attrs.from + 'jid': from_jid }, { 'promise': true }); @@ -53765,7 +57766,7 @@ async function handleDecryptedWhisperMessage(attrs, key_and_tag) { function getDecryptionErrorAttributes(e) { if (api.settings.get('loglevel') === 'debug') { return { - 'error_text': __('Sorry, could not decrypt a received OMEMO message due to an error.') + " ".concat(e.name, " ").concat(e.message), + 'error_text': __('Sorry, could not decrypt a received OMEMO message due to an error.') + ` ${e.name} ${e.message}`, 'error_type': 'Decryption', 'is_ephemeral': true, 'is_error': true, @@ -53777,8 +57778,9 @@ function getDecryptionErrorAttributes(e) { } async function decryptPrekeyWhisperMessage(attrs) { - const session_cipher = getSessionCipher(attrs.from, parseInt(attrs.encrypted.device_id, 10)); - const key = omemo_utils_u.base64ToArrayBuffer(attrs.encrypted.key); + const from_jid = getJIDForDecryption(attrs); + const session_cipher = getSessionCipher(from_jid, parseInt(attrs.encrypted.device_id, 10)); + const key = base64ToArrayBuffer(attrs.encrypted.key); let key_and_tag; try { @@ -53798,7 +57800,7 @@ async function decryptPrekeyWhisperMessage(attrs) { // sender this way, the invalid session of the original // sender will get overwritten with this newly created, // valid session. - headless_log.error("".concat(e.name, " ").concat(e.message)); + headless_log.error(`${e.name} ${e.message}`); return Object.assign(attrs, getDecryptionErrorAttributes(e)); } // TODO from the XEP: // When a client receives the first message for a given @@ -53825,26 +57827,15 @@ async function decryptPrekeyWhisperMessage(attrs) { }); } } catch (e) { - headless_log.error("".concat(e.name, " ").concat(e.message)); + headless_log.error(`${e.name} ${e.message}`); return Object.assign(attrs, getDecryptionErrorAttributes(e)); } } async function decryptWhisperMessage(attrs) { - const from_jid = attrs.from_muc ? attrs.from_real_jid : attrs.from; - - if (!from_jid) { - Object.assign(attrs, { - 'error_text': __("Sorry, could not decrypt a received OMEMO because we don't have the JID for that user."), - 'error_type': 'Decryption', - 'is_ephemeral': false, - 'is_error': true, - 'type': 'error' - }); - } - + const from_jid = getJIDForDecryption(attrs); const session_cipher = getSessionCipher(from_jid, parseInt(attrs.encrypted.device_id, 10)); - const key = omemo_utils_u.base64ToArrayBuffer(attrs.encrypted.key); + const key = base64ToArrayBuffer(attrs.encrypted.key); try { const key_and_tag = await session_cipher.decryptWhisperMessage(key, 'binary'); @@ -53853,7 +57844,7 @@ async function decryptWhisperMessage(attrs) { 'plaintext': plaintext }); } catch (e) { - headless_log.error("".concat(e.name, " ").concat(e.message)); + headless_log.error(`${e.name} ${e.message}`); return Object.assign(attrs, getDecryptionErrorAttributes(e)); } } @@ -53892,7 +57883,7 @@ function addKeysToMessageStanza(stanza, dicts, iv) { function parseBundle(bundle_el) { const signed_prekey_public_el = bundle_el.querySelector('signedPreKeyPublic'); const signed_prekey_signature_el = bundle_el.querySelector('signedPreKeySignature'); - const prekeys = omemo_utils_sizzle("prekeys > preKeyPublic", bundle_el).map(el => ({ + const prekeys = omemo_utils_sizzle(`prekeys > preKeyPublic`, bundle_el).map(el => ({ 'id': parseInt(el.getAttribute('preKeyId'), 10), 'key': el.textContent })); @@ -53909,12 +57900,12 @@ function parseBundle(bundle_el) { async function generateFingerprint(device) { var _device$get; - if ((_device$get = device.get('bundle')) === null || _device$get === void 0 ? void 0 : _device$get.fingerprint) { + if ((_device$get = device.get('bundle')) !== null && _device$get !== void 0 && _device$get.fingerprint) { return; } const bundle = await device.getBundle(); - bundle['fingerprint'] = omemo_utils_u.arrayBufferToHex(omemo_utils_u.base64ToArrayBuffer(bundle['identity_key'])); + bundle['fingerprint'] = arrayBufferToHex(base64ToArrayBuffer(bundle['identity_key'])); device.save('bundle', bundle); device.trigger('change:bundle'); // Doesn't get triggered automatically due to pass-by-reference } @@ -53950,33 +57941,30 @@ function generateDeviceID() { } async function buildSession(device) { - // TODO: check device-get('jid') versus the 'from' attribute which is used - // to build a session when receiving an encrypted message in a MUC. - // https://github.com/conversejs/converse.js/issues/1481#issuecomment-509183431 const address = new libsignal.SignalProtocolAddress(device.get('jid'), device.get('id')); const sessionBuilder = new libsignal.SessionBuilder(shared_converse.omemo_store, address); const prekey = device.getRandomPreKey(); const bundle = await device.getBundle(); return sessionBuilder.processPreKey({ 'registrationId': parseInt(device.get('id'), 10), - 'identityKey': omemo_utils_u.base64ToArrayBuffer(bundle.identity_key), + 'identityKey': base64ToArrayBuffer(bundle.identity_key), 'signedPreKey': { 'keyId': bundle.signed_prekey.id, // - 'publicKey': omemo_utils_u.base64ToArrayBuffer(bundle.signed_prekey.public_key), - 'signature': omemo_utils_u.base64ToArrayBuffer(bundle.signed_prekey.signature) + 'publicKey': base64ToArrayBuffer(bundle.signed_prekey.public_key), + 'signature': base64ToArrayBuffer(bundle.signed_prekey.signature) }, 'preKey': { 'keyId': prekey.id, // - 'publicKey': omemo_utils_u.base64ToArrayBuffer(prekey.key) + 'publicKey': base64ToArrayBuffer(prekey.key) } }); } async function getSession(device) { if (!device.get('bundle')) { - headless_log.error("Could not build an OMEMO session for device ".concat(device.get('id'), " because we don't have its bundle")); + headless_log.error(`Could not build an OMEMO session for device ${device.get('id')} because we don't have its bundle`); return null; } @@ -53990,7 +57978,7 @@ async function getSession(device) { const session = await buildSession(device); return session; } catch (e) { - headless_log.error("Could not build an OMEMO session for device ".concat(device.get('id'))); + headless_log.error(`Could not build an OMEMO session for device ${device.get('id')}`); headless_log.error(e); return null; } @@ -53998,7 +57986,7 @@ async function getSession(device) { } function updateBundleFromStanza(stanza) { - const items_el = omemo_utils_sizzle("items", stanza).pop(); + const items_el = omemo_utils_sizzle(`items`, stanza).pop(); if (!items_el || !items_el.getAttribute('node').startsWith(omemo_utils_Strophe.NS.OMEMO_BUNDLES)) { return; @@ -54006,7 +57994,7 @@ function updateBundleFromStanza(stanza) { const device_id = items_el.getAttribute('node').split(':')[1]; const jid = stanza.getAttribute('from'); - const bundle_el = omemo_utils_sizzle("item > bundle", items_el).pop(); + const bundle_el = omemo_utils_sizzle(`item > bundle`, items_el).pop(); const devicelist = shared_converse.devicelists.getDeviceList(jid); @@ -54020,13 +58008,13 @@ function updateBundleFromStanza(stanza) { } function updateDevicesFromStanza(stanza) { - const items_el = omemo_utils_sizzle("items[node=\"".concat(omemo_utils_Strophe.NS.OMEMO_DEVICELIST, "\"]"), stanza).pop(); + const items_el = omemo_utils_sizzle(`items[node="${omemo_utils_Strophe.NS.OMEMO_DEVICELIST}"]`, stanza).pop(); if (!items_el) { return; } - const device_selector = "item list[xmlns=\"".concat(omemo_utils_Strophe.NS.OMEMO, "\"] device"); + const device_selector = `item list[xmlns="${omemo_utils_Strophe.NS.OMEMO}"] device`; const device_ids = omemo_utils_sizzle(device_selector, items_el).map(d => d.getAttribute('id')); const jid = stanza.getAttribute('from'); @@ -54065,7 +58053,7 @@ function registerPEPPushHandler() { // Add a handler for devices pushed from other connected clients shared_converse.connection.addHandler(message => { try { - if (omemo_utils_sizzle("event[xmlns=\"".concat(omemo_utils_Strophe.NS.PUBSUB, "#event\"]"), message).length) { + if (omemo_utils_sizzle(`event[xmlns="${omemo_utils_Strophe.NS.PUBSUB}#event"]`, message).length) { updateDevicesFromStanza(message); updateBundleFromStanza(message); } @@ -54078,7 +58066,7 @@ function registerPEPPushHandler() { } function restoreOMEMOSession() { if (shared_converse.omemo_store === undefined) { - const id = "converse.omemosession-".concat(shared_converse.bare_jid); + const id = `converse.omemosession-${shared_converse.bare_jid}`; shared_converse.omemo_store = new shared_converse.OMEMOStore({ id }); @@ -54120,7 +58108,7 @@ async function initOMEMO() { } shared_converse.devicelists = new shared_converse.DeviceLists(); - const id = "converse.devicelists-".concat(shared_converse.bare_jid); + const id = `converse.devicelists-${shared_converse.bare_jid}`; initStorage(shared_converse.devicelists, id); try { @@ -54208,29 +58196,171 @@ function getOMEMOToolbarButton(toolbar_el, buttons) { let title; - if (is_muc && model.get('omemo_supported')) { + if (model.get('omemo_supported')) { const i18n_plaintext = __('Messages are being sent in plaintext'); const i18n_encrypted = __('Messages are sent encrypted'); title = model.get('omemo_active') ? i18n_encrypted : i18n_plaintext; - } else { + } else if (is_muc) { title = __('This groupchat needs to be members-only and non-anonymous in ' + 'order to support OMEMO encrypted messages'); + } else { + title = __('OMEMO encryption is not supported'); } - buttons.push(T(omemo_utils_templateObject(), title, !model.get('omemo_supported'), toggleOMEMO, model.get('omemo_active') ? "fa-lock" : "fa-unlock", api.settings.get('assets_path'), model.get('omemo_active') ? "var(--info-color)" : "var(--error-color)")); + let color; + + if (model.get('omemo_supported')) { + color = model.get('omemo_active') ? `var(--info-color)` : `var(--error-color)`; + } else { + color = `var(--muc-toolbar-btn-disabled-color)`; + } + + buttons.push(T` + + `); return buttons; } +async function getBundlesAndBuildSessions(chatbox) { + const no_devices_err = __('Sorry, no devices found to which we can send an OMEMO encrypted message.'); + + let devices; + + if (chatbox.get('type') === shared_converse.CHATROOMS_TYPE) { + const collections = await Promise.all(chatbox.occupants.map(o => getDevicesForContact(o.get('jid')))); + devices = collections.reduce((a, b) => lodash_es_concat(a, b.models), []); + } else if (chatbox.get('type') === shared_converse.PRIVATE_CHAT_TYPE) { + const their_devices = await getDevicesForContact(chatbox.get('jid')); + + if (their_devices.length === 0) { + const err = new Error(no_devices_err); + err.user_facing = true; + throw err; + } + + const own_devices = shared_converse.devicelists.get(shared_converse.bare_jid).devices; + + devices = [...own_devices.models, ...their_devices.models]; + } // Filter out our own device + + + const id = shared_converse.omemo_store.get('device_id'); + + devices = devices.filter(d => d.get('id') !== id); // Fetch bundles if necessary + + await Promise.all(devices.map(d => d.getBundle())); + const sessions = devices.filter(d => d).map(d => getSession(d)); + await Promise.all(sessions); + + if (sessions.includes(null)) { + // We couldn't build a session for certain devices. + devices = devices.filter(d => sessions[devices.indexOf(d)]); + + if (devices.length === 0) { + const err = new Error(no_devices_err); + err.user_facing = true; + throw err; + } + } + + return devices; +} +function createOMEMOMessageStanza(chatbox, message, devices) { + const body = __('This is an OMEMO encrypted message which your client doesn’t seem to support. ' + 'Find more information on https://conversations.im/omemo'); + + if (!message.get('message')) { + throw new Error('No message body to encrypt!'); + } + + const stanza = utils_$msg({ + 'from': shared_converse.connection.jid, + 'to': chatbox.get('jid'), + 'type': chatbox.get('message_type'), + 'id': message.get('msgid') + }).c('body').t(body).up(); + + if (message.get('type') === 'chat') { + stanza.c('request', { + 'xmlns': omemo_utils_Strophe.NS.RECEIPTS + }).up(); + } // An encrypted header is added to the message for + // each device that is supposed to receive it. + // These headers simply contain the key that the + // payload message is encrypted with, + // and they are separately encrypted using the + // session corresponding to the counterpart device. + + + stanza.c('encrypted', { + 'xmlns': omemo_utils_Strophe.NS.OMEMO + }).c('header', { + 'sid': shared_converse.omemo_store.get('device_id') + }); + return omemo.encryptMessage(message.get('message')).then(obj => { + // The 16 bytes key and the GCM authentication tag (The tag + // SHOULD have at least 128 bit) are concatenated and for each + // intended recipient device, i.e. both own devices as well as + // devices associated with the contact, the result of this + // concatenation is encrypted using the corresponding + // long-standing SignalProtocol session. + const promises = devices.filter(device => device.get('trusted') != UNTRUSTED && device.get('active')).map(device => chatbox.encryptKey(obj.key_and_tag, device)); + return Promise.all(promises).then(dicts => addKeysToMessageStanza(stanza, dicts, obj.iv)).then(stanza => { + stanza.c('payload').t(obj.payload).up().up(); + stanza.c('store', { + 'xmlns': omemo_utils_Strophe.NS.HINTS + }).up(); + stanza.c('encryption', { + 'xmlns': omemo_utils_Strophe.NS.EME, + namespace: omemo_utils_Strophe.NS.OMEMO + }); + return stanza; + }); + }); +} +;// CONCATENATED MODULE: ./src/plugins/omemo/overrides/chatbox.js + + +const chatbox_ChatBox = { + async sendMessage(attrs) { + var _attrs; + + if (this.get('omemo_active') && (_attrs = attrs) !== null && _attrs !== void 0 && _attrs.body) { + var _attrs2; + + const plaintext = (_attrs2 = attrs) === null || _attrs2 === void 0 ? void 0 : _attrs2.body; + attrs = this.getOutgoingMessageAttributes(attrs); + attrs['is_encrypted'] = true; + attrs['plaintext'] = plaintext; + let message, stanza; + + try { + const devices = await getBundlesAndBuildSessions(this); + message = await this.createMessage(attrs); + stanza = await createOMEMOMessageStanza(this, message, devices); + } catch (e) { + this.handleMessageSendError(e); + return null; + } + + shared_converse.api.send(stanza); + + return message; + } else { + return this.__super__.sendMessage.apply(this, arguments); + } + } + +}; +/* harmony default export */ const chatbox = (chatbox_ChatBox); ;// CONCATENATED MODULE: ./src/plugins/omemo/mixins/converse.js - - - - -const { - Strophe: converse_Strophe, - $msg: converse_$msg -} = core_converse.env; const ConverseMixins = { generateFingerprints: async function (jid) { const devices = await getDevicesForContact(jid); @@ -54243,98 +58373,6 @@ const ConverseMixins = { /* Checks whether the contact advertises any OMEMO-compatible devices. */ const devices = await getDevicesForContact(jid); return devices.length > 0; - }, - getBundlesAndBuildSessions: async function (chatbox) { - const no_devices_err = __('Sorry, no devices found to which we can send an OMEMO encrypted message.'); - - let devices; - - if (chatbox.get('type') === shared_converse.CHATROOMS_TYPE) { - const collections = await Promise.all(chatbox.occupants.map(o => getDevicesForContact(o.get('jid')))); - devices = collections.reduce((a, b) => lodash_es_concat(a, b.models), []); - } else if (chatbox.get('type') === shared_converse.PRIVATE_CHAT_TYPE) { - const their_devices = await getDevicesForContact(chatbox.get('jid')); - - if (their_devices.length === 0) { - const err = new Error(no_devices_err); - err.user_facing = true; - throw err; - } - - const own_devices = shared_converse.devicelists.get(shared_converse.bare_jid).devices; - - devices = [...own_devices.models, ...their_devices.models]; - } // Filter out our own device - - - const id = shared_converse.omemo_store.get('device_id'); - - devices = devices.filter(d => d.get('id') !== id); // Fetch bundles if necessary - - await Promise.all(devices.map(d => d.getBundle())); - const sessions = devices.filter(d => d).map(d => getSession(d)); - await Promise.all(sessions); - - if (sessions.includes(null)) { - // We couldn't build a session for certain devices. - devices = devices.filter(d => sessions[devices.indexOf(d)]); - - if (devices.length === 0) { - const err = new Error(no_devices_err); - err.user_facing = true; - throw err; - } - } - - return devices; - }, - createOMEMOMessageStanza: function (chatbox, message, devices) { - const body = __('This is an OMEMO encrypted message which your client doesn’t seem to support. ' + 'Find more information on https://conversations.im/omemo'); - - if (!message.get('message')) { - throw new Error('No message body to encrypt!'); - } - - const stanza = converse_$msg({ - 'from': shared_converse.connection.jid, - 'to': chatbox.get('jid'), - 'type': chatbox.get('message_type'), - 'id': message.get('msgid') - }).c('body').t(body).up(); - - if (message.get('type') === 'chat') { - stanza.c('request', { - 'xmlns': converse_Strophe.NS.RECEIPTS - }).up(); - } // An encrypted header is added to the message for - // each device that is supposed to receive it. - // These headers simply contain the key that the - // payload message is encrypted with, - // and they are separately encrypted using the - // session corresponding to the counterpart device. - - - stanza.c('encrypted', { - 'xmlns': converse_Strophe.NS.OMEMO - }).c('header', { - 'sid': shared_converse.omemo_store.get('device_id') - }); - return omemo.encryptMessage(message.get('message')).then(obj => { - // The 16 bytes key and the GCM authentication tag (The tag - // SHOULD have at least 128 bit) are concatenated and for each - // intended recipient device, i.e. both own devices as well as - // devices associated with the contact, the result of this - // concatenation is encrypted using the corresponding - // long-standing SignalProtocol session. - const promises = devices.filter(device => device.get('trusted') != UNTRUSTED && device.get('active')).map(device => chatbox.encryptKey(obj.key_and_tag, device)); - return Promise.all(promises).then(dicts => addKeysToMessageStanza(stanza, dicts, obj.iv)).then(stanza => { - stanza.c('payload').t(obj.payload).up().up(); - stanza.c('store', { - 'xmlns': converse_Strophe.NS.HINTS - }); - return stanza; - }); - }); } }; /* harmony default export */ const mixins_converse = (ConverseMixins); @@ -54386,14 +58424,14 @@ const Device = Model.extend({ }).c('pubsub', { 'xmlns': device_Strophe.NS.PUBSUB }).c('items', { - 'node': "".concat(device_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('id')) + 'node': `${device_Strophe.NS.OMEMO_BUNDLES}:${this.get('id')}` }); let iq; try { iq = await api.sendIQ(stanza); } catch (iq) { - headless_log.error("Could not fetch bundle for device ".concat(this.get('id'), " from ").concat(this.get('jid'))); + headless_log.error(`Could not fetch bundle for device ${this.get('id')} from ${this.get('jid')}`); headless_log.error(iq); return null; } @@ -54402,8 +58440,8 @@ const Device = Model.extend({ throw new IQError('Could not fetch bundle', iq); } - const publish_el = device_sizzle("items[node=\"".concat(device_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('id'), "\"]"), iq).pop(); - const bundle_el = device_sizzle("bundle[xmlns=\"".concat(device_Strophe.NS.OMEMO, "\"]"), publish_el).pop(); + const publish_el = device_sizzle(`items[node="${device_Strophe.NS.OMEMO_BUNDLES}:${this.get('id')}"]`, iq).pop(); + const bundle_el = device_sizzle(`bundle[xmlns="${device_Strophe.NS.OMEMO}"]`, publish_el).pop(); const bundle = parseBundle(bundle_el); this.save('bundle', bundle); return bundle; @@ -54451,7 +58489,7 @@ const DeviceList = Model.extend({ initDevices() { this.devices = new shared_converse.Devices(); - const id = "converse.devicelist-".concat(shared_converse.bare_jid, "-").concat(this.get('jid')); + const id = `converse.devicelist-${shared_converse.bare_jid}-${this.get('jid')}`; initStorage(this.devices, id); this.fetchDevices(); }, @@ -54464,9 +58502,9 @@ const DeviceList = Model.extend({ ids = await this.fetchDevicesFromServer(); } catch (e) { if (e === null) { - headless_log.error("Timeout error while fetching devices for ".concat(this.get('jid'))); + headless_log.error(`Timeout error while fetching devices for ${this.get('jid')}`); } else { - headless_log.error("Could not fetch devices for ".concat(this.get('jid'))); + headless_log.error(`Could not fetch devices for ${this.get('jid')}`); headless_log.error(e); } @@ -54547,7 +58585,7 @@ const DeviceList = Model.extend({ return []; } - const selector = "list[xmlns=\"".concat(devicelist_Strophe.NS.OMEMO, "\"] device"); + const selector = `list[xmlns="${devicelist_Strophe.NS.OMEMO}"] device`; const device_ids = devicelist_sizzle(selector, iq).map(d => d.getAttribute('id')); await Promise.all(device_ids.map(id => this.devices.create({ id, @@ -54911,7 +58949,7 @@ const OMEMOStore = Model.extend({ publishBundle() { const signed_prekey = this.get('signed_prekey'); - const node = "".concat(store_Strophe.NS.OMEMO_BUNDLES, ":").concat(this.get('device_id')); + const node = `${store_Strophe.NS.OMEMO_BUNDLES}:${this.get('device_id')}`; const item = store_$build('item').c('bundle', { 'xmlns': store_Strophe.NS.OMEMO }).c('signedPreKeyPublic', { @@ -55035,7 +59073,7 @@ const OMEMOStore = Model.extend({ const { Strophe: profile_modal_Strophe, sizzle: profile_modal_sizzle, - u: profile_modal_u + u: overrides_profile_modal_u } = core_converse.env; const profile_modal_ProfileModal = { events: { @@ -55056,21 +59094,20 @@ const profile_modal_ProfileModal = { }, beforeRender() { - const device_id = shared_converse.omemo_store.get('device_id'); + var _converse$omemo_store, _this$__super__$befor; + + const device_id = (_converse$omemo_store = shared_converse.omemo_store) === null || _converse$omemo_store === void 0 ? void 0 : _converse$omemo_store.get('device_id'); if (device_id) { this.current_device = this.devicelist.devices.get(device_id); + this.other_devices = this.devicelist.devices.filter(d => d.get('id') !== device_id); } - this.other_devices = this.devicelist.devices.filter(d => d.get('id') !== device_id); - - if (this.__super__.beforeRender) { - return this.__super__.beforeRender.apply(this, arguments); - } + return (_this$__super__$befor = this.__super__.beforeRender) === null || _this$__super__$befor === void 0 ? void 0 : _this$__super__$befor.apply(this, arguments); }, selectAll(ev) { - let sibling = profile_modal_u.ancestor(ev.target, 'li'); + let sibling = overrides_profile_modal_u.ancestor(ev.target, 'li'); while (sibling) { sibling.querySelector('input[type="checkbox"]').checked = ev.target.checked; @@ -55099,7 +59136,7 @@ const profile_modal_ProfileModal = { } }; -/* harmony default export */ const profile_modal = (profile_modal_ProfileModal); +/* harmony default export */ const overrides_profile_modal = (profile_modal_ProfileModal); ;// CONCATENATED MODULE: ./src/plugins/omemo/overrides/user-details-modal.js const user_details_modal_UserDetailsModal = { @@ -55214,9 +59251,9 @@ const OMEMOEnabledChatBox = { this.save('omemo_supported', false); const err_msgs = []; - if (chatbox_sizzle("presence-subscription-required[xmlns=\"".concat(chatbox_Strophe.NS.PUBSUB_ERROR, "\"]"), e.iq).length) { + if (chatbox_sizzle(`presence-subscription-required[xmlns="${chatbox_Strophe.NS.PUBSUB_ERROR}"]`, e.iq).length) { err_msgs.push(__("Sorry, we're unable to send an encrypted message because %1$s " + 'requires you to be subscribed to their presence in order to see their OMEMO information', e.iq.getAttribute('from'))); - } else if (chatbox_sizzle("remote-server-not-found[xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"]", e.iq).length) { + } else if (chatbox_sizzle(`remote-server-not-found[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]`, e.iq).length) { err_msgs.push(__("Sorry, we're unable to send an encrypted message because the remote server for %1$s could not be found", e.iq.getAttribute('from'))); } else { err_msgs.push(__('Unable to send an encrypted message due to an unexpected error.')); @@ -55271,7 +59308,7 @@ core_converse.plugins.add('converse-omemo', { dependencies: ['converse-chatview', 'converse-pubsub', 'converse-profile'], overrides: { - ProfileModal: profile_modal, + ProfileModal: overrides_profile_modal, UserDetailsModal: user_details_modal, ChatBox: chatbox }, @@ -55293,7 +59330,9 @@ core_converse.plugins.add('converse-omemo', { shared_converse.DeviceLists = devicelists; /******************** Event Handlers ********************/ - api.waitUntil('chatBoxesInitialized').then(onChatBoxesInitialized); + api.waitUntil('chatBoxesInitialized').then(utils_onChatBoxesInitialized); + api.listen.on('afterFileUploaded', (msg, attrs) => msg.file.xep454_ivkey ? setEncryptedFileURL(msg, attrs) : attrs); + api.listen.on('beforeFileUpload', (chat, file) => chat.get('omemo_active') ? encryptFile(file) : file); api.listen.on('parseMessage', parseEncryptedMessage); api.listen.on('parseMUCMessage', parseEncryptedMessage); api.listen.on('chatBoxViewInitialized', onChatInitialized); @@ -55301,7 +59340,8 @@ core_converse.plugins.add('converse-omemo', { api.listen.on('connected', registerPEPPushHandler); api.listen.on('getToolbarButtons', getOMEMOToolbarButton); api.listen.on('statusInitialized', initOMEMO); - api.listen.on('addClientFeatures', () => api.disco.own.features.add("".concat(omemo_Strophe.NS.OMEMO_DEVICELIST, "+notify"))); + api.listen.on('addClientFeatures', () => api.disco.own.features.add(`${omemo_Strophe.NS.OMEMO_DEVICELIST}+notify`)); + api.listen.on('afterMessageBodyTransformed', handleEncryptedFiles); api.listen.on('userDetailsModalInitialized', contact => { const jid = contact.get('jid'); @@ -55321,20 +59361,140 @@ core_converse.plugins.add('converse-omemo', { } }); -;// CONCATENATED MODULE: ./src/plugins/push.js +;// CONCATENATED MODULE: ./src/plugins/push/utils.js + + +const { + Strophe: push_utils_Strophe, + $iq: push_utils_$iq +} = core_converse.env; + +async function disablePushAppServer(domain, push_app_server) { + if (!push_app_server.jid) { + return; + } + + if (!(await api.disco.supports(push_utils_Strophe.NS.PUSH, domain || shared_converse.bare_jid))) { + headless_log.warn(`Not disabling push app server "${push_app_server.jid}", no disco support from your server.`); + return; + } + + const stanza = push_utils_$iq({ + 'type': 'set' + }); + + if (domain !== shared_converse.bare_jid) { + stanza.attrs({ + 'to': domain + }); + } + + stanza.c('disable', { + 'xmlns': push_utils_Strophe.NS.PUSH, + 'jid': push_app_server.jid + }); + + if (push_app_server.node) { + stanza.attrs({ + 'node': push_app_server.node + }); + } + + api.sendIQ(stanza).catch(e => { + headless_log.error(`Could not disable push app server for ${push_app_server.jid}`); + headless_log.error(e); + }); +} + +async function enablePushAppServer(domain, push_app_server) { + if (!push_app_server.jid || !push_app_server.node) { + return; + } + + const identity = await api.disco.getIdentity('pubsub', 'push', push_app_server.jid); + + if (!identity) { + return headless_log.warn(`Not enabling push the service "${push_app_server.jid}", it doesn't have the right disco identtiy.`); + } + + const result = await Promise.all([api.disco.supports(push_utils_Strophe.NS.PUSH, push_app_server.jid), api.disco.supports(push_utils_Strophe.NS.PUSH, domain)]); + + if (!result[0] && !result[1]) { + headless_log.warn(`Not enabling push app server "${push_app_server.jid}", no disco support from your server.`); + return; + } + + const stanza = push_utils_$iq({ + 'type': 'set' + }); + + if (domain !== shared_converse.bare_jid) { + stanza.attrs({ + 'to': domain + }); + } + + stanza.c('enable', { + 'xmlns': push_utils_Strophe.NS.PUSH, + 'jid': push_app_server.jid, + 'node': push_app_server.node + }); + + if (push_app_server.secret) { + stanza.c('x', { + 'xmlns': push_utils_Strophe.NS.XFORM, + 'type': 'submit' + }).c('field', { + 'var': 'FORM_TYPE' + }).c('value').t(`${push_utils_Strophe.NS.PUBSUB}#publish-options`).up().up().c('field', { + 'var': 'secret' + }).c('value').t(push_app_server.secret); + } + + return api.sendIQ(stanza); +} + +async function enablePush(domain) { + domain = domain || shared_converse.bare_jid; + const push_enabled = shared_converse.session.get('push_enabled') || []; + + if (push_enabled.includes(domain)) { + return; + } + + const enabled_services = api.settings.get('push_app_servers').filter(s => !s.disable); + const disabled_services = api.settings.get('push_app_servers').filter(s => s.disable); + const enabled = enabled_services.map(s => enablePushAppServer(domain, s)); + const disabled = disabled_services.map(s => disablePushAppServer(domain, s)); + + try { + await Promise.all(enabled.concat(disabled)); + } catch (e) { + headless_log.error('Could not enable or disable push App Server'); + if (e) headless_log.error(e); + } finally { + push_enabled.push(domain); + } + + shared_converse.session.save('push_enabled', push_enabled); +} +function onChatBoxAdded(model) { + if (model.get('type') == shared_converse.CHATROOMS_TYPE) { + enablePush(push_utils_Strophe.getDomainFromJid(model.get('jid'))); + } +} +;// CONCATENATED MODULE: ./src/plugins/push/index.js /** - * @module converse-push * @description * Converse.js plugin which add support for registering * an "App Server" as defined in XEP-0357 - * @copyright 2020, the Converse.js contributors + * @copyright 2021, the Converse.js contributors * @license Mozilla Public License (MPLv2) */ const { - Strophe: push_Strophe, - $iq: push_$iq + Strophe: push_Strophe } = core_converse.env; push_Strophe.addNamespace('PUSH', 'urn:xmpp:push:0'); core_converse.plugins.add('converse-push', { @@ -55346,125 +59506,8 @@ core_converse.plugins.add('converse-push', { 'push_app_servers': [], 'enable_muc_push': false }); - - async function disablePushAppServer(domain, push_app_server) { - if (!push_app_server.jid) { - return; - } - - if (!(await api.disco.supports(push_Strophe.NS.PUSH, domain || shared_converse.bare_jid))) { - headless_log.warn("Not disabling push app server \"".concat(push_app_server.jid, "\", no disco support from your server.")); - return; - } - - const stanza = push_$iq({ - 'type': 'set' - }); - - if (domain !== shared_converse.bare_jid) { - stanza.attrs({ - 'to': domain - }); - } - - stanza.c('disable', { - 'xmlns': push_Strophe.NS.PUSH, - 'jid': push_app_server.jid - }); - - if (push_app_server.node) { - stanza.attrs({ - 'node': push_app_server.node - }); - } - - api.sendIQ(stanza).catch(e => { - headless_log.error("Could not disable push app server for ".concat(push_app_server.jid)); - headless_log.error(e); - }); - } - - async function enablePushAppServer(domain, push_app_server) { - if (!push_app_server.jid || !push_app_server.node) { - return; - } - - const identity = await api.disco.getIdentity('pubsub', 'push', push_app_server.jid); - - if (!identity) { - return headless_log.warn("Not enabling push the service \"".concat(push_app_server.jid, "\", it doesn't have the right disco identtiy.")); - } - - const result = await Promise.all([api.disco.supports(push_Strophe.NS.PUSH, push_app_server.jid), api.disco.supports(push_Strophe.NS.PUSH, domain)]); - - if (!result[0] && !result[1]) { - headless_log.warn("Not enabling push app server \"".concat(push_app_server.jid, "\", no disco support from your server.")); - return; - } - - const stanza = push_$iq({ - 'type': 'set' - }); - - if (domain !== shared_converse.bare_jid) { - stanza.attrs({ - 'to': domain - }); - } - - stanza.c('enable', { - 'xmlns': push_Strophe.NS.PUSH, - 'jid': push_app_server.jid, - 'node': push_app_server.node - }); - - if (push_app_server.secret) { - stanza.c('x', { - 'xmlns': push_Strophe.NS.XFORM, - 'type': 'submit' - }).c('field', { - 'var': 'FORM_TYPE' - }).c('value').t("".concat(push_Strophe.NS.PUBSUB, "#publish-options")).up().up().c('field', { - 'var': 'secret' - }).c('value').t(push_app_server.secret); - } - - return api.sendIQ(stanza); - } - - async function enablePush(domain) { - domain = domain || shared_converse.bare_jid; - const push_enabled = shared_converse.session.get('push_enabled') || []; - - if (push_enabled.includes(domain)) { - return; - } - - const enabled_services = api.settings.get('push_app_servers').filter(s => !s.disable); - const disabled_services = api.settings.get('push_app_servers').filter(s => s.disable); - const enabled = enabled_services.map(s => enablePushAppServer(domain, s)); - const disabled = disabled_services.map(s => disablePushAppServer(domain, s)); - - try { - await Promise.all(enabled.concat(disabled)); - } catch (e) { - headless_log.error('Could not enable or disable push App Server'); - if (e) headless_log.error(e); - } finally { - push_enabled.push(domain); - } - - shared_converse.session.save('push_enabled', push_enabled); - } - api.listen.on('statusInitialized', () => enablePush()); - function onChatBoxAdded(model) { - if (model.get('type') == shared_converse.CHATROOMS_TYPE) { - enablePush(push_Strophe.getDomainFromJid(model.get('jid'))); - } - } - if (api.settings.get('enable_muc_push')) { api.listen.on('chatBoxesInitialized', () => shared_converse.chatboxes.on('add', onChatBoxAdded)); } @@ -55472,38 +59515,6 @@ core_converse.plugins.add('converse-push', { }); ;// CONCATENATED MODULE: ./src/plugins/register/templates/registration_form.js -function registration_form_templateObject3() { - const data = registration_form_taggedTemplateLiteral(["\n \n "]); - - registration_form_templateObject3 = function () { - return data; - }; - - return data; -} - -function registration_form_templateObject2() { - const data = registration_form_taggedTemplateLiteral(["\n \n "]); - - registration_form_templateObject2 = function () { - return data; - }; - - return data; -} - -function registration_form_templateObject() { - const data = registration_form_taggedTemplateLiteral(["\n
    \n ", " ", "\n

    ", "

    \n

    ", "

    \n
    \n ", "\n\n
    \n ", "\n ", "\n
    \n

    ", "

    \n

    ", "

    \n
    \n
    \n
    \n "]); - - registration_form_templateObject = function () { - return data; - }; - - return data; -} - -function registration_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -55519,71 +59530,34 @@ function registration_form_taggedTemplateLiteral(strings, raw) { if (!raw) { raw const i18n_register = __('Register'); const registration_domain = api.settings.get('registration_domain'); - return T(registration_form_templateObject(), i18n_legend, o.domain, o.title, o.instructions, o.form_fields, o.fields ? T(registration_form_templateObject2(), i18n_register) : '', registration_domain ? '' : T(registration_form_templateObject3(), i18n_choose_provider), i18n_has_account, i18n_login); + return T` +
    + ${i18n_legend} ${o.domain} +

    ${o.title}

    +

    ${o.instructions}

    + + ${o.form_fields} + +
    + ${o.fields ? T` + + ` : ''} + ${registration_domain ? '' : T` + + `} +
    +

    ${i18n_has_account}

    +

    +
    +
    +
    + `; }); ;// CONCATENATED MODULE: ./src/plugins/register/templates/register_panel.js -function register_panel_templateObject6() { - const data = register_panel_taggedTemplateLiteral(["\n \n ", "\n ", "\n ", "\n "]); - - register_panel_templateObject6 = function () { - return data; - }; - - return data; -} - -function register_panel_templateObject5() { - const data = register_panel_taggedTemplateLiteral(["\n
    \n ", "\n
    \n \n
    \n ", "\n
    \n ", "\n
    \n "]); - - register_panel_templateObject5 = function () { - return data; - }; - - return data; -} - -function register_panel_templateObject4() { - const data = register_panel_taggedTemplateLiteral(["\n
    \n \n
    \n
    \n

    ", "

    \n

    ", "

    \n
    \n "]); - - register_panel_templateObject4 = function () { - return data; - }; - - return data; -} - -function register_panel_templateObject3() { - const data = register_panel_taggedTemplateLiteral(["\n \n

    \n ", "\n ", ".\n

    \n "]); - - register_panel_templateObject3 = function () { - return data; - }; - - return data; -} - -function register_panel_templateObject2() { - const data = register_panel_taggedTemplateLiteral(["\n \n "]); - - register_panel_templateObject2 = function () { - return data; - }; - - return data; -} - -function register_panel_templateObject() { - const data = register_panel_taggedTemplateLiteral(["\n
    \n ", "\n

    ", "

    \n ", "\n
    \n "]); - - register_panel_templateObject = function () { - return data; - }; - - return data; -} - -function register_panel_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -55597,9 +59571,17 @@ const tpl_form_request = () => { const i18n_cancel = __('Cancel'); - return T(register_panel_templateObject(), spinner({ + return T` +
    + ${spinner({ 'classes': 'hor_centered' - }), i18n_fetch_form, default_domain ? '' : T(register_panel_templateObject2(), i18n_cancel)); + })} +

    ${i18n_fetch_form}

    + ${default_domain ? '' : T` + + `} +
    + `; }; const tpl_domain_input = () => { @@ -55610,7 +59592,13 @@ const tpl_domain_input = () => { const i18n_providers_link = __('here'); const href_providers = api.settings.get('providers_link'); - return T(register_panel_templateObject3(), domain_placeholder, i18n_providers, href_providers, i18n_providers_link); + return T` + +

    + ${i18n_providers} + ${i18n_providers_link}. +

    + `; }; const tpl_fetch_form_buttons = () => { @@ -55620,7 +59608,15 @@ const tpl_fetch_form_buttons = () => { const i18n_login = __('Log in here'); - return T(register_panel_templateObject4(), i18n_register, i18n_existing_account, i18n_login); + return T` +
    + +
    +
    +

    ${i18n_existing_account}

    +

    +
    + `; }; const tpl_choose_provider = () => { @@ -55630,14 +59626,29 @@ const tpl_choose_provider = () => { const i18n_choose_provider = __('Please enter the XMPP provider to register with:'); - return T(register_panel_templateObject5(), i18n_create_account, i18n_choose_provider, default_domain ? default_domain : tpl_domain_input(), default_domain ? '' : tpl_fetch_form_buttons()); + return T` +
    + ${i18n_create_account} +
    + + + ${default_domain ? default_domain : tpl_domain_input()} +
    + ${default_domain ? '' : tpl_fetch_form_buttons()} +
    + `; }; const CHOOSE_PROVIDER = 0; const FETCHING_FORM = 1; const REGISTRATION_FORM = 2; /* harmony default export */ const register_panel = (o => { - return T(register_panel_templateObject6(), o.model.get('registration_status') === CHOOSE_PROVIDER ? tpl_choose_provider() : '', o.model.get('registration_status') === FETCHING_FORM ? tpl_form_request(o) : '', o.model.get('registration_status') === REGISTRATION_FORM ? registration_form(o) : ''); + return T` + + ${o.model.get('registration_status') === CHOOSE_PROVIDER ? tpl_choose_provider() : ''} + ${o.model.get('registration_status') === FETCHING_FORM ? tpl_form_request(o) : ''} + ${o.model.get('registration_status') === REGISTRATION_FORM ? registration_form(o) : ''} + `; }); ;// CONCATENATED MODULE: ./src/plugins/register/panel.js function register_panel_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -55935,7 +59946,7 @@ class RegisterPanel extends ElementView { headless_log.debug('converse-register: onConnectStatusChanged'); if ([panel_Strophe.Status.DISCONNECTED, panel_Strophe.Status.CONNFAIL, panel_Strophe.Status.REGIFAIL, panel_Strophe.Status.NOTACCEPTABLE, panel_Strophe.Status.CONFLICT].includes(status_code)) { - headless_log.error("Problem during registration: Strophe.Status is ".concat(shared_converse.CONNECTION_STATUS[status_code])); + headless_log.error(`Problem during registration: Strophe.Status is ${shared_converse.CONNECTION_STATUS[status_code]}`); this.abortRegistration(); } else if (status_code === panel_Strophe.Status.REGISTERED) { headless_log.debug("Registered successfully."); @@ -55967,7 +59978,7 @@ class RegisterPanel extends ElementView { const input_fields = Object.keys(this.fields).map(key => { if (key === "username") { return form_username({ - 'domain': " @".concat(this.domain), + 'domain': ` @${this.domain}`, 'name': key, 'type': "text", 'label': key, @@ -56139,7 +60150,7 @@ class RegisterPanel extends ElementView { setFields(stanza) { const query = stanza.querySelector('query'); - const xform = panel_sizzle("x[xmlns=\"".concat(panel_Strophe.NS.XFORM, "\"]"), query); + const xform = panel_sizzle(`x[xmlns="${panel_Strophe.NS.XFORM}"]`, query); if (xform.length > 0) { this._setFieldsFromXForm(xform.pop()); @@ -56175,9 +60186,9 @@ class RegisterPanel extends ElementView { const _var = field.getAttribute('var'); if (_var) { - var _field$querySelector$, _field$querySelector; + var _field$querySelector; - this.fields[_var.toLowerCase()] = (_field$querySelector$ = (_field$querySelector = field.querySelector('value')) === null || _field$querySelector === void 0 ? void 0 : _field$querySelector.textContent) !== null && _field$querySelector$ !== void 0 ? _field$querySelector$ : ''; + this.fields[_var.toLowerCase()] = ((_field$querySelector = field.querySelector('value')) === null || _field$querySelector === void 0 ? void 0 : _field$querySelector.textContent) ?? ''; } else { // TODO: other option seems to be type="fixed" headless_log.warn("Found field we couldn't parse"); @@ -56292,48 +60303,30 @@ core_converse.plugins.add('converse-register', { } }); +;// CONCATENATED MODULE: ./src/plugins/roomslist/model.js + + +const { + Strophe: roomslist_model_Strophe +} = core_converse.env; +const RoomsListModel = Model.extend({ + defaults: function () { + return { + 'muc_domain': api.settings.get('muc_domain'), + 'nick': shared_converse.getDefaultMUCNickname(), + 'toggle-state': shared_converse.OPENED + }; + }, + + setDomain(jid) { + if (!api.settings.get('locked_muc_domain')) { + this.save('muc_domain', roomslist_model_Strophe.getDomainFromJid(jid)); + } + } + +}); +/* harmony default export */ const roomslist_model = (RoomsListModel); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/add-muc.js -function add_muc_templateObject4() { - const data = add_muc_taggedTemplateLiteral(["
    ", "
    "]); - - add_muc_templateObject4 = function () { - return data; - }; - - return data; -} - -function add_muc_templateObject3() { - const data = add_muc_taggedTemplateLiteral([""]); - - add_muc_templateObject3 = function () { - return data; - }; - - return data; -} - -function add_muc_templateObject2() { - const data = add_muc_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n \n
    \n
    \n \n ", "\n \n
    \n ", "\n ", "\n \n
    \n
    \n
    \n
    \n "]); - - add_muc_templateObject2 = function () { - return data; - }; - - return data; -} - -function add_muc_templateObject() { - const data = add_muc_taggedTemplateLiteral(["\n
    \n \n \n
    \n "]); - - add_muc_templateObject = function () { - return data; - }; - - return data; -} - -function add_muc_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } @@ -56346,7 +60339,12 @@ const nickname_input = o => { const i18n_required_field = __('This field is required'); - return T(add_muc_templateObject(), i18n_nickname, i18n_required_field, o.nick || ''); + return T` +
    + + +
    + `; }; /* harmony default export */ const add_muc = (o => { @@ -56354,13 +60352,31 @@ const nickname_input = o => { const i18n_enter = __('Enter a new Groupchat'); - return T(add_muc_templateObject2(), i18n_enter, modal_header_close_button, o.label_room_address, o.muc_roomid_policy_error_msg ? T(add_muc_templateObject3(), o.muc_roomid_policy_error_msg) : '', o.chatroom_placeholder, o.muc_roomid_policy_hint ? T(add_muc_templateObject4(), unsafe_html_o(xss.filterXSS(o.muc_roomid_policy_hint, { - 'whiteList': { - b: [], - br: [], - em: [] - } - }))) : '', !o._converse.locked_muc_nickname ? nickname_input(o) : '', i18n_join || '', o.muc_roomid_policy_error_msg); + return T` + + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/modals/add-muc.js @@ -56391,7 +60407,7 @@ const { if (!api.settings.get('locked_muc_domain')) { const muc_domain = this.model.get('muc_domain') || api.settings.get('muc_domain'); - placeholder = muc_domain ? "name@".concat(muc_domain) : __('name@conference.example.org'); + placeholder = muc_domain ? `name@${muc_domain}` : __('name@conference.example.org'); } return add_muc(Object.assign(this.model.toJSON(), { @@ -56442,7 +60458,7 @@ const { let jid; if (api.settings.get('locked_muc_domain') || api.settings.get('muc_domain') && !add_muc_u.isValidJID(data.jid)) { - jid = "".concat(add_muc_Strophe.escapeNode(data.jid), "@").concat(api.settings.get('muc_domain')); + jid = `${add_muc_Strophe.escapeNode(data.jid)}@${api.settings.get('muc_domain')}`; } else { jid = data.jid; this.model.setDomain(jid); @@ -56459,8 +60475,8 @@ const { if (api.settings.get('muc_roomid_policy') && api.settings.get('muc_domain')) { let jid = this.el.querySelector('.roomjid-input').value; - if (core_converse.locked_muc_domain || !add_muc_u.isValidJID(jid)) { - jid = "".concat(add_muc_Strophe.escapeNode(jid), "@").concat(api.settings.get('muc_domain')); + if (api.settings.get('locked_muc_domain') || !add_muc_u.isValidJID(jid)) { + jid = `${add_muc_Strophe.escapeNode(jid)}@${api.settings.get('muc_domain')}`; } const roomid = add_muc_Strophe.getNodeFromJid(jid); @@ -56503,58 +60519,6 @@ function head(array) { /* harmony default export */ const lodash_es_head = (head); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-list.js -function muc_list_templateObject5() { - const data = muc_list_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_list_templateObject5 = function () { - return data; - }; - - return data; -} - -function muc_list_templateObject4() { - const data = muc_list_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_list_templateObject4 = function () { - return data; - }; - - return data; -} - -function muc_list_templateObject3() { - const data = muc_list_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n \n ", "\n
      \n ", "\n ", "\n ", "\n
    \n
    \n
    ", "
    \n
    \n
    \n "]); - - muc_list_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_list_templateObject2() { - const data = muc_list_taggedTemplateLiteral(["\n
  • \n
    \n ", "\n \n
    \n
  • \n "]); - - muc_list_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_list_templateObject() { - const data = muc_list_taggedTemplateLiteral(["\n
    \n
    \n \n \n
    \n \n
    \n "]); - - muc_list_templateObject = function () { - return data; - }; - - return data; -} - -function muc_list_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -56566,7 +60530,22 @@ const muc_list_form = o => { const i18n_server_address = __('Server address'); - return T(muc_list_templateObject(), o.submitForm, i18n_server_address, o.setDomainFromEvent, o.muc_domain || '', o.server_placeholder, i18n_query); + return T` +
    +
    + + +
    + +
    + `; }; const tpl_item = (o, item) => { @@ -56574,143 +60553,56 @@ const tpl_item = (o, item) => { const i18n_open_title = __('Click to open this groupchat'); - return T(muc_list_templateObject2(), o.openRoom, item.jid, item.name, i18n_open_title, item.name || item.jid, o.toggleRoomInfo, item.jid, i18n_info_title); + return T` +
  • + +
  • + `; }; /* harmony default export */ const muc_list = (o => { const i18n_list_chatrooms = __('Query for Groupchats'); - return T(muc_list_templateObject3(), i18n_list_chatrooms, modal_header_close_button, o.show_form ? muc_list_form(o) : '', o.loading_items ? T(muc_list_templateObject4(), spinner()) : '', o.feedback_text ? T(muc_list_templateObject5(), o.feedback_text) : '', repeat_c(o.items, item => item.jid, item => tpl_item(o, item)), modal_close_button); + return T` + + `; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/templates/muc-description.js -function muc_description_templateObject12() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject12 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject11() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject11 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject10() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject10 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject9() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject9 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject8() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject8 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject7() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject7 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject6() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject6 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject5() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject5 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject4() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject4 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject3() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject3 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject2() { - const data = muc_description_taggedTemplateLiteral(["
  • ", "
  • "]); - - muc_description_templateObject2 = function () { - return data; - }; - - return data; -} - -function muc_description_templateObject() { - const data = muc_description_taggedTemplateLiteral(["\n
    \n

    ", " ", "

    \n

    ", " ", "

    \n

    ", " ", "

    \n

    ", "\n

      \n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n ", "\n
    \n

    \n
    \n"]); - - muc_description_templateObject = function () { - return data; - }; - - return data; -} - -function muc_description_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const muc_description = (o => { const i18n_desc = __('Description:'); - const i18n_jid = __('Groupchat Address (JID):'); + const i18n_jid = __('Groupchat XMPP Address:'); const i18n_occ = __('Participants:'); @@ -56738,7 +60630,28 @@ function muc_description_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = const i18n_unmoderated = __('Unmoderated'); - return T(muc_description_templateObject(), i18n_jid, o.jid, i18n_desc, o.desc, i18n_occ, o.occ, i18n_features, o.passwordprotected ? T(muc_description_templateObject2(), i18n_requires_auth) : '', o.hidden ? T(muc_description_templateObject3(), i18n_hidden) : '', o.membersonly ? T(muc_description_templateObject4(), i18n_requires_invite) : '', o.moderated ? T(muc_description_templateObject5(), i18n_moderated) : '', o.nonanonymous ? T(muc_description_templateObject6(), i18n_non_anon) : '', o.open ? T(muc_description_templateObject7(), i18n_open_room) : '', o.persistent ? T(muc_description_templateObject8(), i18n_permanent_room) : '', o.publicroom ? T(muc_description_templateObject9(), i18n_public) : '', o.semianonymous ? T(muc_description_templateObject10(), i18n_semi_anon) : '', o.temporary ? T(muc_description_templateObject11(), i18n_temp_room) : '', o.unmoderated ? T(muc_description_templateObject12(), i18n_unmoderated) : ''); + return T` +
    +

    ${i18n_jid} ${o.jid}

    +

    ${i18n_desc} ${o.desc}

    +

    ${i18n_occ} ${o.occ}

    +

    ${i18n_features} +

      + ${o.passwordprotected ? T`
    • ${i18n_requires_auth}
    • ` : ''} + ${o.hidden ? T`
    • ${i18n_hidden}
    • ` : ''} + ${o.membersonly ? T`
    • ${i18n_requires_invite}
    • ` : ''} + ${o.moderated ? T`
    • ${i18n_moderated}
    • ` : ''} + ${o.nonanonymous ? T`
    • ${i18n_non_anon}
    • ` : ''} + ${o.open ? T`
    • ${i18n_open_room}
    • ` : ''} + ${o.persistent ? T`
    • ${i18n_permanent_room}
    • ` : ''} + ${o.publicroom ? T`
    • ${i18n_public}
    • ` : ''} + ${o.semianonymous ? T`
    • ${i18n_semi_anon}
    • ` : ''} + ${o.temporary ? T`
    • ${i18n_temp_room}
    • ` : ''} + ${o.unmoderated ? T`
    • ${i18n_unmoderated}
    • ` : ''} +
    +

    +
    +`; }); ;// CONCATENATED MODULE: ./src/plugins/muc-views/modals/muc-list.js @@ -56923,68 +60836,6 @@ function toggleRoomInfo(ev) { })); ;// CONCATENATED MODULE: ./src/plugins/roomslist/templates/roomslist.js -function roomslist_templateObject6() { - const data = roomslist_taggedTemplateLiteral(["\n
    \n ", "\n \n \n
    \n\n
    \n \n ", "\n
    \n ", "\n
    \n
    "]); - - roomslist_templateObject6 = function () { - return data; - }; - - return data; -} - -function roomslist_templateObject5() { - const data = roomslist_taggedTemplateLiteral(["\n
    \n\n ", "\n\n ", "\n\n ", "\n\n \n\n \n
    "]); - - roomslist_templateObject5 = function () { - return data; - }; - - return data; -} - -function roomslist_templateObject4() { - const data = roomslist_taggedTemplateLiteral([""]); - - roomslist_templateObject4 = function () { - return data; - }; - - return data; -} - -function roomslist_templateObject3() { - const data = roomslist_taggedTemplateLiteral(["", ""]); - - roomslist_templateObject3 = function () { - return data; - }; - - return data; -} - -function roomslist_templateObject2() { - const data = roomslist_taggedTemplateLiteral(["\n "]); - - roomslist_templateObject2 = function () { - return data; - }; - - return data; -} - -function roomslist_templateObject() { - const data = roomslist_taggedTemplateLiteral(["\n "]); - - roomslist_templateObject = function () { - return data; - }; - - return data; -} - -function roomslist_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -56997,21 +60848,54 @@ const bookmark = o => { const i18n_remove_bookmark = __('Unbookmark this groupchat'); if (o.bookmarked) { - return T(roomslist_templateObject(), o.room.get('jid'), o.room.getDisplayName(), o.removeBookmark, o.bookmarked ? i18n_remove_bookmark : i18n_add_bookmark); + return T` + `; } else { - return T(roomslist_templateObject2(), o.room.get('jid'), o.room.getDisplayName(), o.addBookmark, o.bookmarked ? i18n_remove_bookmark : i18n_add_bookmark); + return T` + `; } }; -const unread_indicator = o => T(roomslist_templateObject3(), o.room.get('num_unread')); +const unread_indicator = o => T`${o.room.get('num_unread')}`; -const activity_indicator = () => T(roomslist_templateObject4()); +const activity_indicator = () => T``; const room_item = o => { const i18n_leave_room = __('Leave this groupchat'); const has_unread_msgs = o.room.get('num_unread_general') || o.room.get('has_activity'); - return T(roomslist_templateObject5(), o.currently_open(o.room) ? 'open' : '', has_unread_msgs ? 'unread-msgs' : '', o.room.get('jid'), o.room.get('num_unread') ? unread_indicator(o) : o.room.get('has_activity') ? activity_indicator(o) : '', o.room.get('jid'), __('Click to open this groupchat'), o.openRoom, o.room.getDisplayName(), o.allow_bookmarks ? bookmark(o) : '', o.room.get('jid'), __('Show more information on this groupchat'), o.showRoomDetailsModal, o.room.get('jid'), o.room.getDisplayName(), i18n_leave_room, o.closeRoom); + return T` +
    + + ${o.room.get('num_unread') ? unread_indicator(o) : o.room.get('has_activity') ? activity_indicator(o) : ''} + + ${o.room.getDisplayName()} + + ${api.settings.get('allow_bookmarks') ? bookmark(o) : ''} + + + + +
    `; }; /* harmony default export */ const roomslist = (o => { @@ -57023,13 +60907,34 @@ const room_item = o => { const i18n_title_new_room = __('Add a new groupchat'); - return T(roomslist_templateObject6(), i18n_heading_chatrooms, ev => api.modal.show(modals_muc_list, { + return T` + + +
    + + ${__('Open Groupchats')} +
    + ${o.rooms.map(room => room_item(Object.assign({ room - }, o)))); + }, o)))} +
    +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/roomslist/view.js @@ -57040,30 +60945,15 @@ const room_item = o => { + const { - Strophe: view_Strophe + Strophe: view_Strophe, + u: view_u } = core_converse.env; -const view_u = core_converse.env.utils; -const RoomsListModel = Model.extend({ - defaults: function () { - return { - 'muc_domain': api.settings.get('muc_domain'), - 'nick': shared_converse.getDefaultMUCNickname(), - 'toggle-state': shared_converse.OPENED - }; - }, - - setDomain(jid) { - if (!api.settings.get('locked_muc_domain')) { - this.save('muc_domain', view_Strophe.getDomainFromJid(jid)); - } - } - -}); class RoomsList extends ElementView { initialize() { - const id = "converse.roomspanel".concat(shared_converse.bare_jid); - this.model = new RoomsListModel({ + const id = `converse.roomspanel${shared_converse.bare_jid}`; + this.model = new roomslist_model({ id }); initStorage(this.model, id); @@ -57091,10 +60981,10 @@ class RoomsList extends ElementView { render() { V(roomslist({ 'addBookmark': ev => this.addBookmark(ev), - 'allow_bookmarks': shared_converse.allow_bookmarks && shared_converse.bookmarks, + 'allow_bookmarks': api.settings.get('allow_bookmarks') && shared_converse.bookmarks, 'closeRoom': ev => this.closeRoom(ev), 'collapsed': this.model.get('toggle-state') !== shared_converse.OPENED, - 'currently_open': room => shared_converse.isUniView() && !room.get('hidden'), + 'currently_open': room => isUniView() && !room.get('hidden'), 'model': this.model, 'openRoom': ev => this.openRoom(ev), 'removeBookmark': ev => this.removeBookmark(ev), @@ -57151,14 +61041,13 @@ class RoomsList extends ElementView { } toggleRoomsList(ev) { - if (ev && ev.preventDefault) { - ev.preventDefault(); - } + var _ev$preventDefault; + ev === null || ev === void 0 ? void 0 : (_ev$preventDefault = ev.preventDefault) === null || _ev$preventDefault === void 0 ? void 0 : _ev$preventDefault.call(ev); const icon_el = ev.target.matches('.fa') ? ev.target : ev.target.querySelector('.fa'); if (icon_el.classList.contains("fa-caret-down")) { - view_u.slideIn(this.el.querySelector('.open-rooms-list')).then(() => { + view_u.slideIn(this.querySelector('.open-rooms-list')).then(() => { this.model.save({ 'toggle-state': shared_converse.CLOSED }); @@ -57166,7 +61055,7 @@ class RoomsList extends ElementView { icon_el.classList.add("fa-caret-right"); }); } else { - view_u.slideOut(this.el.querySelector('.open-rooms-list')).then(() => { + view_u.slideOut(this.querySelector('.open-rooms-list')).then(() => { this.model.save({ 'toggle-state': shared_converse.OPENED }); @@ -57195,7 +61084,7 @@ core_converse.plugins.add('converse-roomslist', { initialize() { // Event handlers api.listen.on('connected', async () => { - if (shared_converse.allow_bookmarks) { + if (api.settings.get('allow_bookmarks')) { await api.waitUntil('bookmarksInitialized'); } else { await Promise.all([api.waitUntil('chatBoxesFetched')]); @@ -57205,20 +61094,229 @@ core_converse.plugins.add('converse-roomslist', { }); ;// CONCATENATED MODULE: ./src/shared/templates/icons.js -function templates_icons_templateObject() { - const data = templates_icons_taggedTemplateLiteral(["\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"]); - templates_icons_templateObject = function () { - return data; - }; - - return data; -} - -function templates_icons_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - - -/* harmony default export */ const icons = (() => T(templates_icons_templateObject())); +/* harmony default export */ const icons = (() => T` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`); ;// CONCATENATED MODULE: ./src/shared/components/font-awesome.js @@ -57231,30 +61329,55 @@ class FontAwesome extends CustomElement { } window.customElements.define('converse-fontawesome', FontAwesome); ;// CONCATENATED MODULE: ./src/plugins/rootview/templates/root.js -function root_templateObject() { - const data = root_taggedTemplateLiteral(["\n \n
    \n \n "]); - - root_templateObject = function () { - return data; - }; - - return data; -} - -function root_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const templates_root = (() => { - let extra_classes = api.settings.get('singleton') ? 'converse-singleton' : ''; - extra_classes += "converse-".concat(api.settings.get('view_mode')); - return T(root_templateObject(), extra_classes); + const extra_classes = api.settings.get('singleton') ? ['converse-singleton'] : []; + extra_classes.push(`converse-${api.settings.get('view_mode')}`); + return T` + +
    + + `; }); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/rootview/styles/root.scss +var styles_root = __webpack_require__(46); +;// CONCATENATED MODULE: ./src/plugins/rootview/styles/root.scss + + + + + + + + + + + +var root_options = {}; + +root_options.styleTagTransform = (styleTagTransform_default()); +root_options.setAttributes = (setAttributesWithoutAttributes_default()); + + root_options.insert = insertBySelector_default().bind(null, "head"); + +root_options.domAPI = (styleDomAPI_default()); +root_options.insertStyleElement = (insertStyleElement_default()); + +var root_update = injectStylesIntoStyleTag_default()(styles_root/* default */.Z, root_options); + + + + + /* harmony default export */ const rootview_styles_root = (styles_root/* default */.Z && styles_root/* default.locals */.Z.locals ? styles_root/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/rootview/root.js + + /** * `converse-root` is an optional custom element which can be used to * declaratively insert the Converse UI into the DOM. @@ -57269,17 +61392,23 @@ class ConverseRoot extends CustomElement { return templates_root(); } - connectedCallback() { - super.connectedCallback(); - this.classList.add('conversejs'); - this.classList.add("converse-".concat(api.settings.get('view_mode'))); - this.classList.add("theme-".concat(api.settings.get('theme'))); + initialize() { this.setAttribute('id', 'conversejs'); + this.setClasses(); + const settings = getAppSettings(); + this.listenTo(settings, 'change:view_mode', () => this.setClasses()); + this.listenTo(settings, 'change:singleton', () => this.setClasses()); + } + + setClasses() { + this.className = ""; + this.classList.add('conversejs'); + this.classList.add(`converse-${api.settings.get('view_mode')}`); + this.classList.add(`theme-${api.settings.get('theme')}`); + this.requestUpdate(); } } - -customElements.define('converse-root', ConverseRoot); ;// CONCATENATED MODULE: ./src/plugins/rootview/utils.js function ensureElement() { @@ -57289,7 +61418,7 @@ function ensureElement() { const root = api.settings.get('root'); - if (!root.querySelector('converse-root#conversejs')) { + if (!root.querySelector('converse-root')) { const el = document.createElement('converse-root'); const body = root.querySelector('body'); @@ -57309,22 +61438,15 @@ core_converse.plugins.add('converse-rootview', { api.settings.extend({ 'auto_insert': true }); - api.listen.on('chatBoxesInitialized', ensureElement); + api.listen.on('chatBoxesInitialized', ensureElement); // Only define the element now, otherwise it it's already in the DOM + // before `converse.initialized` has been called it will render too + // early. + + api.elements.define('converse-root', ConverseRoot); } }); ;// CONCATENATED MODULE: ./src/modals/templates/add-contact.js -function add_contact_templateObject() { - const data = add_contact_taggedTemplateLiteral(["\n
    \n
    \n
    \n
    ", "
    \n ", "\n
    \n
    \n
    \n \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n
    ", "
    \n
    \n \n
    \n
    \n
    \n
    \n "]); - - add_contact_templateObject = function () { - return data; - }; - - return data; -} - -function add_contact_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } @@ -57342,7 +61464,46 @@ function add_contact_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = str const i18n_nickname = __('Nickname'); - return T(add_contact_templateObject(), i18n_new_contact, modal_header_close_button, i18n_xmpp_address, !o._converse.xhr_user_search_url, o.jid || '', i18n_contact_placeholder, i18n_nickname, o.nickname || '', i18n_nickname, i18n_error_message, i18n_add); + return T` + + `; }); ;// CONCATENATED MODULE: ./src/modals/add-contact.js @@ -57393,7 +61554,7 @@ const AddContactModal = base.extend({ const el = this.el.querySelector('.suggestion-box__jid').parentElement; this.jid_auto_complete = new shared_converse.AutoComplete(el, { - 'data': (text, input) => "".concat(input.slice(0, input.indexOf("@")), "@").concat(text), + 'data': (text, input) => `${input.slice(0, input.indexOf("@"))}@${text}`, 'filter': shared_converse.FILTER_STARTSWITH, 'list': [...new Set(shared_converse.roster.map(item => add_contact_Strophe.getDomainFromJid(item.get('jid'))))] }); @@ -57426,7 +61587,7 @@ const AddContactModal = base.extend({ const input_el = this.el.querySelector('input[name="name"]'); input_el.addEventListener('input', lodash_es_debounce(() => { - xhr.open("GET", "".concat(api.settings.get('xhr_user_search_url'), "q=").concat(encodeURIComponent(input_el.value)), true); + xhr.open("GET", `${api.settings.get('xhr_user_search_url')}q=${encodeURIComponent(input_el.value)}`, true); xhr.send(); }, 300)); this.name_auto_complete.on('suggestion-box-selectcomplete', ev => { @@ -57495,7 +61656,7 @@ const AddContactModal = base.extend({ if (!jid && typeof api.settings.get('xhr_user_search_url') === 'string') { const input_el = this.el.querySelector('input[name="name"]'); - this.xhr.open("GET", "".concat(api.settings.get('xhr_user_search_url'), "q=").concat(encodeURIComponent(input_el.value)), true); + this.xhr.open("GET", `${api.settings.get('xhr_user_search_url')}q=${encodeURIComponent(input_el.value)}`, true); this.xhr.send(); return; } @@ -57590,27 +61751,7 @@ function shouldShowGroup(group) { return true; } ;// CONCATENATED MODULE: ./src/plugins/rosterview/templates/group.js -function group_templateObject2() { - const data = group_taggedTemplateLiteral(["\n
    \n \n ", "\n \n
      \n ", "\n
    \n
    "]); - group_templateObject2 = function () { - return data; - }; - - return data; -} - -function group_templateObject() { - const data = group_taggedTemplateLiteral(["\n
  • \n \n
  • "]); - - group_templateObject = function () { - return data; - }; - - return data; -} - -function group_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } @@ -57624,7 +61765,7 @@ function renderContact(contact) { const jid = contact.get('jid'); const extra_classes = []; - if (shared_converse.isUniView()) { + if (isUniView()) { const chatbox = shared_converse.chatboxes.get(jid); if (chatbox && !chatbox.get('hidden')) { @@ -57657,7 +61798,10 @@ function renderContact(contact) { extra_classes.push(contact.presence.get('show')); } - return T(group_templateObject(), extra_classes.join(' '), contact.presence.get('show'), contact); + return T` +
  • + +
  • `; } /* harmony default export */ const group = (o => { @@ -57665,31 +61809,17 @@ function renderContact(contact) { const collapsed = shared_converse.roster.state.get('collapsed_groups'); - return T(group_templateObject2(), o.name, i18n_title, ev => toggleGroup(ev, o.name), collapsed.includes(o.name) ? 'fa-caret-right' : 'fa-caret-down', o.name, collapsed.includes(o.name) ? 'collapsed' : '', o.name, o.contacts.map(renderContact)); + return T` +
    + toggleGroup(ev, o.name)}> + ${o.name} + +
      + ${o.contacts.map(renderContact)} +
    +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/rosterview/templates/roster.js -function roster_templateObject2() { - const data = roster_taggedTemplateLiteral(["\n "]); - - roster_templateObject2 = function () { - return data; - }; - - return data; -} - -function roster_templateObject() { - const data = roster_taggedTemplateLiteral(["\n
    \n ", "\n \n ", "\n
    \n \n
    \n ", "\n
    \n "]); - - roster_templateObject = function () { - return data; - }; - - return data; -} - -function roster_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -57728,7 +61858,7 @@ function populateContactsMap(contacts_map, contact) { return contacts_map; } -/* harmony default export */ const roster = (() => { +/* harmony default export */ const roster = (el => { const i18n_heading_contacts = __('Contacts'); const i18n_title_add_contact = __('Add a contact'); @@ -57739,7 +61869,24 @@ function populateContactsMap(contacts_map, contact) { const contacts_map = roster.reduce((acc, contact) => populateContactsMap(acc, contact), {}); const groupnames = Object.keys(contacts_map).filter(shouldShowGroup); groupnames.sort(groupsComparator); - return T(roster_templateObject(), i18n_heading_contacts, i18n_title_sync_contacts, api.settings.get('allow_contact_requests') ? T(roster_templateObject2(), i18n_title_add_contact) : '', repeat_c(groupnames, n => n, name => { + return T` + + +
    + ${repeat_c(groupnames, n => n, name => { const contacts = contacts_map[name].filter(c => shouldShowContact(c, name)); contacts.sort(contactsComparator); @@ -57751,48 +61898,31 @@ function populateContactsMap(contacts_map, contact) { } else { return ''; } - })); + })} +
    + `; }); ;// CONCATENATED MODULE: ./src/plugins/rosterview/rosterview.js -function rosterview_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - - - -const rosterview_u = core_converse.env.utils; /** * @class * @namespace _converse.RosterView * @memberOf _converse */ -class RosterView extends ElementView { - constructor(...args) { - super(...args); - - rosterview_defineProperty(this, "events", { - 'click a.controlbox-heading__btn.add-contact': 'showAddContactModal', - 'click a.controlbox-heading__btn.sync-contacts': 'syncContacts' - }); - } - +class RosterView extends CustomElement { async initialize() { await api.waitUntil('rosterInitialized'); - this.debouncedRender = lodash_es_debounce(this.render, 100); - this.listenTo(shared_converse, 'rosterContactsFetched', this.render); - this.listenTo(shared_converse.roster, "add", this.debouncedRender); - this.listenTo(shared_converse.roster, "destroy", this.debouncedRender); - this.listenTo(shared_converse.roster, "remove", this.debouncedRender); - this.listenTo(shared_converse.roster, 'change', this.renderIfRelevantChange); - this.listenTo(shared_converse.roster.state, "change", this.render); - - shared_converse.presences.on('change:show', () => this.debouncedRender()); - - this.render(); - this.listenToRosterFilter(); + this.listenTo(shared_converse, 'rosterContactsFetched', this.requestUpdate); + this.listenTo(shared_converse.presences, 'change:show', this.requestUpdate); + this.listenTo(shared_converse.roster, 'add', this.requestUpdate); + this.listenTo(shared_converse.roster, 'destroy', this.requestUpdate); + this.listenTo(shared_converse.roster, 'remove', this.requestUpdate); + this.listenTo(shared_converse.roster, 'change', this.requestUpdate); + this.listenTo(shared_converse.roster.state, 'change', this.requestUpdate); /** * Triggered once the _converse.RosterView instance has been created and initialized. * @event _converse#rosterViewInitialized @@ -57802,22 +61932,17 @@ class RosterView extends ElementView { api.trigger('rosterViewInitialized'); } - render() { - V(roster(), this); + firstUpdated() { + this.listenToRosterFilter(); } - renderIfRelevantChange(model) { - const attrs = ['ask', 'requesting', 'groups', 'num_unread']; - const changed = model.changed || {}; - - if (Object.keys(changed).filter(m => attrs.includes(m)).length) { - this.render(); - } + render() { + return roster(this); } listenToRosterFilter() { this.filter_view = this.querySelector('converse-roster-filter'); - this.filter_view.addEventListener('update', () => this.render()); + this.filter_view.addEventListener('update', () => this.requestUpdate()); } showAddContactModal(ev) { @@ -57830,133 +61955,48 @@ class RosterView extends ElementView { async syncContacts(ev) { // eslint-disable-line class-methods-use-this ev.preventDefault(); - rosterview_u.addClass('fa-spin', ev.target); + this.syncing_contacts = true; + this.requestUpdate(); shared_converse.roster.data.save('version', null); await shared_converse.roster.fetchFromServer(); api.user.presence.send(); - rosterview_u.removeClass('fa-spin', ev.target); + this.syncing_contacts = false; + this.requestUpdate(); } } api.elements.define('converse-roster', RosterView); ;// CONCATENATED MODULE: ./src/plugins/rosterview/templates/pending_contact.js -function pending_contact_templateObject3() { - const data = pending_contact_taggedTemplateLiteral(["", ""]); - - pending_contact_templateObject3 = function () { - return data; - }; - - return data; -} - -function pending_contact_templateObject2() { - const data = pending_contact_taggedTemplateLiteral(["\n ", "\n "]); - - pending_contact_templateObject2 = function () { - return data; - }; - - return data; -} - -function pending_contact_templateObject() { - const data = pending_contact_taggedTemplateLiteral(["", ""]); - - pending_contact_templateObject = function () { - return data; - }; - - return data; -} - -function pending_contact_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - -const tpl_pending_contact = o => T(pending_contact_templateObject(), o.jid, o.display_name); +const tpl_pending_contact = o => T`${o.display_name}`; /* harmony default export */ const pending_contact = (o => { const i18n_remove = __('Click to remove %1$s as a contact', o.display_name); - return T(pending_contact_templateObject2(), api.settings.get('allow_chat_pending_contacts') ? T(pending_contact_templateObject3(), o.openChat, tpl_pending_contact(o)) : tpl_pending_contact(o), o.removeContact, i18n_remove); + return T` + ${api.settings.get('allow_chat_pending_contacts') ? T`${tpl_pending_contact(o)}` : tpl_pending_contact(o)} + `; }); ;// CONCATENATED MODULE: ./src/plugins/rosterview/templates/requesting_contact.js -function requesting_contact_templateObject3() { - const data = requesting_contact_taggedTemplateLiteral(["", ""]); - - requesting_contact_templateObject3 = function () { - return data; - }; - - return data; -} - -function requesting_contact_templateObject2() { - const data = requesting_contact_taggedTemplateLiteral(["\n ", "\n \n "]); - - requesting_contact_templateObject2 = function () { - return data; - }; - - return data; -} - -function requesting_contact_templateObject() { - const data = requesting_contact_taggedTemplateLiteral(["", ""]); - - requesting_contact_templateObject = function () { - return data; - }; - - return data; -} - -function requesting_contact_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } +const tpl_requesting_contact = o => T`${o.display_name}`; -const tpl_requesting_contact = o => T(requesting_contact_templateObject(), o.jid, o.display_name); - -/* harmony default export */ const requesting_contact = (o => T(requesting_contact_templateObject2(), api.settings.get('allow_chat_pending_contacts') ? T(requesting_contact_templateObject3(), o.openChat, tpl_requesting_contact(o)) : tpl_requesting_contact(o), o.acceptRequest, o.desc_accept, o.desc_accept, o.declineRequest, o.desc_decline, o.desc_decline)); +/* harmony default export */ const requesting_contact = (o => T` + ${api.settings.get('allow_chat_pending_contacts') ? T`${tpl_requesting_contact(o)}` : tpl_requesting_contact(o)} + + `); ;// CONCATENATED MODULE: ./src/plugins/rosterview/templates/roster_item.js -function roster_item_templateObject3() { - const data = roster_item_taggedTemplateLiteral([""]); - - roster_item_templateObject3 = function () { - return data; - }; - - return data; -} - -function roster_item_templateObject2() { - const data = roster_item_taggedTemplateLiteral(["", ""]); - - roster_item_templateObject2 = function () { - return data; - }; - - return data; -} - -function roster_item_templateObject() { - const data = roster_item_taggedTemplateLiteral(["\n \n ", "\n \n ", "\n ", "\n \n ", ""]); - - roster_item_templateObject = function () { - return data; - }; - - return data; -} - -function roster_item_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - @@ -57966,7 +62006,14 @@ function roster_item_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = str const i18n_remove = __('Click to remove %1$s as a contact', o.display_name); - return T(roster_item_templateObject(), o.num_unread ? 'unread-msgs' : '', i18n_chat, o.openChat, renderAvatar(o.getAvatarData()), o.status_icon, o.desc_status, o.num_unread ? T(roster_item_templateObject2(), o.num_unread) : '', o.show, o.num_unread ? 'unread-msgs' : '', o.display_name, api.settings.get('allow_contact_removal') ? T(roster_item_templateObject3(), o.removeContact, i18n_remove) : ''); + return T` + + ${renderAvatar(o.getAvatarData())} + + ${o.num_unread ? T`${o.num_unread}` : ''} + ${o.display_name} + + ${api.settings.get('allow_contact_removal') ? T`` : ''}`; }); ;// CONCATENATED MODULE: ./src/plugins/rosterview/contactview.js @@ -58143,18 +62190,6 @@ class contactview_RosterContact extends CustomElement { } api.elements.define('converse-roster-contact', contactview_RosterContact); ;// CONCATENATED MODULE: ./src/plugins/rosterview/templates/roster_filter.js -function roster_filter_templateObject() { - const data = roster_filter_taggedTemplateLiteral(["\n
    \n
    \n
    \n \n \n \n
    \n
    \n \n \n \n
    \n \n
    \n
    "]); - - roster_filter_templateObject = function () { - return data; - }; - - return data; -} - -function roster_filter_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } - /* harmony default export */ const roster_filter = (o => { @@ -58182,12 +62217,39 @@ function roster_filter_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = s const label_offline = __('Offline'); - return T(roster_filter_templateObject(), !o.visible ? 'hidden' : 'fade-in', o.submitFilter, o.changeTypeFilter, o.filter_type === 'contacts' ? 'selected' : '', title_contact_filter, o.changeTypeFilter, o.filter_type === 'groups' ? 'selected' : '', title_group_filter, o.changeTypeFilter, o.filter_type === 'state' ? 'selected' : '', title_status_filter, o.filter_text || '', o.liveFilter, o.filter_type === 'state' ? 'hidden' : '', i18n_placeholder, !o.filter_text || o.filter_type === 'state' ? 'hidden' : '', o.clearFilter, o.filter_type !== 'state' ? 'hidden' : '', o.changeChatStateFilter, label_any, o.chat_state === 'unread_messages', label_unread_messages, o.chat_state === 'online', label_online, o.chat_state === 'chat', label_chatty, o.chat_state === 'dnd', label_busy, o.chat_state === 'away', label_away, o.chat_state === 'xa', label_xa, o.chat_state === 'offline', label_offline); + return T` +
    +
    +
    + + + +
    +
    + + + +
    + +
    +
    `; }); ;// CONCATENATED MODULE: ./src/plugins/rosterview/filterview.js -function filterview_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - - @@ -58204,16 +62266,10 @@ const RosterFilter = Model.extend({ } }); -class RosterFilterView extends ElementView { - constructor(...args) { - super(...args); - - filterview_defineProperty(this, "tagName", 'span'); - } - +class RosterFilterView extends CustomElement { initialize() { const model = new shared_converse.RosterFilter(); - model.id = "_converse.rosterfilter-".concat(shared_converse.bare_jid); + model.id = `_converse.rosterfilter-${shared_converse.bare_jid}`; initStorage(model, model.id); this.model = model; shared_converse.roster_filter = model; @@ -58222,30 +62278,31 @@ class RosterFilterView extends ElementView { 'filter_text': this.querySelector('.roster-filter').value }); }, 250); - this.listenTo(this.model, 'change', this.render); - this.listenTo(this.model, 'change', () => this.dispatchEvent(new CustomEvent('update', { - 'detail': this.model.changed - }))); - this.listenTo(shared_converse.roster, "add", this.render); - this.listenTo(shared_converse.roster, "destroy", this.render); - this.listenTo(shared_converse.roster, "remove", this.render); - - shared_converse.presences.on('change:show', this.render, this); - + this.listenTo(shared_converse, 'rosterContactsFetched', this.requestUpdate); + this.listenTo(shared_converse.presences, 'change:show', this.requestUpdate); + this.listenTo(shared_converse.roster, "add", this.requestUpdate); + this.listenTo(shared_converse.roster, "destroy", this.requestUpdate); + this.listenTo(shared_converse.roster, "remove", this.requestUpdate); + this.listenTo(this.model, 'change', this.dispatchUpdateEvent); + this.listenTo(this.model, 'change', this.requestUpdate); this.model.fetch(); - this.render(); } render() { - V(roster_filter(Object.assign(this.model.toJSON(), { + return roster_filter(Object.assign(this.model.toJSON(), { visible: this.shouldBeVisible(), changeChatStateFilter: ev => this.changeChatStateFilter(ev), changeTypeFilter: ev => this.changeTypeFilter(ev), clearFilter: ev => this.clearFilter(ev), liveFilter: ev => this.liveFilter(ev), submitFilter: ev => this.submitFilter(ev) - })), this); - return this; + })); + } + + dispatchUpdateEvent() { + this.dispatchEvent(new CustomEvent('update', { + 'detail': this.model.changed + })); } changeChatStateFilter(ev) { @@ -58289,7 +62346,9 @@ class RosterFilterView extends ElementView { } shouldBeVisible() { - return shared_converse.roster && shared_converse.roster.length >= 5 || this.isActive(); + var _converse$roster; + + return ((_converse$roster = shared_converse.roster) === null || _converse$roster === void 0 ? void 0 : _converse$roster.length) >= 5 || this.isActive(); } clearFilter(ev) { @@ -58301,8 +62360,37 @@ class RosterFilterView extends ElementView { } api.elements.define('converse-roster-filter', RosterFilterView); -// EXTERNAL MODULE: ./src/plugins/rosterview/styles/roster.scss -var styles_roster = __webpack_require__(7385); +// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].use[3]!./src/plugins/rosterview/styles/roster.scss +var styles_roster = __webpack_require__(74); +;// CONCATENATED MODULE: ./src/plugins/rosterview/styles/roster.scss + + + + + + + + + + + +var roster_options = {}; + +roster_options.styleTagTransform = (styleTagTransform_default()); +roster_options.setAttributes = (setAttributesWithoutAttributes_default()); + + roster_options.insert = insertBySelector_default().bind(null, "head"); + +roster_options.domAPI = (styleDomAPI_default()); +roster_options.insertStyleElement = (insertStyleElement_default()); + +var roster_update = injectStylesIntoStyleTag_default()(styles_roster/* default */.Z, roster_options); + + + + + /* harmony default export */ const rosterview_styles_roster = (styles_roster/* default */.Z && styles_roster/* default.locals */.Z.locals ? styles_roster/* default.locals */.Z.locals : undefined); + ;// CONCATENATED MODULE: ./src/plugins/rosterview/index.js /** * @copyright 2020, the Converse.js contributors @@ -58352,16 +62440,19 @@ core_converse.plugins.add('converse-rosterview', { ;// CONCATENATED MODULE: ./src/converse.js /** * @description Converse.js (A browser based XMPP chat client) - * @copyright 2020, The Converse developers + * @copyright 2021, The Converse developers * @license Mozilla Public License (MPLv2) */ -/* START: Removable components - * -------------------- - * Any of the following components may be removed if they're not needed. + + + +/* START: Removable plugins + * ------------------------ + * Any of the following plugin imports may be removed if the plugin is not needed */ // Views for XEP-0048 Bookmarks @@ -58393,17 +62484,14 @@ core_converse.plugins.add('converse-rosterview', { /* END: Removable components */ - - shared_converse.CustomElement = CustomElement; -const WHITELISTED_PLUGINS = ['converse-bookmark-views', 'converse-chatboxviews', 'converse-chatview', 'converse-controlbox', 'converse-dragresize', 'converse-fullscreen', 'converse-headlines-view', 'converse-mam-views', 'converse-minimize', 'converse-modal', 'converse-muc-views', 'converse-notification', 'converse-omemo', 'converse-profile', 'converse-push', 'converse-register', 'converse-roomslist', 'converse-rootview', 'converse-rosterview', 'converse-singleton']; const initialize = core_converse.initialize; core_converse.initialize = function (settings, callback) { if (Array.isArray(settings.whitelisted_plugins)) { - settings.whitelisted_plugins = settings.whitelisted_plugins.concat(WHITELISTED_PLUGINS); + settings.whitelisted_plugins = settings.whitelisted_plugins.concat(VIEW_PLUGINS); } else { - settings.whitelisted_plugins = WHITELISTED_PLUGINS; + settings.whitelisted_plugins = VIEW_PLUGINS; } return initialize(settings, callback); @@ -58413,71 +62501,6 @@ core_converse.initialize = function (settings, callback) { /***/ }), -/***/ 4009: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -/* - 2020 Jason Mulligan - @version 6.1.0 -*/ - - -!function (e) { - var x = /^(b|B)$/, - M = { - iec: { - bits: ["b", "Kib", "Mib", "Gib", "Tib", "Pib", "Eib", "Zib", "Yib"], - bytes: ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"] - }, - jedec: { - bits: ["b", "Kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb"], - bytes: ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] - } - }, - w = { - iec: ["", "kibi", "mebi", "gibi", "tebi", "pebi", "exbi", "zebi", "yobi"], - jedec: ["", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta"] - }; - - function t(e) { - var i, - t, - o, - n, - b, - r, - a, - l, - s, - d, - u, - c, - f, - p, - B, - y = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}, - g = [], - v = 0, - m = void 0, - h = void 0; - if (isNaN(e)) throw new TypeError("Invalid number"); - return t = !0 === y.bits, u = !0 === y.unix, i = y.base || 2, d = void 0 !== y.round ? y.round : u ? 1 : 2, r = void 0 !== y.locale ? y.locale : "", a = y.localeOptions || {}, c = void 0 !== y.separator ? y.separator : "", f = void 0 !== y.spacer ? y.spacer : u ? "" : " ", B = y.symbols || {}, p = 2 === i && y.standard || "jedec", s = y.output || "string", n = !0 === y.fullform, b = y.fullforms instanceof Array ? y.fullforms : [], m = void 0 !== y.exponent ? y.exponent : -1, o = 2 < i ? 1e3 : 1024, (l = (h = Number(e)) < 0) && (h = -h), (-1 === m || isNaN(m)) && (m = Math.floor(Math.log(h) / Math.log(o))) < 0 && (m = 0), 8 < m && (m = 8), "exponent" === s ? m : (0 === h ? (g[0] = 0, g[1] = u ? "" : M[p][t ? "bits" : "bytes"][m]) : (v = h / (2 === i ? Math.pow(2, 10 * m) : Math.pow(1e3, m)), t && o <= (v *= 8) && m < 8 && (v /= o, m++), g[0] = Number(v.toFixed(0 < m ? d : 0)), g[0] === o && m < 8 && void 0 === y.exponent && (g[0] = 1, m++), g[1] = 10 === i && 1 === m ? t ? "kb" : "kB" : M[p][t ? "bits" : "bytes"][m], u && (g[1] = "jedec" === p ? g[1].charAt(0) : 0 < m ? g[1].replace(/B$/, "") : g[1], x.test(g[1]) && (g[0] = Math.floor(g[0]), g[1] = ""))), l && (g[0] = -g[0]), g[1] = B[g[1]] || g[1], !0 === r ? g[0] = g[0].toLocaleString() : 0 < r.length ? g[0] = g[0].toLocaleString(r, a) : 0 < c.length && (g[0] = g[0].toString().replace(".", c)), "array" === s ? g : (n && (g[1] = b[m] ? b[m] : w[p][m] + (t ? "bit" : "byte") + (1 === g[0] ? "" : "s")), "object" === s ? { - value: g[0], - symbol: g[1], - exponent: m - } : g.join(f))); - } - - t.partial = function (i) { - return function (e) { - return t(e, i); - }; - }, true ? module.exports = t : 0; -}("undefined" != typeof window ? window : __webpack_require__.g); - -/***/ }), - /***/ 2242: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { @@ -61477,7 +65500,7 @@ module.exports.f = function (C) { // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) var anObject = __webpack_require__(2159); -var dPs = __webpack_require__(7856); +var dPs = __webpack_require__(3865); var enumBugKeys = __webpack_require__(3338); var IE_PROTO = __webpack_require__(8989)('IE_PROTO'); var Empty = function () { /* empty */ }; @@ -61543,7 +65566,7 @@ exports.f = __webpack_require__(9666) ? Object.defineProperty : function defineP /***/ }), -/***/ 7856: +/***/ 3865: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var dP = __webpack_require__(4743); @@ -62514,310 +66537,715 @@ for (var i = 0; i < DOMIterables.length; i++) { /***/ }), -/***/ 5708: -/***/ ((module, exports, __webpack_require__) => { +/***/ 3742: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"_modal.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 2376: -/***/ ((module, exports, __webpack_require__) => { +/***/ 7904: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"bookmarks.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 7862: -/***/ ((module, exports, __webpack_require__) => { +/***/ 5503: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"chats.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 1890: -/***/ ((module, exports, __webpack_require__) => { +/***/ 6220: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-bottom-panel.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 3960: -/***/ ((module, exports, __webpack_require__) => { +/***/ 9107: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-head.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 1089: -/***/ ((module, exports, __webpack_require__) => { +/***/ 7581: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"index.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 9900: -/***/ ((module, exports, __webpack_require__) => { +/***/ 6752: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"_controlbox.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 9684: -/***/ ((module, exports, __webpack_require__) => { +/***/ 115: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"background.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 7601: -/***/ ((module, exports, __webpack_require__) => { +/***/ 7667: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"fullscreen.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 4774: -/***/ ((module, exports, __webpack_require__) => { +/***/ 7926: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"headlines.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 5078: -/***/ ((module, exports, __webpack_require__) => { +/***/ 9924: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"minimize.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 7823: -/***/ ((module, exports, __webpack_require__) => { +/***/ 1557: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"index.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 8961: -/***/ ((module, exports, __webpack_require__) => { +/***/ 2490: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"muc-bottom-panel.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 3305: -/***/ ((module, exports, __webpack_require__) => { +/***/ 679: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"muc-head.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 6672: -/***/ ((module, exports, __webpack_require__) => { +/***/ 1107: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"muc-occupants.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 9597: -/***/ ((module, exports, __webpack_require__) => { +/***/ 5431: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"roster.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 6955: -/***/ ((module, exports, __webpack_require__) => { +/***/ 46: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"_autocomplete.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 5594: -/***/ ((module, exports, __webpack_require__) => { +/***/ 74: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-content.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 3347: -/***/ ((module, exports, __webpack_require__) => { +/***/ 8481: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"emoji.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 9548: -/***/ ((module, exports, __webpack_require__) => { +/***/ 8269: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"toolbar.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 7103: -/***/ ((module, exports, __webpack_require__) => { +/***/ 9796: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"unfurl.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ 9369: -/***/ ((module, exports, __webpack_require__) => { +/***/ 9520: +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(3645); -exports = ___CSS_LOADER_API_IMPORT___(true); + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module -exports.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","file":"index.scss"}]); +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); // Exports -module.exports = exports; +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 5223: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 3861: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 7991: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 7415: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 1065: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 3735: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 3543: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 899: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ 4452: +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4015); +/* harmony import */ var _node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, "", "",{"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), @@ -62834,27 +67262,27 @@ module.exports = exports; */ // css base code, injected by the css-loader // eslint-disable-next-line func-names -module.exports = function (useSourceMap) { +module.exports = function (cssWithMappingToString) { var list = []; // return the list of modules as css string list.toString = function toString() { return this.map(function (item) { - var content = cssWithMappingToString(item, useSourceMap); + var content = cssWithMappingToString(item); if (item[2]) { return "@media ".concat(item[2], " {").concat(content, "}"); } return content; - }).join(''); + }).join(""); }; // import a list of modules into the list // eslint-disable-next-line func-names list.i = function (modules, mediaQuery, dedupe) { - if (typeof modules === 'string') { + if (typeof modules === "string") { // eslint-disable-next-line no-param-reassign - modules = [[null, modules, '']]; + modules = [[null, modules, ""]]; } var alreadyImportedModules = {}; @@ -62893,41 +67321,55 @@ module.exports = function (useSourceMap) { return list; }; -function cssWithMappingToString(item, useSourceMap) { - var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring +/***/ }), - var cssMapping = item[3]; +/***/ 4015: +/***/ ((module) => { + +"use strict"; + + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +module.exports = function cssWithMappingToString(item) { + var _item = _slicedToArray(item, 4), + content = _item[1], + cssMapping = _item[3]; if (!cssMapping) { return content; } - if (useSourceMap && typeof btoa === 'function') { - var sourceMapping = toComment(cssMapping); + if (typeof btoa === "function") { + // eslint-disable-next-line no-undef + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); + var sourceMapping = "/*# ".concat(data, " */"); var sourceURLs = cssMapping.sources.map(function (source) { - return "/*# sourceURL=".concat(cssMapping.sourceRoot || '').concat(source, " */"); + return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */"); }); - return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); + return [content].concat(sourceURLs).concat([sourceMapping]).join("\n"); } - return [content].join('\n'); -} // Adapted from convert-source-map (MIT) - - -function toComment(sourceMap) { - // eslint-disable-next-line no-undef - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); - var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); - return "/*# ".concat(data, " */"); -} + return [content].join("\n"); +}; /***/ }), /***/ 7484: /***/ (function(module) { -!function(t,e){ true?module.exports=e():0}(this,function(){"use strict";var t="millisecond",e="second",n="minute",r="hour",i="day",s="week",u="month",a="quarter",o="year",f="date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,c=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,d={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},$=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},l={s:$,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+$(r,2,"0")+":"+$(i,2,"0")},m:function t(e,n){if(e.date()=e?t:""+Array(e+1-r.length).join(n)+t},g={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date() { +/***/ 7856: +/***/ (function(module) { -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i - */ +/*! @license DOMPurify 2.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.1/LICENSE */ -var FilterCSS = require("cssfilter").FilterCSS; -var getDefaultCSSWhiteList = require("cssfilter").getDefaultWhiteList; -var _ = require("./util"); +(function (global, factory) { + true ? module.exports = factory() : + 0; +}(this, function () { 'use strict'; -function getDefaultWhiteList() { - return { - a: ["target", "href", "title"], - abbr: ["title"], - address: [], - area: ["shape", "coords", "href", "alt"], - article: [], - aside: [], - audio: ["autoplay", "controls", "loop", "preload", "src"], - b: [], - bdi: ["dir"], - bdo: ["dir"], - big: [], - blockquote: ["cite"], - br: [], - caption: [], - center: [], - cite: [], - code: [], - col: ["align", "valign", "span", "width"], - colgroup: ["align", "valign", "span", "width"], - dd: [], - del: ["datetime"], - details: ["open"], - div: [], - dl: [], - dt: [], - em: [], - font: ["color", "size", "face"], - footer: [], - h1: [], - h2: [], - h3: [], - h4: [], - h5: [], - h6: [], - header: [], - hr: [], - i: [], - img: ["src", "alt", "title", "width", "height"], - ins: ["datetime"], - li: [], - mark: [], - nav: [], - ol: [], - p: [], - pre: [], - s: [], - section: [], - small: [], - span: [], - sub: [], - sup: [], - strong: [], - table: ["width", "border", "align", "valign"], - tbody: ["align", "valign"], - td: ["width", "rowspan", "colspan", "align", "valign"], - tfoot: ["align", "valign"], - th: ["width", "rowspan", "colspan", "align", "valign"], - thead: ["align", "valign"], - tr: ["rowspan", "align", "valign"], - tt: [], - u: [], - ul: [], - video: ["autoplay", "controls", "loop", "preload", "src", "height", "width"] - }; -} + function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } -var defaultCSSFilter = new FilterCSS(); + var hasOwnProperty = Object.hasOwnProperty, + setPrototypeOf = Object.setPrototypeOf, + isFrozen = Object.isFrozen, + getPrototypeOf = Object.getPrototypeOf, + getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var freeze = Object.freeze, + seal = Object.seal, + create = Object.create; // eslint-disable-line import/no-mutable-exports -/** - * default onTag function - * - * @param {String} tag - * @param {String} html - * @param {Object} options - * @return {String} - */ -function onTag(tag, html, options) { - // do nothing -} + var _ref = typeof Reflect !== 'undefined' && Reflect, + apply = _ref.apply, + construct = _ref.construct; -/** - * default onIgnoreTag function - * - * @param {String} tag - * @param {String} html - * @param {Object} options - * @return {String} - */ -function onIgnoreTag(tag, html, options) { - // do nothing -} - -/** - * default onTagAttr function - * - * @param {String} tag - * @param {String} name - * @param {String} value - * @return {String} - */ -function onTagAttr(tag, name, value) { - // do nothing -} - -/** - * default onIgnoreTagAttr function - * - * @param {String} tag - * @param {String} name - * @param {String} value - * @return {String} - */ -function onIgnoreTagAttr(tag, name, value) { - // do nothing -} - -/** - * default escapeHtml function - * - * @param {String} html - */ -function escapeHtml(html) { - return html.replace(REGEXP_LT, "<").replace(REGEXP_GT, ">"); -} - -/** - * default safeAttrValue function - * - * @param {String} tag - * @param {String} name - * @param {String} value - * @param {Object} cssFilter - * @return {String} - */ -function safeAttrValue(tag, name, value, cssFilter) { - // unescape attribute value firstly - value = friendlyAttrValue(value); - - if (name === "href" || name === "src") { - // filter `href` and `src` attribute - // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#` - value = _.trim(value); - if (value === "#") return "#"; - if ( - !( - value.substr(0, 7) === "http://" || - value.substr(0, 8) === "https://" || - value.substr(0, 7) === "mailto:" || - value.substr(0, 4) === "tel:" || - value.substr(0, 11) === "data:image/" || - value.substr(0, 6) === "ftp://" || - value.substr(0, 2) === "./" || - value.substr(0, 3) === "../" || - value[0] === "#" || - value[0] === "/" - ) - ) { - return ""; - } - } else if (name === "background") { - // filter `background` attribute (maybe no use) - // `javascript:` - REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0; - if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) { - return ""; - } - } else if (name === "style") { - // `expression()` - REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0; - if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) { - return ""; - } - // `url()` - REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0; - if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) { - REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0; - if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) { - return ""; - } - } - if (cssFilter !== false) { - cssFilter = cssFilter || defaultCSSFilter; - value = cssFilter.process(value); - } - } - - // escape `<>"` before returns - value = escapeAttrValue(value); - return value; -} - -// RegExp list -var REGEXP_LT = //g; -var REGEXP_QUOTE = /"/g; -var REGEXP_QUOTE_2 = /"/g; -var REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim; -var REGEXP_ATTR_VALUE_COLON = /:?/gim; -var REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim; -var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\/\*|\*\//gm; -var REGEXP_DEFAULT_ON_TAG_ATTR_4 = /((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a)\:/gi; -var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\s"'`]*(d\s*a\s*t\s*a\s*)\:/gi; -var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\s"'`]*(d\s*a\s*t\s*a\s*)\:\s*image\//gi; -var REGEXP_DEFAULT_ON_TAG_ATTR_7 = /e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi; -var REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\s*r\s*l\s*\(.*/gi; - -/** - * escape doube quote - * - * @param {String} str - * @return {String} str - */ -function escapeQuote(str) { - return str.replace(REGEXP_QUOTE, """); -} - -/** - * unescape double quote - * - * @param {String} str - * @return {String} str - */ -function unescapeQuote(str) { - return str.replace(REGEXP_QUOTE_2, '"'); -} - -/** - * escape html entities - * - * @param {String} str - * @return {String} - */ -function escapeHtmlEntities(str) { - return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) { - return code[0] === "x" || code[0] === "X" - ? String.fromCharCode(parseInt(code.substr(1), 16)) - : String.fromCharCode(parseInt(code, 10)); - }); -} - -/** - * escape html5 new danger entities - * - * @param {String} str - * @return {String} - */ -function escapeDangerHtml5Entities(str) { - return str - .replace(REGEXP_ATTR_VALUE_COLON, ":") - .replace(REGEXP_ATTR_VALUE_NEWLINE, " "); -} - -/** - * clear nonprintable characters - * - * @param {String} str - * @return {String} - */ -function clearNonPrintableCharacter(str) { - var str2 = ""; - for (var i = 0, len = str.length; i < len; i++) { - str2 += str.charCodeAt(i) < 32 ? " " : str.charAt(i); - } - return _.trim(str2); -} - -/** - * get friendly attribute value - * - * @param {String} str - * @return {String} - */ -function friendlyAttrValue(str) { - str = unescapeQuote(str); - str = escapeHtmlEntities(str); - str = escapeDangerHtml5Entities(str); - str = clearNonPrintableCharacter(str); - return str; -} - -/** - * unescape attribute value - * - * @param {String} str - * @return {String} - */ -function escapeAttrValue(str) { - str = escapeQuote(str); - str = escapeHtml(str); - return str; -} - -/** - * `onIgnoreTag` function for removing all the tags that are not in whitelist - */ -function onIgnoreTagStripAll() { - return ""; -} - -/** - * remove tag body - * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional) - * - * @param {array} tags - * @param {function} next - */ -function StripTagBody(tags, next) { - if (typeof next !== "function") { - next = function() {}; - } - - var isRemoveAllTag = !Array.isArray(tags); - function isRemoveTag(tag) { - if (isRemoveAllTag) return true; - return _.indexOf(tags, tag) !== -1; - } - - var removeList = []; - var posStart = false; - - return { - onIgnoreTag: function(tag, html, options) { - if (isRemoveTag(tag)) { - if (options.isClosing) { - var ret = "[/removed]"; - var end = options.position + ret.length; - removeList.push([ - posStart !== false ? posStart : options.position, - end - ]); - posStart = false; - return ret; - } else { - if (!posStart) { - posStart = options.position; - } - return "[removed]"; - } - } else { - return next(tag, html, options); - } - }, - remove: function(html) { - var rethtml = ""; - var lastPos = 0; - _.forEach(removeList, function(pos) { - rethtml += html.slice(lastPos, pos[0]); - lastPos = pos[1]; - }); - rethtml += html.slice(lastPos); - return rethtml; - } - }; -} - -/** - * remove html comments - * - * @param {String} html - * @return {String} - */ -function stripCommentTag(html) { - return html.replace(STRIP_COMMENT_TAG_REGEXP, ""); -} -var STRIP_COMMENT_TAG_REGEXP = //g; - -/** - * remove invisible characters - * - * @param {String} html - * @return {String} - */ -function stripBlankChar(html) { - var chars = html.split(""); - chars = chars.filter(function(char) { - var c = char.charCodeAt(0); - if (c === 127) return false; - if (c <= 31) { - if (c === 10 || c === 13) return true; - return false; - } - return true; - }); - return chars.join(""); -} - -exports.whiteList = getDefaultWhiteList(); -exports.getDefaultWhiteList = getDefaultWhiteList; -exports.onTag = onTag; -exports.onIgnoreTag = onIgnoreTag; -exports.onTagAttr = onTagAttr; -exports.onIgnoreTagAttr = onIgnoreTagAttr; -exports.safeAttrValue = safeAttrValue; -exports.escapeHtml = escapeHtml; -exports.escapeQuote = escapeQuote; -exports.unescapeQuote = unescapeQuote; -exports.escapeHtmlEntities = escapeHtmlEntities; -exports.escapeDangerHtml5Entities = escapeDangerHtml5Entities; -exports.clearNonPrintableCharacter = clearNonPrintableCharacter; -exports.friendlyAttrValue = friendlyAttrValue; -exports.escapeAttrValue = escapeAttrValue; -exports.onIgnoreTagStripAll = onIgnoreTagStripAll; -exports.StripTagBody = StripTagBody; -exports.stripCommentTag = stripCommentTag; -exports.stripBlankChar = stripBlankChar; -exports.cssFilter = defaultCSSFilter; -exports.getDefaultCSSWhiteList = getDefaultCSSWhiteList; - -},{"./util":4,"cssfilter":8}],2:[function(require,module,exports){ -/** - * xss - * - * @author Zongmin Lei - */ - -var DEFAULT = require("./default"); -var parser = require("./parser"); -var FilterXSS = require("./xss"); - -/** - * filter xss function - * - * @param {String} html - * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml } - * @return {String} - */ -function filterXSS(html, options) { - var xss = new FilterXSS(options); - return xss.process(html); -} - -exports = module.exports = filterXSS; -exports.filterXSS = filterXSS; -exports.FilterXSS = FilterXSS; -for (var i in DEFAULT) exports[i] = DEFAULT[i]; -for (var i in parser) exports[i] = parser[i]; - -// using `xss` on the browser, output `filterXSS` to the globals -if (typeof window !== "undefined") { - window.filterXSS = module.exports; -} - -// using `xss` on the WebWorker, output `filterXSS` to the globals -function isWorkerEnv() { - return typeof self !== 'undefined' && typeof DedicatedWorkerGlobalScope !== 'undefined' && self instanceof DedicatedWorkerGlobalScope; -} -if (isWorkerEnv()) { - self.filterXSS = module.exports; -} - -},{"./default":1,"./parser":3,"./xss":5}],3:[function(require,module,exports){ -/** - * Simple HTML Parser - * - * @author Zongmin Lei - */ - -var _ = require("./util"); - -/** - * get tag name - * - * @param {String} html e.g. '' - * @return {String} - */ -function getTagName(html) { - var i = _.spaceIndex(html); - if (i === -1) { - var tagName = html.slice(1, -1); - } else { - var tagName = html.slice(1, i + 1); - } - tagName = _.trim(tagName).toLowerCase(); - if (tagName.slice(0, 1) === "/") tagName = tagName.slice(1); - if (tagName.slice(-1) === "/") tagName = tagName.slice(0, -1); - return tagName; -} - -/** - * is close tag? - * - * @param {String} html 如:'' - * @return {Boolean} - */ -function isClosing(html) { - return html.slice(0, 2) === "") { - rethtml += escapeHtml(html.slice(lastPos, tagStart)); - currentHtml = html.slice(tagStart, currentPos + 1); - currentTagName = getTagName(currentHtml); - rethtml += onTag( - tagStart, - rethtml.length, - currentTagName, - currentHtml, - isClosing(currentHtml) - ); - lastPos = currentPos + 1; - tagStart = false; - continue; - } - if ((c === '"' || c === "'")) { - var i = 1; - var ic = html.charAt(currentPos - i); - - while ((ic === " ") || (ic === "=")) { - if (ic === "=") { - quoteStart = c; - continue chariterator; - } - ic = html.charAt(currentPos - ++i); - } - } - } else { - if (c === quoteStart) { - quoteStart = false; - continue; - } - } - } - } - if (lastPos < html.length) { - rethtml += escapeHtml(html.substr(lastPos)); - } - - return rethtml; -} - -var REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9_:\.\-]/gim; - -/** - * parse input attributes and returns processed attributes - * - * @param {String} html e.g. `href="#" target="_blank"` - * @param {Function} onAttr e.g. `function (name, value)` - * @return {String} - */ -function parseAttr(html, onAttr) { - "use strict"; - - var lastPos = 0; - var retAttrs = []; - var tmpName = false; - var len = html.length; - - function addAttr(name, value) { - name = _.trim(name); - name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, "").toLowerCase(); - if (name.length < 1) return; - var ret = onAttr(name, value || ""); - if (ret) retAttrs.push(ret); - } - - // 逐个分析字符 - for (var i = 0; i < len; i++) { - var c = html.charAt(i); - var v, j; - if (tmpName === false && c === "=") { - tmpName = html.slice(lastPos, i); - lastPos = i + 1; - continue; - } - if (tmpName !== false) { - if ( - i === lastPos && - (c === '"' || c === "'") && - html.charAt(i - 1) === "=" - ) { - j = html.indexOf(c, i + 1); - if (j === -1) { - break; - } else { - v = _.trim(html.slice(lastPos + 1, j)); - addAttr(tmpName, v); - tmpName = false; - i = j; - lastPos = i + 1; - continue; - } - } - } - if (/\s|\n|\t/.test(c)) { - html = html.replace(/\s|\n|\t/g, " "); - if (tmpName === false) { - j = findNextEqual(html, i); - if (j === -1) { - v = _.trim(html.slice(lastPos, i)); - addAttr(v); - tmpName = false; - lastPos = i + 1; - continue; - } else { - i = j - 1; - continue; - } - } else { - j = findBeforeEqual(html, i - 1); - if (j === -1) { - v = _.trim(html.slice(lastPos, i)); - v = stripQuoteWrap(v); - addAttr(tmpName, v); - tmpName = false; - lastPos = i + 1; - continue; - } else { - continue; - } - } - } - } - - if (lastPos < html.length) { - if (tmpName === false) { - addAttr(html.slice(lastPos)); - } else { - addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos)))); - } - } - - return _.trim(retAttrs.join(" ")); -} - -function findNextEqual(str, i) { - for (; i < str.length; i++) { - var c = str[i]; - if (c === " ") continue; - if (c === "=") return i; - return -1; - } -} - -function findBeforeEqual(str, i) { - for (; i > 0; i--) { - var c = str[i]; - if (c === " ") continue; - if (c === "=") return i; - return -1; - } -} - -function isQuoteWrapString(text) { - if ( - (text[0] === '"' && text[text.length - 1] === '"') || - (text[0] === "'" && text[text.length - 1] === "'") - ) { - return true; - } else { - return false; - } -} - -function stripQuoteWrap(text) { - if (isQuoteWrapString(text)) { - return text.substr(1, text.length - 2); - } else { - return text; - } -} - -exports.parseTag = parseTag; -exports.parseAttr = parseAttr; - -},{"./util":4}],4:[function(require,module,exports){ -module.exports = { - indexOf: function(arr, item) { - var i, j; - if (Array.prototype.indexOf) { - return arr.indexOf(item); - } - for (i = 0, j = arr.length; i < j; i++) { - if (arr[i] === item) { - return i; - } - } - return -1; - }, - forEach: function(arr, fn, scope) { - var i, j; - if (Array.prototype.forEach) { - return arr.forEach(fn, scope); - } - for (i = 0, j = arr.length; i < j; i++) { - fn.call(scope, arr[i], i, arr); - } - }, - trim: function(str) { - if (String.prototype.trim) { - return str.trim(); - } - return str.replace(/(^\s*)|(\s*$)/g, ""); - }, - spaceIndex: function(str) { - var reg = /\s|\n|\t/; - var match = reg.exec(str); - return match ? match.index : -1; - } -}; - -},{}],5:[function(require,module,exports){ -/** - * filter xss - * - * @author Zongmin Lei - */ - -var FilterCSS = require("cssfilter").FilterCSS; -var DEFAULT = require("./default"); -var parser = require("./parser"); -var parseTag = parser.parseTag; -var parseAttr = parser.parseAttr; -var _ = require("./util"); - -/** - * returns `true` if the input value is `undefined` or `null` - * - * @param {Object} obj - * @return {Boolean} - */ -function isNull(obj) { - return obj === undefined || obj === null; -} - -/** - * get attributes for a tag - * - * @param {String} html - * @return {Object} - * - {String} html - * - {Boolean} closing - */ -function getAttrs(html) { - var i = _.spaceIndex(html); - if (i === -1) { - return { - html: "", - closing: html[html.length - 2] === "/" + if (!apply) { + apply = function apply(fun, thisValue, args) { + return fun.apply(thisValue, args); }; } - html = _.trim(html.slice(i + 1, -1)); - var isClosing = html[html.length - 1] === "/"; - if (isClosing) html = _.trim(html.slice(0, -1)); - return { - html: html, - closing: isClosing - }; -} -/** - * shallow copy - * - * @param {Object} obj - * @return {Object} - */ -function shallowCopyObject(obj) { - var ret = {}; - for (var i in obj) { - ret[i] = obj[i]; + if (!freeze) { + freeze = function freeze(x) { + return x; + }; } - return ret; -} -/** - * FilterXSS class - * - * @param {Object} options - * whiteList, onTag, onTagAttr, onIgnoreTag, - * onIgnoreTagAttr, safeAttrValue, escapeHtml - * stripIgnoreTagBody, allowCommentTag, stripBlankChar - * css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter` - */ -function FilterXSS(options) { - options = shallowCopyObject(options || {}); + if (!seal) { + seal = function seal(x) { + return x; + }; + } - if (options.stripIgnoreTag) { - if (options.onIgnoreTag) { - console.error( - 'Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time' - ); + if (!construct) { + construct = function construct(Func, args) { + return new (Function.prototype.bind.apply(Func, [null].concat(_toConsumableArray(args))))(); + }; + } + + var arrayForEach = unapply(Array.prototype.forEach); + var arrayPop = unapply(Array.prototype.pop); + var arrayPush = unapply(Array.prototype.push); + + var stringToLowerCase = unapply(String.prototype.toLowerCase); + var stringMatch = unapply(String.prototype.match); + var stringReplace = unapply(String.prototype.replace); + var stringIndexOf = unapply(String.prototype.indexOf); + var stringTrim = unapply(String.prototype.trim); + + var regExpTest = unapply(RegExp.prototype.test); + + var typeErrorCreate = unconstruct(TypeError); + + function unapply(func) { + return function (thisArg) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return apply(func, thisArg, args); + }; + } + + function unconstruct(func) { + return function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return construct(func, args); + }; + } + + /* Add properties to a lookup table */ + function addToSet(set, array) { + if (setPrototypeOf) { + // Make 'in' and truthy checks like Boolean(set.constructor) + // independent of any properties defined on Object.prototype. + // Prevent prototype setters from intercepting set as a this value. + setPrototypeOf(set, null); } - options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll; + + var l = array.length; + while (l--) { + var element = array[l]; + if (typeof element === 'string') { + var lcElement = stringToLowerCase(element); + if (lcElement !== element) { + // Config presets (e.g. tags.js, attrs.js) are immutable. + if (!isFrozen(array)) { + array[l] = lcElement; + } + + element = lcElement; + } + } + + set[element] = true; + } + + return set; } - options.whiteList = options.whiteList || DEFAULT.whiteList; - options.onTag = options.onTag || DEFAULT.onTag; - options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr; - options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag; - options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr; - options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue; - options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml; - this.options = options; + /* Shallow clone an object */ + function clone(object) { + var newObject = create(null); - if (options.css === false) { - this.cssFilter = false; - } else { - options.css = options.css || {}; - this.cssFilter = new FilterCSS(options.css); - } -} + var property = void 0; + for (property in object) { + if (apply(hasOwnProperty, object, [property])) { + newObject[property] = object[property]; + } + } -/** - * start process and returns result - * - * @param {String} html - * @return {String} - */ -FilterXSS.prototype.process = function(html) { - // compatible with the input - html = html || ""; - html = html.toString(); - if (!html) return ""; - - var me = this; - var options = me.options; - var whiteList = options.whiteList; - var onTag = options.onTag; - var onIgnoreTag = options.onIgnoreTag; - var onTagAttr = options.onTagAttr; - var onIgnoreTagAttr = options.onIgnoreTagAttr; - var safeAttrValue = options.safeAttrValue; - var escapeHtml = options.escapeHtml; - var cssFilter = me.cssFilter; - - // remove invisible characters - if (options.stripBlankChar) { - html = DEFAULT.stripBlankChar(html); + return newObject; } - // remove html comments - if (!options.allowCommentTag) { - html = DEFAULT.stripCommentTag(html); - } - - // if enable stripIgnoreTagBody - var stripIgnoreTagBody = false; - if (options.stripIgnoreTagBody) { - var stripIgnoreTagBody = DEFAULT.StripTagBody( - options.stripIgnoreTagBody, - onIgnoreTag - ); - onIgnoreTag = stripIgnoreTagBody.onIgnoreTag; - } - - var retHtml = parseTag( - html, - function(sourcePosition, position, tag, html, isClosing) { - var info = { - sourcePosition: sourcePosition, - position: position, - isClosing: isClosing, - isWhite: whiteList.hasOwnProperty(tag) - }; - - // call `onTag()` - var ret = onTag(tag, html, info); - if (!isNull(ret)) return ret; - - if (info.isWhite) { - if (info.isClosing) { - return ""; + /* IE10 doesn't support __lookupGetter__ so lets' + * simulate it. It also automatically checks + * if the prop is function or getter and behaves + * accordingly. */ + function lookupGetter(object, prop) { + while (object !== null) { + var desc = getOwnPropertyDescriptor(object, prop); + if (desc) { + if (desc.get) { + return unapply(desc.get); } - var attrs = getAttrs(html); - var whiteAttrList = whiteList[tag]; - var attrsHtml = parseAttr(attrs.html, function(name, value) { - // call `onTagAttr()` - var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1; - var ret = onTagAttr(tag, name, value, isWhiteAttr); - if (!isNull(ret)) return ret; - - if (isWhiteAttr) { - // call `safeAttrValue()` - value = safeAttrValue(tag, name, value, cssFilter); - if (value) { - return name + '="' + value + '"'; - } else { - return name; - } - } else { - // call `onIgnoreTagAttr()` - var ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr); - if (!isNull(ret)) return ret; - return; - } - }); - - // build new tag html - var html = "<" + tag; - if (attrsHtml) html += " " + attrsHtml; - if (attrs.closing) html += " /"; - html += ">"; - return html; - } else { - // call `onIgnoreTag()` - var ret = onIgnoreTag(tag, html, info); - if (!isNull(ret)) return ret; - return escapeHtml(html); + if (typeof desc.value === 'function') { + return unapply(desc.value); + } } - }, - escapeHtml + + object = getPrototypeOf(object); + } + + function fallbackValue(element) { + console.warn('fallback value for', element); + return null; + } + + return fallbackValue; + } + + var html = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); + + // SVG + var svg = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']); + + var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); + + // List of SVG elements that are disallowed by default. + // We still need to know them so that we can do namespace + // checks properly in case one wants to add them to + // allow-list. + var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'feimage', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']); + + var mathMl = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']); + + // Similarly to SVG, we want to know all MathML elements, + // even those that we disallow by default. + var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']); + + var text = freeze(['#text']); + + var html$1 = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']); + + var svg$1 = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']); + + var mathMl$1 = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']); + + var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']); + + // eslint-disable-next-line unicorn/better-regex + var MUSTACHE_EXPR = seal(/\{\{[\s\S]*|[\s\S]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode + var ERB_EXPR = seal(/<%[\s\S]*|[\s\S]*%>/gm); + var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape + var ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape + var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape + ); + var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); + var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex ); - // if enable stripIgnoreTagBody - if (stripIgnoreTagBody) { - retHtml = stripIgnoreTagBody.remove(retHtml); - } + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - return retHtml; -}; + function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } -module.exports = FilterXSS; + var getGlobal = function getGlobal() { + return typeof window === 'undefined' ? null : window; + }; -},{"./default":1,"./parser":3,"./util":4,"cssfilter":8}],6:[function(require,module,exports){ -/** - * cssfilter - * - * @author 老雷 - */ + /** + * Creates a no-op policy for internal use only. + * Don't export this function outside this module! + * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory. + * @param {Document} document The document object (to determine policy name suffix) + * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types + * are not supported). + */ + var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) { + if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') { + return null; + } -var DEFAULT = require('./default'); -var parseStyle = require('./parser'); -var _ = require('./util'); + // Allow the callers to control the unique policy name + // by adding a data-tt-policy-suffix to the script element with the DOMPurify. + // Policy creation with duplicate names throws in Trusted Types. + var suffix = null; + var ATTR_NAME = 'data-tt-policy-suffix'; + if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) { + suffix = document.currentScript.getAttribute(ATTR_NAME); + } + var policyName = 'dompurify' + (suffix ? '#' + suffix : ''); -/** - * 返回值是否为空 - * - * @param {Object} obj - * @return {Boolean} - */ -function isNull (obj) { - return (obj === undefined || obj === null); -} + try { + return trustedTypes.createPolicy(policyName, { + createHTML: function createHTML(html$$1) { + return html$$1; + } + }); + } catch (_) { + // Policy creation failed (most likely another DOMPurify script has + // already run). Skip creating the policy, as this will only cause errors + // if TT are enforced. + console.warn('TrustedTypes policy ' + policyName + ' could not be created.'); + return null; + } + }; -/** - * 浅拷贝对象 - * - * @param {Object} obj - * @return {Object} - */ -function shallowCopyObject (obj) { - var ret = {}; - for (var i in obj) { - ret[i] = obj[i]; - } - return ret; -} + function createDOMPurify() { + var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); -/** - * 创建CSS过滤器 - * - * @param {Object} options - * - {Object} whiteList - * - {Function} onAttr - * - {Function} onIgnoreAttr - * - {Function} safeAttrValue - */ -function FilterCSS (options) { - options = shallowCopyObject(options || {}); - options.whiteList = options.whiteList || DEFAULT.whiteList; - options.onAttr = options.onAttr || DEFAULT.onAttr; - options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr; - options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue; - this.options = options; -} - -FilterCSS.prototype.process = function (css) { - // 兼容各种奇葩输入 - css = css || ''; - css = css.toString(); - if (!css) return ''; - - var me = this; - var options = me.options; - var whiteList = options.whiteList; - var onAttr = options.onAttr; - var onIgnoreAttr = options.onIgnoreAttr; - var safeAttrValue = options.safeAttrValue; - - var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) { - - var check = whiteList[name]; - var isWhite = false; - if (check === true) isWhite = check; - else if (typeof check === 'function') isWhite = check(value); - else if (check instanceof RegExp) isWhite = check.test(value); - if (isWhite !== true) isWhite = false; - - // 如果过滤后 value 为空则直接忽略 - value = safeAttrValue(name, value); - if (!value) return; - - var opts = { - position: position, - sourcePosition: sourcePosition, - source: source, - isWhite: isWhite + var DOMPurify = function DOMPurify(root) { + return createDOMPurify(root); }; - if (isWhite) { + /** + * Version label, exposed for easier checks + * if DOMPurify is up to date or not + */ + DOMPurify.version = '2.3.1'; - var ret = onAttr(name, value, opts); - if (isNull(ret)) { - return name + ':' + value; - } else { - return ret; - } + /** + * Array of elements that DOMPurify removed during sanitation. + * Empty if nothing was removed. + */ + DOMPurify.removed = []; - } else { - - var ret = onIgnoreAttr(name, value, opts); - if (!isNull(ret)) { - return ret; - } + if (!window || !window.document || window.document.nodeType !== 9) { + // Not running in a browser, provide a factory function + // so that you can pass your own Window + DOMPurify.isSupported = false; + return DOMPurify; } - }); - return retCSS; -}; + var originalDocument = window.document; + + var document = window.document; + var DocumentFragment = window.DocumentFragment, + HTMLTemplateElement = window.HTMLTemplateElement, + Node = window.Node, + Element = window.Element, + NodeFilter = window.NodeFilter, + _window$NamedNodeMap = window.NamedNodeMap, + NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap, + Text = window.Text, + Comment = window.Comment, + DOMParser = window.DOMParser, + trustedTypes = window.trustedTypes; -module.exports = FilterCSS; + var ElementPrototype = Element.prototype; -},{"./default":7,"./parser":9,"./util":10}],7:[function(require,module,exports){ -/** - * cssfilter - * - * @author 老雷 - */ + var cloneNode = lookupGetter(ElementPrototype, 'cloneNode'); + var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling'); + var getChildNodes = lookupGetter(ElementPrototype, 'childNodes'); + var getParentNode = lookupGetter(ElementPrototype, 'parentNode'); -function getDefaultWhiteList () { - // 白名单值说明: - // true: 允许该属性 - // Function: function (val) { } 返回true表示允许该属性,其他值均表示不允许 - // RegExp: regexp.test(val) 返回true表示允许该属性,其他值均表示不允许 - // 除上面列出的值外均表示不允许 - var whiteList = {}; + // As per issue #47, the web-components registry is inherited by a + // new document created via createHTMLDocument. As per the spec + // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) + // a new empty registry is used when creating a template contents owner + // document, so we use that as our parent document to ensure nothing + // is inherited. + if (typeof HTMLTemplateElement === 'function') { + var template = document.createElement('template'); + if (template.content && template.content.ownerDocument) { + document = template.content.ownerDocument; + } + } - whiteList['align-content'] = false; // default: auto - whiteList['align-items'] = false; // default: auto - whiteList['align-self'] = false; // default: auto - whiteList['alignment-adjust'] = false; // default: auto - whiteList['alignment-baseline'] = false; // default: baseline - whiteList['all'] = false; // default: depending on individual properties - whiteList['anchor-point'] = false; // default: none - whiteList['animation'] = false; // default: depending on individual properties - whiteList['animation-delay'] = false; // default: 0 - whiteList['animation-direction'] = false; // default: normal - whiteList['animation-duration'] = false; // default: 0 - whiteList['animation-fill-mode'] = false; // default: none - whiteList['animation-iteration-count'] = false; // default: 1 - whiteList['animation-name'] = false; // default: none - whiteList['animation-play-state'] = false; // default: running - whiteList['animation-timing-function'] = false; // default: ease - whiteList['azimuth'] = false; // default: center - whiteList['backface-visibility'] = false; // default: visible - whiteList['background'] = true; // default: depending on individual properties - whiteList['background-attachment'] = true; // default: scroll - whiteList['background-clip'] = true; // default: border-box - whiteList['background-color'] = true; // default: transparent - whiteList['background-image'] = true; // default: none - whiteList['background-origin'] = true; // default: padding-box - whiteList['background-position'] = true; // default: 0% 0% - whiteList['background-repeat'] = true; // default: repeat - whiteList['background-size'] = true; // default: auto - whiteList['baseline-shift'] = false; // default: baseline - whiteList['binding'] = false; // default: none - whiteList['bleed'] = false; // default: 6pt - whiteList['bookmark-label'] = false; // default: content() - whiteList['bookmark-level'] = false; // default: none - whiteList['bookmark-state'] = false; // default: open - whiteList['border'] = true; // default: depending on individual properties - whiteList['border-bottom'] = true; // default: depending on individual properties - whiteList['border-bottom-color'] = true; // default: current color - whiteList['border-bottom-left-radius'] = true; // default: 0 - whiteList['border-bottom-right-radius'] = true; // default: 0 - whiteList['border-bottom-style'] = true; // default: none - whiteList['border-bottom-width'] = true; // default: medium - whiteList['border-collapse'] = true; // default: separate - whiteList['border-color'] = true; // default: depending on individual properties - whiteList['border-image'] = true; // default: none - whiteList['border-image-outset'] = true; // default: 0 - whiteList['border-image-repeat'] = true; // default: stretch - whiteList['border-image-slice'] = true; // default: 100% - whiteList['border-image-source'] = true; // default: none - whiteList['border-image-width'] = true; // default: 1 - whiteList['border-left'] = true; // default: depending on individual properties - whiteList['border-left-color'] = true; // default: current color - whiteList['border-left-style'] = true; // default: none - whiteList['border-left-width'] = true; // default: medium - whiteList['border-radius'] = true; // default: 0 - whiteList['border-right'] = true; // default: depending on individual properties - whiteList['border-right-color'] = true; // default: current color - whiteList['border-right-style'] = true; // default: none - whiteList['border-right-width'] = true; // default: medium - whiteList['border-spacing'] = true; // default: 0 - whiteList['border-style'] = true; // default: depending on individual properties - whiteList['border-top'] = true; // default: depending on individual properties - whiteList['border-top-color'] = true; // default: current color - whiteList['border-top-left-radius'] = true; // default: 0 - whiteList['border-top-right-radius'] = true; // default: 0 - whiteList['border-top-style'] = true; // default: none - whiteList['border-top-width'] = true; // default: medium - whiteList['border-width'] = true; // default: depending on individual properties - whiteList['bottom'] = false; // default: auto - whiteList['box-decoration-break'] = true; // default: slice - whiteList['box-shadow'] = true; // default: none - whiteList['box-sizing'] = true; // default: content-box - whiteList['box-snap'] = true; // default: none - whiteList['box-suppress'] = true; // default: show - whiteList['break-after'] = true; // default: auto - whiteList['break-before'] = true; // default: auto - whiteList['break-inside'] = true; // default: auto - whiteList['caption-side'] = false; // default: top - whiteList['chains'] = false; // default: none - whiteList['clear'] = true; // default: none - whiteList['clip'] = false; // default: auto - whiteList['clip-path'] = false; // default: none - whiteList['clip-rule'] = false; // default: nonzero - whiteList['color'] = true; // default: implementation dependent - whiteList['color-interpolation-filters'] = true; // default: auto - whiteList['column-count'] = false; // default: auto - whiteList['column-fill'] = false; // default: balance - whiteList['column-gap'] = false; // default: normal - whiteList['column-rule'] = false; // default: depending on individual properties - whiteList['column-rule-color'] = false; // default: current color - whiteList['column-rule-style'] = false; // default: medium - whiteList['column-rule-width'] = false; // default: medium - whiteList['column-span'] = false; // default: none - whiteList['column-width'] = false; // default: auto - whiteList['columns'] = false; // default: depending on individual properties - whiteList['contain'] = false; // default: none - whiteList['content'] = false; // default: normal - whiteList['counter-increment'] = false; // default: none - whiteList['counter-reset'] = false; // default: none - whiteList['counter-set'] = false; // default: none - whiteList['crop'] = false; // default: auto - whiteList['cue'] = false; // default: depending on individual properties - whiteList['cue-after'] = false; // default: none - whiteList['cue-before'] = false; // default: none - whiteList['cursor'] = false; // default: auto - whiteList['direction'] = false; // default: ltr - whiteList['display'] = true; // default: depending on individual properties - whiteList['display-inside'] = true; // default: auto - whiteList['display-list'] = true; // default: none - whiteList['display-outside'] = true; // default: inline-level - whiteList['dominant-baseline'] = false; // default: auto - whiteList['elevation'] = false; // default: level - whiteList['empty-cells'] = false; // default: show - whiteList['filter'] = false; // default: none - whiteList['flex'] = false; // default: depending on individual properties - whiteList['flex-basis'] = false; // default: auto - whiteList['flex-direction'] = false; // default: row - whiteList['flex-flow'] = false; // default: depending on individual properties - whiteList['flex-grow'] = false; // default: 0 - whiteList['flex-shrink'] = false; // default: 1 - whiteList['flex-wrap'] = false; // default: nowrap - whiteList['float'] = false; // default: none - whiteList['float-offset'] = false; // default: 0 0 - whiteList['flood-color'] = false; // default: black - whiteList['flood-opacity'] = false; // default: 1 - whiteList['flow-from'] = false; // default: none - whiteList['flow-into'] = false; // default: none - whiteList['font'] = true; // default: depending on individual properties - whiteList['font-family'] = true; // default: implementation dependent - whiteList['font-feature-settings'] = true; // default: normal - whiteList['font-kerning'] = true; // default: auto - whiteList['font-language-override'] = true; // default: normal - whiteList['font-size'] = true; // default: medium - whiteList['font-size-adjust'] = true; // default: none - whiteList['font-stretch'] = true; // default: normal - whiteList['font-style'] = true; // default: normal - whiteList['font-synthesis'] = true; // default: weight style - whiteList['font-variant'] = true; // default: normal - whiteList['font-variant-alternates'] = true; // default: normal - whiteList['font-variant-caps'] = true; // default: normal - whiteList['font-variant-east-asian'] = true; // default: normal - whiteList['font-variant-ligatures'] = true; // default: normal - whiteList['font-variant-numeric'] = true; // default: normal - whiteList['font-variant-position'] = true; // default: normal - whiteList['font-weight'] = true; // default: normal - whiteList['grid'] = false; // default: depending on individual properties - whiteList['grid-area'] = false; // default: depending on individual properties - whiteList['grid-auto-columns'] = false; // default: auto - whiteList['grid-auto-flow'] = false; // default: none - whiteList['grid-auto-rows'] = false; // default: auto - whiteList['grid-column'] = false; // default: depending on individual properties - whiteList['grid-column-end'] = false; // default: auto - whiteList['grid-column-start'] = false; // default: auto - whiteList['grid-row'] = false; // default: depending on individual properties - whiteList['grid-row-end'] = false; // default: auto - whiteList['grid-row-start'] = false; // default: auto - whiteList['grid-template'] = false; // default: depending on individual properties - whiteList['grid-template-areas'] = false; // default: none - whiteList['grid-template-columns'] = false; // default: none - whiteList['grid-template-rows'] = false; // default: none - whiteList['hanging-punctuation'] = false; // default: none - whiteList['height'] = true; // default: auto - whiteList['hyphens'] = false; // default: manual - whiteList['icon'] = false; // default: auto - whiteList['image-orientation'] = false; // default: auto - whiteList['image-resolution'] = false; // default: normal - whiteList['ime-mode'] = false; // default: auto - whiteList['initial-letters'] = false; // default: normal - whiteList['inline-box-align'] = false; // default: last - whiteList['justify-content'] = false; // default: auto - whiteList['justify-items'] = false; // default: auto - whiteList['justify-self'] = false; // default: auto - whiteList['left'] = false; // default: auto - whiteList['letter-spacing'] = true; // default: normal - whiteList['lighting-color'] = true; // default: white - whiteList['line-box-contain'] = false; // default: block inline replaced - whiteList['line-break'] = false; // default: auto - whiteList['line-grid'] = false; // default: match-parent - whiteList['line-height'] = false; // default: normal - whiteList['line-snap'] = false; // default: none - whiteList['line-stacking'] = false; // default: depending on individual properties - whiteList['line-stacking-ruby'] = false; // default: exclude-ruby - whiteList['line-stacking-shift'] = false; // default: consider-shifts - whiteList['line-stacking-strategy'] = false; // default: inline-line-height - whiteList['list-style'] = true; // default: depending on individual properties - whiteList['list-style-image'] = true; // default: none - whiteList['list-style-position'] = true; // default: outside - whiteList['list-style-type'] = true; // default: disc - whiteList['margin'] = true; // default: depending on individual properties - whiteList['margin-bottom'] = true; // default: 0 - whiteList['margin-left'] = true; // default: 0 - whiteList['margin-right'] = true; // default: 0 - whiteList['margin-top'] = true; // default: 0 - whiteList['marker-offset'] = false; // default: auto - whiteList['marker-side'] = false; // default: list-item - whiteList['marks'] = false; // default: none - whiteList['mask'] = false; // default: border-box - whiteList['mask-box'] = false; // default: see individual properties - whiteList['mask-box-outset'] = false; // default: 0 - whiteList['mask-box-repeat'] = false; // default: stretch - whiteList['mask-box-slice'] = false; // default: 0 fill - whiteList['mask-box-source'] = false; // default: none - whiteList['mask-box-width'] = false; // default: auto - whiteList['mask-clip'] = false; // default: border-box - whiteList['mask-image'] = false; // default: none - whiteList['mask-origin'] = false; // default: border-box - whiteList['mask-position'] = false; // default: center - whiteList['mask-repeat'] = false; // default: no-repeat - whiteList['mask-size'] = false; // default: border-box - whiteList['mask-source-type'] = false; // default: auto - whiteList['mask-type'] = false; // default: luminance - whiteList['max-height'] = true; // default: none - whiteList['max-lines'] = false; // default: none - whiteList['max-width'] = true; // default: none - whiteList['min-height'] = true; // default: 0 - whiteList['min-width'] = true; // default: 0 - whiteList['move-to'] = false; // default: normal - whiteList['nav-down'] = false; // default: auto - whiteList['nav-index'] = false; // default: auto - whiteList['nav-left'] = false; // default: auto - whiteList['nav-right'] = false; // default: auto - whiteList['nav-up'] = false; // default: auto - whiteList['object-fit'] = false; // default: fill - whiteList['object-position'] = false; // default: 50% 50% - whiteList['opacity'] = false; // default: 1 - whiteList['order'] = false; // default: 0 - whiteList['orphans'] = false; // default: 2 - whiteList['outline'] = false; // default: depending on individual properties - whiteList['outline-color'] = false; // default: invert - whiteList['outline-offset'] = false; // default: 0 - whiteList['outline-style'] = false; // default: none - whiteList['outline-width'] = false; // default: medium - whiteList['overflow'] = false; // default: depending on individual properties - whiteList['overflow-wrap'] = false; // default: normal - whiteList['overflow-x'] = false; // default: visible - whiteList['overflow-y'] = false; // default: visible - whiteList['padding'] = true; // default: depending on individual properties - whiteList['padding-bottom'] = true; // default: 0 - whiteList['padding-left'] = true; // default: 0 - whiteList['padding-right'] = true; // default: 0 - whiteList['padding-top'] = true; // default: 0 - whiteList['page'] = false; // default: auto - whiteList['page-break-after'] = false; // default: auto - whiteList['page-break-before'] = false; // default: auto - whiteList['page-break-inside'] = false; // default: auto - whiteList['page-policy'] = false; // default: start - whiteList['pause'] = false; // default: implementation dependent - whiteList['pause-after'] = false; // default: implementation dependent - whiteList['pause-before'] = false; // default: implementation dependent - whiteList['perspective'] = false; // default: none - whiteList['perspective-origin'] = false; // default: 50% 50% - whiteList['pitch'] = false; // default: medium - whiteList['pitch-range'] = false; // default: 50 - whiteList['play-during'] = false; // default: auto - whiteList['position'] = false; // default: static - whiteList['presentation-level'] = false; // default: 0 - whiteList['quotes'] = false; // default: text - whiteList['region-fragment'] = false; // default: auto - whiteList['resize'] = false; // default: none - whiteList['rest'] = false; // default: depending on individual properties - whiteList['rest-after'] = false; // default: none - whiteList['rest-before'] = false; // default: none - whiteList['richness'] = false; // default: 50 - whiteList['right'] = false; // default: auto - whiteList['rotation'] = false; // default: 0 - whiteList['rotation-point'] = false; // default: 50% 50% - whiteList['ruby-align'] = false; // default: auto - whiteList['ruby-merge'] = false; // default: separate - whiteList['ruby-position'] = false; // default: before - whiteList['shape-image-threshold'] = false; // default: 0.0 - whiteList['shape-outside'] = false; // default: none - whiteList['shape-margin'] = false; // default: 0 - whiteList['size'] = false; // default: auto - whiteList['speak'] = false; // default: auto - whiteList['speak-as'] = false; // default: normal - whiteList['speak-header'] = false; // default: once - whiteList['speak-numeral'] = false; // default: continuous - whiteList['speak-punctuation'] = false; // default: none - whiteList['speech-rate'] = false; // default: medium - whiteList['stress'] = false; // default: 50 - whiteList['string-set'] = false; // default: none - whiteList['tab-size'] = false; // default: 8 - whiteList['table-layout'] = false; // default: auto - whiteList['text-align'] = true; // default: start - whiteList['text-align-last'] = true; // default: auto - whiteList['text-combine-upright'] = true; // default: none - whiteList['text-decoration'] = true; // default: none - whiteList['text-decoration-color'] = true; // default: currentColor - whiteList['text-decoration-line'] = true; // default: none - whiteList['text-decoration-skip'] = true; // default: objects - whiteList['text-decoration-style'] = true; // default: solid - whiteList['text-emphasis'] = true; // default: depending on individual properties - whiteList['text-emphasis-color'] = true; // default: currentColor - whiteList['text-emphasis-position'] = true; // default: over right - whiteList['text-emphasis-style'] = true; // default: none - whiteList['text-height'] = true; // default: auto - whiteList['text-indent'] = true; // default: 0 - whiteList['text-justify'] = true; // default: auto - whiteList['text-orientation'] = true; // default: mixed - whiteList['text-overflow'] = true; // default: clip - whiteList['text-shadow'] = true; // default: none - whiteList['text-space-collapse'] = true; // default: collapse - whiteList['text-transform'] = true; // default: none - whiteList['text-underline-position'] = true; // default: auto - whiteList['text-wrap'] = true; // default: normal - whiteList['top'] = false; // default: auto - whiteList['transform'] = false; // default: none - whiteList['transform-origin'] = false; // default: 50% 50% 0 - whiteList['transform-style'] = false; // default: flat - whiteList['transition'] = false; // default: depending on individual properties - whiteList['transition-delay'] = false; // default: 0s - whiteList['transition-duration'] = false; // default: 0s - whiteList['transition-property'] = false; // default: all - whiteList['transition-timing-function'] = false; // default: ease - whiteList['unicode-bidi'] = false; // default: normal - whiteList['vertical-align'] = false; // default: baseline - whiteList['visibility'] = false; // default: visible - whiteList['voice-balance'] = false; // default: center - whiteList['voice-duration'] = false; // default: auto - whiteList['voice-family'] = false; // default: implementation dependent - whiteList['voice-pitch'] = false; // default: medium - whiteList['voice-range'] = false; // default: medium - whiteList['voice-rate'] = false; // default: normal - whiteList['voice-stress'] = false; // default: normal - whiteList['voice-volume'] = false; // default: medium - whiteList['volume'] = false; // default: medium - whiteList['white-space'] = false; // default: normal - whiteList['widows'] = false; // default: 2 - whiteList['width'] = true; // default: auto - whiteList['will-change'] = false; // default: auto - whiteList['word-break'] = true; // default: normal - whiteList['word-spacing'] = true; // default: normal - whiteList['word-wrap'] = true; // default: normal - whiteList['wrap-flow'] = false; // default: auto - whiteList['wrap-through'] = false; // default: wrap - whiteList['writing-mode'] = false; // default: horizontal-tb - whiteList['z-index'] = false; // default: auto + var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument); + var emptyHTML = trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML('') : ''; - return whiteList; -} + var _document = document, + implementation = _document.implementation, + createNodeIterator = _document.createNodeIterator, + createDocumentFragment = _document.createDocumentFragment, + getElementsByTagName = _document.getElementsByTagName; + var importNode = originalDocument.importNode; -/** - * 匹配到白名单上的一个属性时 - * - * @param {String} name - * @param {String} value - * @param {Object} options - * @return {String} - */ -function onAttr (name, value, options) { - // do nothing -} + var documentMode = {}; + try { + documentMode = clone(document).documentMode ? document.documentMode : {}; + } catch (_) {} -/** - * 匹配到不在白名单上的一个属性时 - * - * @param {String} name - * @param {String} value - * @param {Object} options - * @return {String} - */ -function onIgnoreAttr (name, value, options) { - // do nothing -} + var hooks = {}; -var REGEXP_URL_JAVASCRIPT = /javascript\s*\:/img; + /** + * Expose whether this browser supports running the full DOMPurify. + */ + DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9; -/** - * 过滤属性值 - * - * @param {String} name - * @param {String} value - * @return {String} - */ -function safeAttrValue(name, value) { - if (REGEXP_URL_JAVASCRIPT.test(value)) return ''; - return value; -} + var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR, + ERB_EXPR$$1 = ERB_EXPR, + DATA_ATTR$$1 = DATA_ATTR, + ARIA_ATTR$$1 = ARIA_ATTR, + IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA, + ATTR_WHITESPACE$$1 = ATTR_WHITESPACE; + var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI; + /** + * We consider the elements and attributes below to be safe. Ideally + * don't add any new ones but feel free to remove unwanted ones. + */ -exports.whiteList = getDefaultWhiteList(); -exports.getDefaultWhiteList = getDefaultWhiteList; -exports.onAttr = onAttr; -exports.onIgnoreAttr = onIgnoreAttr; -exports.safeAttrValue = safeAttrValue; + /* allowed element names */ -},{}],8:[function(require,module,exports){ -/** - * cssfilter - * - * @author 老雷 - */ + var ALLOWED_TAGS = null; + var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(html), _toConsumableArray$1(svg), _toConsumableArray$1(svgFilters), _toConsumableArray$1(mathMl), _toConsumableArray$1(text))); -var DEFAULT = require('./default'); -var FilterCSS = require('./css'); + /* Allowed attribute names */ + var ALLOWED_ATTR = null; + var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray$1(html$1), _toConsumableArray$1(svg$1), _toConsumableArray$1(mathMl$1), _toConsumableArray$1(xml))); + /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ + var FORBID_TAGS = null; -/** - * XSS过滤 - * - * @param {String} css 要过滤的CSS代码 - * @param {Object} options 选项:whiteList, onAttr, onIgnoreAttr - * @return {String} - */ -function filterCSS (html, options) { - var xss = new FilterCSS(options); - return xss.process(html); -} + /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ + var FORBID_ATTR = null; + /* Decide if ARIA attributes are okay */ + var ALLOW_ARIA_ATTR = true; -// 输出 -exports = module.exports = filterCSS; -exports.FilterCSS = FilterCSS; -for (var i in DEFAULT) exports[i] = DEFAULT[i]; + /* Decide if custom data attributes are okay */ + var ALLOW_DATA_ATTR = true; -// 在浏览器端使用 -if (typeof window !== 'undefined') { - window.filterCSS = module.exports; -} + /* Decide if unknown protocols are okay */ + var ALLOW_UNKNOWN_PROTOCOLS = false; -},{"./css":6,"./default":7}],9:[function(require,module,exports){ -/** - * cssfilter - * - * @author 老雷 - */ + /* Output should be safe for common template engines. + * This means, DOMPurify removes data attributes, mustaches and ERB + */ + var SAFE_FOR_TEMPLATES = false; -var _ = require('./util'); + /* Decide if document with ... should be returned */ + var WHOLE_DOCUMENT = false; + /* Track whether config is already set on this instance of DOMPurify. */ + var SET_CONFIG = false; -/** - * 解析style - * - * @param {String} css - * @param {Function} onAttr 处理属性的函数 - * 参数格式: function (sourcePosition, position, name, value, source) - * @return {String} - */ -function parseStyle (css, onAttr) { - css = _.trimRight(css); - if (css[css.length - 1] !== ';') css += ';'; - var cssLength = css.length; - var isParenthesisOpen = false; - var lastPos = 0; - var i = 0; - var retCSS = ''; + /* Decide if all elements (e.g. style, script) must be children of + * document.body. By default, browsers might move them to document.head */ + var FORCE_BODY = false; - function addNewAttr () { - // 如果没有正常的闭合圆括号,则直接忽略当前属性 - if (!isParenthesisOpen) { - var source = _.trim(css.slice(lastPos, i)); - var j = source.indexOf(':'); - if (j !== -1) { - var name = _.trim(source.slice(0, j)); - var value = _.trim(source.slice(j + 1)); - // 必须有属性名称 - if (name) { - var ret = onAttr(lastPos, retCSS.length, name, value, source); - if (ret) retCSS += ret + '; '; + /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported). + * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead + */ + var RETURN_DOM = false; + + /* Decide if a DOM `DocumentFragment` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported) */ + var RETURN_DOM_FRAGMENT = false; + + /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM + * `Node` is imported into the current `Document`. If this flag is not enabled the + * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by + * DOMPurify. + * + * This defaults to `true` starting DOMPurify 2.2.0. Note that setting it to `false` + * might cause XSS from attacks hidden in closed shadowroots in case the browser + * supports Declarative Shadow: DOM https://web.dev/declarative-shadow-dom/ + */ + var RETURN_DOM_IMPORT = true; + + /* Try to return a Trusted Type object instead of a string, return a string in + * case Trusted Types are not supported */ + var RETURN_TRUSTED_TYPE = false; + + /* Output should be free from DOM clobbering attacks? */ + var SANITIZE_DOM = true; + + /* Keep element content when removing element? */ + var KEEP_CONTENT = true; + + /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead + * of importing it into a new Document and returning a sanitized copy */ + var IN_PLACE = false; + + /* Allow usage of profiles like html, svg and mathMl */ + var USE_PROFILES = {}; + + /* Tags to ignore content of when KEEP_CONTENT is true */ + var FORBID_CONTENTS = null; + var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']); + + /* Tags that are safe for data: URIs */ + var DATA_URI_TAGS = null; + var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']); + + /* Attributes safe for values like "javascript:" */ + var URI_SAFE_ATTRIBUTES = null; + var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']); + + var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; + var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; + var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; + /* Document namespace */ + var NAMESPACE = HTML_NAMESPACE; + var IS_EMPTY_INPUT = false; + + /* Keep a reference to config to pass to hooks */ + var CONFIG = null; + + /* Ideally, do not touch anything below this line */ + /* ______________________________________________ */ + + var formElement = document.createElement('form'); + + /** + * _parseConfig + * + * @param {Object} cfg optional config literal + */ + // eslint-disable-next-line complexity + var _parseConfig = function _parseConfig(cfg) { + if (CONFIG && CONFIG === cfg) { + return; + } + + /* Shield configuration object from tampering */ + if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') { + cfg = {}; + } + + /* Shield configuration object from prototype pollution */ + cfg = clone(cfg); + + /* Set configuration parameters */ + ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS; + ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR; + URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES; + DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS; + FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS; + FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {}; + FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {}; + USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false; + ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true + ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true + ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false + SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false + WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false + RETURN_DOM = cfg.RETURN_DOM || false; // Default false + RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false + RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT !== false; // Default true + RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false + FORCE_BODY = cfg.FORCE_BODY || false; // Default false + SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true + KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true + IN_PLACE = cfg.IN_PLACE || false; // Default false + IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1; + NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; + if (SAFE_FOR_TEMPLATES) { + ALLOW_DATA_ATTR = false; + } + + if (RETURN_DOM_FRAGMENT) { + RETURN_DOM = true; + } + + /* Parse profile info */ + if (USE_PROFILES) { + ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(text))); + ALLOWED_ATTR = []; + if (USE_PROFILES.html === true) { + addToSet(ALLOWED_TAGS, html); + addToSet(ALLOWED_ATTR, html$1); + } + + if (USE_PROFILES.svg === true) { + addToSet(ALLOWED_TAGS, svg); + addToSet(ALLOWED_ATTR, svg$1); + addToSet(ALLOWED_ATTR, xml); + } + + if (USE_PROFILES.svgFilters === true) { + addToSet(ALLOWED_TAGS, svgFilters); + addToSet(ALLOWED_ATTR, svg$1); + addToSet(ALLOWED_ATTR, xml); + } + + if (USE_PROFILES.mathMl === true) { + addToSet(ALLOWED_TAGS, mathMl); + addToSet(ALLOWED_ATTR, mathMl$1); + addToSet(ALLOWED_ATTR, xml); } } - } - lastPos = i + 1; - } - for (; i < cssLength; i++) { - var c = css[i]; - if (c === '/' && css[i + 1] === '*') { - // 备注开始 - var j = css.indexOf('*/', i + 2); - // 如果没有正常的备注结束,则后面的部分全部跳过 - if (j === -1) break; - // 直接将当前位置调到备注结尾,并且初始化状态 - i = j + 1; - lastPos = i + 1; - isParenthesisOpen = false; - } else if (c === '(') { - isParenthesisOpen = true; - } else if (c === ')') { - isParenthesisOpen = false; - } else if (c === ';') { - if (isParenthesisOpen) { - // 在圆括号里面,忽略 + /* Merge configuration parameters */ + if (cfg.ADD_TAGS) { + if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { + ALLOWED_TAGS = clone(ALLOWED_TAGS); + } + + addToSet(ALLOWED_TAGS, cfg.ADD_TAGS); + } + + if (cfg.ADD_ATTR) { + if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { + ALLOWED_ATTR = clone(ALLOWED_ATTR); + } + + addToSet(ALLOWED_ATTR, cfg.ADD_ATTR); + } + + if (cfg.ADD_URI_SAFE_ATTR) { + addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR); + } + + if (cfg.FORBID_CONTENTS) { + if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { + FORBID_CONTENTS = clone(FORBID_CONTENTS); + } + + addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS); + } + + /* Add #text in case KEEP_CONTENT is set to true */ + if (KEEP_CONTENT) { + ALLOWED_TAGS['#text'] = true; + } + + /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ + if (WHOLE_DOCUMENT) { + addToSet(ALLOWED_TAGS, ['html', 'head', 'body']); + } + + /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ + if (ALLOWED_TAGS.table) { + addToSet(ALLOWED_TAGS, ['tbody']); + delete FORBID_TAGS.tbody; + } + + // Prevent further manipulation of configuration. + // Not available in IE8, Safari 5, etc. + if (freeze) { + freeze(cfg); + } + + CONFIG = cfg; + }; + + var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']); + + var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); + + /* Keep track of all possible SVG and MathML tags + * so that we can perform the namespace checks + * correctly. */ + var ALL_SVG_TAGS = addToSet({}, svg); + addToSet(ALL_SVG_TAGS, svgFilters); + addToSet(ALL_SVG_TAGS, svgDisallowed); + + var ALL_MATHML_TAGS = addToSet({}, mathMl); + addToSet(ALL_MATHML_TAGS, mathMlDisallowed); + + /** + * + * + * @param {Element} element a DOM element whose namespace is being checked + * @returns {boolean} Return false if the element has a + * namespace that a spec-compliant parser would never + * return. Return true otherwise. + */ + var _checkValidNamespace = function _checkValidNamespace(element) { + var parent = getParentNode(element); + + // In JSDOM, if we're inside shadow DOM, then parentNode + // can be null. We just simulate parent in this case. + if (!parent || !parent.tagName) { + parent = { + namespaceURI: HTML_NAMESPACE, + tagName: 'template' + }; + } + + var tagName = stringToLowerCase(element.tagName); + var parentTagName = stringToLowerCase(parent.tagName); + + if (element.namespaceURI === SVG_NAMESPACE) { + // The only way to switch from HTML namespace to SVG + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'svg'; + } + + // The only way to switch from MathML to SVG is via + // svg if parent is either or MathML + // text integration points. + if (parent.namespaceURI === MATHML_NAMESPACE) { + return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]); + } + + // We only allow elements that are defined in SVG + // spec. All others are disallowed in SVG namespace. + return Boolean(ALL_SVG_TAGS[tagName]); + } + + if (element.namespaceURI === MATHML_NAMESPACE) { + // The only way to switch from HTML namespace to MathML + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'math'; + } + + // The only way to switch from SVG to MathML is via + // and HTML integration points + if (parent.namespaceURI === SVG_NAMESPACE) { + return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName]; + } + + // We only allow elements that are defined in MathML + // spec. All others are disallowed in MathML namespace. + return Boolean(ALL_MATHML_TAGS[tagName]); + } + + if (element.namespaceURI === HTML_NAMESPACE) { + // The only way to switch from SVG to HTML is via + // HTML integration points, and from MathML to HTML + // is via MathML text integration points + if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { + return false; + } + + if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { + return false; + } + + // Certain elements are allowed in both SVG and HTML + // namespace. We need to specify them explicitly + // so that they don't get erronously deleted from + // HTML namespace. + var commonSvgAndHTMLElements = addToSet({}, ['title', 'style', 'font', 'a', 'script']); + + // We disallow tags that are specific for MathML + // or SVG and should never appear in HTML namespace + return !ALL_MATHML_TAGS[tagName] && (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName]); + } + + // The code should never reach this place (this means + // that the element somehow got namespace that is not + // HTML, SVG or MathML). Return false just in case. + return false; + }; + + /** + * _forceRemove + * + * @param {Node} node a DOM node + */ + var _forceRemove = function _forceRemove(node) { + arrayPush(DOMPurify.removed, { element: node }); + try { + // eslint-disable-next-line unicorn/prefer-dom-node-remove + node.parentNode.removeChild(node); + } catch (_) { + try { + node.outerHTML = emptyHTML; + } catch (_) { + node.remove(); + } + } + }; + + /** + * _removeAttribute + * + * @param {String} name an Attribute name + * @param {Node} node a DOM node + */ + var _removeAttribute = function _removeAttribute(name, node) { + try { + arrayPush(DOMPurify.removed, { + attribute: node.getAttributeNode(name), + from: node + }); + } catch (_) { + arrayPush(DOMPurify.removed, { + attribute: null, + from: node + }); + } + + node.removeAttribute(name); + + // We void attribute values for unremovable "is"" attributes + if (name === 'is' && !ALLOWED_ATTR[name]) { + if (RETURN_DOM || RETURN_DOM_FRAGMENT) { + try { + _forceRemove(node); + } catch (_) {} + } else { + try { + node.setAttribute(name, ''); + } catch (_) {} + } + } + }; + + /** + * _initDocument + * + * @param {String} dirty a string of dirty markup + * @return {Document} a DOM, filled with the dirty markup + */ + var _initDocument = function _initDocument(dirty) { + /* Create a HTML document */ + var doc = void 0; + var leadingWhitespace = void 0; + + if (FORCE_BODY) { + dirty = '' + dirty; } else { - addNewAttr(); + /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ + var matches = stringMatch(dirty, /^[\r\n\t ]+/); + leadingWhitespace = matches && matches[0]; } - } else if (c === '\n') { - addNewAttr(); - } + + var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; + /* + * Use the DOMParser API by default, fallback later if needs be + * DOMParser not work for svg when has multiple root element. + */ + if (NAMESPACE === HTML_NAMESPACE) { + try { + doc = new DOMParser().parseFromString(dirtyPayload, 'text/html'); + } catch (_) {} + } + + /* Use createHTMLDocument in case DOMParser is not available */ + if (!doc || !doc.documentElement) { + doc = implementation.createDocument(NAMESPACE, 'template', null); + try { + doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload; + } catch (_) { + // Syntax error if dirtyPayload is invalid xml + } + } + + var body = doc.body || doc.documentElement; + + if (dirty && leadingWhitespace) { + body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); + } + + /* Work on whole document or just its body */ + if (NAMESPACE === HTML_NAMESPACE) { + return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; + } + + return WHOLE_DOCUMENT ? doc.documentElement : body; + }; + + /** + * _createIterator + * + * @param {Document} root document/fragment to create iterator for + * @return {Iterator} iterator instance + */ + var _createIterator = function _createIterator(root) { + return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false); + }; + + /** + * _isClobbered + * + * @param {Node} elm element to check for clobbering attacks + * @return {Boolean} true if clobbered, false if safe + */ + var _isClobbered = function _isClobbered(elm) { + if (elm instanceof Text || elm instanceof Comment) { + return false; + } + + if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function') { + return true; + } + + return false; + }; + + /** + * _isNode + * + * @param {Node} obj object to check whether it's a DOM node + * @return {Boolean} true is object is a DOM node + */ + var _isNode = function _isNode(object) { + return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? object instanceof Node : object && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'; + }; + + /** + * _executeHook + * Execute user configurable hooks + * + * @param {String} entryPoint Name of the hook's entry point + * @param {Node} currentNode node to work on with the hook + * @param {Object} data additional hook parameters + */ + var _executeHook = function _executeHook(entryPoint, currentNode, data) { + if (!hooks[entryPoint]) { + return; + } + + arrayForEach(hooks[entryPoint], function (hook) { + hook.call(DOMPurify, currentNode, data, CONFIG); + }); + }; + + /** + * _sanitizeElements + * + * @protect nodeName + * @protect textContent + * @protect removeChild + * + * @param {Node} currentNode to check for permission to exist + * @return {Boolean} true if node was killed, false if left alive + */ + var _sanitizeElements = function _sanitizeElements(currentNode) { + var content = void 0; + + /* Execute a hook if present */ + _executeHook('beforeSanitizeElements', currentNode, null); + + /* Check if element is clobbered or can clobber */ + if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + return true; + } + + /* Check if tagname contains Unicode */ + if (stringMatch(currentNode.nodeName, /[\u0080-\uFFFF]/)) { + _forceRemove(currentNode); + return true; + } + + /* Now let's check the element's type and name */ + var tagName = stringToLowerCase(currentNode.nodeName); + + /* Execute a hook if present */ + _executeHook('uponSanitizeElement', currentNode, { + tagName: tagName, + allowedTags: ALLOWED_TAGS + }); + + /* Detect mXSS attempts abusing namespace confusion */ + if (!_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) { + _forceRemove(currentNode); + return true; + } + + /* Mitigate a problem with templates inside select */ + if (tagName === 'select' && regExpTest(/ element - if (!options.insertInto) options.insertInto = "head"; - - // By default, add